Подтвердить что ты не робот

Как преобразовать HTML с mathjax в латекс с помощью pandoc?

У меня есть HTML-документы с уравнениями MathJax, и я хочу преобразовать их в латекс, а затем в pdf. Я хотел бы использовать pandoc.

Однако pandoc заменяет $ на \$ и заменяет \ в формулах с помощью \textbackslash{}.

Можно ли заставить pandoc передавать формулы Mathjax буквально из html в латекс?

4b9b3361

Ответ 1

С последней версией pandoc (1.12.2) вы можете сделать это:

pandoc -f html+tex_math_dollars+tex_math_single_backslash -t latex

Гораздо приятнее! Если вы не хотите преобразовывать математику с разделителями \( и \), просто выполните

pandoc -f html+tex_math_dollars -t latex

Ответ 2

Это непростая задача. Вот решение, которое должно работать, при условии, что вы используете только $ и $$ в качестве разделителей математики и считаете, что ваш документ не содержит других видов использования $. (Если вы не можете этого догадаться, вы можете попробовать отрегулировать регулярное выражение perl в дальнейшем).

Шаг 1: установите Haskell Platform, если у вас его еще нет, и 'cabal install pandoc', чтобы получить библиотеку pandoc, (Если вы установили pandoc с двоичным установщиком, у вас будет только исполняемый файл, а не библиотека Haskell.)

Шаг 2: Теперь напишите небольшой Haskell script - мы назовем его fixmath.hs:

import Text.Pandoc

main = toJsonFilter fixmath

fixmath :: Block -> Block
fixmath = bottomUp fixmathBlock . bottomUp fixmathInline

fixmathInline :: Inline -> Inline
fixmathInline (RawInline "html" ('<':'!':'-':'-':'M':'A':'T':'H':xs)) =
  RawInline "tex" $ take (length xs - 3) xs
fixmathInline x = x

fixmathBlock :: Block -> Block
fixmathBlock (RawBlock "html" ('<':'!':'-':'-':'M':'A':'T':'H':xs)) =
  RawBlock "tex" $ take (length xs - 3) xs
fixmathBlock x = x

Скомпилируйте это:

ghc --make fixmath.hs

Это даст вам исполняемый файл fixmath. Теперь, если ваш входной файл input.html, следующая команда должна преобразовать его в латекс с неповрежденной математикой, положив результат в output.html:

cat input.html | \
perl -0pe 's/(\$\$?[^\$]+\$\$?)/\<!--MATH$1-->/gm' | \
pandoc -s --parse-raw -f html -t json | \
./fixmath | \
pandoc -f json -t latex -s > output.tex

Первая часть - это однострочный perl-вкладыш, который помещает ваши математические биты в специальные комментарии HTML с надписью "MATH". Вторая часть анализирует HTML в представлении JSON структуры данных Pandoc, соответствующей документу. Затем fixmath преобразует эту структуру, меняя специальные комментарии HTML на необработанные блоки LaTeX и встроенные строки. (См. Сценарии с pandoc для объяснения.) Наконец, мы конвертируем из JSON обратно в LaTeX.