jgm / texmath

A Haskell library for converting LaTeX math to MathML.
GNU General Public License v2.0
305 stars 64 forks source link

\intertext{...} from LaTeX to Typst #213

Open joshniemela opened 1 year ago

joshniemela commented 1 year ago

Currently, it isn't possible to convert aligned environments containing \intertext. Immediate solution: converting \intertext{...} to $...$ in Typst will give the intended result of intertext

Is this solution good enough or did I miss something?

jgm commented 1 year ago

The fundamental problem is that texmath's TeX reader doesn't yet support intertext. That should be added.

joshniemela commented 1 year ago

Is this perhaps something I could try to implement?

jgm commented 1 year ago

Maybe! First step would be figuring out how to represent intertext in our AST; second step would be implementing it in the parser (src/Text/TeXMath/Readers/TeX.hs)

This is how we currently represent aligned environments:

% texmath -t native
\begin{align}
x &= y \\
1 &= 2
\end{align}
^D
[ EArray
    [ AlignRight , AlignLeft ]
    [ [ [ EIdentifier "x" ] , [ ESymbol Rel "=" , EIdentifier "y" ] ]
    , [ [ ENumber "1" ] , [ ESymbol Rel "=" , ENumber "2" ] ]
    ]
]

As you can see, there's no dedicated construction for aligned equations (which is maybe a problem, see #209). We just use an array. This makes it hard to see how we'd support intertext.

Enivex commented 7 months ago

To me it seems natural that intertext would just split the equation environment into two parts. Sure the alignment would be off, but at least the text would be there. As in

\begin{align*}
    Math part 1
    \intertext{Some text}
    Math part 2}
\end{align*}

gets treated as

\begin{align*}
    Math part 1
\end{align*}
Some text
\begin{align*}
    Math part 2}
\end{align*}
jgm commented 7 months ago

@Enivex yes that's a good idea and it should be feasible.

10decikelvin commented 1 week ago

In the meantime, I've made a hacky solution based on the amazing work by @jorsn on this other github issue that somewhat implements the functionality of \intertext{}.

Demo

What this does

Known issues

This is only a temp fix, and I really hope the typst devs pay attention to this issue and fix it soon once and for all.