emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Rasmus <rasmus@gmx.us>
To: emacs-orgmode@gnu.org
Subject: Re: [patch, ox-latex] better hyperref and title options
Date: Thu, 19 Feb 2015 02:26:24 +0100	[thread overview]
Message-ID: <87mw4asncv.fsf@gmx.us> (raw)
In-Reply-To: <87h9unl4cp.fsf@nicolasgoaziou.fr> (Nicolas Goaziou's message of "Sun, 15 Feb 2015 13:57:26 +0100")

[-- Attachment #1: Type: text/plain, Size: 670 bytes --]

Nicolas Goaziou <mail@nicolasgoaziou.fr> writes:

> Since KEYWORDS and DESCRIPTION are really back-end dependant, I vote for
> moving them from `org-export-options-alist' to back-end definitions.
> Using `org-element-parse-secondary-string' will be required in this
> case.


> WDYT? Also, supposing you agree, do you want to do a patch (caveat:
> there's "org.texi" messing involved)?

So irrespective of this, here's an updated patch that uses
secondary-string parsing.  Should I add it to master before or after I get
done with this moving description and keywords?

—Rasmus

-- 
This is the kind of tedious nonsense up with which I will not put

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-ox-latex-Format-spec-for-hyperref-and-title.patch --]
[-- Type: text/x-diff, Size: 6588 bytes --]

From 30334b0bf1d68fcc4479e26d51296099505657cd Mon Sep 17 00:00:00 2001
From: Rasmus <rasmus@gmx.us>
Date: Wed, 11 Feb 2015 02:18:09 +0100
Subject: [PATCH] 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.
---
 etc/ORG-NEWS     |  3 ++
 lisp/ox-latex.el | 88 +++++++++++++++++++++++++++++++++++++++++++++-----------
 2 files changed, 74 insertions(+), 17 deletions(-)

diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index 03fcfb2..4e1bc42 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 ~org-latex-format-spec~.
+Further, ~org-latex-hyperref-template~ has new default value.
 * Version 8.2
 
 ** Incompatible changes
diff --git a/lisp/ox-latex.el b/lisp/ox-latex.el
index 6eddad0..27daf8f 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,35 @@ 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 e.g. `org-latex-hyperref-template'.
+Also used by `org-latex-title-command'
+
+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)))))
 
 \f
 ;;; Template
@@ -1201,7 +1254,10 @@ 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 (when (org-some 'stringp (list org-latex-hyperref-template
+					     org-latex-title-command))
+		(org-latex--format-spec info))))
     (concat
      ;; Time-stamp.
      (and (plist-get info :time-stamp-file)
@@ -1248,17 +1304,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)
-- 
2.3.0


  parent reply	other threads:[~2015-02-19  1:26 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-02-12  0:39 [patch, ox-latex] better hyperref and title options Rasmus
2015-02-12 23:59 ` Nicolas Goaziou
2015-02-15  1:53   ` Rasmus
2015-02-15 10:49     ` Nicolas Goaziou
2015-02-15 11:42       ` Rasmus
2015-02-15 12:57         ` Nicolas Goaziou
2015-02-15 13:11           ` Rasmus
2015-02-15 15:57             ` Nicolas Goaziou
2015-02-15 16:55               ` Rasmus
2015-02-19  1:26           ` Rasmus [this message]
2015-02-19  9:24             ` Nicolas Goaziou
2015-02-19 21:43               ` Rasmus
2015-02-19 22:58                 ` Nicolas Goaziou

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87mw4asncv.fsf@gmx.us \
    --to=rasmus@gmx.us \
    --cc=emacs-orgmode@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).