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