Explorar el Código

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 hace 15 años
padre
commit
bb488fa3b1
Se han modificado 2 ficheros con 51 adiciones y 0 borrados
  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))))