2012-07-05 12 views
12

Tengo algunos documentos HTML con ecuaciones MathJax, y quiero convertirlos a látex, y luego a PDF. Me gustaría usar Pandoc.¿Cómo convertir HTML con mathjax en látex usando pandoc?

Sin embargo, Pandoc reemplaza $ con \$ y se reemplaza \ en fórmulas con \textbackslash{}.

¿Es posible hacer que pandoc pase las fórmulas de Mathjax literalmente de html a latex?

Respuesta

12

Con la última versión de Pandoc (1.12.2), se puede hacer esto:

pandoc -f html+tex_math_dollars+tex_math_single_backslash -t latex 

Mucho mejor! Si no desea convertir matemáticas delimitada por \( y \), simplemente

pandoc -f html+tex_math_dollars -t latex 
9

No es una tarea fácil. Aquí hay una solución que debería funcionar, siempre que solo use $ y $$ como delimitadores matemáticos, y suponiendo que su documento no contiene ningún otro uso de $. (Si no puede suponer eso, puede intentar ajustar la perl regex en lo que sigue.)

Paso 1: Instale Haskell Platform, si no lo tiene ya, y 'cabal install pandoc' para obtener el biblioteca pandoc. (Si ha instalado Pandoc con el instalador binario, es suficiente con el ejecutable, no la biblioteca de Haskell.)

Paso 2: Ahora escribir un pequeño script de Haskell - lo llamaremos 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 

compilar este:

ghc --make fixmath.hs 

esto le dará un ejecutable fixmath. Ahora, suponiendo que el archivo de entrada es input.html, el siguiente comando debe convertirlo al látex con las matemáticas intacta, poniendo el resultado en 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 primera parte es un perl de una sola línea que pone sus bits de matemáticas en comentarios especiales de HTML marcados como "MATH". La segunda parte analiza el HTML en una representación JSON de la estructura de datos de Pandoc correspondiente al documento. Luego, fixmath transforma esta estructura, cambiando los comentarios especiales de HTML en bloques LaTeX sin formato y en línea. (Consulte el Scripting with pandoc para obtener una explicación.) Finalmente, convertimos de JSON a LaTeX.

+0

¿Hay alguna manera de hacer el ejecutable '' trabajo fixmath' con Pandoc-ruby'? – Daniel

+0

¿Y cómo debe escribirse el script de Haskell para no convertir matemática que está delimitada por '\ (\)'? http://stackoverflow.com/questions/20492982/convert-html-and-inline-mathjax-math-to-latex-with-pandoc-ruby – Daniel

+1

Vea mi última respuesta. –

Cuestiones relacionadas