Fix detection of latex fragments

* org-element.el (org-element-latex-fragment-parser):
* org.el (org-latex-regexps): Fix the detection of latex
  fragments.  Uses syntax tables to detect whitespaces and punctuation
  marks following the final $ sign.

In order to qualify as a math delimiter, the final $ sign of a LaTeX
fragment has to be followed by a whitespace or punctuation mark but the
regexp used in the previous code matched only a small number of
punctuation marks and therefore missed some latex fragments.
This commit is contained in:
Titus von der Malsburg 2015-05-08 15:25:06 -07:00 committed by Nicolas Goaziou
parent b27e630bab
commit 6779f8f424
3 changed files with 7 additions and 6 deletions

View File

@ -10347,9 +10347,10 @@ Text within the usual @LaTeX{} math delimiters. To avoid conflicts with
currency specifications, single @samp{$} characters are only recognized as currency specifications, single @samp{$} characters are only recognized as
math delimiters if the enclosed text contains at most two line breaks, is math delimiters if the enclosed text contains at most two line breaks, is
directly attached to the @samp{$} characters with no whitespace in between, directly attached to the @samp{$} characters with no whitespace in between,
and if the closing @samp{$} is followed by whitespace, punctuation or a dash. and if the closing @samp{$} is followed by whitespace or punctuation
For the other delimiters, there is no such restriction, so when in doubt, use (parentheses and quotes are considered to be punctuation in this
@samp{\(...\)} as inline math delimiters. context). For the other delimiters, there is no such restriction, so when in
doubt, use @samp{\(...\)} as inline math delimiters.
@end itemize @end itemize
@noindent For example: @noindent For example:

View File

@ -2959,7 +2959,7 @@ Assume point is at the beginning of the LaTeX fragment."
(search-forward "$" nil t 2) (search-forward "$" nil t 2)
(not (memq (char-before (match-beginning 0)) (not (memq (char-before (match-beginning 0))
'(?\s ?\t ?\n ?, ?.))) '(?\s ?\t ?\n ?, ?.)))
(looking-at "\\([- \t.,?;:'\"]\\|$\\)") (looking-at "\\(\\s.\\|\\s-\\|\\s(\\|\\s)\\|\\s\"\\|$\\)")
(point))) (point)))
(case (char-after (1+ (point))) (case (char-after (1+ (point)))
(?\( (search-forward "\\)" nil t)) (?\( (search-forward "\\)" nil t))

View File

@ -540,8 +540,8 @@ An entry can be toggled between COMMENT and normal with
'(("begin" "^[ \t]*\\(\\\\begin{\\([a-zA-Z0-9\\*]+\\)[^\000]+?\\\\end{\\2}\\)" 1 t) '(("begin" "^[ \t]*\\(\\\\begin{\\([a-zA-Z0-9\\*]+\\)[^\000]+?\\\\end{\\2}\\)" 1 t)
;; ("$" "\\([ (]\\|^\\)\\(\\(\\([$]\\)\\([^ \r\n,.$].*?\\(\n.*?\\)\\{0,5\\}[^ \r\n,.$]\\)\\4\\)\\)\\([ .,?;:'\")]\\|$\\)" 2 nil) ;; ("$" "\\([ (]\\|^\\)\\(\\(\\([$]\\)\\([^ \r\n,.$].*?\\(\n.*?\\)\\{0,5\\}[^ \r\n,.$]\\)\\4\\)\\)\\([ .,?;:'\")]\\|$\\)" 2 nil)
;; \000 in the following regex is needed for org-inside-LaTeX-fragment-p ;; \000 in the following regex is needed for org-inside-LaTeX-fragment-p
("$1" "\\([^$]\\|^\\)\\(\\$[^ \r\n,;.$]\\$\\)\\([- .,?;:'\")\000]\\|$\\)" 2 nil) ("$1" "\\([^$]\\|^\\)\\(\\$[^ \r\n,;.$]\\$\\)\\(\\s.\\|\\s-\\|\\s(\\|\\s)\\|\\s\"\\|\000\\|$\\)" 2 nil)
("$" "\\([^$]\\|^\\)\\(\\(\\$\\([^ \r\n,;.$][^$\n\r]*?\\(\n[^$\n\r]*?\\)\\{0,2\\}[^ \r\n,.$]\\)\\$\\)\\)\\([- .,?;:'\")\000]\\|$\\)" 2 nil) ("$" "\\([^$]\\|^\\)\\(\\(\\$\\([^ \r\n,;.$][^$\n\r]*?\\(\n[^$\n\r]*?\\)\\{0,2\\}[^ \r\n,.$]\\)\\$\\)\\)\\(\\s.\\|\\s-\\|\\s(\\|\\s)\\|\\s\"\\|\000\\|$\\)" 2 nil)
("\\(" "\\\\([^\000]*?\\\\)" 0 nil) ("\\(" "\\\\([^\000]*?\\\\)" 0 nil)
("\\[" "\\\\\\[[^\000]*?\\\\\\]" 0 nil) ("\\[" "\\\\\\[[^\000]*?\\\\\\]" 0 nil)
("$$" "\\$\\$[^\000]*?\\$\\$" 0 nil)) ("$$" "\\$\\$[^\000]*?\\$\\$" 0 nil))