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