2012-04-08 30 views
7

表面上,一個簡單的問題是:如何從我的XML文檔中獲得美觀的PDF?實際上,我的輸入是XHTML的一個子集,添加了一些自定義屬性(以節省關於引用源的一些信息等)。我一直在探索一些路線,並希望得到一些反饋,如果有人曾嘗試過這一點之前。XML to TeX或如何從類似XHTML的源代碼獲取漂亮的PDF

注意:我已經考慮過XSL-FO來生成PDF,但聽說開源工具的印刷質量仍然落後於TeX。猜猜最先進的是Apache FOP。但我真的很感興趣,看起來很漂亮的PDF(否則我可以使用我的瀏覽器的打印對話框)。任何想法,這個更新?

所以我一直在考慮使用XSLT將我自定義的XML/XHTML方言轉換爲DocBook,並從那裏開始(DocBook via XSLT到正確的HTML似乎工作得很好,所以我也可以使用它)。但我該如何從DocBook轉到TeX?我遇到了很多解決方案。

  • dblatex一組輸出LaTeX的XSLT樣式表。
  • db2latex作爲dblatex的克隆開始使用,但現在提供了與LaTex包的更緊密集成,並提供了一個用於輸出PDF的單一腳本,這非常好。
  • passiveTex代替XSLT它使用TeX編寫的XML解析器。
  • TeXML本質上是一個LaTeX語言的XML序列化,可以用作中間格式和附帶的python工具,該工具從該XML格式轉換爲LaTeX/ConTeXt。它們可以避免現有解決方案的特殊符號問題,失去一些大括號或空格,並且只支持拉丁-1編碼。 (這是否仍然如此?)

由於我的輸入XML可能包含相當多的用Unicode表示的特殊字符,所以最後一點對我來說尤其重要。我也一直在考慮使用XeTeX而不是pdfTeX來解決這個問題。 (儘管我可能會失去一些印刷質量,但可能仍然比當前的開源XSL-FO處理器更好)。因此,db2latex和TeXML似乎是最受歡迎的。那麼有人可以評論這些的健壯性嗎?

另外,我可能有更多的運氣直接使用ConTeXt,因爲似乎有相當一些interest in the ConTeXt community in XML。特別是,我可以深入瞭解"My Way: Getting Web Content and pdf-Output from One Source""Dealing with XML in ConTeXt MkIV"。這兩份文件都描述了使用ConTeXt與LuaTeX結合的方法。 (DocBook In ConTeXt似乎做差不多的,但最新的版本是自2003年),第二份文件說明:

你可能想知道爲什麼我們在做這些TEX操作,而不是使用XSLT來代替。集成方法的優勢在於簡化了使用。不僅要考慮處理文檔 ,還要使用xml來管理同一運行中的資源。一種xslt 方法同樣冗長(畢竟,您仍然需要生成TEX代碼),並且可能不太可讀。在MkIV的情況下,集成的方法也更快,並且使我們能夠在運行時使用Lua來操作內容的選項 。

您對此有何看法?請記住,我對XSLT和TeX都有一定的經驗,但從未深入其中。從未嘗試過許多不同的LaTeX的包或替代品,如上下文(或經XeTEX/LuaTEX等程序,而不是pdfTeX的),但我很願意學習一些新的東西,讓我的美麗PDF文件到底;)

另外,我絆了Pandoc但找不到與其他方法相比的任何信息。最後,鏈接到一些關於how to use TeXML with ConTeXt的大量文檔。

+0

這個問題似乎更適合http://tex.stackexchange.com/ – 2014-10-02 19:28:53

+0

@DaveJarvis我明確尋找TeX的替代品。 – mb21 2014-10-02 20:08:08

+0

啊,這不是什麼東西。理想情況下,一個Web服務。上傳一份包裝好的docbook,拿出一張漂亮的,校對出版的單一文檔;) – 2016-08-01 12:37:21

回答

1

最後,我決定去與Pandoc,似乎是非常拋光和堅實的基礎代碼。一個潛在的缺點是,你必須限制Pandoc內部表示中可用的標記功能的數量,該功能基本上與其extended markdown一一對應。

因爲我不認爲從我的類似XHTML的源生成降價是一個好主意,所以我成功地創建了一個pandoc component that reads DocBook,它目前在Pandoc開發回購的主分支中。所以現在我有一個簡單的XSLT樣式表,它可以從我的XHTML方言轉換爲DocBook(也是XML),然後我使用Pandoc導出爲其他格式的提升,包括通過ConTeXt提供的PDF。

1

你可能要檢查questions tagged with XML on TeX.sx,尤其是this之一。我建議你使用ConTeXt;目前的版本沒有Unicode的問題,並且可以完美地處理OpenType,而且它可以在Lua中編程。 LaTeX最常用的替代方案是XMLTeX,但這需要很多TeX foo。

如果你的文件可以通過pandoc處理,使用:您將有多種輸出選擇,比任何基於TeX的系統了。

+0

感謝您的反饋!我仔細研究了pandoc,看起來很有前景。輸出格式的數量將是一個巨大的優勢。但對於腳註等,我可能需要編寫一些XSLT(或其他)來使我的XHTML方言變爲pandoc的擴展Markdown,這似乎是一個巨大的生成痛苦(例如表格)。 – mb21 2012-04-09 11:22:52

+0

所以也許我應該直接用ConTeXt解析。爲我想要的其他輸出格式獲取一些XSLT樣式表。不能相信有沒有一個標準的格式有很多強大的樣式表從..: - /我曾經認爲DocBook應該是這樣,但也許不是。 – mb21 2012-04-09 11:25:17

2

我做了這樣的事情在過去的(即保持在XML文檔中的主版本,並希望從他們身上產生LaTeX的輸出)。

我用PassiveTeX過去,但我發現創建樣式表是艱苦的工作 - 在一次寫作兩種語言的通常的結果。我得到它的工作,結果看起來非常好,但它可能比它的價值更多的努力。也就是說,如果你需要添加的樣式量是,那麼這可能是一個很好的路線,因爲它是一個單一的步驟。

最成功的路徑(讀取,靈活和有吸引力)是使用XSLT將文檔轉換爲結構化的LaTeX,該結構與結果文檔的預期結構相匹配,但不會嘗試做最基本的格式化。根據你的文檔,這可能是看起來很正常的LaTeX,或者它可能有定製的結構。然後編寫或修改LaTeX樣式表或類文件,將輸出格式化爲有吸引力的內容。這樣,您就可以使用XSLT來發揮自己的優勢(並且不會超越它們,這很快就會令人沮喪),使用LaTeX的優勢,而不會讓自己感到困惑。

也就是說,這或多或少地符合前兩種選擇的方法,無論您是否願意與它們一起使用,或者使用定製輸出來編寫/定製LaTeX樣式表,這都是您使用LaTeX時感覺如何的一種功能樣式表,以及需要做多少複雜或專門的格式。

既然你說你需要輸入處理Unicode字符,那麼,XeLaTeX將是管道的一部分LaTeX的一個不錯的選擇。