ox-latex: Support CUSTOM_ID property as label
* lisp/ox-latex.el (org-latex-custom-id-as-label): New variable. (org-latex-headline): Optionally generate label keys based on CUSTOM_ID, depending on value of :latex-custom-id-labels option (org-latex-link): Optionally generate refs based on CUSTOM_ID, depending on value of :latex-custom-id-labels option. This change was discussed in the following thread: http://thread.gmane.org/gmane.emacs.orgmode/82392
This commit is contained in:
parent
89c1668945
commit
3f55b45280
|
@ -106,7 +106,8 @@
|
||||||
(:latex-class-options "LATEX_CLASS_OPTIONS" nil nil t)
|
(:latex-class-options "LATEX_CLASS_OPTIONS" nil nil t)
|
||||||
(:latex-header "LATEX_HEADER" nil nil newline)
|
(:latex-header "LATEX_HEADER" nil nil newline)
|
||||||
(:latex-header-extra "LATEX_HEADER_EXTRA" nil nil newline)
|
(:latex-header-extra "LATEX_HEADER_EXTRA" nil nil newline)
|
||||||
(:latex-hyperref-p nil "texht" org-latex-with-hyperref t))
|
(:latex-hyperref-p nil "texht" org-latex-with-hyperref t)
|
||||||
|
(:latex-custom-id-labels nil nil org-latex-custom-id-as-label))
|
||||||
:filters-alist '((:filter-options . org-latex-math-block-options-filter)
|
:filters-alist '((:filter-options . org-latex-math-block-options-filter)
|
||||||
(:filter-parse-tree . org-latex-math-block-tree-filter)))
|
(:filter-parse-tree . org-latex-math-block-tree-filter)))
|
||||||
|
|
||||||
|
@ -375,6 +376,59 @@ which format headlines like for Org version prior to 8.0."
|
||||||
:package-version '(Org . "8.0")
|
:package-version '(Org . "8.0")
|
||||||
:type 'function)
|
:type 'function)
|
||||||
|
|
||||||
|
(defcustom org-latex-custom-id-as-label nil
|
||||||
|
"Toggle use of CUSTOM_ID properties for generating section labels.
|
||||||
|
|
||||||
|
When this variable is non-nil, Org will use the value of a
|
||||||
|
headline's CUSTOM_ID property as the key for the \\label command
|
||||||
|
for the LaTeX section corresponding to the headline.
|
||||||
|
|
||||||
|
By default, Org generates its own internal section labels for all
|
||||||
|
headlines during LaTeX export. This process ensures that the
|
||||||
|
\\label keys are unique and valid, but it means the keys are not
|
||||||
|
available in advance of the export process.
|
||||||
|
|
||||||
|
Setting this variable gives you control over how Org generates
|
||||||
|
labels for sections during LaTeX export, so that you may know
|
||||||
|
their keys in advance. One reason to do this is that it allows
|
||||||
|
you to refer to headlines using a single label both in Org's link
|
||||||
|
syntax and in embedded LaTeX code.
|
||||||
|
|
||||||
|
For example, when this variable is non-nil, a headline like this:
|
||||||
|
|
||||||
|
** Some section
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: sec:foo
|
||||||
|
:END:
|
||||||
|
This is section [[#sec:foo]].
|
||||||
|
#+BEGIN_LATEX
|
||||||
|
And this is still section \\ref{sec:foo}.
|
||||||
|
#+END_LATEX
|
||||||
|
|
||||||
|
will be exported to LaTeX as:
|
||||||
|
|
||||||
|
\\subsection{Some section}
|
||||||
|
\\label{sec:foo}
|
||||||
|
This is section \\ref{sec:foo}.
|
||||||
|
And this is still section \\ref{sec:foo}.
|
||||||
|
|
||||||
|
Note, however, that setting this variable introduces a limitation
|
||||||
|
on the possible values for CUSTOM_ID. When this variable is
|
||||||
|
non-nil and a headline defines a CUSTOM_ID value, Org simply
|
||||||
|
passes this value to \\label unchanged. You are responsible for
|
||||||
|
ensuring that the value is a valid LaTeX \\label key, and that no
|
||||||
|
other \\label commands with the same key appear elsewhere in your
|
||||||
|
document. (Keys may contain letters, numbers, and the following
|
||||||
|
punctuation: '_' '.' '-' ':'.) There are no such limitations on
|
||||||
|
CUSTOM_ID when this variable is nil.
|
||||||
|
|
||||||
|
For headlines that do not define the CUSTOM_ID property, Org will
|
||||||
|
continue to use its default labeling scheme to generate labels
|
||||||
|
and resolve links into section references."
|
||||||
|
:group 'org-export-latex
|
||||||
|
:type 'boolean
|
||||||
|
:version "24.5"
|
||||||
|
:package-version '(Org . "8.3"))
|
||||||
|
|
||||||
;;;; Footnotes
|
;;;; Footnotes
|
||||||
|
|
||||||
|
@ -1373,10 +1427,15 @@ holding contextual information."
|
||||||
todo todo-type priority text tags))
|
todo todo-type priority text tags))
|
||||||
;; Associate \label to the headline for internal links.
|
;; Associate \label to the headline for internal links.
|
||||||
(headline-label
|
(headline-label
|
||||||
|
(let ((custom-label
|
||||||
|
(and (plist-get info :latex-custom-id-labels)
|
||||||
|
(org-element-property :CUSTOM_ID headline))))
|
||||||
|
(if custom-label (format "\\label{%s}\n" custom-label)
|
||||||
(format "\\label{sec-%s}\n"
|
(format "\\label{sec-%s}\n"
|
||||||
(mapconcat 'number-to-string
|
(mapconcat
|
||||||
|
#'number-to-string
|
||||||
(org-export-get-headline-number headline info)
|
(org-export-get-headline-number headline info)
|
||||||
"-")))
|
"-")))))
|
||||||
(pre-blanks
|
(pre-blanks
|
||||||
(make-string (org-element-property :pre-blank headline) 10)))
|
(make-string (org-element-property :pre-blank headline) 10)))
|
||||||
(if (or (not section-fmt) (org-export-low-level-p headline info))
|
(if (or (not section-fmt) (org-export-low-level-p headline info))
|
||||||
|
@ -1845,12 +1904,17 @@ INFO is a plist holding contextual information. See
|
||||||
;; number. Otherwise, display description or headline's
|
;; number. Otherwise, display description or headline's
|
||||||
;; title.
|
;; title.
|
||||||
(headline
|
(headline
|
||||||
(let ((label
|
(let* ((custom-label
|
||||||
|
(and (plist-get info :latex-custom-id-labels)
|
||||||
|
(org-element-property :CUSTOM_ID destination)))
|
||||||
|
(label
|
||||||
|
(or
|
||||||
|
custom-label
|
||||||
(format "sec-%s"
|
(format "sec-%s"
|
||||||
(mapconcat
|
(mapconcat
|
||||||
'number-to-string
|
#'number-to-string
|
||||||
(org-export-get-headline-number destination info)
|
(org-export-get-headline-number destination info)
|
||||||
"-"))))
|
"-")))))
|
||||||
(if (and (plist-get info :section-numbers) (not desc))
|
(if (and (plist-get info :section-numbers) (not desc))
|
||||||
(format "\\ref{%s}" label)
|
(format "\\ref{%s}" label)
|
||||||
(format "\\hyperref[%s]{%s}" label
|
(format "\\hyperref[%s]{%s}" label
|
||||||
|
|
Loading…
Reference in New Issue