From mboxrd@z Thu Jan 1 00:00:00 1970 From: Titus von der Malsburg Subject: Re: Inline LaTeX formulae Date: Fri, 08 May 2015 15:25:06 -0700 Message-ID: <87sib6r9kt.fsf@posteo.de> References: <876186zsrc.fsf@posteo.de> <874mnqzp4t.fsf@posteo.de> <87wq0mc8bc.fsf@gmx.us> <87vbg5xx4z.fsf@posteo.de> <87bnhwq1ez.fsf@delle7240.chemeng.ucl.ac.uk> <87vbg4gtef.fsf@posteo.de> <87egmsi2ex.fsf@nicolasgoaziou.fr> <87twvmkfsu.fsf@posteo.de> <87vbg2ycgv.fsf@nicolasgoaziou.fr> Mime-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha1; protocol="application/pgp-signature" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:49926) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Yqqhq-00005N-VA for emacs-orgmode@gnu.org; Fri, 08 May 2015 18:25:20 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Yqqhn-0003Sl-O0 for emacs-orgmode@gnu.org; Fri, 08 May 2015 18:25:18 -0400 Received: from mx02.posteo.de ([89.146.194.165]:56437) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Yqqhn-0003Nr-FP for emacs-orgmode@gnu.org; Fri, 08 May 2015 18:25:15 -0400 In-reply-to: <87vbg2ycgv.fsf@nicolasgoaziou.fr> List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Nicolas Goaziou Cc: emacs-orgmode@gnu.org --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On 2015-05-08 Fri 14:40, Nicolas Goaziou wrote: > Titus von der Malsburg writes: > >> Both are fixed in the patch below. > > Thank you. > >> I also included opening parentheses. It=E2=80=99s an unlikely case but f= or >> 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=E2=80=99s not what we want. The Emacs documentation says: =E2=80=98[:punct:]=E2=80=99 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=E2=80=99d use [:punct:] we would incorrectly detect a latex fragment in the following example: 50$=3D10$=C3=975 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=E2=80=99t 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 =2D-- a/doc/org.texi +++ b/doc/org.texi @@ -10347,9 +10347,10 @@ Text within the usual @LaTeX{} math delimiters. T= o 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, =2Dand if the closing @samp{$} is followed by whitespace, punctuation or a = dash. =2DFor the other delimiters, there is no such restriction, so when in doubt= , use =2D@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 =20 @noindent For example: diff --git a/lisp/org-element.el b/lisp/org-element.el index 7aab9f6..8f57c90 100644 =2D-- a/lisp/org-element.el +++ b/lisp/org-element.el @@ -2963,7 +2963,7 @@ Assume point is at the beginning of the LaTeX fragmen= t." (search-forward "$" nil t 2) (not (memq (char-before (match-beginning 0)) '(?\s ?\t ?\n ?, ?.))) =2D (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 =2D-- 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 =2D ("$1" "\\([^$]\\|^\\)\\(\\$[^ \r\n,;.$]\\$\\)\\([- .,?;:'\")\000]\= \|$\\)" 2 nil) =2D ("$" "\\([^$]\\|^\\)\\(\\(\\$\\([^ \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)) --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQEcBAEBAgAGBQJVTTfCAAoJEK40WfPGE2idqlQIAJFTtZY43LDNPGklmpTSqhVl AozzLBQCy1WVLXvg9xsAWAOvqn4pSOQAelou18p90hl8eifiODlIrTI2B+wfunkV Qdc8e4igmZkUJV4TXA5hjc++5DH/pwukTy/qosu4GqAedqjYAnskdlqp4xLc3X0t iO/CVmSlagyUZFnQhe4nmMOuattXRbI2wr1f2ypb6Z3JPj3wta0zmeZZisWf7m67 mcZW4gvQ1TMZu/Hi8gvxUId09lHHlMl4Ot4StM3le5VDUsv2wo0Ow0T7F3696uwc 8uOpV5v7u0VrKRAlzYAMnV590QAn7Pgup9uc44VkLBOYmh2PlXamKhRdxcH49Dg= =Sz3y -----END PGP SIGNATURE----- --=-=-=--