LaTeX export: Fix some problems with protection of inline latex commands
Scot Becker writes: > Prompted by Chris Gray's request for org markup in Latex > environment, I thought I'd submit a note (for his sake and > others') about a few quirks of org-latex-export's handling > of embedded Latex markup in org documents. I have been > puzzling with these for a while but only discovered the > problem triggers (and workarounds) this morning just before > Chris' mail arrived. These are both about inline Latex > commands: > > I use a few custom commands \mycommand{like this}, and > occasionally have to invoke the odd bit of standard LaTeX > markup, for example /when \textbf{embedding bold text} > inside italics/. For the most part, these work fine, but > I've discovered the following two 'gotchas' that happen when > exporting to LaTeX. > > 1. Inline Latex commands get their final curly brace > escaped with a slash (and therefore don't work) if they > spill over into another line, i.e. if they contain one or > more newlines. This is true also for standard LaTeX > commands like \textbf{} and \emph{}. > > ----------------SAMPLE------------------------ > \mycommand{So, for example this > wrapped setence gets a slash added just after the > final period and before the curly brace.} Org is quite > helpfully escaping the slash for LaTeX, apparently. > > \mycommand{no trouble if it's all on one line} > ------------------END------------------------- > > The workaround of putting all such commands on one line is > no hardship for me, since I use visual-line-mode in Emacs 23 > and keep my paragraphs as single logical lines. It might be > harder for those accustomed to hard-wrapping their > paragraphs. > > > 2. If you have two inline Latex commands on the same > logical line, org's latex export doesn't treat the text > between them in its usual manner. Italics get processed, > but not the latexification of quotes. ("this" --> ``this'') > For example: > > ----------------SAMPLE------------------------ > I have a short custom command to tell Latex to invoke a > Hebrew-language right-to-left environment when I want to refer to a > Hebrew phrase like this: \heb{phrase here}. But then if I "quote > something," and follow that by another \heb{phrase}, the inner > quotation marks don't get processed. Oddly enough, this problem is > only triggered when there is an inline Latex command both before and > after the quoted material on the same logical line. > > Now if you put a footnote in between those two inline Latex commands, > the output is really nutty: > > And \heb{phrase here} with a footnote[fn:: Footnote here.] I'm not > sure what funky org commands get invoked, but again, only when > bookended by an inline Latex command like \heb{phrase here}. > ------------------END------------------------- > > The nutty output is a number in square brackets like > this[1], with the following at the bottom of the document: > > \$\^{}{1}\$ Footnote here. > > This has a the opposite work-around: break the lines so > those elements are not all on the same logical line. Put in > a few newlines. Latex, of course doesn't care. Do take > care not to start a newline with the org-footnote, like this > [fn:: Org doesn't parse a footnote command which starts on > its own line.] > > This is just "for what it's worth" to those who use org-mode > as a front-end to writing for LaTeX. These problems were caused by a regular expression for matching latex macros with arguments, that did not allow any newlines. Now we have a much better regexp, that even allows for three levels of nested braces.
This commit is contained in:
parent
61dfa0c67f
commit
c6fd49726f
|
@ -1,3 +1,8 @@
|
|||
2009-04-16 Carsten Dominik <carsten.dominik@gmail.com>
|
||||
|
||||
* org-latex.el (org-export-latex-preprocess): Better regexp for
|
||||
matching latex macros with arguments.
|
||||
|
||||
2009-04-15 Carsten Dominik <carsten.dominik@gmail.com>
|
||||
|
||||
* org-remember.el (org-remember-handler): Allow filing to non-org
|
||||
|
|
|
@ -1432,10 +1432,13 @@ The conversion is made depending of STRING-BEFORE and STRING-AFTER."
|
|||
(replace-match (org-export-latex-protect-string "\\hrule") t t)))
|
||||
|
||||
;; Protect LaTeX commands like \command[...]{...} or \command{...}
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward "\\\\[a-zA-Z]+\\(?:\\[.*\\]\\)?{.*}" nil t)
|
||||
(add-text-properties (match-beginning 0) (match-end 0)
|
||||
'(org-protected t)))
|
||||
(let ((re (concat "\\\\[a-zA-Z]+\\(?:"
|
||||
"\\[.*\\]"
|
||||
"\\)?"
|
||||
(org-create-multibrace-regexp "{" "}" 3))))
|
||||
(while (re-search-forward re nil t)
|
||||
(add-text-properties (match-beginning 0) (match-end 0)
|
||||
'(org-protected t))))
|
||||
|
||||
;; Protect LaTeX entities
|
||||
(goto-char (point-min))
|
||||
|
|
Loading…
Reference in New Issue