emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* Inline LaTeX formulae
@ 2015-05-05 20:14 Titus von der Malsburg
  2015-05-05 20:23 ` Rasmus
                   ` (2 more replies)
  0 siblings, 3 replies; 14+ messages in thread
From: Titus von der Malsburg @ 2015-05-05 20:14 UTC (permalink / raw)
  To: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 812 bytes --]



Hi all,

I just updated to the development version of org and encountered a
problem with inline LaTeX formulae.  I have the following test document:

    #+OPTIONS: toc:nil tex:t
    Test: ($p\ll.001$)

Before the update the output used to be (export to PDF via pdflatex):

    Test: p⋘.001

(The symbold after the p is “much less than“, hope that comes out.)

Now I get:

    Test: ($p⋘.001$)

In the .tex file, it looks like this:

    Test: (\$p\(\ll\).001\$)

Playing with the tex variable in the options doesn’t help: for tex:nil
and tex:verbatim, I get the same output.  Interestingly, when I remove
the parentheses, it works again.  Seems like a bug where inline LaTeX is
not recognized when it occurs in parentheses.

Is there a quick fix for that?

  Titus


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 472 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Inline LaTeX formulae
  2015-05-05 20:14 Inline LaTeX formulae Titus von der Malsburg
@ 2015-05-05 20:23 ` Rasmus
  2015-05-05 20:27 ` Marcin Borkowski
  2015-05-05 21:32 ` Titus von der Malsburg
  2 siblings, 0 replies; 14+ messages in thread
From: Rasmus @ 2015-05-05 20:23 UTC (permalink / raw)
  To: emacs-orgmode

Titus von der Malsburg <malsburg@posteo.de> writes:

> Hi all,
>
> I just updated to the development version of org and encountered a
> problem with inline LaTeX formulae.  I have the following test document:
>
>     #+OPTIONS: toc:nil tex:t
>     Test: ($p\ll.001$)

Try:
      Test: (\(p\ll.001\))

($x$) doesn't work.  You could use $(x)$.  Strangely
org-highlight-latex-and-related still highlights it.

—Rasmus

-- 
Slowly unravels in a ball of yarn and the devil collects it

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Inline LaTeX formulae
  2015-05-05 20:14 Inline LaTeX formulae Titus von der Malsburg
  2015-05-05 20:23 ` Rasmus
@ 2015-05-05 20:27 ` Marcin Borkowski
  2015-05-05 21:32 ` Titus von der Malsburg
  2 siblings, 0 replies; 14+ messages in thread
From: Marcin Borkowski @ 2015-05-05 20:27 UTC (permalink / raw)
  To: emacs-orgmode


On 2015-05-05, at 22:14, Titus von der Malsburg <malsburg@posteo.de> wrote:

> Hi all,
>
> I just updated to the development version of org and encountered a
> problem with inline LaTeX formulae.  I have the following test document:
>
>     #+OPTIONS: toc:nil tex:t
>     Test: ($p\ll.001$)
>
> Is there a quick fix for that?

Does it help if you replace $...$ with \(...\)?

>   Titus

Hth,

-- 
Marcin Borkowski
http://octd.wmi.amu.edu.pl/en/Marcin_Borkowski
Faculty of Mathematics and Computer Science
Adam Mickiewicz University

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Inline LaTeX formulae
  2015-05-05 20:14 Inline LaTeX formulae Titus von der Malsburg
  2015-05-05 20:23 ` Rasmus
  2015-05-05 20:27 ` Marcin Borkowski
