上一篇:卡片
我要在卡片的頁尾區域增加時間戳,例如
2023 年 01 月 26 日 凌晨 4 時 44 分
然而,迄今為止,尚未介紹如何讓 ConTeXt 支援漢字。
漢字,一直是 TeX 世界之痛。
與僅需要幾十個字母的拼音文字不同,漢字要成千上萬個字元。為漢字設計字型,全部字元需要使用字型設計軟體逐一繪製而成。
字型大多是有版權的,需要付費獲得字型設計公司的授權方能使用。中文 Windows 使用者之所以能看到漢字,需要感謝微軟出錢購買了漢字字型的授權,但也無需感謝,羊毛出在豬身上。不過,即使你使用的是正版 Windows 系統,倘若將其字型複製到非 Windows 系統裡使用,依然很有可能是侵權行為。RMS 當年因為覺得類似這樣的事情實在是荒唐至極,憤而舉起自由軟體大旗。
微軟 Office,金山 WPS,方正的飛騰以及 Adobe 的 InDesign 等商業排版類軟體,它們不為漢字而痛,因為經營它們的這些公司有購買甚至設計漢字字型的實力。TeX 則不然,它是自由軟體,負責它的開發和維護的組織是非盈利組織,沒有這樣的實力。
有些漢字字型是免費的。這份文件僅以此類字型為例,介紹如何在 ConTeXt 裡使用,但是所講述的知識對於任何 TrueType 和 OpenType 格式的漢字字型理應適用。
Google 公司和 Adobe 公司聯合開發了包含了漢字的思源字型,有黑體1,也有宋體2。這份文件僅使用思源宋體,可從以下連結下載:
思源宋體
下載後,將 SourceHanSerifCN.zip 解開,這份文件僅使用其中的 SourceHanSerifCN-Regular.otf 字型。
有很多種辦法讓 ConTeXt 在需要指定字型的時候能夠找到字型檔案,最簡單的一種方法是將字型檔案放在 ConTeXt 的安裝目錄裡的指定位置。
我的機器執行的是 Linux 系統,我將 ConTeXt 安裝到了 $HOME/opt/context
目錄。對於不熟悉 Linux 系統目錄結構及相關術語的 Windows 使用者而言,可以想象為,我將 ConTeXt 安裝到了 D:\Program Files\context
目錄,這個目錄就是所謂的 ConTeXt 的安裝目錄。
由於 SourceHanSerifCN-Regular.otf 是 Adob 公司設計的 OpenType 字型,所以應當將其安裝到 ConTeXt 安裝目錄裡的子目錄
tex/texmf-fonts/fonts/opentype/adobe/SourceHanSerifCN
倘若沒有這樣的子目錄,可自行逐級建立。
完成上述的字型安裝過程後,需執行以下命令,為 ConTeXt 製備字型檔案索引資訊:
$ mtxrun --generate
$ mtxrun --script font --reload
使用以下命令可檢視上述命令為 SourceHanSerifCN-Regular.otf 字型在 ConTeXt 裡的一些資訊:
$ mtxrun --script font --list --file -pattern=SourceHanSerifCN-Regular.otf
familyname weight style width variant fontname filename subfont fontweight
sourcehanserifcn normal normal normal normal sourcehanserifcnregular SourceHanSerifCN-Regular.otf conflict: regular
上述命令輸出的第 1 列資訊 sourcehanserifcn
,在 ConTeXt 原始檔裡透過這個名字使用 SourceHanSerifCN-Regular.otf 字型。
現在,可以在卡片上顯示漢字了。例如
\environment card-env
\definefontfamily[myfont][serif][sourcehanserifcn]
\setscript[hanzi]
\setupbodyfont[myfont]
\starttext
新冠,隔離,靜默,全員核酸,大號流感,二十條,新十條,布洛芬,輝瑞藥……
\stoptext
排版結果為
現在可以將
\definefontfamily[myfont][serif][sourcehanserifcn]
\setscript[hanzi]
\setupbodyfont[myfont]
挪到 card-env.tex 檔案裡了。
在文件的頁尾(footer)寫入一些文字,可使用 ConTeXt 的 \setupfootertexts
命令。會設定頁尾,就會設定頁首(header),因為 ConTeXt 也有個 \setupheadertexts
命令。
預設情況下,\setupfootertexts
可以在版心之下的頁尾區域的兩側放置文字。例如,
\environment card-env
\setupfootertexts[foo][bar]
\showframe
\starttext
這是頁尾的示例,看版心下面……
\stoptext
排版結果如下圖所示:
頁尾區域的文字有一部分出框了,是 ConTeXt 預設設定的字號對於卡片而言略大所致。
倘若對 card-env.tex 檔案裡字型設定命令 \setupbodyfont
略作修改
\setupbodyfont[myfont,7pt]
這樣,位於頁尾區域的文字和頁碼,都不會再出框了,如下圖所示:
如何將頁尾裡的 foo
或 bar
放到版心下方的正中位置呢?
ConTeXt 世界攤開了雙手,無奈地說,沒有多麼優美的辦法……但是可以用 \hfill
命令將 foo
或 bar
擠到正中位置,例如
\setupfootertexts[\hfill foo\hfill][bar]
結果為
現在可以去掉 bar
了,然後將 foo
換為時間戳:
\setupfootertexts
[\hfill 2023 年 01 月 26 日 凌晨 4 時 44 分\hfill][]
然後再去掉腳手架 \showframe
,結果就有了一張帶有時間戳的卡片:
上述工作並未觸及 ConTeXt 裡的 Lua,但是給出了學習 ConTeXt 的一種途徑,即倘若知道自己想要什麼,那麼就要勤於搜尋 ConTeXt wiki 上的內容,特別是這個頁面:
https://wiki.contextgarden.ne...
學習任何一種 TeX,都可以這樣學,查閱文件,動手試驗。
下一篇:偽豎排
參考