Как конвертировать HTML с mathjax в Latex с помощью Pandoc?

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

однако Pandoc заменяет $ с $ и он заменяет в смеси с textbackslash{}.

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

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

это непростая задача. Вот решение, которое должно работать, если вы используете только $ и $$ как математические разделители и предполагая, что ваш документ не содержит никаких других применений $. (Если вы не можете этого предположить,вы можете попробовать настроить регулярное выражение 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, следующая команда должна преобразовать его в latex с математикой неповрежденной, поместив результат в output.html:

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

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