summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRasmus <rasmus@gmx.us>2015-02-11 02:18:09 +0100
committerRasmus <rasmus@gmx.us>2015-02-19 22:41:02 +0100
commit438d75c59de7765a6defb44bddb4b89fde083468 (patch)
treef8fff0e16a7b9eae0c2f294b2e84ad9f583394ee
parent14a9510ce1b5535906ceb6a93238e132964fd45f (diff)
downloadorg-mode-438d75c59de7765a6defb44bddb4b89fde083468.tar.gz
ox-latex: Format-spec for hyperref and title
* ox-latex.el (org-latex--format-spec): New function with format-specs. (org-latex-template): Use org-latex--format-spec. (org-latex-hyperref-template): New defaults and use org-latex--format-spec. (org-latex-title-command): Use org-latex--format-spec. * ORG-NEWS: Mention change.
-rw-r--r--etc/ORG-NEWS3
-rw-r--r--lisp/ox-latex.el84
2 files changed, 70 insertions, 17 deletions
diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index 03fcfb2..4743d75 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -233,6 +233,9 @@ Exact heading search for links now ignore spaces and cookies. This is
the case for links of the form ~file:projects.org::*task title~, as
well as links of the form ~file:projects.org::some words~
when ~org-link-search-must-match-exact-headline~ is not nil.
+*** ~org-latex-hyperref-template~, ~org-latex-title-command~ formatting
+New formatting keys are supported. See the respective docstrings.
+Note, ~org-latex-hyperref-template~ has a new default value.
* Version 8.2
** Incompatible changes
diff --git a/lisp/ox-latex.el b/lisp/ox-latex.el
index 6eddad0..2851a31 100644
--- a/lisp/ox-latex.el
+++ b/lisp/ox-latex.el
@@ -383,11 +383,25 @@ are written as utf8 files."
(defcustom org-latex-title-command "\\maketitle"
"The command used to insert the title just after \\begin{document}.
-If this string contains the formatting specification \"%s\" then
-it will be used as a formatting string, passing the title as an
-argument."
+
+This format string may contain these elements:
+
+ %a for AUTHOR keyword
+ %t for TITLE keyword
+ %k for KEYWORDS line
+ %d for DESCRIPTION line
+ %c for CREATOR line
+ %l for Language keyword
+ %L for capitalized language keyword
+ %D for DATE keyword
+
+If you need to use a \"%\" character, you need to escape it
+like that: \"%%\".
+
+Setting :latex-title-command in publishing projects will take
+precedence over this variable."
:group 'org-export-latex
- :type 'string)
+ :type '(string :tag "Format string"))
(defcustom org-latex-toc-command "\\tableofcontents\n\n"
"LaTeX command to set the table of contents, list of figures, etc.
@@ -397,20 +411,30 @@ the toc:nil option, not to those generated with #+TOC keyword."
:type 'string)
(defcustom org-latex-hyperref-template
- "\\hypersetup{\n pdfkeywords={%k},\n pdfsubject={%d},\n pdfcreator={%c}}\n"
+ "\\hypersetup{\n pdfauthor={%a},\n pdftitle={%t},\n pdfkeywords={%k},
+ pdfsubject={%d},\n pdfcreator={%c}, \n pdflang={%L}}\n"
"Template for hyperref package options.
-Value is a format string, which can contain the following placeholders:
+This format string may contain these elements:
+ %a for AUTHOR keyword
+ %t for TITLE keyword
%k for KEYWORDS line
%d for DESCRIPTION line
%c for CREATOR line
+ %l for Language keyword
+ %L for capitalized language keyword
+ %D for DATE keyword
+
+If you need to use a \"%\" character, you need to escape it
+like that: \"%%\".
-Set it to the empty string to ignore the command completely."
+Setting :latex-hyperref-template in publishing projects will take
+precedence over this variable."
:group 'org-export-latex
:version "25.1"
:package-version '(Org . "8.3")
- :type 'string)
+ :type '(string :tag "Format string"))
;;;; Headline
@@ -1193,6 +1217,33 @@ just outside of it."
INFO is a plist used as a communication channel."
(org-export-translate s :latex info))
+(defun org-latex--format-spec (info)
+ "Create a format-spec for document meta-data.
+INFO is a plist used as a communication channel."
+ (let ((objects '(bold code entity export-snippet inline-babel-call
+ inline-src-block italic latex-fragment
+ latex-math-block link macro strike-through
+ subscript superscript timestamp underline
+ verbatim))
+ (language (let ((lang (plist-get info :language)))
+ (or (cdr (assoc lang org-latex-babel-language-alist))
+ lang ""))))
+ `((?a . ,(or (org-export-data (plist-get info :author) info) ""))
+ (?t . ,(or (org-export-data (plist-get info :title) info) ""))
+ (?k . ,(org-export-data (org-latex--wrap-latex-math-block
+ (org-element-parse-secondary-string
+ (plist-get info :keywords) objects)
+ info)
+ info))
+ (?d . ,(org-export-data (org-latex--wrap-latex-math-block
+ (org-element-parse-secondary-string
+ (plist-get info :description) objects)
+ info)
+ info))
+ (?c . ,(if (plist-get info :with-creator) (plist-get info :creator) ""))
+ (?l . ,language)
+ (?L . ,(capitalize language))
+ (?D . ,(org-export-get-date info)))))
;;; Template
@@ -1201,7 +1252,8 @@ INFO is a plist used as a communication channel."
"Return complete document string after LaTeX conversion.
CONTENTS is the transcoded contents string. INFO is a plist
holding export options."
- (let ((title (org-export-data (plist-get info :title) info)))
+ (let ((title (org-export-data (plist-get info :title) info))
+ (spec (org-latex--format-spec info)))
(concat
;; Time-stamp.
(and (plist-get info :time-stamp-file)
@@ -1248,17 +1300,15 @@ holding export options."
;; Title
(format "\\title{%s}\n" title)
;; Hyperref options.
- (format-spec (plist-get info :latex-hyperref-template)
- (format-spec-make
- ?k (or (plist-get info :keywords) "")
- ?d (or (plist-get info :description)"")
- ?c (if (plist-get info :with-creator)
- (plist-get info :creator)
- "")))
+ (let ((template (plist-get info :latex-hyperref-template)))
+ (and (stringp template)
+ (format-spec template spec)))
;; Document start.
"\\begin{document}\n\n"
;; Title command.
- (let ((command (plist-get info :latex-title-command)))
+ (let* ((title-command (plist-get info :latex-title-command))
+ (command (and (stringp title-command)
+ (format-spec title-command spec))))
(org-element-normalize-string
(cond ((not (plist-get info :with-title)) nil)
((string= "" title) nil)