2012-07-05 13 views
12

मेरे पास मैथजेक्स समीकरणों के साथ कुछ HTML दस्तावेज़ हैं, और मैं उन्हें लेटेक्स में परिवर्तित करना चाहता हूं, और फिर पीडीएफ में बदलना चाहता हूं। मैं पैंडोक का उपयोग करना चाहता हूं।पैडोक का उपयोग कर लेटेक्स में एचटीएमएल के साथ एचटीएमएल को कैसे परिवर्तित करें?

हालांकि, pandoc \$ साथ $ बदल देता है और यह \textbackslash{} साथ सूत्रों में \ बदल देता है।

क्या मैथजैक्स सूत्रों को सचमुच एचटीएमएल से लेटेक्स तक पारित करने के लिए पैंडोक प्राप्त करना संभव है?

उत्तर

12
pandoc का नवीनतम संस्करण (1.12.2) के साथ

, तो आप ऐसा कर सकते हैं:

pandoc -f html+tex_math_dollars+tex_math_single_backslash -t latex 

बहुत अच्छे! आप कन्वर्ट करने के लिए गणित \( और \) से सीमांकित नहीं करना चाहते हैं, बस

pandoc -f html+tex_math_dollars -t latex 
9

यह एक आसान काम नहीं है। यहां एक समाधान है जो काम करना चाहिए, बशर्ते आप केवल $ और $$ गणित delimiters के रूप में उपयोग करें, और यह मानते हुए कि आपके दस्तावेज़ में $ का कोई अन्य उपयोग नहीं है। (यदि आप इसे नहीं मान सकते हैं, तो आप निम्न में पेर्ल रेगेक्स को एडजस्ट करने का प्रयास कर सकते हैं।)

चरण 1: Haskell Platform इंस्टॉल करें, यदि आपके पास पहले से नहीं है, और 'कैबल इंस्टॉल पैंडोक' प्राप्त करने के लिए पैडोक पुस्तकालय (आप द्विआधारी इंस्टालर के साथ pandoc स्थापित हैं, तो आप केवल निष्पादन योग्य नहीं हास्केल पुस्तकालय है,।)

चरण 2: अब एक छोटा सा हास्केल स्क्रिप्ट लिखने - हम इसे फोन करता हूँ 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 

इस संकलित करें:

ghc --make fixmath.hs 

यह आपको एक निष्पादन fixmath दे देंगे। अब, अपने इनपुट फ़ाइल संभालने input.html है, निम्न आदेश गणित बरकरार साथ लेटेक्स से परिवर्तित करना चाहिए, 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 

पहले भाग में एक पर्ल एक लाइनर कि में अपने गणित बिट्स डालता है विशेष HTML टिप्पणियां "MATH" चिह्नित की गईं। दूसरा भाग एचटीएमएल को दस्तावेज़ के अनुरूप पांडोक डेटा संरचना के JSON प्रतिनिधित्व में पार्स करता है। फिर fixmath इस संरचना को बदलता है, विशेष HTML टिप्पणियों को कच्चे लाटेक्स ब्लॉक और इनलाइन में बदलता है। (स्पष्टीकरण के लिए Scripting with pandoc देखें।) अंततः हम JSON से वापस लाटेक्स में कनवर्ट करते हैं।

+0

कर वहाँ 'pandoc-ruby' के साथ निष्पादन योग्य' fixmath' काम करने के लिए कुछ रास्ता नहीं है? – Daniel

+0

और '\ (\) 'द्वारा सीमित गणित को परिवर्तित करने के लिए हास्केल स्क्रिप्ट को कैसे लिखा जाना चाहिए? http://stackoverflow.com/questions/20492982/convert-html-and-inline-mathjax-math-to-latex-with-pandoc-ruby – Daniel

+1

मेरा नवीनतम उत्तर देखें। –