summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTEC <tec@tecosaur.com>2021-03-31 23:06:14 +0800
committerNicolas Goaziou <mail@nicolasgoaziou.fr>2021-04-04 00:16:42 +0200
commitbcfe6f985cc791e90638d3adac8cfa81291375ae (patch)
treebfa00c62e98827e6267fb372ca42d723b5e8499a
parentf7e0e17e828595324f5e3e6a319e51328a197f97 (diff)
downloadorg-mode-bcfe6f985cc791e90638d3adac8cfa81291375ae.tar.gz
ox-latex: convert verbatim text in headings to texttt
* lisp/ox-latex.el (org-latex--protect-texttt): New function. (org-latex--text-markup): Use new function. (org-latex-headline): Convert any instances of \verb text with \texttt. This is required to work around LaTeX peculiarities that would otherwise cause compilation to fail (see the code comment for more information).
-rw-r--r--lisp/ox-latex.el41
1 files changed, 24 insertions, 17 deletions
diff --git a/lisp/ox-latex.el b/lisp/ox-latex.el
index 29663b3..932f385 100644
--- a/lisp/ox-latex.el
+++ b/lisp/ox-latex.el
@@ -1521,22 +1521,23 @@ INFO is a plist used as a communication channel. See
separator
(replace-regexp-in-string "\n" " " text)
separator)))
- ;; Handle the `protectedtexttt' special case: Protect some
- ;; special chars and use "\texttt{%s}" format string.
- (protectedtexttt
- (format "\\texttt{%s}"
- (replace-regexp-in-string
- "--\\|[\\{}$%&_#~^]"
- (lambda (m)
- (cond ((equal m "--") "-{}-")
- ((equal m "\\") "\\textbackslash{}")
- ((equal m "~") "\\textasciitilde{}")
- ((equal m "^") "\\textasciicircum{}")
- (t (org-latex--protect-text m))))
- text nil t)))
+ (protectedtexttt (org-latex--protect-texttt text))
;; Else use format string.
(t (format fmt text)))))
+(defun org-latex--protect-texttt (text)
+ "Protect special chars, then wrap TEXT in \"\\texttt{}\"."
+ (format "\\texttt{%s}"
+ (replace-regexp-in-string
+ "--\\|[\\{}$%&_#~^]"
+ (lambda (m)
+ (cond ((equal m "--") "-{}-")
+ ((equal m "\\") "\\textbackslash{}")
+ ((equal m "~") "\\textasciitilde{}")
+ ((equal m "^") "\\textasciicircum{}")
+ (t (org-latex--protect-text m))))
+ text nil t)))
+
(defun org-latex--delayed-footnotes-definitions (element info)
"Return footnotes definitions in ELEMENT as a string.
@@ -1952,10 +1953,16 @@ holding contextual information."
;; Create a temporary export back-end that hard-codes
;; "\underline" within "\section" and alike.
(section-back-end
- (org-export-create-backend
- :parent 'latex
- :transcoders
- '((underline . (lambda (o c i) (format "\\underline{%s}" c))))))
+ (org-export-create-backend
+ :parent 'latex
+ :transcoders
+ '((underline . (lambda (o c i) (format "\\underline{%s}" c)))
+ ;; LaTeX isn't happy when you try to use \verb inside the argument of other
+ ;; commands (like \section, etc.), and this causes compilation to fail.
+ ;; So, within headings it's a good idea to replace any instances of \verb
+ ;; with \texttt.
+ (code . (lambda (_ c _) (org-latex--protect-texttt c)))
+ (verbatim . (lambda (_ c _) (org-latex--protect-texttt c))))))
(text
(org-export-data-with-backend
(org-element-property :title headline) section-back-end info))