Browse Source

Fix \usepackage{inputenc} in LaTeX export

The option will now reflect the coding system of the file that was
created by exporting the buffer.
Carsten Dominik 15 years ago
parent
commit
bb488fa3b1
2 changed files with 51 additions and 0 deletions
  1. 3 0
      lisp/ChangeLog
  2. 48 0
      lisp/org-latex.el

+ 3 - 0
lisp/ChangeLog

@@ -1,5 +1,8 @@
 2010-01-10  Carsten Dominik  <carsten.dominik@gmail.com>
 
+	* org-latex.el (org-export-latex-fix-inputenc): New function.
+	(org-export-latex-inputenc-alist): New option.
+
 	* org-exp.el (org-export): New key SPC to publish enclosing
 	subtree.
 

+ 48 - 0
lisp/org-latex.el

@@ -197,6 +197,21 @@ sectioning list in the cdr."
 			       (string :tag "Closing (unnumbered)"))
 			 (function :tag "Hook computing sectioning"))))))
 
+(defcustom org-export-latex-inputenc-alist nil
+  "Alist of inputenc coding system names, and what should really be used.
+For example, adding an entry
+
+      (\"utf8\" . \"utf8x\")
+
+will cause \\usepackage[utf8x]{inputenc} to be used for buffers that
+are written as utf8 files."
+  :group 'org-export-latex
+  :type '(repeat
+	  (cons
+	   (string :tag "Derived from buffer")
+	   (string :tag "Use this instead"))))
+
+
 (defcustom org-export-latex-emphasis-alist
   '(("*" "\\textbf{%s}" nil)
     ("/" "\\emph{%s}" nil)
@@ -746,6 +761,7 @@ when PUB-DIR is set, use this as the publishing directory."
 
     (run-hooks 'org-export-latex-final-hook)
     (or to-buffer (save-buffer))
+    (org-export-latex-fix-inputenc)
     (run-hooks 'org-export-latex-after-save-hook)
     (goto-char (point-min))
     (or (org-export-push-to-kill-ring "LaTeX")
@@ -1991,6 +2007,22 @@ The conversion is made depending of STRING-BEFORE and STRING-AFTER."
       (org-if-unprotected
        (replace-match "")))))
 
+(defun org-export-latex-fix-inputenc ()
+  "Set the codingsystem in inputenc to what the buffer is."
+  (let* ((cs buffer-file-coding-system)
+	 (opt (latexenc-coding-system-to-inputenc cs)))
+    (when opt
+      ;; Translate if that is requested
+      (setq opt (or (cdr (assoc opt org-export-latex-inputenc-alist)) opt))
+      ;; find the \usepackage statement and replace the option
+      (goto-char (point-min))
+      (while (re-search-forward "\\\\usepackage\\[\\(.*?\\)\\]{inputenc}"
+				nil t)
+	(goto-char (match-beginning 1))
+	(delete-region (match-beginning 1) (match-end 1))
+	(insert opt))
+      (save-buffer))))
+
 ;;; List handling:
 
 (defun org-export-latex-lists ()
@@ -2200,3 +2232,19 @@ The conversion is made depending of STRING-BEFORE and STRING-AFTER."
 ;; arch-tag: 23c2b87d-da04-4c2d-ad2d-1eb6487bc3ad
 
 ;;; org-latex.el ends here
+
+(defun org-export-latex-fix-inputenc ()
+  "Set the codingsystem in inputenc to what the buffer is."
+  (let* ((cs buffer-file-coding-system)
+	 (opt (latexenc-coding-system-to-inputenc cs)))
+    (when opt
+      ;; Translate if that is requested
+      (setq opt (or (cdr (assoc opt org-export-latex-inputenc-alist) opt)))
+      ;; find the \usepackage statement and replace the option
+      (goto-char (point-min))
+      (while (re-search-forward "\\\\usepackage\\[\\(.*?\\)\\]{inputenc}"
+				nil t)
+	(goto-char (match-beginning 1))
+	(delete-region (match-beginning 1) (match-end 1))
+	(insert opt))
+      (save-buffer))))