To niełatwe zadanie. Oto rozwiązanie, które powinno działać, pod warunkiem, że używasz tylko $
i $$
jako ograniczników matematycznych i zakładając, że twój dokument nie zawiera żadnych innych zastosowań $
. (Jeśli nie możesz tego założyć, spróbuj dopasować wyrażenie regularne w poniższym przykładzie).
Krok 1: Zainstaluj Haskell Platform, jeśli go już nie masz, i "cabal install pandoc", aby uzyskać biblioteka pandoc. (Jeśli zainstalowany pandoc z instalatora binarnego, tylko masz plik wykonywalny, a nie biblioteką Haskell.)
Krok 2: Teraz napisać mały skrypt Haskell - będziemy nazywać 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
Kompilacja to:
ghc --make fixmath.hs
to daje wykonywalny fixmath
. Teraz, zakładając, że plik wejściowy jest input.html
następujące polecenie należy przekonwertować go na lateks z matematyki nienaruszonym, umieszczając wynik w 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
Pierwsza część jest Perl jedno-liner, który stawia swoje bity matematycznych w specjalne komentarze HTML oznaczone "MATH". Druga część analizuje kod HTML w reprezentacji JSON struktury danych Pandoc odpowiadającej dokumentowi. Następnie fixmath
przekształca tę strukturę, zmieniając specjalne komentarze HTML w surowe bloki LaTeX i inlines. (Aby uzyskać wyjaśnienie, patrz: Scripting with pandoc.) Na koniec przeliczamy z JSON z powrotem na LaTeX.
Czy jest jakiś sposób, aby wykonywalnego 'fixmath' pracę z' pandoc-ruby'? – Daniel
A jak napisać skrypt Haskella, aby nie konwertować matematyki, która jest ograniczona przez '\ (\)'? http://stackoverflow.com/questions/20492982/convert-html-and-inline-mathjax-math-to-latex-with-pandoc-ruby – Daniel
Zobacz moją najnowszą odpowiedź. –