[-- Attachment #1: Type: text/plain, Size: 1547 bytes --] I'm experiencing incorrect and seemingly inconsistent behavior when nesting `\begin` `\end` environments inside `\(\)` or `$$`. For example, the following is valid latex code: ``` \(\begin{aligned} b_n &= \frac{1}{\pi} \int_{0}^{\pi} x \sin{\left(nx\right)}dx \\ b_0 &= 0 \\ \int_{0}^{\pi} udv &= \left[uv\right]_{0}^{\pi} - \int_{0}^{\pi} vdu \\ dv &= \sin{\left(nx\right)}dx \\ v(x) &= \int \sin{\left(nx\right)}dx \\ &= -\frac{\cos{\left(nx\right)}}{n} \\ \left[uv\right]_{0}^{\pi} &= -\left[\frac{x\cos{\left(nx\right)}}{n}\right]_{0}^{\pi} \\ &= \left\{\begin{alignedat}{2} \frac{\pi}{n}&, && \quad \text{$n$ odd} \\ -\frac{\pi}{n}&, && \quad \text{$n$ positive even} \\ \end{alignedat}\right. \\ \int_{0}^{\pi} vdu &= \int_{0}^{\pi} -\frac{\cos{\left(nx\right)}}{n} dx \\ &= -\frac{1}{n^2} \left.\sin{\left(nx\right)}\right|_{0}^{\pi} \\ &= 0 \\ b_{n\in \mathbb{Z}^+} &= \left\{\begin{alignedat}{2} \frac{1}{n}&, && \quad \text{$n$ odd} \\ -\frac{1}{n}&, && \quad \text{$n$ positive even} \\ \end{alignedat}\right. \\ \end{aligned}\) ``` But this confuses org which is generating images for the `\begin{aligned}` at the top and the `\text` macros, but nothing else. Iterations on this sometimes work fine, however. For example, ``` \(\begin{aligned} b_{n\in \mathbb{Z}^+} &= \left\{\begin{alignedat}{2} \frac{1}{n}&, && \quad \text{$n$ odd} \\ -\frac{1}{n}&, && \quad \text{$n$ positive even} \\ \end{alignedat}\right. \\ \end{aligned}\) ``` typesets correctly. Has anyone else had trouble with the latex fragment regex's? [-- Attachment #2: Type: text/html, Size: 1897 bytes --]
On Friday, 6 Dec 2019 at 11:42, Matt Huszagh wrote:
> I'm experiencing incorrect and seemingly inconsistent behavior when nesting
> `\begin` `\end` environments inside `\(\)` or `$$`. For example, the
> following is valid latex code:
The identification of LaTeX fragments is somewhat fragile (in my
experience). I would suggest you enclose complex LaTeX code fragments
within an #+begin_export latex ... #+end_export environment.
Assuming your export target is LaTeX and/or PDF.
--
Eric S Fraga via Emacs 27.0.50, Org release_9.3-34-g2eee3c
"Fraga, Eric" <e.fraga@ucl.ac.uk> writes:
> The identification of LaTeX fragments is somewhat fragile (in my
> experience). I would suggest you enclose complex LaTeX code fragments
> within an #+begin_export latex ... #+end_export environment.
>
> Assuming your export target is LaTeX and/or PDF.
Thanks for the suggestion. Unfortunately these are mostly just used as
latex previews in the org buffer. I'm going to try to improve support
for this when I get the time since I use this capability extensively. If
you have any thoughts/suggestions on best ways to improve this I'd be
happy to hear them.
"Fraga, Eric" <e.fraga@ucl.ac.uk> writes:
> The identification of LaTeX fragments is somewhat fragile (in my
> experience). I would suggest you enclose complex LaTeX code fragments
> within an #+begin_export latex ... #+end_export environment.
>
> Assuming your export target is LaTeX and/or PDF.
Changing the beginning and end regexes to the following seems to work
well (I've just added a non-capturing group for \(\) or $$ so that
begin-end blocks can be nested inside inline math environments).
(setq org-element--latex-begin-environment "^[ \t]*\\(?:\\\\(\\|\\$\\)?\\\\begin{\\([A-Za-z0-9*]+\\)}")
(setq org-element--latex-end-environment "\\\\end{%s}[ \t]*\\(?:\\\\)\\|\\$\\)?$")
I'm going to test this a bit before submitting it as a patch to make
sure it doesn't cause any issues. If you have any tricky fragments you
want to test it on please let me how it works!
[-- Attachment #1: Type: text/plain, Size: 185 bytes --] I'm submitting this as a patch. I've used it on hundreds of latex fragments over the past week or so and haven't experienced any issues (which is expected since the change is small). [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: regex-patch --] [-- Type: text/x-patch, Size: 1457 bytes --] From a699b699ed4132839c39f1152868bb13364422c7 Mon Sep 17 00:00:00 2001 From: Matt Huszagh <huszaghmatt@gmail.com> Date: Sat, 14 Dec 2019 19:54:41 -0800 Subject: [PATCH] org-element.el: allow environment blocks in math delimiters * lisp/org-element.el (org-element--latex-begin-environment): Add a non-capturing block for `\(' or `$' so that previously recognized latex environments can also appear within an inline math environment. * lisp/org-element.el (org-element--latex-end-environment): Match the begin environment noncapturing block with `$' or `\)'. --- lisp/org-element.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lisp/org-element.el b/lisp/org-element.el index 110ff5624..6d7ec32c6 100644 --- a/lisp/org-element.el +++ b/lisp/org-element.el @@ -2222,14 +2222,14 @@ containing `:key', `:value', `:begin', `:end', `:post-blank' and ;;;; Latex Environment (defconst org-element--latex-begin-environment - "^[ \t]*\\\\begin{\\([A-Za-z0-9*]+\\)}" + "^[ \t]*\\(?:\\\\(\\|\\$\\)?\\\\begin{\\([A-Za-z0-9*]+\\)}" "Regexp matching the beginning of a LaTeX environment. The environment is captured by the first group. See also `org-element--latex-end-environment'.") (defconst org-element--latex-end-environment - "\\\\end{%s}[ \t]*$" + "\\\\end{%s}[ \t]*\\(?:\\\\)\\|\\$\\)?$" "Format string matching the ending of a LaTeX environment. See also `org-element--latex-begin-environment'.") -- 2.24.0
Hello,
Matt Huszagh <huszaghmatt@gmail.com> writes:
> I'm submitting this as a patch. I've used it on hundreds of latex
> fragments over the past week or so and haven't experienced any issues
> (which is expected since the change is small).
>
> From a699b699ed4132839c39f1152868bb13364422c7 Mon Sep 17 00:00:00 2001
> From: Matt Huszagh <huszaghmatt@gmail.com>
> Date: Sat, 14 Dec 2019 19:54:41 -0800
> Subject: [PATCH] org-element.el: allow environment blocks in math delimiters
>
> * lisp/org-element.el (org-element--latex-begin-environment): Add a
> non-capturing block for `\(' or `$' so that previously recognized
> latex environments can also appear within an inline math environment.
>
> * lisp/org-element.el (org-element--latex-end-environment): Match the
> begin environment noncapturing block with `$' or `\)'.
I don't think this patch is a good idea, as it mixes elements from
different types: LaTeX fragment (inline), and LaTeX environment (block).
For example, the regexp you modify is used as a paragraph separator,
which doesn't make sense for inline LaTeX.
As a reminder, Org does not claim to support raw LaTeX syntax besides
very simple constructs. If you want to insert elaborate LaTeX code, you
can always use:
#+begin_export latex
...
#+end_export
Regards,
--
Nicolas Goaziou
Nicolas Goaziou <mail@nicolasgoaziou.fr> writes:
> I don't think this patch is a good idea, as it mixes elements from
> different types: LaTeX fragment (inline), and LaTeX environment (block).
> For example, the regexp you modify is used as a paragraph separator,
> which doesn't make sense for inline LaTeX.
No worries. Thanks for taking a look at this anyway.
Matt