diff --git a/README.org b/README.org
index 9983597..c21026d 100644
--- a/README.org
+++ b/README.org
@@ -1,22 +1,33 @@
-#+startup: content
#+title: Emacs setup for use with LaTeX, Org, and Python
#+author: Gerard Vermeulen
-#+babel: :cache no
-
-#+property: header-args :tangle init.el :comments link
-#+property: header-args:emacs-lisp :exports code :results silent
-#+property: header-args:latex-preamble :tangle no
-#
#+latex_class: article
-#+latex_class_options: [11pt,a4paper,english,svgnames]
+#+latex_class_options: [11pt,a4paper,english,svgnames,tables]
+#
+#+babel: :cache no
+#
+#+macro: kbd @@html:$1@@@@latex:\colorbox{PaleTurquoise}{\texttt{$1}}@@
+#
+#+property: header-args :tangle init.el
+#+property: header-args:emacs-lisp :exports code :results silent
+#+property: header-args:latex-header :tangle no
+#+property: header-args:latex-extra-header :tangle no
+#
+#+startup: content
-* LaTeX preamble :noexport:
+* LaTeX headers :noexport:
-#+begin_src latex-preamble
- % Use babel for biblatex.
+#+begin_src latex-header
+ % LANGUAGE:
\usepackage{babel}
\usepackage{fvextra}
\usepackage{csquotes}
+ % LISTS:
+ \usepackage{enumitem}
+ \setlist{noitemsep}
+ % TECHNICS:
+ \usepackage{siunitx}
+ \usepackage{tikz}
+ % LISTINGS:
% Section 2.6 of caption-eng.pdf (texdoc caption) explains that the sign
% of "skip" depends on the assumption "position=above" or "position=below".
% The assumption should match the real caption position in the LaTeX code.
@@ -24,10 +35,20 @@
\usepackage[newfloat]{minted}
\captionsetup[listing]{position=below,skip=0em}
\usemintedstyle{xcode}
- % Use lastpage in fancy header.
+ % TABLES:
+ % https://tex.stackexchange.com/questions/341205/
+ % what-is-the-difference-between-tabular-tabular-and-tabularx-environments
+ % https://emacs.stackexchange.com/questions/26179/
+ % change-org-mode-table-style-just-for-latex-export
+ % https://tex.stackexchange.com/questions/468585/
+ % table-formatting-using-siunitx
+ \usepackage{booktabs}
+ \usepackage{colortbl}
+ \usepackage{tabularx} % DANGER: beware of Org table :width and :align options!
+ % FANCY HEADERS:
\usepackage{fancyhdr}
\usepackage{lastpage}
- % Use geometry without warnings.
+ % PAGE GEOMETRY:
\usepackage[
headheight=20mm,
top=40mm,
@@ -39,7 +60,7 @@
]{geometry}
#+end_src
-#+begin_src latex-preamble
+#+begin_src latex-header
% Make section, subsection and subsubsection implicit float barriers.
% https://tex.stackexchange.com/questions/118662/use-placeins-for-subsections
% Make section an implicit float barrier:
@@ -62,7 +83,7 @@
\makeatother
#+end_src
-#+begin_src latex-preamble
+#+begin_src latex-header
% Add fancy headers and footers to normal pages.
\pagestyle{fancy}
\fancyhf{}
@@ -1187,38 +1208,61 @@ this document to =html= and LaTeX correctly.
'(apply 'my-org-eval-blocks-named '("python-setup")))
#+end_src
-*** [[info:org#Advanced Export Configuration][Advanced Export Configuration (info)]]
+*** [[info:org#LaTeX header and sectioning][Easy LaTeX preamble editing]]
:PROPERTIES:
-:CUSTOM_ID: sec:org-document-export-hacks
+:CUSTOM_ID: sec:easy-latex-preamble-editing
:END:
-Stolen from [[https://git.sr.ht/~bzg/org-contrib/tree/master/item/lisp/ox-extra.el][ox-extra.el]]
+There are at least two ways (new and old) to edit the LateX preamble
+=latex_header= and =latex-extra_header= export options easily in LaTeX source or
+export blocks. This [[info:org#Top][Org (info)]] file uses the new way, but keeps the old way for
+backwards compatibility.
-#+name: lst:emacs-lisp-setup-latex-preamble
+The new way -- exploiting an idea of [[https://www.matem.unam.mx/~omar/][Omar Antolin Camarena]] -- is to code new
+[[info:org#Editing Source Code][-modes]] allowing to edit in LaTeX mode and to export to LaTeX code with
+[[info:org#LaTeX specific export settings][correct LaTeX preamble export setting prefixes]]. Here, are links to three posts
+exposing his idea:
+1. [[https://www.reddit.com/r/orgmode/comments/7u2n0h/tip_for_defining_latex_macros_for_use_in_both/][Export LaTeX macros to LaTeX and HTML/MathJax preambles (reddit)]],
+2. [[https://www.reddit.com/r/orgmode/comments/5bi6ku/tip_for_exporting_javascript_source_block_to/][Export JavaScript source blocks to script tags in HTML (reddit)]],
+3. [[https://emacs.stackexchange.com/questions/28301/export-javascript-source-block-to-script-tag-in-html-when-exporting-org-file-to][Export JavaScript source blocks to script tags in HTML (SX)]].
+Listing [[lst:emacs-lisp-setup-latex-header]] implements this way by means of two
+new [[info:org#Editing Source Code][-modes]]: =latex-header= and =latex-extra-header=.
+
+#+caption[New =-modes= to edit the LaTeX preamble easily]:
+#+caption: Add =latex-header= and =latex-extra-header= language modes to edit
+#+caption: LaTeX preamble =latex_header= and =latex_extra_header= export options
+#+caption: easily.
+#+name: lst:emacs-lisp-setup-latex-header
#+begin_src emacs-lisp
- (with-eval-after-load 'org-src
- (add-to-list 'org-src-lang-modes '("latex-preamble" . latex))
+ (with-eval-after-load 'org-src (defun prefix-all-lines (prefix body)
+ (with-temp-buffer (insert body) (string-insert-rectangle (point-min)
+ (point-max) prefix) (buffer-string)))
- (defvar org-babel-default-header-args:latex-preamble
- '((:results . "raw")
- (:exports . "results")))
+ (add-to-list 'org-src-lang-modes '("latex-header" . latex))
- (defun prefix-all-lines (prefix body)
- (with-temp-buffer
- (insert body)
- (string-insert-rectangle (point-min) (point-max) prefix)
- (buffer-string)))
+ (defvar org-babel-default-header-args:latex-header '((:results
+ . "raw") (:exports . "results")))
- (defun org-babel-execute:latex-preamble (body _params)
- (prefix-all-lines "#+latex_header: " body)))
+ (defun org-babel-execute:latex-header (body _params)
+ (prefix-all-lines "#+latex_header: " body))
+
+ (add-to-list 'org-src-lang-modes '("latex-extra-header" . latex))
+
+ (defvar org-babel-default-header-args:latex-extra-header '((:results
+ . "raw") (:exports . "results")))
+
+ (defun org-babel-execute:latex-extra-header (body _params)
+ (prefix-all-lines "#+latex_extra_header: " body)))
#+end_src
-[[https://www.reddit.com/r/orgmode/comments/7u2n0h/tip_for_defining_latex_macros_for_use_in_both/]]
-[[https://www.reddit.com/r/orgmode/comments/5bi6ku/tip_for_exporting_javascript_source_block_to/]]
+The old way is to use a special export attribute as in the function
+=org-latex-header-blocks-filter= in [[https://git.sr.ht/~bzg/org-contrib/tree/master/item/lisp/ox-extra.el][ox-extra.el]]. Apparently, nobody is using
+this broken function (broken, since it relies on support only in org-mode before
+=2014-11-11=). Listing [[lst:org-latex-header-blocks-filter]] proposes a fix.
#+caption[Convert marked LaTeX export blocks to LaTeX header lines]:
#+caption: Convert marked LaTeX export blocks to LaTeX header lines.
-#+label: lst:org-latex-header-blocks-filter
+#+name: lst:org-latex-header-blocks-filter
#+begin_src emacs-lisp
(with-eval-after-load 'ox
(defun org-latex-header-blocks-filter (backend)