Make the inclusion of packages for snippet creation optional

This commit is contained in:
Carsten Dominik 2010-04-26 18:53:39 +02:00
parent d555545b48
commit 91749e6594
3 changed files with 78 additions and 32 deletions

View File

@ -1,5 +1,18 @@
2010-04-27 Carsten Dominik <carsten.dominik@gmail.com> 2010-04-27 Carsten Dominik <carsten.dominik@gmail.com>
* org.el (org-set-packages-alist, org-get-packages-alist): New
function.
(org-export-latex-default-packages-alist)
(org-export-latex-packages-alist): Add extra flag to
each package, indicating if it should be used for snippets.
(org-create-formula-image): Add the snippet argument.
(org-splice-latex-header): New argument SNIPPET-P, pass it
through to `org-latex-packages-to-string'.
(org-latex-packages-to-string): New argument SNIPPET-P.
* org-latex.el (org-export-latex-make-header): Add the snippet
argument.
* org-docbook.el (org-export-as-docbook): Implement ordered * org-docbook.el (org-export-as-docbook): Implement ordered
lists starting at some offset. lists starting at some offset.

View File

@ -1147,7 +1147,7 @@ OPT-PLIST is the options plist for current buffer."
(org-splice-latex-header (org-splice-latex-header
(org-export-apply-macros-in-string org-export-latex-header) (org-export-apply-macros-in-string org-export-latex-header)
org-export-latex-default-packages-alist org-export-latex-default-packages-alist
org-export-latex-packages-alist org-export-latex-packages-alist nil
(org-export-apply-macros-in-string (org-export-apply-macros-in-string
(plist-get opt-plist :latex-header-extra))) (plist-get opt-plist :latex-header-extra)))
;; append another special variable ;; append another special variable

View File

@ -2302,7 +2302,7 @@ a double prefix argument to a time-stamp command like `C-c .' or `C-c !',
and by using a prefix arg to `S-up/down' to specify the exact number and by using a prefix arg to `S-up/down' to specify the exact number
of minutes to shift." of minutes to shift."
:group 'org-time :group 'org-time
:get '(lambda (var) ; Make sure all entries have 5 elements :get '(lambda (var) ; Make sure both elements are there
(if (integerp (default-value var)) (if (integerp (default-value var))
(list (default-value var) 5) (list (default-value var) 5)
(default-value var))) (default-value var)))
@ -2958,25 +2958,42 @@ will be appended."
(defvar org-format-latex-header-extra nil) (defvar org-format-latex-header-extra nil)
(defun org-set-packages-alist (var val)
"Set the packages alist and make sure it has 3 elements per entry."
(set var (mapcar (lambda (x)
(if (and (consp x) (= (length x) 2))
(list (car x) (nth 1 x) t)
x))
val)))
(defun org-get-packages-alist (var)
"Get the packages alist and make sure it has 3 elements per entry."
(mapcar (lambda (x)
(if (and (consp x) (= (length x) 2))
(list (car x) (nth 1 x) t)
x))
(default-value var)))
;; The following variables are defined here because is it also used ;; The following variables are defined here because is it also used
;; when formatting latex fragments. Originally it was part of the ;; when formatting latex fragments. Originally it was part of the
;; LaTeX exporter, which is why the name includes "export". ;; LaTeX exporter, which is why the name includes "export".
(defcustom org-export-latex-default-packages-alist (defcustom org-export-latex-default-packages-alist
'(("AUTO" "inputenc") '(("AUTO" "inputenc" t)
("T1" "fontenc") ("T1" "fontenc" t)
("" "fixltx2e") ("" "fixltx2e" nil)
("" "graphicx") ("" "graphicx" t)
("" "longtable") ("" "longtable" nil)
("" "float") ("" "float" nil)
("" "wrapfig") ("" "wrapfig" nil)
("" "soul") ("" "soul" t)
("" "t1enc") ("" "t1enc" t)
("" "textcomp") ("" "textcomp" t)
("" "marvosym") ("" "marvosym" t)
("" "wasysym") ("" "wasysym" t)
("" "latexsym") ("" "latexsym" t)
("" "amssymb") ("" "amssymb" t)
("" "hyperref") ("" "hyperref" nil)
"\\tolerance=1000" "\\tolerance=1000"
) )
"Alist of default packages to be inserted in the header. "Alist of default packages to be inserted in the header.
@ -2997,31 +3014,42 @@ to function properly.
Therefore you should not modify this variable unless you know what you Therefore you should not modify this variable unless you know what you
are doing. The one reason to change it anyway is that you might be loading are doing. The one reason to change it anyway is that you might be loading
some other package that conflicts with one of the default packages. some other package that conflicts with one of the default packages.
Each cell is of the format \( \"options\" \"package\" \)." Each cell is of the format \( \"options\" \"package\" snippet-flag\).
If SNIPPET-FLAG is t, the package also needs to be included when
compiling LaTeX snippets into images for inclusion into HTML."
:group 'org-export-latex :group 'org-export-latex
:set 'org-set-packages-alist
:get 'org-get-packages-alist
:type '(repeat :type '(repeat
(choice (choice
(string :tag "A line of LaTeX")
(list :tag "options/package pair" (list :tag "options/package pair"
(string :tag "options") (string :tag "options")
(string :tag "package"))))) (string :tag "package")
(boolean :tag "Snippet"))
(string :tag "A line of LaTeX"))))
(defcustom org-export-latex-packages-alist nil (defcustom org-export-latex-packages-alist nil
"Alist of packages to be inserted in every LaTeX the header. "Alist of packages to be inserted in every LaTeX the header.
These will be inserted after `org-export-latex-default-packages-alist'. 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\" snippet-flag \).
Make sure that you only lis packages here which: SNIPPET-FLAG, when t, indicates that this package is also needed when
turning LaTeX snippets into images for inclusion into HTML.
Make sure that you only list packages here which:
- you want in every file - you want in every file
- do not conflict with the default packages in - do not conflict with the default packages in
`org-export-latex-default-packages-alist' `org-export-latex-default-packages-alist'
- do not conflict with the setup in `org-format-latex-header'." - do not conflict with the setup in `org-format-latex-header'."
:group 'org-export-latex :group 'org-export-latex
:set 'org-set-packages-alist
:get 'org-get-packages-alist
:type '(repeat :type '(repeat
(choice (choice
(string :tag "A line of LaTeX")
(list :tag "options/package pair" (list :tag "options/package pair"
(string :tag "options") (string :tag "options")
(string :tag "package"))))) (string :tag "package")
(boolean :tag "Snippet"))
(string :tag "A line of LaTeX"))))
(defgroup org-appearance nil (defgroup org-appearance nil
"Settings for Org-mode appearance." "Settings for Org-mode appearance."
@ -15332,7 +15360,7 @@ Some of the options can be changed using the variable
(insert (org-splice-latex-header (insert (org-splice-latex-header
org-format-latex-header org-format-latex-header
org-export-latex-default-packages-alist org-export-latex-default-packages-alist
org-export-latex-packages-alist org-export-latex-packages-alist t
org-format-latex-header-extra)) org-format-latex-header-extra))
(insert "\n\\begin{document}\n" string "\n\\end{document}\n") (insert "\n\\begin{document}\n" string "\n\\end{document}\n")
(require 'org-latex) (require 'org-latex)
@ -15366,7 +15394,7 @@ Some of the options can be changed using the variable
(delete-file (concat texfilebase e))) (delete-file (concat texfilebase e)))
pngfile)))) pngfile))))
(defun org-splice-latex-header (tpl def-pkg pkg &optional extra) (defun org-splice-latex-header (tpl def-pkg pkg snippets-p &optional extra)
"Fill a LaTeX header template TPL. "Fill a LaTeX header template TPL.
In the template, the following place holders will be recognized: In the template, the following place holders will be recognized:
@ -15381,19 +15409,22 @@ For backward compatibility, if both the positive and the negative place
holder is missing, the positive one (without the \"NO-\") will be holder is missing, the positive one (without the \"NO-\") will be
assumed to be present at the end of the template. assumed to be present at the end of the template.
DEF-PKG and PKG are assumed to be alists of options/packagename lists. DEF-PKG and PKG are assumed to be alists of options/packagename lists.
EXTRA is a string." EXTRA is a string.
SNIPPETS-P indicates if this is run to create snippet images for HTML."
(let (rpl (end "")) (let (rpl (end ""))
(if (string-match "^[ \t]*\\[\\(NO-\\)?DEFAULT-PACKAGES\\][ \t]*\n?" tpl) (if (string-match "^[ \t]*\\[\\(NO-\\)?DEFAULT-PACKAGES\\][ \t]*\n?" tpl)
(setq rpl (if (or (match-end 1) (not def-pkg)) (setq rpl (if (or (match-end 1) (not def-pkg))
"" (org-latex-packages-to-string def-pkg t)) "" (org-latex-packages-to-string def-pkg snippets-p t))
tpl (replace-match rpl t t tpl)) tpl (replace-match rpl t t tpl))
(if def-pkg (setq end (org-latex-packages-to-string def-pkg)))) (if def-pkg (setq end (org-latex-packages-to-string def-pkg snippets-p))))
(if (string-match "\\[\\(NO-\\)?PACKAGES\\][ \t]*\n?" tpl) (if (string-match "\\[\\(NO-\\)?PACKAGES\\][ \t]*\n?" tpl)
(setq rpl (if (or (match-end 1) (not pkg)) (setq rpl (if (or (match-end 1) (not pkg))
"" (org-latex-packages-to-string pkg t)) "" (org-latex-packages-to-string pkg snippets-p t))
tpl (replace-match rpl t t tpl)) tpl (replace-match rpl t t tpl))
(if pkg (setq end (concat end "\n" (org-latex-packages-to-string pkg))))) (if pkg (setq end
(concat end "\n"
(org-latex-packages-to-string pkg snippets-p)))))
(if (string-match "\\[\\(NO-\\)?EXTRA\\][ \t]*\n?" tpl) (if (string-match "\\[\\(NO-\\)?EXTRA\\][ \t]*\n?" tpl)
(setq rpl (if (or (match-end 1) (not extra)) (setq rpl (if (or (match-end 1) (not extra))
@ -15406,11 +15437,13 @@ EXTRA is a string."
(concat tpl "\n" end) (concat tpl "\n" end)
tpl))) tpl)))
(defun org-latex-packages-to-string (pkg &optional newline) (defun org-latex-packages-to-string (pkg &optional snippets-p newline)
"Turn an alist of packages into a string with the \\usepackage macros." "Turn an alist of packages into a string with the \\usepackage macros."
(setq pkg (mapconcat (lambda(p) (setq pkg (mapconcat (lambda(p)
(cond (cond
((stringp p) p) ((stringp p) p)
((and snippets-p (>= (length p) 3) (not (nth 2 p)))
(format "%% Package %s omitted" (cadr p)))
((equal "" (car p)) ((equal "" (car p))
(format "\\usepackage{%s}" (cadr p))) (format "\\usepackage{%s}" (cadr p)))
(t (t