我有一些带有MathJax方程的HTML文档,我想将它们转换为Latex,然后转换为pdf。我想用Pandoc。
但是,Pandoc将$
替换为\$
,并使用\
替换公式中的\textbackslash{}
。
是否有可能让Pandoc将MathJax公式从HTML传递到Latex?
答案 0 :(得分:13)
使用最新版本的pandoc(1.12.2),您可以这样做:
pandoc -f html+tex_math_dollars+tex_math_single_backslash -t latex
好多了!如果您不想转换由\(
和\)
分隔的数学,只需执行
pandoc -f html+tex_math_dollars -t latex
答案 1 :(得分:9)
这不是一件容易的事。如果您只使用$
和$$
作为数学分隔符,并假设您的文档不包含$
的任何其他用途,那么这是一个应该有效的解决方案。 (如果你不能假设,你可以尝试调整perl正则表达式。)
第1步:安装Haskell Platform,如果您还没有安装,请安装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 one-liner,它将您的数学位置放在标有&#34; MATH&#34;的特殊HTML注释中。第二部分将HTML解析为与文档对应的Pandoc数据结构的JSON表示。然后fixmath
转换此结构,将特殊HTML注释更改为原始LaTeX块和内联。 (有关解释,请参阅Scripting with pandoc。)最后,我们将JSON转换回LaTeX。