HaskellにPandoc JSON filterと書いてあります。これは、LaTeXの表示を外部アプリケーションでSVGに変換するはずですが、インラインLaTeXの数値は内部でpandoc
によってMathMLに変換する必要があります。デフォルトのMathML変換を模倣したPandocフィルタ
最初のSVGビットが正常に動作しています。それは私に問題を与えている標準pandoc
の動作を模倣すべきMathMLビットです。
Hackageを参照すると、the texMathToMathML
code example(下記参照)が見つかりました。この関数はEither String Element
を返します。
しかし、私が必要とするものはを返す関数tex2mml
(下記参照)です。 これを達成するために、何をtex2mml
の定義に追加する必要がありますか?
tex2mml latex = texMathToMathML DisplayInline latex
私がインストールされ、次のpandoc 1.16.0.2
のパッケージで(X)UbuntuのLTS 16.04上でこれをやっている:ここで
$ sudo apt install pandoc libghc-pandoc-prof
私がこれまでに得たものの抜粋です。
#!/usr/bin/env runhaskell
import Text.Pandoc.JSON
import Control.Applicative ((<$>))
import Text.TeXMath (writeMathML, readTeX, DisplayType(DisplayInline))
import Text.XML.Light (Element)
texMathToMathML :: DisplayType -> String -> Either String Element
texMathToMathML dt s = writeMathML dt <$> readTeX s
tex2mml :: String -> IO String
tex2mml latex = texMathToMathML DisplayInline latex
main :: IO()
main = toJSONFilter tex2math
where tex2math (Math (DisplayMath) latex) = do
svg <- tex2svg latex
return (Math (DisplayMath) (svg))
tex2math (Math (InlineMath) latex) = do
mml <- tex2mml latex
return (Math (InlineMath) (mml))
tex2math other = return other
私は絶対的なハスケルの初心者ですので、私と一緒にいてください。 コードの改善のための提案は歓迎されます。
"問題を引き起こしている標準的なpandocの動作を模倣するのはMathMLビットです。" - >それをそのまま残して、フィルタを実行した後にPandocに処理させてみませんか? –
@SergioCorreia MathJaxを使ってSVGを生成するには、 '--mathml'ではなく' --jsmath'で 'pandoc'を実行します。 –
@SergioCorreia私は二重チェックしました。確かに、 'pandoc'は、[' ToJSONFilter'](https://hackage.haskell.org/package/pandoc-pandoc-pandroid.php)を公開するために、その[数学変換](http://pandoc.org/MANUAL.html#math)_prior_を実行します。 types-1.16.1.1/docs/Text-Pandoc-JSON.html)。私が知る限り、以下の解決策がそこに到達する唯一の方法です。 –