我對XeTeX還是很不爽??!
雖然我是個TeX開發(fā)者,但是這幾年的TeX使用已經(jīng)已經(jīng)進(jìn)入化境。說人話的話,那就是我經(jīng)常用TeX干一些普通用戶很少干的事。比如用TiKZ畫圖,尤其是字體數(shù)據(jù)的可視化。
過年的時候跟朋友說了一下《普林斯頓應(yīng)用數(shù)學(xué)指南》的一些事。這書很有意思,我看了大半之后發(fā)覺,應(yīng)用數(shù)學(xué)的大部分領(lǐng)域,基本上都涉及計算機(jī)。這書里面有幾節(jié)對于LaTeX相關(guān)內(nèi)容的描述。比如TiKZ,這東西是DSL中的DSL。
DSL中的DSL。怎么理解呢?第一層DSL,其實(shí)指的是TeX。TeX雖然圖靈完備。但是很顯然它不是干所有的東西都很內(nèi)行。比如我很久之前大概講過Lisp on TeX。但是,能做和特別擅長于做還是很不一樣的。
之所以說TiKZ是DSL中的DSL,我轉(zhuǎn)換一下說法,就是說,TiKZ用TeX的宏系統(tǒng)實(shí)現(xiàn)了一個特定領(lǐng)域的東西。比如說,如果我做了一個字體描述的東西,它也是個DSL。
從TiKZ的話題上折回來。為啥我還在用XeTeX呢?主要是API穩(wěn)定。這個穩(wěn)定,也只是部分API。比如XeTeX的Shaping API,就隨著Harfbuzz的變化而變化,不算穩(wěn)定的API。穩(wěn)定的API指的是,XeTeX對于glyph的讀取的相關(guān)API。
為什么不提LuaTeX呢?主要是我比較懶。LuaTeX雖然底層提供的API比較豐富,甚至可以通過Lua的callback來給排版流程掛鉤子。但是它封裝的那套fontforge的API的文檔是真的很蹩腳。我雖然知道Type 1,TrueType,OpenType的細(xì)節(jié),但是涉及glyph的東西,我懶得搞的。
我對XeTeX的不爽,主要還是在字體的查找上。
眾所周知,XeTeX的字體查找,在mac上面是用的系統(tǒng)API,但是在Linux和win上面都是使用的fontconfig。
我們也知道,另一個眾所周知,就是開源軟件界有一個KISS原則,但是讀經(jīng)人讀不懂經(jīng)的時候,就麻煩了,想把經(jīng)燒了。模塊是可以接模塊的。但是一旦出問題,可是得按模塊debug的。這一點(diǎn)就很痛苦。
fontconfig的令人痛苦之處,它是一個開源的基礎(chǔ)組件,但是API使用上,需要用戶了解一定的字體知識。這就很麻煩了。更麻煩的地方,是它的文檔其實(shí)寫的不太好。這個痛苦就跟呼叫轉(zhuǎn)移一樣,轉(zhuǎn)移到XeTeX上去了。
希望今年有時間把我想做的類似的庫搞出來。
回家的這三四天,睡覺是真舒服。主要還是村里面比較安靜,雖然傍晚的時候能聽到村里面的狗叫雞叫鴨叫鵝叫??諝獬睗袂仪逍拢梢詴裰柊l(fā)呆。吃得少,睡得好,心情也是好。
所以這是一個特別理想的開發(fā)環(huán)境。當(dāng)然,美中不足的地方就是炕比較硬,我沒有買墊子,不能久坐。所以這樣看來,實(shí)際上是我在北京的生活環(huán)境影響我寫代碼的狀態(tài)。比如,今天回到家,屋里就熱的夠嗆,這樣大的溫差,出門不感冒果然得算是奇跡。