Re: [O] [patch, ox-latex] better hyperref and title options
Rasmus ras...@gmx.us writes: 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? You can go ahead, after fixing some minor typos. Thanks. * ox-latex.el (org-latex-format-spec): New function with format-specs. Typo in the name. (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. Ditto (x3). +*** ~org-latex-hyperref-template~, ~org-latex-title-command~ formatting +New formatting keys are supported. See ~org-latex-format-spec~. See docstrings for more information (no need to talk about `org-latex--format-spec'). +(defun org-latex--format-spec (info) + Create a format-spec for e.g. `org-latex-hyperref-template'. +Also used by `org-latex-title-command' Create a format-spec for document meta-data. INFO is.. is enough IMO. - (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 Nitpick: #'stringp Anyway, both `org-latex-hyperref-template' and `org-latex-title-command' are always strings, per defcustom type. So you can drop the `when' part: (spec (org-latex--format-spec info)) Regards,
Re: [O] [patch, ox-latex] better hyperref and title options
Nicolas Goaziou m...@nicolasgoaziou.fr writes: Rasmus ras...@gmx.us writes: 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? You can go ahead, after fixing some minor typos. Thanks. Pushed. -- The Kids call him Billy the Saint
Re: [O] [patch, ox-latex] better hyperref and title options
Rasmus ras...@gmx.us writes: Pushed. Thank you. Regards,
Re: [O] [patch, ox-latex] better hyperref and title options
Nicolas Goaziou m...@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 From 30334b0bf1d68fcc4479e26d51296099505657cd Mon Sep 17 00:00:00 2001 From: Rasmus ras...@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
Re: [O] [patch, ox-latex] better hyperref and title options
Nicolas Goaziou m...@nicolasgoaziou.fr writes: However, since they are plain strings something like \alpha will be exported as $\backslash$lpha. I can kind of get it interpreting using org-element-parse-secondary-string, but this is not the right approach. Why isn't it the right approach? 'Cause usually org-export-data gives you the right value automatically. Anyway, I don't mind using org-element-parse-secondary-string. Is there a reason why DESCRIPTION and KEYWORDS can't have formatting? DESCRIPTION could be moved to `org-element-document-properties'. But then, we need to introduce `org-export-with-description', which implies export back-ends have to deal with it somehow (ATM ox-ascii ignores it). Another option is to simply remove DESCRIPTION from ox.el and let export back-ends in need of it to add it to their definition. I don't oppose that. However, I don't see why KEYWORDS should accept markup. I also think it should be moved to back-end definitions instead of ox.el. Keywords should also be printed in the document as well IMO, e.g. after the abstract. An example of where you need markup: σ-algebra. —Rasmus -- Slowly unravels in a ball of yarn and the devil collects it
Re: [O] [patch, ox-latex] better hyperref and title options
Nicolas Goaziou m...@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. OK. So are there any /other/ uses of DESCRIPTION but adding summaries to meta-data? WDYT? Also, supposing you agree, do you want to do a patch (caveat: there's org.texi messing involved)? Sure, I'll add it to my TODO. You'll suffer through the reviewing, so in either case the lion share of work will fall on you. Without much thought, these are the back-ends where it might make sense: ox-latex, ox-html, ox-texi, ox-odt, maybe ox-groff. In a second round, I might add a :with-keywords as well. When non-nil keywords are inserted at the location of keywords. Like #+TOC. So you'd have: #+begin_abstract Read my paper, pretty please. #+end_abstract #+keywords: topic1, ⋯, topicN → (If using ox-latex) \begin{abstract} read me \end{abstract} \keywords{topic1, ⋯, topicN} Where \keywords{·} is some function that I don't know yet. —Rasmus -- C is for Cookie
Re: [O] [patch, ox-latex] better hyperref and title options
Rasmus ras...@gmx.us writes: 'Cause usually org-export-data gives you the right value automatically. Anyway, I don't mind using org-element-parse-secondary-string. `org-element-parse-secondary-string' is meant for cases like this one. DESCRIPTION could be moved to `org-element-document-properties'. But then, we need to introduce `org-export-with-description', which implies export back-ends have to deal with it somehow (ATM ox-ascii ignores it). Another option is to simply remove DESCRIPTION from ox.el and let export back-ends in need of it to add it to their definition. I don't oppose that. However, I don't see why KEYWORDS should accept markup. I also think it should be moved to back-end definitions instead of ox.el. Keywords should also be printed in the document as well IMO, e.g. after the abstract. An example of where you need markup: σ-algebra. Good point. 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)? Regards,
Re: [O] [patch, ox-latex] better hyperref and title options
Nicolas Goaziou m...@nicolasgoaziou.fr writes: It isn't necessary to add :with-description and :with-keywords since :description and :keywords will not belong to ox.el anymore. :With-keywords is still needed if they can be printed in both the text and the meta data. Keywords are also useful for weblogs, another thing that I'd like to improve. This amounts to provide a couple of extra :sitemap functions: one for generating an index based on summaries in files, e.g. abstract blocks, and partial indexes based on keywords. The output structure would be ./index.html ./keyword1/index.html. Anyway, I don't have any code for this yet. But the point is keywords are important and Org can leverage them better and :with-keywords (even if implemented in ox-WHATEVER.el) is important. —Rasmus -- Sådan en god dansk lagereddike kan man slet ikke bruge mere
Re: [O] [patch, ox-latex] better hyperref and title options
Rasmus ras...@gmx.us writes: So are there any /other/ uses of DESCRIPTION but adding summaries to meta-data? I can't think of any. Without much thought, these are the back-ends where it might make sense: ox-latex, ox-html, ox-texi, ox-odt, maybe ox-groff. In a second round, I might add a :with-keywords as well. It isn't necessary to add :with-description and :with-keywords since :description and :keywords will not belong to ox.el anymore. Regards,
Re: [O] [patch, ox-latex] better hyperref and title options
Hello, Rasmus ras...@gmx.us writes: Nicolas Goaziou m...@nicolasgoaziou.fr writes: +(?k . ,(or (plist-get info :keywords) )) +(?d . ,(or (plist-get info :description) )) So it occurred to me that these should also be exported to proper syntax so we don't end up with e.g. a raw $ or in our latex document. Hyperref will actually handle it, but usually by discarding offending characters. However, since they are plain strings something like \alpha will be exported as $\backslash$lpha. I can kind of get it interpreting using org-element-parse-secondary-string, but this is not the right approach. Why isn't it the right approach? Is there a reason why DESCRIPTION and KEYWORDS can't have formatting? DESCRIPTION could be moved to `org-element-document-properties'. But then, we need to introduce `org-export-with-description', which implies export back-ends have to deal with it somehow (ATM ox-ascii ignores it). Another option is to simply remove DESCRIPTION from ox.el and let export back-ends in need of it to add it to their definition. However, I don't see why KEYWORDS should accept markup. I also think it should be moved to back-end definitions instead of ox.el. Regards, -- Nicolas Goaziou
Re: [O] [patch, ox-latex] better hyperref and title options
Nicolas Goaziou m...@nicolasgoaziou.fr writes: +(?k . ,(or (plist-get info :keywords) )) +(?d . ,(or (plist-get info :description) )) So it occurred to me that these should also be exported to proper syntax so we don't end up with e.g. a raw $ or in our latex document. Hyperref will actually handle it, but usually by discarding offending characters. However, since they are plain strings something like \alpha will be exported as $\backslash$lpha. I can kind of get it interpreting using org-element-parse-secondary-string, but this is not the right approach. Is there a reason why DESCRIPTION and KEYWORDS can't have formatting? —Rasmus PS: I hope I didn't send this twice if so I apologize. -- Lasciate ogni speranza o voi che entrate: siete nella mani di'machellaio
Re: [O] [patch, ox-latex] better hyperref and title options
Hello, Rasmus ras...@gmx.us writes: This patch does two things. 1. Add better format-spec to ox-latex hyperref and title-command. 2. Use this to extend basic hyperref formatting to include title, author, language etc. Wrt the title-command, this is useful if you need one-off custom formatting of a header in LaTeX, e.g. in ox-publish projects. OK. (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. + +A number of formatting keys can be used to construct the command. +See `org-latex-format-spec'. Since this is a defcustom, I think formatting keys should be listed in full in its docstring. (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: - - %k for KEYWORDS line - %d for DESCRIPTION line - %c for CREATOR line +See `org-latex-format-spec' for placeholder keys. Ditto. +(defun org-latex-format-spec (info) + Create a format-spec for e.g. `org-latex-hyperref-template'. + +Value is a format string, which can contain the following placeholders: + + %a for AUTHOR keyword + %t for TITLE keyword + %k for KEYWORDS line + %d for DESCRIPTION line + %c for CREATOR line + %l for Language keyword + %D for DATE keyword + + `((?a . ,(or (org-export-data (plist-get info :author) info) )) +(?t . ,(or (org-export-data (plist-get info :title) info) )) +(?k . ,(or (plist-get info :keywords) )) +(?d . ,(or (plist-get info :description) )) +(?c . ,(if (plist-get info :with-creator) (plist-get info :creator) )) +(?l . ,(or (plist-get info :language) )) +(?D . ,(org-export-data (org-export-get-date info) info Please rename it `org-latex--format-spec', this is clearly an internal function. Also, its docstring should refer to INFO parameter. + (let ((template (plist-get info :latex-hyperref-template))) + (and (stringp template) +(format-spec template + (org-latex-format-spec info ;; 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 + (org-latex-format-spec info) This is sub-optimal: you're building the spec twice. I suggest to use a (let ((spec (org-latex--format-spec info somewhere above. You can apply the changes once these issues are resolved. Thank you. Regards, -- Nicolas Goaziou
[O] [patch, ox-latex] better hyperref and title options
Hi, This patch does two things. 1. Add better format-spec to ox-latex hyperref and title-command. 2. Use this to extend basic hyperref formatting to include title, author, language etc. Wrt the title-command, this is useful if you need one-off custom formatting of a header in LaTeX, e.g. in ox-publish projects. —Rasmus -- There are known knowns; there are things we know that we know From d011059ef326827bd944b7949c4a14e7bdf215dd Mon Sep 17 00:00:00 2001 From: Rasmus ras...@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 | 51 ++- 2 files changed, 37 insertions(+), 17 deletions(-) diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS index 103828b..cc2c49a 100644 --- a/etc/ORG-NEWS +++ b/etc/ORG-NEWS @@ -227,6 +227,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 d7514aa..5210447 100644 --- a/lisp/ox-latex.el +++ b/lisp/ox-latex.el @@ -383,9 +383,9 @@ 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. + +A number of formatting keys can be used to construct the command. +See `org-latex-format-spec'. :group 'org-export-latex :type 'string) @@ -397,14 +397,11 @@ 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: - - %k for KEYWORDS line - %d for DESCRIPTION line - %c for CREATOR line +See `org-latex-format-spec' for placeholder keys. Set it to the empty string to ignore the command completely. :group 'org-export-latex @@ -1193,6 +1190,26 @@ 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'. + +Value is a format string, which can contain the following placeholders: + + %a for AUTHOR keyword + %t for TITLE keyword + %k for KEYWORDS line + %d for DESCRIPTION line + %c for CREATOR line + %l for Language keyword + %D for DATE keyword + + `((?a . ,(or (org-export-data (plist-get info :author) info) )) +(?t . ,(or (org-export-data (plist-get info :title) info) )) +(?k . ,(or (plist-get info :keywords) )) +(?d . ,(or (plist-get info :description) )) +(?c . ,(if (plist-get info :with-creator) (plist-get info :creator) )) +(?l . ,(or (plist-get info :language) )) +(?D . ,(org-export-data (org-export-get-date info) info ;;; Template @@ -1248,17 +1265,17 @@ 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 + (org-latex-format-spec info ;; 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 + (org-latex-format-spec info) (org-element-normalize-string (cond ((string= title) nil)