Specify the position where the packages are inserted in the LaTeX header.

This commit is contained in:
Carsten Dominik 2010-04-04 08:32:55 +02:00
parent 33dbb46fc2
commit 00afe22952
5 changed files with 76 additions and 50 deletions

View File

@ -1,3 +1,7 @@
2010-04-04 Carsten Dominik <carsten.dominik@gmail.com>
* org.texi (Sectioning structure): Update.
2010-04-01 Carsten Dominik <carsten.dominik@gmail.com>
* org.texi (The export dispatcher): Renamed from ASCII export.

View File

@ -9600,6 +9600,8 @@ By default, the La@TeX{} output uses the class @code{article}.
@vindex org-export-latex-default-class
@vindex org-export-latex-classes
@vindex org-export-latex-default-packages-alist
@vindex org-export-latex-packages-alist
@cindex #+LATEX_HEADER
@cindex #+LATEX_CLASS
@cindex #+LATEX_CLASS_OPTIONS
@ -9609,12 +9611,15 @@ You can change this globally by setting a different value for
@code{org-export-latex-default-class} or locally by adding an option like
@code{#+LaTeX_CLASS: myclass} in your file, or with a @code{:LaTeX_CLASS:}
property that applies when exporting a region containing only this (sub)tree.
The class should be listed in @code{org-export-latex-classes}, where you can
also define the sectioning structure for each class, as well as defining
additional classes. In a similar way, @code{#+LaTeX_CLASS_OPTIONS} or a
@code{LaTeX_CLASS_OPTIONS} property can specify the options for the
@code{\documentclass} macro. You can also use @code{#+LATEX_HEADER:
\usepackage@{xyz@}} to add lines to the header.
The class must be listed in @code{org-export-latex-classes}. This variable
defines a header template for each class@footnote{Into which the values of
@code{org-export-latex-default-packages-alist} and
@code{org-export-latex-packages-alist} are spliced.}, and allows you to
define the sectioning structure for each class. You can also define your own
classes there. @code{#+LaTeX_CLASS_OPTIONS} or a @code{LaTeX_CLASS_OPTIONS}
property can specify the options for the @code{\documentclass} macro.
You can also use @code{#+LATEX_HEADER: \usepackage@{xyz@}} to add lines to
the header.
@node Tables in LaTeX export, Images in LaTeX export, Sectioning structure, LaTeX and PDF export
@subsection Tables in La@TeX{} export

View File

@ -1,5 +1,13 @@
2010-04-04 Carsten Dominik <carsten.dominik@gmail.com>
* org-latex.el (org-export-latex-make-header): Use
`org-splice-latex-header' to build the header.
(org-export-latex-classes): Update docstring.
* org.el (org-splice-latex-header): New function.
(org-create-formula-image): Use `org-splice-latex-header' to build
the header.
* org-gnus.el (org-gnus-follow-link): Handle nndoc backend.
2010-04-03 Carsten Dominik <carsten.dominik@gmail.com>

View File

@ -132,9 +132,12 @@ It should really only contain the contain the \\documentclass macro, and
setup code that is specific to this class. This will be augmented by
call to \\usepackage for all packages mentioned in the variables
`org-export-latex-default-packages-alist' and
`org-export-latex-packages-alist'. Lines specified via \"#+LaTeX_HEADER:\"
are also added.
`org-export-latex-default-packages-alist' contains
`org-export-latex-packages-alist'. Normally these package definitions will
appear at the end of HEADER-STRING, but if HEADER-STRING contains the
string \"[PACKAGES]\", it will be replaced by the usepackage definitions.
Lines specified via \"#+LaTeX_HEADER:\" are also added, at the end.
If `org-export-latex-default-packages-alist' contains
\"\\usepackage[AUTO]{inputenc}\", AUTO will automatically be replaced with
a coding system derived from `buffer-file-coding-system'. See also the
variable `org-export-latex-inputenc-alist' for a way to influence this
@ -1113,28 +1116,17 @@ OPT-PLIST is the options plist for current buffer."
(concat
(if (plist-get opt-plist :time-stamp-file)
(format-time-string "%% Created %Y-%m-%d %a %H:%M\n"))
;; insert LaTeX custom header
(org-export-apply-macros-in-string org-export-latex-header)
"\n"
;; insert information on LaTeX packages
(when (or org-export-latex-default-packages-alist
org-export-latex-packages-alist)
(concat
(mapconcat (lambda(p)
(if (equal "" (car p))
(format "\\usepackage{%s}" (cadr p))
(format "\\usepackage[%s]{%s}"
(car p) (cadr p))))
(append org-export-latex-default-packages-alist
org-export-latex-packages-alist)
"\n")
"\n"))
;; insert additional commands in the header
(org-export-apply-macros-in-string
(plist-get opt-plist :latex-header-extra))
;; insert LaTeX custom header and packages from the list
(org-splice-latex-header
(org-export-apply-macros-in-string org-export-latex-header)
org-export-latex-default-packages-alist
org-export-latex-packages-alist
(org-export-apply-macros-in-string
(plist-get opt-plist :latex-header-extra)))
;; append another special variable
(org-export-apply-macros-in-string org-export-latex-append-header)
;; define align if not yet defined
"\\providecommand{\\alert}[1]{\\textbf{#1}}"
"\n\\providecommand{\\alert}[1]{\\textbf{#1}}"
;; insert the title
(format
"\n\n\\title{%s}\n"

View File

@ -2926,7 +2926,10 @@ When nil, just push out a message."
\\addtolength{\\topmargin}{-2.54cm}"
"The document header used for processing LaTeX fragments.
It is imperative that this header make sure that no page number
appears on the page."
appears on the page. The package defined in the variables
`org-export-latex-default-packages-alist' and `org-export-latex-packages-alist'
will either replace the placeholder \"[PACKAGES]\" in this header, or they
will be appended."
:group 'org-latex
:type 'string)
@ -2976,9 +2979,14 @@ Each cell is of the format \( \"options\" \"package\" \)."
(string :tag "package"))))
(defcustom org-export-latex-packages-alist nil
"Alist of packages to be inserted in the header.
"Alist of packages to be inserted in every LaTeX the header.
These will be inserted after `org-export-latex-default-packages-alist'.
Each cell is of the format \( \"options\" \"package\" \)."
Each cell is of the format \( \"options\" \"package\" \).
Make sure that you only lis packages here which:
- you want in every file
- do not conflict with the default packages in
`org-export-latex-default-packages-alist'
- do not conflict with the setup in `org-format-latex-header'."
:group 'org-export-latex
:type '(repeat
(list
@ -15252,24 +15260,12 @@ Some of the options can be changed using the variable
(if (eq fg 'default) (setq fg (org-dvipng-color :foreground)))
(if (eq bg 'default) (setq bg (org-dvipng-color :background)))
(with-temp-file texfile
(insert org-format-latex-header
(if (or org-export-latex-default-packages-alist
org-export-latex-packages-alist)
(concat "\n"
(mapconcat (lambda(p)
(if (equal "" (car p))
(format "\\usepackage{%s}" (cadr p))
(format "\\usepackage[%s]{%s}"
(car p) (cadr p))))
(append
org-export-latex-default-packages-alist
org-export-latex-packages-alist)
"\n"))
"")
(if org-format-latex-header-extra
(concat "\n" org-format-latex-header-extra)
"")
"\n\\begin{document}\n" string "\n\\end{document}\n")
(insert (org-splice-latex-header
org-format-latex-header
org-export-latex-default-packages-alist
org-export-latex-packages-alist
org-format-latex-header-extra))
(insert "\n\\begin{document}\n" string "\n\\end{document}\n")
(org-export-latex-fix-inputenc))
(let ((dir default-directory))
(condition-case nil
@ -15300,6 +15296,27 @@ Some of the options can be changed using the variable
(delete-file (concat texfilebase e)))
pngfile))))
(defun org-splice-latex-header (template packages-1 packages-2 &optional extra)
"Fill a LaTeX header template.
If TEMPLATE contains the string \"[PACKAGES]\", this is where the packages
in the lists PACKAGES-1 and PACKAGES-2 will be inserted, otherwise the come
at the end. If EXTRA is a string, it is also appended."
(let ((packages
(and (or packages-1 packages-2)
(mapconcat (lambda(p)
(if (equal "" (car p))
(format "\\usepackage{%s}" (cadr p))
(format "\\usepackage[%s]{%s}"
(car p) (cadr p))))
(append packages-1 packages-2)
"\n"))))
(if (string-match "\\[PACKAGES\\]" template)
(setq template (replace-match (or packages "") t t template))
(setq template (concat template "\n" packages)))
(if (and extra (sring-match "\\S-" extra))
(concat template "\n" extra)
template)))
(defun org-dvipng-color (attr)
"Return an rgb color specification for dvipng."
(apply 'format "rgb %s %s %s"