@ 2015-05-05 21:32 ` Titus von der Malsburg
  2015-05-05 22:56   ` Marcin Borkowski
  2015-05-06 10:24   ` Rasmus
  2 siblings, 2 replies; 14+ messages in thread
From: Titus von der Malsburg @ 2015-05-05 21:32 UTC (permalink / raw)
  To: emacs-orgmode; +Cc: Rasmus

[-- Attachment #1: Type: text/plain, Size: 1542 bytes --]


Rasums wrote:
> Titus von der Malsburg <malsburg <at> posteo.de> writes:
> 
> > Hi all,
> >
> > I just updated to the development version of org and encountered a
> > problem with inline LaTeX formulae.  I have the following test document:
> >
> >     #+OPTIONS: toc:nil tex:t
> >     Test: ($p\ll.001$)
> 
> Try:
>       Test: (\(p\ll.001\))
> 
> ($x$) doesn't work.  You could use $(x)$.  Strangely
> org-highlight-latex-and-related still highlights it.
> 
> –Rasmus

Thanks, Rasmus (and Marcin), replacing the $ by \( and \) works.  I
didn’t know about the parentheses notation.  To my experience most
people use the $ notation for inline math, and therefore it would make
sense to properly support that notation, too.  Especially since it used
to work in earlier versions of org (if I’m not mistaken) and there is
nothing in the manual suggesting that it shouldn’t work.  The contrary
is the case.  Quote from the manual:

  To avoid conflicts with currency specifications, single ‘$’ characters
  are only recognized as math delimiters if the enclosed text contains
  at most two line breaks, is directly attached to the ‘$’ characters
  with no whitespace in between, and if the closing ‘$’ is followed by
  whitespace, punctuation or a dash.

Parentheses are punctuation, so the $ in my example should be
interpreted as math delimiters.  I think whoever wrote the code, simply
overlooked parentheses when implementing the punctuation part.  This
should be fixed.

  Titus


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 472 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Inline LaTeX formulae
  2015-05-05 21:32 ` Titus von der Malsburg
@ 2015-05-05 22:56   ` Marcin Borkowski
  2015-05-06 10:24   ` Rasmus
  1 sibling, 0 replies; 14+ messages in thread
From: Marcin Borkowski @ 2015-05-05 22:56 UTC (permalink / raw)
  To: emacs-orgmode, Rasmus


On 2015-05-05, at 23:32, Titus von der Malsburg <malsburg@posteo.de> wrote:

> Thanks, Rasmus (and Marcin), replacing the $ by \( and \) works.  I
> didn’t know about the parentheses notation.  To my experience most

Also, this: http://tex.stackexchange.com/questions/510

Best,

-- 
Marcin Borkowski
http://octd.wmi.amu.edu.pl/en/Marcin_Borkowski
Faculty of Mathematics and Computer Science
Adam Mickiewicz University

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Inline LaTeX formulae
  2015-05-05 21:32 ` Titus von der Malsburg
  2015-05-05 22:56   ` Marcin Borkowski
@ 2015-05-06 10:24   ` Rasmus
  2015-05-06 20:35     ` Titus von der Malsburg
  1 sibling, 1 reply; 14+ messages in thread
From: Rasmus @ 2015-05-06 10:24 UTC (permalink / raw)
  To: emacs-orgmode

Hi Titus,

Titus von der Malsburg <malsburg@posteo.de> writes:

> Parentheses are punctuation, so the $ in my example should be
> interpreted as math delimiters.  I think whoever wrote the code, simply
> overlooked parentheses when implementing the punctuation part.

I believe the problem is complicated.

In principal you could change the regexp in
org-element-latex-fragment-parser to something like

   "\\(\\s.\\|\\s-\\|\\s)\\|\\s\"\\|\\s_\\)"

You'd only be relying on syntax tables, which I believe is what you are
suggesting.  But this is also dangerous, see e.g. the recent change of
org-string-nw-p which previously relied on "\\S" cf.:

      http://article.gmane.org/gmane.emacs.orgmode/95473

> This should be fixed.

Patches welcome.  You could try to submit a patch where you add closing
parenthesis characters.

It could even be patches to org.texi!

Thanks,
Rasmus

