18

我有一些带有 MathJax 方程的 HTML 文档,我想将它们转换为 Latex,然后转换为 pdf。我想使用 Pandoc。

但是,Pandoc 替换$\$并且\在公式中替换为\textbackslash{}.

是否可以让 Pandoc 将 MathJax 公式逐字从 HTML 传递到 Latex?

4

2 回答 2

19

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

pandoc -f html+tex_math_dollars+tex_math_single_backslash -t latex

好看多了!如果您不想转换由\(and分隔的数学\),只需执行

pandoc -f html+tex_math_dollars -t latex
于 2013-12-10T17:58:11.870 回答
10

这不是一件容易的事。这是一个应该可行的解决方案,前提是您只使用$and$$作为数学分隔符,并假设您的文档不包含$. (如果你不能假设,你可以尝试在下面调整 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 单行代码,它将您的数学位放在标记为“MATH”的特殊 HTML 注释中。第二部分将 HTML 解析为与文档对应的 Pandoc 数据结构的 JSON 表示。然后fixmath转换此结构,将特殊的 HTML 注释更改为原始 LaTeX 块和内联。(有关说明,请参阅使用 pandoc 编写脚本。)最后,我们将 JSON 转换回 LaTeX。

于 2012-07-12T21:59:08.177 回答