[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[FR] Please add custom command variable to org-latex-footnote-reference
From: |
Alexander Gogl |
Subject: |
[FR] Please add custom command variable to org-latex-footnote-reference |
Date: |
Thu, 30 Nov 2023 15:00:16 +0100 |
User-agent: |
mu4e 1.10.7; emacs 30.0.50 |
Hello,
some LaTeX classes define their own footnote commands. For example, kaobook
(https://github.com/fmarotta/kaobook/blob/master/example_and_documentation.pdf)
has \footnotes and \sidenotes, whereby sidenotes (notes are put into the outter
margin) are the dominant form of putting notes in kaobook.
It would be great if you could make the footnote command in the footnote
function customizable. It could look like this:
;; Replace footnote function to make the latex footnote command customizable
(setq org-latex-footnote-command "\\footnote{%s%s}")
(defun org-latex-footnote-reference (footnote-reference _contents info)
"Transcode a FOOTNOTE-REFERENCE element from Org to LaTeX.
CONTENTS is nil. INFO is a plist holding contextual information."
(let ((label (org-element-property :label footnote-reference)))
(concat
;; Insert separator between two footnotes in a row.
(let ((prev (org-export-get-previous-element footnote-reference info)))
(when (eq (org-element-type prev) 'footnote-reference)
(plist-get info :latex-footnote-separator)))
(cond
;; Use `:latex-footnote-defined-format' if the footnote has
;; already been defined.
((not (org-export-footnote-first-reference-p footnote-reference info))
(format (plist-get info :latex-footnote-defined-format)
(org-latex--label
(org-export-get-footnote-definition footnote-reference info)
info t)))
;; Use \footnotemark if reference is within another footnote
;; reference, footnote definition, table cell, verse block, or
;; item's tag.
((or (org-element-lineage footnote-reference
'(footnote-reference footnote-definition
table-cell verse-block))
(eq 'item (org-element-type
(org-export-get-parent-element footnote-reference))))
"\\footnotemark")
;; Otherwise, define it with \footnote command.
(t
(let ((def (org-export-get-footnote-definition footnote-reference info)))
(concat
(format org-latex-footnote-command (org-trim (org-export-data def info))
;; Only insert a \label if there exist another
;; reference to def.
(cond ((not label) "")
((org-element-map (plist-get info :parse-tree)
'footnote-reference
(lambda (f)
(and (not (eq f footnote-reference))
(equal (org-element-property :label f) label)
(org-trim (org-latex--label def info t t))))
info t))
(t "")))
;; Retrieve all footnote references within the footnote and
;; add their definition after it, since LaTeX doesn't support
;; them inside.
(org-latex--delayed-footnotes-definitions def info))))))))
Best,
Alexander
- [FR] Please add custom command variable to org-latex-footnote-reference,
Alexander Gogl <=