, I made a slight modification to how I write my blog posts.
I use Org-Mode (Org-mode 📖) to write my blog posts. I use a a modified Tufte CSS theme, derived from Tufte CSS.
My theme has a concept of the side-note and the margin-note. A few years ago, I moved away from Tufte’s preferred fonts, instead letting folks’s browsers determine the font. The margin-note is for general “scribbling” in the margins. And the side-note is analogues to an inline footnote.
Up until I leveraged Ox-Hugo’s shortcode customizations to handle both. , I wrote the below function to replace Ox-Hugo 📖’s export function for footnotes.
(defun jf/org-hugo-sidenote (footnote-reference _contents info)
"Transcode a FOOTNOTE-REFERENCE element from Org to Hugo sidenote shortcode.
CONTENTS is nil. INFO is a plist holding contextual information."
(let* ((element (car (org-export-get-footnote-definition footnote-reference info)))
(beg (org-element-property :contents-begin element))
(end (org-element-property :contents-end element)))
(format "{{< sidenote >}}%s{{< /sidenote >}}"
(s-trim (buffer-substring-no-properties beg end)))))
;; Over-write the custom blackfriday export for footnote links.
(advice-add #'org-blackfriday-footnote-reference
:override #'jf/org-hugo-sidenote
'((name . "wrapper")))
;; Don't render the section for export
(advice-add #'org-blackfriday-footnote-section
:override (lambda (&rest rest) ())
'((name . "wrapper")))
With the above function and advice all Org-mode exports, except to my blog, the footnotes retain their original export behavior. I definitely prefer to utilize as much of the native functionality as possible.