MathJax方程式を含むHTMLドキュメントがいくつかあり、それらをラテックスに変換してから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正規表現を調整してみてください。)
ステップ1:Haskellプラットフォームをまだインストールしていない場合はインストールし、「cabalinstallpandoc」を使用して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
最初の部分は、「MATH」とマークされた特別なHTMLコメントに数学ビットを入れるperlワンライナーです。2番目の部分では、HTMLを解析して、ドキュメントに対応するPandocデータ構造のJSON表現にします。次にfixmath
、この構造を変換し、特別なHTMLコメントを生のLaTeXブロックとインラインに変更します。(説明については、 pandocを使用したスクリプトを参照してください。)最後に、JSONからLaTeXに変換し直します。