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

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

Однако Pandoc заменяет $ на \$ и заменяет \ в формулах на \textbackslash{}.

Можно ли заставить Pandoc передавать формулы MathJax буквально из HTML в Latex?


person Jeromy Anglim    schedule 05.07.2012    source источник


Ответы (2)


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

pandoc -f html+tex_math_dollars+tex_math_single_backslash -t latex

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

pandoc -f html+tex_math_dollars -t latex
person John MacFarlane    schedule 10.12.2013

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

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

Шаг 2: Теперь напишите небольшой скрипт на Haskell - назовем его 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.

person John MacFarlane    schedule 12.07.2012
comment
Есть ли способ заставить исполняемый файл fixmath работать с pandoc-ruby? - person Daniel; 10.12.2013
comment
И как следует написать сценарий Haskell, чтобы не преобразовывать математические выражения, разделенные \(\)? stackoverflow.com/questions/20492982/ - person Daniel; 10.12.2013
comment
Смотрите мой последний ответ. - person John MacFarlane; 10.12.2013