2012-07-05 53 views
12

Tôi có một số tài liệu HTML với phương trình MathJax và tôi muốn chuyển đổi chúng thành latex, rồi chuyển sang pdf. Tôi muốn sử dụng pandoc.Làm thế nào để chuyển đổi HTML với mathjax thành latex bằng cách sử dụng pandoc?

Tuy nhiên, pandoc thay thế $ bằng \$ và thay thế \ trong công thức bằng \textbackslash{}.

Có thể lấy pandoc để chuyển các công thức Mathjax theo nghĩa đen từ html sang latex không?

Trả lời

12

Với phiên bản mới nhất của pandoc (1.12.2), bạn có thể làm điều này:

pandoc -f html+tex_math_dollars+tex_math_single_backslash -t latex 

Phần lớn đẹp hơn! Nếu bạn không muốn chuyển đổi toán giới hạn bởi \(\), chỉ cần làm

pandoc -f html+tex_math_dollars -t latex 
9

Đây không phải là một nhiệm vụ dễ dàng. Đây là giải pháp có hiệu quả, miễn là bạn chỉ sử dụng $$$ làm dấu phân cách toán học và giả sử tài liệu của bạn không chứa bất kỳ cách sử dụng nào khác là $. (Nếu bạn không thể giả định rằng, bạn có thể thử điều chỉnh regex perl trong những gì sau.)

Bước 1: Cài đặt Haskell Platform, nếu bạn chưa có, và 'cabal install pandoc' để có được thư viện pandoc. (Nếu bạn cài đặt pandoc với trình cài đặt nhị phân, bạn chỉ có thực thi, không phải là thư viện Haskell.)

Bước 2: Bây giờ viết một kịch bản nhỏ Haskell - chúng tôi sẽ gọi nó là 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 

Biên dịch này:

ghc --make fixmath.hs 

này sẽ cung cấp cho bạn một thực thi fixmath. Bây giờ, giả sử tập tin đầu vào của bạn là input.html, lệnh sau đây cần chuyển đổi nó với latex với toán học còn nguyên vẹn, đặt kết quả trong 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 

Phần đầu tiên là một perl one-liner mà đặt bit toán học của bạn trong các nhận xét HTML đặc biệt được đánh dấu "MATH". Phần thứ hai phân tích cú pháp HTML thành một biểu diễn JSON của cấu trúc dữ liệu Pandoc tương ứng với tài liệu. Sau đó, fixmath chuyển đổi cấu trúc này, thay đổi các nhận xét HTML đặc biệt thành các khối LaTeX thô và inline. (Xem Scripting with pandoc để được giải thích.) Cuối cùng, chúng tôi chuyển đổi từ JSON trở lại LaTeX.

+0

Có một số cách để làm cho 'tác fixmath' thực thi với' pandoc-ruby'? – Daniel

+0

Và kịch bản lệnh Haskell được viết như thế nào để không chuyển đổi toán học được phân cách bởi '\ (\)'? http://stackoverflow.com/questions/20492982/convert-html-and-inline-mathjax-math-to-latex-with-pandoc-ruby – Daniel

+1

Xem câu trả lời mới nhất của tôi. –

Các vấn đề liên quan