如何評價 upTeX?

TeX memo ― upTeX


upTeX的u是unicode,p是publishing。upTeX和pTeX最大的區別,只在於多了幾個primitive命令:

  • kchar,對應char
  • ucs,對應jis等
  • kchardef,對應chardef
  • enablecjktoken
  • disablecjktoken
  • forcecjktoken

最後三個,實際上,控制的是catcode相關內容,具體的函數如下:

boolean check_kcat_code (integer ct)
{
if (((ct &>= kanji) (enable_cjk_token == 0)) || (enable_cjk_token == 2))
return true;
else
return false;
}

我們可以看下面最簡單的例子:

enablecjktoken English Русскийpar
disablecjktoken English Русскийpar
forcecjktoken English Русскийpar
ye

其他的功能都是從pTeX繼承過來的。時至今日,來看pTeX的話,和XeTeX相比,還是顯得落後。主要是對於OpenType的輔助支持上。實際上OpenType單個字體是很好支持的。但是輔助支持,涉及到比較複雜的font fallback機制,就很難做了,XeTeX是沒做的。

直覺上,人們覺得僅僅支持單個OpenType字體已經足夠了。但是,最容易被忽略的,是virtual font,這個機制就是可以做到font fallback的。在TFM,JFM以及OFM之上,都是支持virtual font的。但是XeTeX不支持,而LuaTeX中可以使用callback進行hack,但是性能損失相當大,得不償失。但是實際上,做font fallback也是比較坑的,很容易碰到不完整的字體鏈。

上面兩段算是牢騷(我跳票這麼久,其實是做了幾個方案[其實就兩個,m17n一個,pango一個,你們可以在下面評論喜歡哪個],但是都能用,還在糾結於選擇中……)。怎麼評價upTeX呢?實際上,當年開發pTeX的公司已經被收購了,所以後續開發是沒有的。pTeX的開發都是社區來的。比如過度時期到現在的ptexenc就是解決編碼問題的。pTeX實際上也支持Unicode輸入,但是在內部結構上並沒有什麼改變,所以真正支持Unicode的pTeX只有upTeX。

這麼說吧:全世界的漢字系TeX引擎,就pTeX速度最快了。下一代漢字系引擎肯定會基於upTeX基礎之上。


我對 pTeX 系的東西了解不多,這方面李阿玲顯然更清楚。我從用戶角度說一點。

簡單來說,upTeX 就是 pTeX 的 Unicode 版本。支持 Unicode 輸入、內部處理、輸出,特別是內部編碼是 Unicode,是 upTeX 作為比較現代的 TeX 的主要標誌。而在支持 Unicode 以外,upTeX 相比 pTeX 沒有太大的變化,沒有缺多少功能,也沒有增加多少。

pTeX 是針對日本本土排版要求所開發的商業軟體,在引擎的層面上解決假名和漢字輸入、中間處理、字體選擇、忽略換行符、自動間距、標點平移、直排等基本的問題;而後在宏的層面上增加 ptex、platex 格式,主要是一些參數設置,並定義字體選擇方面的命令(platex 對 NFSS 做了補充);最後提供一系列支持宏包、文檔類,主要是做日本本土化排版支持、文檔設置。upTeX 把上面的工作基本完整地都轉換到 Unicode 上來。

轉為 Unicode 以後,一個主要的好處是可以直接用來處理中文和朝鮮文,畢竟 CJK 語言在 TeX 中排版面臨的問題是相近的,解決的方法也是相近的,所以拿過來套用問題不大。其實反過來,中國大陸的 CCT,中國台灣的 cwTeX,經過一定修改都能對日文、朝鮮文有基本的支持;韓國人自己做的 kotex 之類系統,以及德國人做的 CJK 都是這樣。只是 pTeX 在中日韓三國中,發展得最為完備,畢竟日本出版業更發達。所以在一些方面,比如直排,日本的 pTeX 和基於它的 upTeX 效果最好(其他方案涉及直排的都比較原始)。

由於是原生的 Unicode 及東亞排版支持,因此 upTeX 處理東亞文字速度很快(相比 XeTeX 用宏寫自動機、LuaTeX 用 Lua 做回調);同時因為排版引擎處理字體、間距等問題不涉及宏展開(相比 CJK、xeCJK),也不容易在與複雜的宏交互時出問題(例如 verbatim)。

由於繼承自早年的 pTeX,upTeX 在字體選擇等方面的介面還是老一套,方便性是不及 XeTeX、LuaTeX 這些新的現代引擎的。日文字體需要有獨立於字體文件的度量(metrics)信息,即 JFM(類比傳統 TFM),這之後就和傳統的 TeX 一樣,通過虛擬字體(virtual font)支持字體整合等功能,通過輸出驅動相關的字體映射(font map)來調用實際的日文字體。upTeX 和傳統的 TeX 一樣是輸出 dvi 文件的,常用的 pdf 輸出驅動是 dvipdfmx。於是,期待有 fontspec 那樣方便地使用 OpenType 字體的介面的人會失望,至於 OpenType 專業字體特性、OpenType 數學字體之類,也都不支持。此外,插圖、繪畫之類擴展功能也是依賴輸出驅動的 special 命令,像是插入非 eps 圖片還需要 extractbb 之類麻煩事,也一樣有。

無論如何,upTeX 還是一個以日本人為主要用戶群的軟體,在日文排版之外的需求並不完善(看看中文、諺文的支持時間進度就知道),而又針對日文排版留下不少自己特有的東西。舉個例子,中文排版中,標點壓縮有多種風格(不論其中優劣),不同字體廠商的標點位置都有差別;而對日文排版,標點位置與間距被 JIS 標準限定得比較死,因此直接拿 upTeX 排版中文,標點樣式不方便選擇,標點位置的不同可能會造成小問題。這些是不完善的地方,不過大部分可以在宏層面上解決,這不是日本開發者的問題,而需要中文社區自己的努力。


推薦閱讀:

商業出版公司真的有用 LaTeX 的嗎?
你為什麼用LaTeX?
如何配置 MacTeX 的中文支持?
為什麼 CTeX 好久沒有更新?
請問如何部署 OS X 上 Sublime Text 3 + LaTeX 的中文環境?

TAG:LaTeX | TeX | LaTeX排版與設計 |