TeX 排版中文字體嵌入問題,兼談不拘小節(jié)的中文字體設(shè)計
原文:http://yulewang.spaces.live.com/blog/cns!5C815C994ABB661E!262.entry
低于 18 周歲的小朋友們請不要看此文,會被嚇到的。如果你和中國的字體公司有聯(lián)系,請把我所描述的問題轉(zhuǎn)告給他們。
考完作文后,在上海小歇,除了吃喝玩樂加上逛街還有被導(dǎo)師虐著寫文章,自己看兩眼G詞以外,就是在嘗試解決中文 TeX 用戶幾年來一直抱怨的關(guān)于 TeX 產(chǎn)生的 pdf 文檔中文字體看上去太細的問題。
這個問題的來龍去脈是這樣的。很久以前,大家都需要用 dvips 或者 dvipdfm 來轉(zhuǎn)換 TeX 產(chǎn)生的 dvi 文件為 pdf 文件,這個路徑很麻煩,需要把一個中文 trueype 字體轉(zhuǎn)為大約一百多個 Type1 字體,然后再把這些字體的 Subfont 給嵌入到文檔中。南韓的一個數(shù)學(xué)家 Cho,因為不滿意 TeX 的這種狀況,因此寫了一個 dvipdfm 程序的擴展,名為 dvipdfmx。dvipdfmx 可以直接嵌入 CID 的 TrueType 和 OpenType 字體,不需要把字體分割成許多個 subfont,產(chǎn)生的 pdf 文件小巧,而且比原先的方法在閱覽器下渲染速度快,質(zhì)量比較高。因此得到了中日韓用戶的喜愛。但是許久以來,中文用戶一直抱怨一個問題,就是貌似由 dvipdfmx 產(chǎn)生的文檔,在 Adobe 公司官方的 Acrobat Reader 下,顯得發(fā)虛,嚴重地影響閱讀,而相同的字體,如果不用 dvipdfmx,比如使用 cairo、quartz 或者 word2007 進行轉(zhuǎn)化,產(chǎn)生的 pdf 就沒有這個問題。如果文章中都是中文,那只不過是難以閱讀而已。而如果是中文和英文混排的,而英文部分又比較正常,比如使用了 Times 字體或者 Palatino 字體,則整個 type block 就顯得斑駁,一眼看到的都是突出的英文,所以一直以來,我們都建議用戶使用本來就細得要命的默認的 Computer Modern 字體,以使得文檔不至于失調(diào)。
幾年來,從來沒有人認真地研究過這個問題,南韓的用戶都覺得 dvipdfmx 產(chǎn)生的 pdf 質(zhì)量不錯,因為他們使用的隨 KTUG 定制的發(fā)行版發(fā)布的字體本來就比較粗,而中國的用戶如果使用 Windows 下的中易公司的宋體,即 simsun,則相當(dāng)不能忍,方正公司的字體,比如書宋,則稍微好一點,但怎么也好不過 Adobe 公司的 OpenType 字體 Adobe Songti Std Light。若干年前,jjgod 同學(xué)寫過一篇文章比較了幾十個中文字體,他是使用了 dvipdfmx 輸出的結(jié)果的視覺效果來評價字體的質(zhì)量,結(jié)果一個相當(dāng)好的字體,方正博雅宋,由于在閱覽器中顯示過細,被他認為不如方正書宋。而幾年以后,這個問題被泛化,當(dāng)今,TeX 正在走向國際化,如今的 TeX 已經(jīng)支持 Unicode 和各種高級的字體格式,也全面從 dvi 時代過渡到 pdf 時代,目前兩大炒作得很熱的 TeX 引擎,都和 dvipdfmx 扯上了關(guān)系。 XeTeX 直接使用了 dvipdfmx 的一個變種,xdvipdfmx 來產(chǎn)生 pdf,而 LuaTeX,則用 dvipdfmx 的代碼替換掉部分產(chǎn)原先 pdfTeX 的代碼,來產(chǎn)生 pdf。這就導(dǎo)致,目前所有的先進的 TeX 系統(tǒng),在 CID 字體嵌入方面的代碼,是近親關(guān)系,所有產(chǎn)生的中文 pdf,都虛得離譜,LuaTeX 尤甚。
我在去年和今年,一直使用 LuaTeX 引擎和 ConTeXt 格式,寫各種包括論文以內(nèi)的文檔,在使用的過程中,發(fā)現(xiàn)了不少問題,就開始和開發(fā)者交流。幾個月來,報告了不少 bug,其中一些,還給出了補丁。此外,我和 ConTeXt 開發(fā)者 Hans 等 TeX 專家討論,試圖讓最新的 ConTeXt 和 LuaTeX 來支持中文排版。其他事情,還包括為ConTeXt 的用戶們提供 FreeBSD 操作系統(tǒng)的 TeX 二進制文件。因此,我和 LuaTeX 與 ConTeXt 的開發(fā)者(其實是同一撥人),有很頻繁的聯(lián)系,也彼此保持著不錯的關(guān)系。開發(fā)者們也很勤快地修復(fù)著我匯報的各種 bug,這也使我能夠很好地使用這些軟件進行各種文檔(學(xué)術(shù)論文、技術(shù)文檔)的排版。今年考完作文后,我暫時可以小歇一下,同時由于 LuaTeX 的開發(fā)者們剛剛搞定了一項新功能,mplib,也有空余的時間。因此,我們就有時間來討論和解決這個由來已久的問題。
我一開始寫信給 LuaTeX 的開發(fā)者,Taco Hoekwater,之所以不寫給 dvipdfmx 開發(fā)者 Cho 而發(fā)給他,因為我和他熟,而且 Taco 這兩年來,勤勤懇懇地寫代碼,我比較相信他解決問題的效率。有時候一個 bug 提交給他他不到幾十分鐘就已經(jīng) fix 了。結(jié)果 Taco 看了好幾天,一無所獲,于是,Taco 幫助我把信轉(zhuǎn)給了當(dāng)今世界上幾個重要的大牛,準備來專家會診。這個會診的醫(yī)師陣容龐大,技術(shù)高超,隨便舉幾個人:dvipdfmx 開發(fā)者 Cho,LuaTeX 開發(fā)者 Taco,外加 XeTeX 開發(fā)者 Jonathan Kew。不久以后,話說解鈴還需系鈴人,Cho 找到了一個可能的問題。他把 pdf 文件解開,仔細觀察 cairo 輸出了 LuaTeX 輸出中字體嵌入部分的參數(shù),發(fā)現(xiàn)某個數(shù)值 StemV,相差懸殊。使用編輯器修改解開的 pdf,將 StemV 調(diào)整到相同,兩個 pdf 文件頓時就差不多了(雖然還有些許差別,但是這個就是最重要的因素之一)。
出處:live <-> evil
責(zé)任編輯:bluehearts
上一頁 下一頁 不拘小節(jié)的中文字體設(shè)計 [2]
|