2012-07-05 9 views
12

Ho alcuni documenti HTML con equazioni di MathJax e voglio convertirli in lattice e poi in pdf. Mi piacerebbe usare pandoc.Come convertire HTML con mathjax in latex usando pandoc?

Tuttavia, Pandoc sostituisce $ con \$ e sostituisce \ in formule con \textbackslash{}.

È possibile ottenere pandoc per passare letteralmente le formule Mathjax da html a latex?

risposta

12

Con l'ultima versione di Pandoc (1.12.2), si può fare questo:

pandoc -f html+tex_math_dollars+tex_math_single_backslash -t latex 

Molto più bello! Se non si desidera convertire la matematica delimitato da \( e \), solo che

pandoc -f html+tex_math_dollars -t latex 
9

Non è un compito facile. Ecco una soluzione che dovrebbe funzionare, purché si utilizzi solo $ e $$ come delimitatori matematici e si presuma che il documento non contenga altri usi di $. (Se non si può presumere che, si può provare a regolare l'espressione regolare perl nel seguito.)

Fase 1: Installare il Haskell Platform, se non lo avete già fatto, e 'cabala installare Pandoc' per ottenere il libreria pandoc. (Se è stato installato Pandoc con il programma di installazione binario, avete solo l'eseguibile, non la libreria Haskell.)

Fase 2: Ora scrivere un piccolo script Haskell - la chiameremo 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 

compilare questo:

ghc --make fixmath.hs 

questo vi darà un eseguibile fixmath. Ora, supponendo che il file di input è input.html, il seguente comando dovrebbe convertirlo in lattice con la matematica intatta, ponendo il risultato in 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 

La prima parte è un one-liner perl che mette le vostre punte di matematica in commenti HTML speciali contrassegnati con "MATH". La seconda parte analizza l'HTML in una rappresentazione JSON della struttura di dati Pandoc corrispondente al documento. Quindi fixmath trasforma questa struttura, modificando i commenti HTML speciali in blocchi e inline LaTeX non elaborati. (Vedi Scripting with pandoc per una spiegazione.) Infine convertiamo da JSON a LaTeX.

+0

C'è qualche modo per rendere eseguibile 'lavoro fixmath' con' Pandoc-ruby'? – Daniel

+0

E come dovrebbe essere scritto lo script Haskell per non convertire la matematica che è delimitata da '\ (\)'? http://stackoverflow.com/questions/20492982/convert-html-and-inline-mathjax-math-to-latex-with-pandoc-ruby – Daniel

+1

Vedere la mia ultima risposta. –

Problemi correlati