emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Titus von der Malsburg <malsburg@posteo.de>
To: Eric S Fraga <e.fraga@ucl.ac.uk>
Cc: emacs-orgmode@gnu.org, Rasmus <rasmus@gmx.us>
Subject: Re: Inline LaTeX formulae
Date: Thu, 07 May 2015 11:00:08 -0700	[thread overview]
Message-ID: <87vbg4gtef.fsf@posteo.de> (raw)
In-Reply-To: <87bnhwq1ez.fsf@delle7240.chemeng.ucl.ac.uk>

[-- 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 --]

  reply	other threads:[~2015-05-07 18:00 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
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 [this message]
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

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87vbg4gtef.fsf@posteo.de \
    --to=malsburg@posteo.de \
    --cc=e.fraga@ucl.ac.uk \
    --cc=emacs-orgmode@gnu.org \
    --cc=rasmus@gmx.us \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).