emacs-orgmode
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]