From 933d88ef3e6f19cb2b773cdea9c0ac564bfe8be8 Mon Sep 17 00:00:00 2001 From: Carsten Dominik Date: Fri, 20 Feb 2009 07:55:05 +0100 Subject: [PATCH] LaTeX Export: Define TeX macros for in-buffer settings This commit implements the possibility to import the in-buffer export options as TeX macros, like \orgTITLE, \orgAUTHOR etc. Requested by Russel Adams. --- lisp/ChangeLog | 11 +++++++++++ lisp/org-export-latex.el | 41 ++++++++++++++++++++++++++++++++++++++--- 2 files changed, 49 insertions(+), 3 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index eee513dbb..38c79c300 100755 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,14 @@ +2009-02-20 Carsten Dominik + + * org-export-latex.el (org-export-latex-import-inbuffer-stuff): + New option. + (org-export-as-latex): Import in-buffer settings as TeX macros. + (org-export-latex-make-header): Additional parameter OPT-DEFS. + (org-export-latex-collect-header-macros): New function. + + * org.el (org-refile-get-location): Turn off + `partial-completion-mode'. + 2009-02-19 Carsten Dominik * org.el (org-block-todo-from-checkboxes): Announce that diff --git a/lisp/org-export-latex.el b/lisp/org-export-latex.el index 98156a0a6..370b53ff2 100644 --- a/lisp/org-export-latex.el +++ b/lisp/org-export-latex.el @@ -6,7 +6,7 @@ ;; Filename: org-export-latex.el ;; Version: 6.22trans ;; Author: Bastien Guerry -;; Maintainer: Bastien Guerry +;; Maintainer: Carsten Dominik ;; Keywords: org, wp, tex ;; Description: Converts an org-mode buffer into LaTeX ;; URL: http://www.cognition.ens.fr/~guerry/u/org-export-latex.el @@ -184,6 +184,12 @@ argument." :group 'org-export-latex :type 'string) +(defcustom org-export-latex-import-inbuffer-stuff nil + "Non-nil means define TeX macros for Org's inbuffer definitions. +For example \orgTITLE for #+TITLE." + :group 'org-export-latex + :type 'boolean) + (defcustom org-export-latex-date-format "%d %B %Y" "Format string for \\date{...}." @@ -409,6 +415,8 @@ when PUB-DIR is set, use this as the publishing directory." (org-export-grab-title-from-buffer)) (file-name-sans-extension (file-name-nondirectory buffer-file-name)))) + (option-defs (and org-export-latex-import-inbuffer-stuff + (org-export-latex-collect-header-macros title))) (filename (concat (file-name-as-directory (or pub-dir (org-export-directory :LaTeX ext-plist))) @@ -429,7 +437,7 @@ when PUB-DIR is set, use this as the publishing directory." (t (get-buffer-create to-buffer))) (find-file-noselect filename))) (odd org-odd-levels-only) - (header (org-export-latex-make-header title opt-plist)) + (header (org-export-latex-make-header title opt-plist option-defs)) (skip (cond (subtree-p nil) (region-p nil) (t (plist-get opt-plist :skip-before-1st-heading)))) @@ -716,7 +724,7 @@ LEVEL indicates the default depth for export." (sec-depth (length org-export-latex-sectioning))) (if (> hl-levels sec-depth) sec-depth hl-levels))))) -(defun org-export-latex-make-header (title opt-plist) +(defun org-export-latex-make-header (title opt-plist &optional opt-defs) "Make the LaTeX header and return it as a string. TITLE is the current title from the buffer or region. OPT-PLIST is the options plist for current buffer." @@ -739,6 +747,7 @@ OPT-PLIST is the options plist for current buffer." ;; insert additional commands in the header (plist-get opt-plist :latex-header-extra) org-export-latex-append-header + option-defs ;; insert the title (format "\n\n\\title{%s}\n" @@ -797,6 +806,32 @@ If BEG is non-nil, the is the beginning of he region." (add-text-properties pt (max pt (1- end)) '(:org-license-to-kill t)))))) +(defun org-export-latex-collect-header-macros (&optional title) + "Find the various definitions in #+... lines and define TeX macros for them." + (let ((re (org-make-options-regexp + '("TITLE" "AUTHOR" "DATE" "EMAIL" "TEXT" "OPTIONS" "LANGUAGE" + "LINK_UP" "LINK_HOME" "SETUPFILE" "STYLE" "LATEX_HEADER" + "EXPORT_SELECT_TAGS" "EXPORT_EXCLUDE_TAGS"))) + out key val a) + (save-excursion + (save-restriction + (widen) + (goto-char (point-min)) + (while (re-search-forward re nil t) + (setq key (upcase (match-string 1)) + value (match-string 2)) + (if (and title (equal key "TITLE")) + (setq value title)) + (while (string-match "_" key) + (setq key (replace-match "" t t key))) + (if (setq a (assoc key out)) + (setcdr a (concat (cdr a) "\n" value)) + (push (cons key value) out)))) + (mapconcat + (lambda (x) (concat "\\def\\org" (car x) "{" (cdr x) "}")) + out + "\n")))) + (defun org-export-latex-content (content &optional exclude-list) "Convert CONTENT string to LaTeX. Don't perform conversions that are in EXCLUDE-LIST. Recognized -- 2.11.4.GIT