-- 
Got mashed potatoes. Ain't got no T-Bone. No T-Bone

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Inline LaTeX formulae
  2015-05-06 10:24   ` Rasmus
@ 2015-05-06 20:35     ` Titus von der Malsburg
  2015-05-07  7:42       ` Eric S Fraga
  0 siblings, 1 reply; 14+ messages in thread
From: Titus von der Malsburg @ 2015-05-06 20:35 UTC (permalink / raw)
  To: Rasmus; +Cc: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 2079 bytes --]


On 2015-05-06 Wed 03:24, Rasmus wrote:
> Hi Titus,
>
> Titus von der Malsburg <malsburg@posteo.de> writes:
>
>> Parentheses are punctuation, so the $ in my example should be
>> interpreted as math delimiters.  I think whoever wrote the code, simply
>> overlooked parentheses when implementing the punctuation part.
>
> I believe the problem is complicated.

I had a look at the code in org-element.el (thanks for the
pointer).  There is clearly a bigger problem here: There is a
regexp listing all characters that must follow the final $ to make it
qualify as a math delimiter (whitespace, punctuation).  As I suspected,
the parentheses are missing from that list (and adding them solves my
problem).  However, a metric ton of other punctuation marks are missing
as well, Spanish question marks, curly/smart quotes, real dashes (a
minus is not a dash!), …, even the exclamation mark is missing.

If syntax tables allow a proper solution, great.  I understand that
syntax tables have a different meaning in different modes but does that
matter?  We’re only concerned about org-mode, right?  Are there
scenarios where the org parser is used in a non-org-mode buffer?

I also saw that the commit that introduced the problem had the following
description:

  Avoid using slow regexp.

So if the problem is only due to mistaken optimization, it would perhaps
be best to just revert to the previous code.

  Titus

> In principal you could change the regexp in
> org-element-latex-fragment-parser to something like
>
>    "\\(\\s.\\|\\s-\\|\\s)\\|\\s\"\\|\\s_\\)"
>
> You'd only be relying on syntax tables, which I believe is what you are
> suggesting.  But this is also dangerous, see e.g. the recent change of
> org-string-nw-p which previously relied on "\\S" cf.:
>
>       http://article.gmane.org/gmane.emacs.orgmode/95473
>
>> This should be fixed.
>
> Patches welcome.  You could try to submit a patch where you add closing
> parenthesis characters.
>
> It could even be patches to org.texi!
>
> Thanks,
> Rasmus


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 472 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Inline LaTeX formulae
  2015-05-06 20:35     ` Titus von der Malsburg
@ 2015-05-07  7:42       ` Eric S Fraga
  2015-05-07 18:00         ` Titus von der Malsburg
  0 siblings, 1 reply; 14+ messages in thread
From: Eric S Fraga @ 2015-05-07  7:42 UTC (permalink / raw)
  To: Titus von der Malsburg; +Cc: emacs-orgmode, Rasmus

On Wednesday,  6 May 2015 at 13:35, Titus von der Malsburg wrote:

[...]

> So if the problem is only due to mistaken optimization, it would perhaps
> be best to just revert to the previous code.

Or if the "optimisation" was key to getting acceptable performance,
maybe discourage the use of $...$ and emphasise the use of \(...\).  The
latter is less fragile and is easy to generate by typing $ using the
following function and binding:

