2011-01-25 203 views
5

我在C++/Python中有幾個代碼項目,其中使用LaTeX格式描述和標籤來生成使用LaTeX + pstricks製作的PDF文檔或圖形。但是,我們也有一些純文本輸出,比如文檔的HTML版本(我已經有了編寫最小標記的代碼)以及一個不支持TeX的劇情渲染器。以編程方式將LaTeX代碼轉換/解析爲純文本

對於這些我想要消除例如必需的TeX標記。代表物理單位。這包括非分裂(細)空格,\ text,\ mathrm等。爲了純文本輸出(和),將諸如\ frac {#1} {#2}的內容解析爲#1 /#2也很好。使用MathJax作爲HTML)。由於目前我們已經有了這個系統,我需要能夠從Python完成這項工作,例如理想情況下我正在尋找一個Python包,但是我可以從Python調用非Python可執行文件並且趕上輸出字符串也會沒事的。

我知道similar question on the TeX StackExchange site,但沒有任何真正的程序化解決方案:我已經看過detex,plasTeX和pytex,它們都顯得有點死了,並沒有真正做我所做的需要:將TeX字符串編程轉換爲代表性的純文本字符串。

我可以嘗試編寫一個基本的TeX解析器, pyparsing,但a)這可能是陷阱 - 載入和幫助將不勝感激和b)肯定有人曾嘗試過,或知道一種方法鉤入TeX本身以獲得更好的結果?

更新:感謝所有的答案......它確實似乎有點尷尬的要求!我可以用LaTeX來做一般的解析,但是在循環中考慮解析器而不是正則表達式的原因是我希望能夠很好地處理嵌套的宏和多參數宏,並獲得大括號匹配才能正常工作。然後我可以首先減少像\ text和\ mathrm這樣的txt無關宏,然後像\ frac last一樣處理txt相關的宏......甚至可以使用適當的圓括號!那麼,我可以夢想......現在正則表達式並沒有做這麼糟糕的工作。

+0

你是對的,TeX的pyparsing是一件殘酷的事情,但其他人已經取得了一些進展。 matplotlib包含一個pyparsing TeX解析器,你可以彎曲你的目的。您也可以嘗試在pyparsing郵件列表上發帖,看看過去曾經完成過TeX工作的一些人是否可以提供幫助。 – PaulMcG 2011-01-25 14:12:47

+0

請參閱http://stackoverflow.com/questions/3610551/math-in-restructuredtext-with-latex。 – 2011-01-31 21:00:04

+0

感謝:我會先看看matplotlib ...這也是我的一個軟件包的預先存在的依賴項,所以如果我非常幸運,我可以通過mpl API使用它!歡呼:) – andybuckley 2011-01-31 21:10:54

回答

1

嘗試detex(附帶最*的TeX發行),或改進的版本:http://code.google.com/p/opendetex/

編輯:哦,我看你試過DETEX了。不過,opendetex可能適合你。

+0

我以前沒有見過opendetex - 它看起來好多了,也許他們的解析器可以被連接到並擴展到在數學模式下使用命令做更多結構化的事情。謝謝。 – andybuckley 2011-01-31 21:52:51

-1

乳膠格式描述和標籤被用來生成PDF文檔或圖形使用乳膠+ pstricks

這是你的錯誤製造。你不應該這樣做。

使用RST或其他更好的標記語言。

使用Docutils從RST源創建LaTeX和HTML。

+4

感謝您的意見!然而,這並不是一個錯誤 - 該軟件用於學術物理學,我們使用LaTeX進行數學解析/渲染 - 大概有50%或更多的編碼文本是數學 - 可以無縫地使用輸出( LaTeX編寫)出版物。所以雖然我可能會同意。 RST在文本爲主的情況下,不需要對格式化進行非常詳細的控制,這種用例與此相反,LaTeX更適合於應用程序和用戶社區。用它做靈活的事情只是尷尬...... – andybuckley 2011-01-31 20:38:35

+0

@andybuckley:RST支持LaTeX數學。我用過它。我更喜歡獅身人面像的支持(http://sphinx.pocoo.org/)。看到這個相關的問題http://stackoverflow.com/questions/3610551/math-in-restructuredtext-with-latex更多有用的建議。 – 2011-01-31 20:59:43

1

正如你正在考慮使用TeX本身來進行渲染,我懷疑性能不是問題。在這種情況下,您有兩個選擇:dvi2txt從單個dvi文件中獲取文本(準備爲每個標籤生成一個文件),或者甚至將dvi轉換爲光柵圖像(如果它適合您) - 這就是hevea或latex2html對待公式。

3

請注意:對於純TeX編寫完整的解析器比您想象的要困難得多。 TeX級(而不是LaTeX)命令實際上擴展了TeX的語法。例如,\def\foo #1.{{\bf #1}}\foo goo.擴展爲goo - 請注意,點成爲foo宏的分隔符!因此,如果您必須處理的任何格式的TeX,而不限制可以使用哪些軟件包,建議不要依賴簡單的解析。你需要TeX渲染。我使用的是catdvi,雖然它不完美。

0

建立另一個帖子Eduardo Leoni,我在看pandoc,我發現它帶有一個獨立的可執行文件,但也在this page它承諾一種方法來建立一個C-callable系統庫。也許這是你可以忍受的事情?