Преобразование MathML в LaTeX

Я пытаюсь понять, как преобразовать представление MathML математического уравнения и преобразовать его в представление LaTeX этого математического уравнения. Так, например...

<math>
  <mrow>
    <mfrac>
      <mrow><mi>x</mi></mrow>
      <mrow><mi>y</mi></mrow>
    </mfrac>
  </mrow>
</math>

... представляет собой простую сложную фракцию, и представление LaTeX будет...

\frac{x}{y}

Я уверен, что MathML не имеет презентационной разметки, потому что я строю строку MathML динамически, и я контролирую, как/где вставляются элементы MathML; строка MathML является просто чистой структурой математического уравнения.

Итак, мой вопрос: существуют ли там библиотеки Java/JavaScript, которые могут принимать входную строку MathML, как и выше, и генерировать соответствующую строку LaTeX? Я бы скорее не стал сам писать этот парсер. Если не Java/JavaScript, это какие-то библиотеки, которые могут это сделать?

Если нет, какие-либо предложения о том, как подойти к этой проблеме написания моего собственного парсера? С чего начать, что нужно учитывать, ресурсы и т.д.?

UPDATE

Благодаря Optimal Cynic, я смог использовать эту библиотеку Java делать то, что я хочу. Однако это не идеально, но я могу легко изменить его и сделать его работоспособным. Тем не менее, мне все равно хотелось бы, чтобы это было сделано в JavaScript. Так есть ли такие инструменты, как это написано на JavaScript? Если нет, я прибегну к его переводу.

Примечание. Я использую MathJax, чтобы отобразить MathML на странице, но MathJax в настоящее время не поддерживает способ перехода от MathML в LaTeX. Это может быть только переход от LaTeX к MathML.

Ответ 2

Что не так с синтаксическими анализаторами XSLT, SAX или DOM?

Привязки для SAX и DOM-парсеров существуют для всех основных языков (и почти всех других языков). Я бы порекомендовал DOM-анализ с использованием функционального языка, но вкусы разные.

XSLT - это функциональный язык, предназначенный для обработки XML.

Ответ 3

У меня была аналогичная проблема, и mathparser, предоставленный в url из вопроса, не работал у меня вообще.

Я преобразовал MathML в LaTeX, используя XSLT MathML Library с Saxon- HE, но так как библиотека XSLT MathML - это чистый XSLT, любой инструмент преобразования XSLT должен ее обработать. Выход не всегда идеален, но он дал мне лучшие результаты, чем web-xslt, упомянутый где-то в сети stackexchange.

Использование командной строки с саксоном:

saxon -o output.tex input.mml xsltml_2.1.2/mmltex.xsl