如何使用Pandoc将带有MathJax的HTML转换成LaTeX?

18

我有一些包含MathJax公式的HTML文档,想将它们转换为Latex文档,并生成pdf文件。我想使用Pandoc实现。

但是,Pandoc会将$替换为\$,并将公式中的\替换为\textbackslash{}

是否有可能让Pandoc直接将MathJax公式从HTML转换成Latex而不进行任何修改?

2个回答

19

使用最新版的pandoc(1.12.2),您可以这样做:

pandoc -f html+tex_math_dollars+tex_math_single_backslash -t latex

很好!如果您不想转换由\(\)包围的数学公式,只需执行以下操作:

pandoc -f html+tex_math_dollars -t latex

10
这不是一项轻松的任务。以下解决方案应该有效,只要您在数学分隔符中仅使用 $$$,并且假设您的文档中没有其他用途的 $。 (如果不能做出这个假设,则可以尝试调整 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$1-->/gm' | \
pandoc -s --parse-raw -f html -t json | \
./fixmath | \
pandoc -f json -t latex -s > output.tex

第一部分是一个Perl单行命令,将您的数学位放在特殊的HTML注释中标记为“MATH”。第二部分解析HTML,并将其转换为Pandoc数据结构的JSON表示,该结构对应于文档。然后,fixmath转换此结构,将特殊的HTML注释更改为原始的LaTeX块和内联。 (有关说明,请参见使用Pandoc进行脚本编写。)最后,我们从JSON转换回LaTeX。


有没有办法让可执行文件 fixmathpandoc-ruby 兼容? - Daniel
Haskell脚本应该如何编写,才能不转换由\(\)分隔的数学公式?https://dev59.com/S3rZa4cB1Zd3GeqPyBRC - Daniel
1
看我的最新回答。 - John MacFarlane

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接