jgm / texmath

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

docx writer: fully support for \mathop{} #194

Open ilcpm opened 2 years ago

ilcpm commented 2 years ago

I want to write \varlimsup_{n\to\infty} in markdown and convert it to word

$$\varlimsup_{n\to\infty}$$

but I got an error when I convert, I think the reason is pandoc don't know how to convert it. so I use \mathop{\overline{\lim}}, but the result is wrong

$$\mathop{\overline{\lim}}_{n\to\infty}$$

and I try \underset{n\to\infty}{\overline{\lim}}, it works

so I hope pandoc can support \mathop{} correctly

this image is an example of what I say above: image

ilcpm commented 2 years ago

in another word, \mathop{\hat{xyz}}_{abc} should works as \hat{xyz}_{abc} in inline mode, and works as \underset{abc}{\hat{xyz}} in display mode

inline mode: $$\hat{xyz}_{abc}$$ display mode: $$\underset{abc}{\hat{xyz}}$$

ilcpm commented 2 years ago

now I am using \operatorname*{\hat{xyz}}_{abc} to get the correct result, so this problem is solved

image

jgm commented 2 years ago

Let's reopen this as a texmath issue, maybe we can support mathop better.

jgm commented 2 years ago

The problem is this. In texmath's model for formulas, the MathOperator constructor takes a Text argument, not an arbitrary structured formula. So when we run into something like \mathop{\overline{\lim}}, we try to convert the formula to plain text, and this isn't always possible.

The right fix, you'd think, would be to change the type of the argument to MathOperator. However, it's tricky because we need to support multiple formats. Clearly a math operator in TeX can be just about anything, but I think in MathML the <mo> element can't contain structured equations (e.g. superscripts).

So I'm not sure at the moment what the best solution is.