PHP-based парсер LaTeX – с чего начать?

Проект: Я хочу построить переводчик LaTeX-to-MathML в PHP. Зачем? Потому что я математик, и я хочу опубликовать математику на моем сайте Drupal. Он не должен переводить все LaTeX, так как базовый материал на уровне документа умело обрабатывается CMS и не будет написан в LaTeX для начала; он просто должен перевести математику, написанную в LaTeX, в математику, написанную в MathML. Хотя мне кажется, что я проявил должную осмотрительность, похоже, это уже не существует. Может быть, я ошибаюсь – если вы знаете что-то, что будет служить этой цели, обязательно сообщите мне об этом и заблаговременно. Но, полагая, что этого не существует, я думаю, мне нужно написать его сам.

Вот что, однако: я никогда не делал ничего такого амбициозного. Я не знаю, с чего начать. Я использовал PHP в течение многих лет, но просто для того, чтобы сделать стандартную «сборку CMS с PHP и MySQL». Я никогда не пытался ничего похожего на сложность, как перевод с одного языка на другой.

Я достаточно глупый, чтобы рассмотреть возможность делать это с регулярным выражением. В конце концов, LaTeX – гораздо более формальный язык, и он не позволяет почти виды патологических краевых случаев, как говорят, HTML. Но, с другой стороны, я достаточно умен, чтобы понять, что это, наверное, ужасная идея: теперь у меня две проблемы, и я уверен, что не хочу в конечном итоге, как этот парень .

Так что, если это не путь (правда?), Что это такое? Как мне начать думать об этой проблеме? Я, по сути, пишу компилятор LaTeX в PHP, и если да, то что мне нужно знать, чтобы сделать это (например, нужно ли мне сначала прочитать книгу « Пурпурный дракон» ?)?

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

    Не пишите парсер самостоятельно, если вы не хотите делать это как опыт обучения. Просто позвоните существующим инструментальным средствам LaTeX из PHP.

    LaTeX2HTML примерно так же хорош, как и вы, и вот (старое) описание конвертера LaTeX to MathML от сопровождающего LaTeX2HTML.

    В прошлом году я действительно поехал. У меня есть что-то работающее, хотя я бы не утверждал, что у него была какая-то элегантность или обаяние, и он не был полностью функциональным.

    Если вы хотите преобразовать уравнения в MathML, а не полное преобразование LaTeX, вы можете использовать itex2MML. Если вы можете загружать расширения в свой PHP, можно скомпилировать itex2MML с привязками PHP и использовать его изначально в скриптах. Для Makefile может потребоваться немного взлома, чтобы все конфигурации были правильными.

    Ссылки:

    • PHPLaTeX
    • itex2MML с привязками PHP

    Хорошо, этот ответ был беспорядок.

    Вот очищенная версия:

    Поскольку regex явно не сократит его для переводчика для такого типа вещей, у вас есть два варианта, основанные на ваших целях:

    1. Вы просто хотите показывать LATEX на своем сайте так или иначе.
      • Если это то, что вы хотите, для вас есть простое решение , которое проще, чем сбор передовой книги по теории компиляторов. Любой способ включить латекс на ваш сайт, существующий переводчик или что-то еще.
    2. Вы более чувствительны и хотите узнать о теории компиляторов.
      • Если это так, я не могу рекомендовать PDB достаточно высоко. Это увлекательная книга, и вы многое узнаете от нее; После первых двух глав вы узнаете достаточно о лексическом анализе для завершения этого проекта. Лучшие деньги, которые я потратил на образовательный ресурс на сегодняшний день!

    Если вы согласны с преобразованием формул в изображения, есть множество решений. Если вы хотите MathML специально, есть несколько из них . Однако вы можете рассмотреть jsMath, который использует javascript для визуализации (подмножество) LaTeX в браузере. Он используется Sage и хорошо работает там.

    Википедия использует переводчик LaTeX в HTML (или изображение), написанный в OCaml. Вы можете взять там какой-то код или просто использовать его как есть.