[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[O] [PATCH 1/5] ox-latex: add optional-packages machinery
From: |
Aaron Ecay |
Subject: |
[O] [PATCH 1/5] ox-latex: add optional-packages machinery |
Date: |
Wed, 20 Feb 2013 23:02:22 -0500 |
This code allows latex packages to be inserted into the output document
only if they are needed. The function ‘org-latex--use-package’ is
provided for code to signal that it wants a package inserted into the
output. The ‘org-latex-optional-packages-options-alist’ variable allows
optionally loaded packages to be customized. It contains slots for
options to be passed to the \usepackage line, as well as arbitrary code
to be inserted into the preamble.
Code to use this mechanism is in followup patches.
---
lisp/ox-latex.el | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++---
1 file changed, 54 insertions(+), 3 deletions(-)
diff --git a/lisp/ox-latex.el b/lisp/ox-latex.el
index 9d5b5c5..9895028 100644
--- a/lisp/ox-latex.el
+++ b/lisp/ox-latex.el
@@ -418,6 +418,22 @@ toc:nil option, not to those generated with #+TOC keyword."
:group 'org-export-latex
:type 'boolean)
+(defcustom org-latex-optional-package-options-alist nil
+ "An alist of options for packages which will be loaded if needed.
+
+The format is a list of triples of (PACKAGE-NAME PACKAGE-OPTIONS
+PREAMBLE-CODE). The PACKAGE-OPTIONS will be passed as options to
+the \\usepackage command. The PREAMBLE-CODE will be inserted in
+the preamble of the resulting document (before any LaTeX_HEADER
+lines).
+
+Either of the values may be omitted (nil)."
+ :group 'org-export-latex
+ :type '(repeat
+ (list
+ (string :tag "Package name")
+ (string :tag "Package options")
+ (string :tag "Preamble code"))))
;;;; Headline
@@ -1087,6 +1103,11 @@ just outside of it."
(funcall search-refs element))
""))
+(defun org-latex--use-package (info package)
+ (let ((optional-packages (plist-get info :latex-optional-packages)))
+ (plist-put info :latex-optional-packages
+ (add-to-list 'optional-packages package))))
+
;;; Template
@@ -1110,7 +1131,8 @@ holding export options."
(if (not class-options) header
(replace-regexp-in-string
"^[ \t]*\\\\documentclass\\(\\(\\[.*\\]\\)?\\)"
- class-options header t nil 1)))))
+ class-options header t nil 1))))
+ (optional-packages (plist-get info :latex-optional-packages)))
(if (not document-class-string)
(user-error "Unknown LaTeX class `%s'" class)
(org-latex-guess-babel-language
@@ -1118,8 +1140,13 @@ holding export options."
(org-splice-latex-header
document-class-string
org-latex-default-packages-alist
- org-latex-packages-alist nil
- (plist-get info :latex-header-extra)))
+ (org-latex-add-optional-packages
+ optional-packages
+ org-latex-packages-alist)
+ nil
+ (org-latex-add-optional-package-preambles
+ optional-packages
+ (plist-get info :latex-header-extra))))
info)))))
;; Possibly limit depth for headline numbering.
(let ((sec-num (plist-get info :section-numbers)))
@@ -1183,6 +1210,30 @@ holding export options."
;; Document end.
"\\end{document}")))
+(defun org-latex-add-optional-packages (optional-packages packages)
+ (if (not optional-packages)
+ packages
+ (append packages
+ (mapcar
+ (lambda (pkg)
+ (list (or (cadr (assoc pkg
org-latex-optional-package-options-alist)) "")
+ pkg
+ nil))
+ optional-packages))))
+
+(defun org-latex-add-optional-package-preambles (optional-packages preamble)
+ (if (not optional-packages)
+ preamble
+ (concat
+ (mapconcat
+ #'identity
+ (delq nil
+ (mapcar (lambda (pkg)
+ (nth 2 (assoc pkg
org-latex-optional-package-options-alist)))
+ optional-packages))
+ "\n")
+ "\n" preamble)))
+
;;; Transcode Functions
--
1.8.1.4
- [O] [RFC] [PATCH] conditional use of latex packages, Aaron Ecay, 2013/02/20
- [O] [PATCH 3/5] ob-R: change the file extension for tikz figures, Aaron Ecay, 2013/02/20
- [O] [PATCH 4/5] ox-latex: Treat tikz files as images, Aaron Ecay, 2013/02/20
- [O] [PATCH 1/5] ox-latex: add optional-packages machinery,
Aaron Ecay <=
- [O] [PATCH 2/5] ox-latex: convert source code and table export to use optional packages, Aaron Ecay, 2013/02/20
- [O] [PATCH 5/5] ox-latex: Convert the image inclusion code to use optional packages, Aaron Ecay, 2013/02/20
- Re: [O] [RFC] [PATCH] conditional use of latex packages, Suvayu Ali, 2013/02/21
- Re: [O] [RFC] [PATCH] conditional use of latex packages, Nicolas Goaziou, 2013/02/21