Đâ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 $
và $$
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.
Nguồn
2012-07-12 21:59:08
Có một số cách để làm cho 'tác fixmath' thực thi với' pandoc-ruby'? – Daniel
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
Xem câu trả lời mới nhất của tôi. –