我有一些包含MathJax公式的HTML文档,想将它们转换为Latex文档,并生成pdf文件。我想使用Pandoc实现。
但是,Pandoc会将$
替换为\$
,并将公式中的\
替换为\textbackslash{}
。
是否有可能让Pandoc直接将MathJax公式从HTML转换成Latex而不进行任何修改?
使用最新版的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 正则表达式)。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。
fixmath
与pandoc-ruby
兼容? - Daniel\(\)
分隔的数学公式?https://dev59.com/S3rZa4cB1Zd3GeqPyBRC - Daniel