2012-07-05 13 views

Odpowiedz

12

Dzięki najnowszej wersji (1.12.2) pandoc, można to zrobić:

pandoc -f html+tex_math_dollars+tex_math_single_backslash -t latex 

dużo ładniejszy! Jeśli nie chcesz przekonwertować matematyka ograniczony \( i \), zrób

pandoc -f html+tex_math_dollars -t latex 
9

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.

+0

Czy jest jakiś sposób, aby wykonywalnego 'fixmath' pracę z' pandoc-ruby'? – Daniel

+0

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

+1

Zobacz moją najnowszą odpowiedź. –

Powiązane problemy