#+begin_src emacs-lisp 
  ;; from Nicolas Richard <theonewiththeevillook@yahoo.fr>
  ;; Date: Fri, 8 Mar 2013 16:23:02 +0100
  ;; Message-ID: <87vc913oh5.fsf@yahoo.fr>
  (defun yf/org-electric-dollar nil
  "When called once, insert \\(\\) and leave point in between.
  When called twice, replace the previously inserted \\(\\) by one $."
    (interactive)
    (if (and (looking-at "\\\\)") (looking-back "\\\\("))
        (progn (delete-char 2)
               (delete-char -2)
               (insert "$"))
      (insert "\\(\\)")
      (backward-char 2)))
  (define-key org-mode-map (kbd "$") 'yf/org-electric-dollar)
#+end_src

The problem with $ in org mode is that it is a valid standalone
character (i.e. currency symbol).  Having it perform two functions
(symbol and LaTeX directive) makes it difficult to optimise
performance.

-- 
: Eric S Fraga (0xFFFCF67D), Emacs 24.4.1, Org release_8.3beta-820-gd92ef9

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Inline LaTeX formulae
  2015-05-07  7:42       ` Eric S Fraga
@ 2015-05-07 18:00         ` Titus von der Malsburg
  2015-05-07 20:00           ` Nicolas Goaziou
  0 siblings, 1 reply; 14+ messages in thread
From: Titus von der Malsburg @ 2015-05-07 18:00 UTC (permalink / raw)
  To: Eric S Fraga; +Cc: emacs-orgmode, Rasmus

[-- Attachment #1: Type: text/plain, Size: 3269 bytes --]


On 2015-05-07 Thu 00:42, Eric S Fraga wrote:
> On Wednesday,  6 May 2015 at 13:35, Titus von der Malsburg wrote:
>
> [...]
>
>> So if the problem is only due to mistaken optimization, it would perhaps
>> be best to just revert to the previous code.
>
> Or if the "optimisation" was key to getting acceptable performance,
> maybe discourage the use of $...$ and emphasise the use of \(...\).  The
> latter is less fragile and is easy to generate by typing $ using the
> following function and binding:
>
> #+begin_src emacs-lisp 
>   ;; from Nicolas Richard <theonewiththeevillook@yahoo.fr>
>   ;; Date: Fri, 8 Mar 2013 16:23:02 +0100
>   ;; Message-ID: <87vc913oh5.fsf@yahoo.fr>
>   (defun yf/org-electric-dollar nil
>   "When called once, insert \\(\\) and leave point in between.
>   When called twice, replace the previously inserted \\(\\) by one $."
>     (interactive)
>     (if (and (looking-at "\\\\)") (looking-back "\\\\("))
>         (progn (delete-char 2)
>                (delete-char -2)
>                (insert "$"))
>       (insert "\\(\\)")
>       (backward-char 2)))
>   (define-key org-mode-map (kbd "$") 'yf/org-electric-dollar)
> #+end_src
>
> The problem with $ in org mode is that it is a valid standalone
> character (i.e. currency symbol).  Having it perform two functions
> (symbol and LaTeX directive) makes it difficult to optimise
> performance.

The double use of the $ character makes things somewhat tricky,
true.  However, the org manual makes it perfectly clear how the $ sign
should be interpreted and earlier versions of org implemented that
specification.  Hence, there is no need to reeducate users about how
they should write inline formulas.  This is simply a bug and it should
be fixed.

Rasmus’ proposal is simple and correctly implements what is specified in
the manual.  Below is a patch that implements this solution.  Does
anyone see a concrete problem?  If not, it should be merged.

  Titus


org-element: Ensure correct detection of latex fragments

* org-element.el (org-element-latex-fragment-parser): Ensure correct
  detection of latex fragments in
  `org-element-latex-fragment-parser'.  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.


diff --git a/lisp/org-element.el b/lisp/org-element.el
index 7aab9f6..d0c0485 100644
--- a/lisp/org-element.el
+++ b/lisp/org-element.el
@@ -2963,7 +2963,7 @@ Assume point is at the beginning of the LaTeX fragment."
                         (search-forward "$" nil t 2)
                         (not (memq (char-before (match-beginning 0))
                                    '(?\s ?\t ?\n ?, ?.)))
-                        (looking-at "\\([- \t.,?;:'\"]\\|$\\)")
+                        (looking-at "\\(\\s.\\|\\s-\\|\\s)\\|\\s\"\\|\\s_\\)")
                         (point)))
                (case (char-after (1+ (point)))
                  (?\( (search-forward "\\)" nil t))



[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 472 bytes --]

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Re: Inline LaTeX formulae
  2015-05-07 18:00         ` Titus von der Malsburg
@ 2015-05-07 20:00           ` Nicolas Goaziou
  2015-05-08 19:52             ` Titus von der Malsburg
  0 siblings, 1 reply; 14+ messages in thread
From: Nicolas Goaziou @ 2015-05-07 20:00 UTC (permalink / raw)
  To: Titus von der Malsburg; +Cc: emacs-orgmode, Rasmus

Hello,

Titus von der Malsburg <malsburg@posteo.de> writes:

> Rasmus’ proposal is simple and correctly implements what is specified in
> the manual.  Below is a patch that implements this solution.  Does
> anyone see a concrete problem?  If not, it should be merged.

I do: you removed end of line matcher. Also, I do not see the point of
matching "\s_".

You also need to update `org-latex-regexps' accordingly.

Thank you.


Regards,

-- 
Nicolas Goaziou

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Inline LaTeX formulae
  2015-05-07 20:00           ` Nicolas Goaziou
@ 2015-05-08 19:52             ` Titus von der Malsburg
  2015-05-08 21:40               ` Nicolas Goaziou
  0 siblings, 1 reply; 14+ messages in thread
From: Titus von der Malsburg @ 2015-05-08 19:52 UTC (permalink / raw)
  To: Nicolas Goaziou; +Cc: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 3563 bytes --]


On 2015-05-07 Thu 13:00, Nicolas Goaziou wrote:
> Titus von der Malsburg <malsburg@posteo.de> writes:
>
>> Rasmus’ proposal is simple and correctly implements what is specified in
>> the manual.  Below is a patch that implements this solution.  Does
>> anyone see a concrete problem?  If not, it should be merged.
>
> I do: you removed end of line matcher. Also, I do not see the point of
> matching "\s_".

Both are fixed in the patch below.  I also included opening
parentheses.  It’s an unlikely case but for consistency they should be
included.

> You also need to update `org-latex-regexps' accordingly.

Done.

I also updated org.texi.  Dashes are punctuation and don’t need special
mention.  I also clarified that quotes and parentheses are considered to
be punctuation (although Emacs has separate syntax classes for them).

Thanks for your feedback.

  Titus
  
diff --git a/doc/org.texi b/doc/org.texi
index 7b78417..d926de4 100644
--- a/doc/org.texi
+++ b/doc/org.texi
@@ -10347,9 +10347,10 @@ Text within the usual @LaTeX{} math delimiters.  To avoid conflicts with
 currency specifications, single @samp{$} characters are only recognized as
 math delimiters if the enclosed text contains at most two line breaks, is
 directly attached to the @samp{$} characters with no whitespace in between,
-and if the closing @samp{$} is followed by whitespace, punctuation or a dash.
-For the other delimiters, there is no such restriction, so when in doubt, use
-@samp{\(...\)} as inline math delimiters.
+and if the closing @samp{$} is followed by whitespace or punctuation
+(parentheses and quotes are considered to be punctuation in this
+context).  For the other delimiters, there is no such restriction, so when in
+doubt, use @samp{\(...\)} as inline math delimiters.
 @end itemize
 
 @noindent For example:
diff --git a/lisp/org-element.el b/lisp/org-element.el
index 7aab9f6..8f57c90 100644
--- a/lisp/org-element.el
+++ b/lisp/org-element.el
@@ -2963,7 +2963,7 @@ Assume point is at the beginning of the LaTeX fragment."
 			 (search-forward "$" nil t 2)
 			 (not (memq (char-before (match-beginning 0))
 				    '(?\s ?\t ?\n ?, ?.)))
-			 (looking-at "\\([- \t.,?;:'\"]\\|$\\)")
+			 (looking-at "\\(\\s.\\|\\s-\\|\\s(\\|\\s)\\|\\s\"\\|$\\)")
 			 (point)))
 		(case (char-after (1+ (point)))
 		  (?\( (search-forward "\\)" nil t))
diff --git a/lisp/org.el b/lisp/org.el
index 6139876..46a73b6 100755
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -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)
     ;; ("$" "\\([ 	(]\\|^\\)\\(\\(\\([$]\\)\\([^ 	\r\n,.$].*?\\(\n.*?\\)\\{0,5\\}[^ 	\r\n,.$]\\)\\4\\)\\)\\([ 	.,?;:'\")]\\|$\\)" 2 nil)
     ;; \000 in the following regex is needed for org-inside-LaTeX-fragment-p
-    ("$1" "\\([^$]\\|^\\)\\(\\$[^ 	\r\n,;.$]\\$\\)\\([- 	.,?;:'\")\000]\\|$\\)" 2 nil)
-    ("$" "\\([^$]\\|^\\)\\(\\(\\$\\([^ 	\r\n,;.$][^$\n\r]*?\\(\n[^$\n\r]*?\\)\\{0,2\\}[^ 	\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,.$]\\)\\$\\)\\)\\(\\s.\\|\\s-\\|\\s(\\|\\s)\\|\\s\"\\|\000\\|$\\)" 2 nil)
     ("\\(" "\\\\([^\000]*?\\\\)" 0 nil)
     ("\\[" "\\\\\\[[^\000]*?\\\\\\]" 0 nil)
     ("$$" "\\$\\$[^\000]*?\\$\\$" 0 nil))




[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 472 bytes --]

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Re: Inline LaTeX formulae
  2015-05-08 19:52             ` Titus von der Malsburg
@ 2015-05-08 21:40               ` Nicolas Goaziou
  2015-05-08 22:25                 ` Titus von der Malsburg
  0 siblings, 1 reply; 14+ messages in thread
From: Nicolas Goaziou @ 2015-05-08 21:40 UTC (permalink / raw)
  To: Titus von der Malsburg; +Cc: emacs-orgmode

Titus von der Malsburg <malsburg@posteo.de> writes:

> Both are fixed in the patch below.

Thank you.

> I also included opening parentheses. It’s an unlikely case but for
> consistency they should be included.

If there's no need to exclude opening parenthesis, I suggest to use

  "\\([[:punct:][:space:]]\\|$\\)"

instead of

  "\\(\\s.\\|\\s-\\|\\s(\\|\\s)\\|\\s\"\\|$\\)"

It is shorter and clearer.

> I also updated org.texi.  Dashes are punctuation and don’t need special
> mention.  I also clarified that quotes and parentheses are considered to
> be punctuation (although Emacs has separate syntax classes for them).

OK.

Could you provide a commit message for this patch and send it again,
with change above?


Regards,

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Inline LaTeX formulae
  2015-05-08 21:40               ` Nicolas Goaziou
@ 2015-05-08 22:25                 ` Titus von der Malsburg
  2015-05-09  8:01                   ` Nicolas Goaziou
  0 siblings, 1 reply; 14+ messages in thread
From: Titus von der Malsburg @ 2015-05-08 22:25 UTC (permalink / raw)
  To: Nicolas Goaziou; +Cc: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 4721 bytes --]


On 2015-05-08 Fri 14:40, Nicolas Goaziou wrote:
> Titus von der Malsburg <malsburg@posteo.de> writes:
>
>> Both are fixed in the patch below.
>
> Thank you.
>
>> I also included opening parentheses. It’s an unlikely case but for
>> consistency they should be included.
>
> If there's no need to exclude opening parenthesis, I suggest to use
>
>   "\\([[:punct:][:space:]]\\|$\\)"

This looks indeed much nicer but it’s not what we want.  The Emacs
documentation says:

  ‘[:punct:]’
    This matches any punctuation character. (At present, for multibyte
    characters, it matches anything that has non-word syntax.)

If this matches any non-word multibyte character, it also matches things
like the multiplication sign along with a lot of other non-punctuation
characters.  So if we’d use [:punct:] we would incorrectly detect a
latex fragment in the following example:

  50$=10$×5

The patch with commit message is below.  I did the FSF copyright
paperwork a while ago (for a contribution to Emacs) so the TINYCHANGE
tag may not be required.

> instead of
>
>   "\\(\\s.\\|\\s-\\|\\s(\\|\\s)\\|\\s\"\\|$\\)"
>
> It is shorter and clearer.
>
>> I also updated org.texi.  Dashes are punctuation and don’t need special
>> mention.  I also clarified that quotes and parentheses are considered to
>> be punctuation (although Emacs has separate syntax classes for them).
>
> OK.
>
> Could you provide a commit message for this patch and send it again,
> with change above?

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.

diff --git a/doc/org.texi b/doc/org.texi
index 7b78417..d926de4 100644
--- a/doc/org.texi
+++ b/doc/org.texi
@@ -10347,9 +10347,10 @@ Text within the usual @LaTeX{} math delimiters.  To avoid conflicts with
 currency specifications, single @samp{$} characters are only recognized as
 math delimiters if the enclosed text contains at most two line breaks, is
 directly attached to the @samp{$} characters with no whitespace in between,
-and if the closing @samp{$} is followed by whitespace, punctuation or a dash.
-For the other delimiters, there is no such restriction, so when in doubt, use
-@samp{\(...\)} as inline math delimiters.
+and if the closing @samp{$} is followed by whitespace or punctuation
+(parentheses and quotes are considered to be punctuation in this
+context).  For the other delimiters, there is no such restriction, so when in
+doubt, use @samp{\(...\)} as inline math delimiters.
 @end itemize
 
 @noindent For example:
diff --git a/lisp/org-element.el b/lisp/org-element.el
index 7aab9f6..8f57c90 100644
--- a/lisp/org-element.el
+++ b/lisp/org-element.el
@@ -2963,7 +2963,7 @@ Assume point is at the beginning of the LaTeX fragment."
 			 (search-forward "$" nil t 2)
 			 (not (memq (char-before (match-beginning 0))
 				    '(?\s ?\t ?\n ?, ?.)))
-			 (looking-at "\\([- \t.,?;:'\"]\\|$\\)")
+			 (looking-at "\\(\\s.\\|\\s-\\|\\s(\\|\\s)\\|\\s\"\\|$\\)")
 			 (point)))
 		(case (char-after (1+ (point)))
 		  (?\( (search-forward "\\)" nil t))
diff --git a/lisp/org.el b/lisp/org.el
index 6139876..46a73b6 100755
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -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)
     ;; ("$" "\\([ 	(]\\|^\\)\\(\\(\\([$]\\)\\([^ 	\r\n,.$].*?\\(\n.*?\\)\\{0,5\\}[^ 	\r\n,.$]\\)\\4\\)\\)\\([ 	.,?;:'\")]\\|$\\)" 2 nil)
     ;; \000 in the following regex is needed for org-inside-LaTeX-fragment-p
-    ("$1" "\\([^$]\\|^\\)\\(\\$[^ 	\r\n,;.$]\\$\\)\\([- 	.,?;:'\")\000]\\|$\\)" 2 nil)
-    ("$" "\\([^$]\\|^\\)\\(\\(\\$\\([^ 	\r\n,;.$][^$\n\r]*?\\(\n[^$\n\r]*?\\)\\{0,2\\}[^ 	\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,.$]\\)\\$\\)\\)\\(\\s.\\|\\s-\\|\\s(\\|\\s)\\|\\s\"\\|\000\\|$\\)" 2 nil)
     ("\\(" "\\\\([^\000]*?\\\\)" 0 nil)
     ("\\[" "\\\\\\[[^\000]*?\\\\\\]" 0 nil)
     ("$$" "\\$\\$[^\000]*?\\$\\$" 0 nil))



[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 472 bytes --]

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Re: Inline LaTeX formulae
  2015-05-08 22:25                 ` Titus von der Malsburg
@ 2015-05-09  8:01                   ` Nicolas Goaziou
  0 siblings, 0 replies; 14+ messages in thread
From: Nicolas Goaziou @ 2015-05-09  8:01 UTC (permalink / raw)
  To: Titus von der Malsburg; +Cc: emacs-orgmode

Titus von der Malsburg <malsburg@posteo.de> writes:

> This looks indeed much nicer but it’s not what we want.  The Emacs
> documentation says:
>
>   ‘[:punct:]’
>     This matches any punctuation character. (At present, for multibyte
>     characters, it matches anything that has non-word syntax.)
>
> If this matches any non-word multibyte character, it also matches things
> like the multiplication sign along with a lot of other non-punctuation
> characters.  So if we’d use [:punct:] we would incorrectly detect a
> latex fragment in the following example:
>
>   50$=10$×5

Too bad, then. The current regexp is really ugly.

> 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.

Applied. Thank you.


Regards,

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2015-05-09  8:00 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-05-05 20:14 Inline LaTeX formulae Titus von der Malsburg
2015-05-05 20:23 ` Rasmus
2015-05-05 20:27 ` Marcin Borkowski
2015-05-05 21:32 ` Titus von der Malsburg
2015-05-05 22:56   ` Marcin Borkowski
2015-05-06 10:24   ` Rasmus
2015-05-06 20:35     ` Titus von der Malsburg
2015-05-07  7:42       ` Eric S Fraga
2015-05-07 18:00         ` Titus von der Malsburg
2015-05-07 20:00           ` Nicolas Goaziou
2015-05-08 19:52             ` Titus von der Malsburg
2015-05-08 21:40               ` Nicolas Goaziou
2015-05-08 22:25                 ` Titus von der Malsburg
2015-05-09  8:01                   ` Nicolas Goaziou

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).