如何使用Pandoc将带有mathjax的HTML转换为Latex?

如何使用Pandoc将带有mathjax的HTML转换为Latex?,html,latex,mathjax,pandoc,Html,Latex,Mathjax,Pandoc,我有一些带有MathJax方程的HTML文档,我想把它们转换成Latex,然后再转换成pdf。我想用潘多克 但是,Pandoc将$替换为\$,并将公式中的\替换为\textbackslash{} 有可能让Pandoc将MathJax公式从HTML直接传递到Latex吗?这不是一项容易的任务。如果您只使用$和$$作为数学分隔符,并且假设您的文档不包含$的任何其他用法,那么这里有一个解决方案应该是可行的。(如果您不能假设这一点,可以尝试在下面的步骤中调整perl正则表达式。) 步骤1:如果您还没有安

我有一些带有MathJax方程的HTML文档,我想把它们转换成Latex,然后再转换成pdf。我想用潘多克

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


有可能让Pandoc将MathJax公式从HTML直接传递到Latex吗?

这不是一项容易的任务。如果您只使用
$
$$
作为数学分隔符,并且假设您的文档不包含
$
的任何其他用法,那么这里有一个解决方案应该是可行的。(如果您不能假设这一点,可以尝试在下面的步骤中调整perl正则表达式。)

步骤1:如果您还没有安装,请安装“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
这将为您提供一个可执行的
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
cat input.html |\
perl-0pe的/(\$\$?[^\$]+\$\$?)/\/gm'\
pandoc-s——解析raw-fhtml-tjson |\
/固定数学|\
pandoc-f json-t latex-s>output.tex

第一部分是一个perl one线性程序,它将您的数学位放入标记为“math”的特殊HTML注释中。第二部分将HTML解析为对应于文档的Pandoc数据结构的JSON表示形式。然后
fixmath
转换此结构,将特殊的HTML注释更改为原始的LaTeX块和内联线。(请参阅以获取解释。)最后,我们将JSON转换回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

是否有某种方法可以使可执行文件
fixmath
pandoc ruby
一起工作?如何编写Haskell脚本以不转换由
\(\)
分隔的数学?见我的最新答案。
pandoc -f html+tex_math_dollars -t latex