對於不了解字體的人,在使用LaTeX排版時如何通過fontspec包選擇字體?
看著這些空,不知道填什麼字體好
setmainfont{ }setsansfont{ }setmonofont{ }setCJKmainfont[BoldFont={ },ItalicFont={ }]{ }setCJKsansfont{ }
setCJKmonofont{ }
這個問題是 @Clerk Ma 邀請的。
我看了很多遍問題的描述,也瀏覽了一遍@Clerk Ma 的回答 。我的第一反應是,我同意 @梁海 的看法。但反覆考慮之下,我擔心提問者真正的意思可能並不是他們倆理解的那個意思。簡單地解釋是,我相信提問者真正想問的問題不是問怎麼用fontspec,而是他/她可能已經在忙著寫一篇論文或者在忙一個項目,需要給一些馬上就能用的設置來排版。
如果我的猜測沒有錯,那麼我就不能回答「按默認設置就好」,而是要指出提問中列出的命令究竟在影響哪些具體的設置,並給出具體的字體建議。
我的回答是針對國內的論文排版的。我說論文,是因為就我所知,LaTeX 在公司環境下並不多見,我唯一知道的是浩方。如果不符合提問者的要求,請指出。另一點是,我給出的設置參照的是Word 的默認排版設置,因為國內很多論文的模板是假定用戶在 Word 環境下完成的。一些設計不合理的模板會忽略一些設置,而這些設置實際上最終會被認為應當服從 Word 環境。
- setmainfont{ } 一般就是論文中西文部分默認使用的字體。通常到 Word 2003 為止,這裡的默認字體都會是 Times New Roman。Linux 下也有同名字體。
- setsansfont{ } 是西文默認無襯線字體。一般可能出現在大標題等顯眼的位置。這一部分經常碰上的字體會是 Helvetica/Arial。Linux下也有 Helvetica,前綴是 -adobe-helvetica-* 。這是一個古老的非抗鋸齒版本(也就是不用 fontconfig 配置而使用 xfontsel),所以如今的 XWindow 環境應該不會再使用它作為屏幕字體。而 Windows 下的 Word 則經常會默認為 Arial。——之前我說Windows下也能看見Helvetica,應該是源自一些錯誤的印象。經再次確認,Word 和 Windows 本身都不自帶 Helvetica。感謝@梁海 君指出 Windows 下沒有 Helvetica。
- setmonofont{ }是西文默認的等寬字體。一般用於排版程序代碼。Courier 或者 Courier New 是常見的 Word 選項。Linux 下一般會有 Courier,但很少能看見 Courier New。
- setCJKmainfont[BoldFont={ },ItalicFont={ }]{ }這個命令指定中文(或韓文日文)的默認字體。通常情況下,我見過的大部分文檔論文會要求用宋體排版,實際上就是說的是SimSun。Linux 下可能用文鼎宋體代替,不過效果可能較差。另一點是和西文不同的地方,這個設置允許我們指定粗體和斜體應用何種字體代替。之所以有這個區別,是因為中文不使用粗體表示強調,也不使用斜體表示引文或書名號。我一般會指定BoldFont 和 ItalicFont 為某種黑體,Windows 環境下是SimHei,Linux 下我會用文泉驛正黑避免版權問題。但具體操作上可能需要靈活調整。有些高校的論文模板,比如我母校就是明確要求強調段落必須使用楷體(SimKai),只能照著要求設置。
- setCJKsansfont{ } 和 setCJKmonofont{ }。這兩個我沒怎麼用過,也說不清子丑寅卯來。一個比較安全的設置是統統設置成宋體,然後實際排版一次之後回頭看看效果,再做必要的調整。我承認這樣可能會比較難看,但至少不會有過於突兀的效果。
幾點注意:
- 有些字體只有 Windows 上才有。如果是在 Linux 等環境中排版,則可能出現找不到希望的字體的情況。這時候有兩種辦法,或者將正確的 Windows 字體文件拷貝到 Linux 環境,或者找一個 Linux 下等價的字體代替。當然,最安全的還是前者。
- 我並不是說 Windows 的字體就是效果最好的,事實上Linux 下也不是。但我們得尊重國內的現狀。
- 直接使用 Windows 字體需要承擔版權風險,但對學生來說也許這不是關鍵因素。
- 可能的話,不要使用 CJK 默認的中文粗體設置。因為我們可能看到糟糕之極的效果,也就是所謂 Poor man"s Bold 「字體」。之所以帶上引號,是因為它不是真的粗體,而是某種通過將原始宋體平移後得到的疊加效果。這種「字體」唯一的價值在於調試 LaTeX 文檔時確保裡面沒有被誤標記的粗體段落,絕對不能用來做出版用。相信我,所有腦筋正常的傢伙都不會認為那效果能看得下去。
簡單說,這個題目是要講解一下fontspec的用法。fontspec實際上是調用OpenType/TrueType的宏(我本來想打算說一下Type1的,但是這個不是fontspec的範圍,用NFSS來定義會更好)。先來看看字體設定的命令:
setmainfont{ }%襯線字體
setsansfont{ }%無襯線字體setmonofont{ }%等寬字體,一般是印表機字體
這些命令可以填上字體的PostScript名,全稱,字體族名以及文件名。舉個例子,如果一個字體叫做cmunvi.otf,那麼此字體的字體post名為CMUTypewriterVariable-Italic,全稱為CMU Typewriter Text Variable Width Italic,字體族名為CMU Typewriter Text Variable Width。那麼上面各種命令最好填字體族名,這樣fontspec會自動配置這一套字體到BoldFont,ItalicFont,和BoldItalicFont等。字體族名可以使用fc-list這個命令獲取,LuaTeX用戶可以使用下面的小腳本來取得相關的信息(fontnames.lua):
#!/usr/bin/env texlua
kpse.set_program_name("luatex")local ft = kpse.lookup(arg[1])if ft then local f = fontloader.open(ft)print("Fontname: "..f.fontname)--PostScript名
print("Fullname: "..f.fullname) print("Familyname: "..f.familyname)else print("Failed!")end
這個小腳本是我隨手寫的,按理說可以更強大一些。Mac OS X/Linux等用戶可以給此腳本加上執行許可權,Windows用戶需要使用texlua fontname.lua cmunvi.otf這樣的命令行執行,命令行第一個參數為字體的文件名,如上面的cmunvi.otf。那麼cmunvi.otf的字體信息如下:
Fontname: CMUTypewriterVariable-Italic
Fullname: CMU Typewriter Text Variable Width ItalicFamilyname: CMU Typewriter Text Variable Width
先貼個常用的西文字體配置,各位分別選其一即可(初學者可按下面例子進行配置,等你看了手冊後再回來對這些配置進行精調):
- setmainfont{CMU Serif},setsansfont{CMU Sans Serif},setmonofont{CMU Typewriter Text}
- setmainfont{TeX Gyre Pagella},setsansfont{Droid Sans},setmonofont{CMU Typewriter Text}
- setmainfont{TeX Gyre Terms},setsansfont{Droid Sans},setmonofont{CMU Typewriter Text}
- setmainfont{Linux Libertine O},setsansfont{Droid Sans},setmonofont{CMU Typewriter Text}
至於字體內部選項,初學者不必理會,填好字體族名就萬事大吉。下面說說幾種TeXLive下面自帶的字體(下列OpenType/TrueType字體圖樣的截圖中第一列為文件名,第二列為全稱,第三列為字體族,第四列為示例):
- 先來看看默認的CM字體好了(CM字體全稱為Computer Modern,由Knuth設計,在1992年被轉換成Type1字體,維護著現在為美國數學學會[見http://www.ams.org/publications/type1-fonts]),請注意CM字體是Type1字體,截圖上是五列,看看就好,這裡面,CM字體有一些是很少被用到的(我自己都很少用到):
- 第二套字體是CM字體的Unicode版本,為CMU字體,此字體為OpenType格式(貌似Linux的各大發行版的字體集中都是TrueType格式,此字體可用於屏幕顯示),此字體圖樣如下:
這一套字體就是個很好的例子,我們就可以使用如下的代碼進行西文字體設定:setmainfont{CMU Serif},setsansfont{CMU Sans Serif}和setmonofont{CMU Typewriter Text}。其實CTeX文檔類生成的pdf文檔中,西文部分默認的就是CMU字體,畢竟這個字體中還包含俄語字母等。
- 第三套字體是LM(Latin Modern)字體,這個字體和CM字體相仿,不是Unicode版本,一旦你使用了fontspec,那麼你生成的pdf文檔就是使用了LM字體的,圖樣如下:
- 第四套是Linux Libertine字體,這個字體在Linux下有,在TeX發行版裡面也有,質量極佳(我推薦使用此套 ,字體配置請參考上面CMU字體):
- 第五套是Junicode字體,這個字體適合排印古英語:
- 第六套為Gnu的自由字體:
- 第七套為GFS系列:
- 第八套為Gentium系列:
- 第九套為Iwona系列(此字體有一個bug,已經向開發者報告):
- 第十套為Kurier系列:
- 第十一套為Lato系列:
- 第十二套為Old Standard系列:
- 第十三套為Open Sans系列:
- 第十四套為AntPolt系列:
- 第十五套為PT系列:
- 第十六套為Punk Nova系列(這個字體主要是用來開玩笑的):
- 第十七套為TeX Gyre系列(這套字體我推薦):
- 第十八套為STIX系列,這個系列的數學字體是很牛的(但是現在這個問題沒有觸及到數學字體,故從略):
- 第十九套為UM Typewriter系列,也就是適合設定setmonofont{}中的字體:
- 第二十套為Fonitika系列(這是一個特殊字體):
- 第二十一套為Antykwa系列:
- 第二十二套為Comfortaa系列:
- 第二十三套為Cyklop系列:
- 第二十四套為Deja Vu系列:
- 第二十五套為Droid系列:
- 第二十六套為IPA系列的日文字體(TeXLive僅有一套ttf版日文字體):
%% for xelatex
documentclass{article}usepackage{xeCJK}setCJKmainfont[BoldFont={IPAGothic}]{IPAMincho}egin{document}愛読書の印象par extbf{愛読書の印象}end{document}
但是實際上並不完全對,因為上面的配置是字體極少的情況下才這麼設定的,如果字體齊全,可以像下面的例子(我就舉luatexja-fontspec的):%% for lualatex
documentclass{article}usepackage{luatexja-fontspec}setmainjfont[BoldFont={IPAGothic}]{IPAMincho}egin{document}愛読書の印象par extbf{愛読書の印象}end{document}
documentclass{article}
usepackage{luatexja-fontspec}setmainjfont[BoldFont={STZhongSong}]{STSong}setsansjfont{STHeiti}egin{document}愛読書の印象par extbf{愛読書の印象}par extsf{愛読書の印}end{document}
另外值得一提的是,xeCJK中有setCJKmonofont,而luatexja-fontspec中則沒有setmonojfont。畢竟漢字字體大多數都是等寬的(非等寬的漢字字體少些)。這就有個小問題,就是在在文檔中插入代碼,西文會用印表機字體顯示,而漢字用什麼字體顯示?這個沒有什麼好的辦法,我自己常用的是圓體字,另外一些日本字體也可以印表機字體配合使用,但是國內的字體就不好辦了。
這就差不多了。不了解就用默認的。
如果真的需要了解,自然會慢慢了解。了解之後自然知道怎麼選。如果現在不了解又來不及了解,就理清自己的目的、需求,去找了解的人詳細諮詢。第一句話,RTFM. 直達命令 texdoc fontspec。
第二句話,時間過去那麼久了,有了新的字體,這個回答算是一個補充吧。
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
1. 不熟悉就用默認的,這句話雖然聽起來讓人不爽,但是卻很有道理,默認的字體一般都夠用了,不然人家設置默認字體來幹嘛?
1.1 fontspec 宏包默認使用 Latin Modern 系列字體。包含襯線字體、無襯線字體、等寬字體、和數學字體,一步到位,無後顧之憂。
1.2 如果用了 ctex 宏包或者它的文檔類,它根據編譯方式選擇合適的中文字體,英文字體還是 fontspec 默認的 Latin Modern 系列。也可以說是一步到位。具體可以參考 ctex 的手冊,直達命令 texdoc ctex.
2. 想要學習一下,怎麼做?
2.1 最好就是去看手冊了,先看看 fontspec 的手冊,手冊里怎麼設置字體都寫得清清楚楚。主要就是這三個命令,setmainfont[fontfeature]{fontname/fontfile}、setsansfont[fontfeature]{fontname/fontfile} 和 setmonofont[fontfeature]{fontname/fontfile},依次設置西文的正文字體(一般是襯線字體)、無襯線字體和等寬字體。
個人推薦字體設置要寫全 Regular、Bold、Italic 和 BoldItalic 四個 series。如果沒有 Slanted 或者 Oblique 變體,TeX 會用 Italic 變體替代,但是有 Slanted 而沒有 Italic 的話,它是不會用 Slanted 去替代 Italic 的,所以這時候最好將 Italic 設置為 Slanted 字體。對於 TeXLive 自帶的字體,個人建議使用字體文件名來設置字體而不是字體族名。
大部分字體還提供了相應的文檔,建議使用該字體之前可以先看一看。通常這些字體還能夠以導入宏包的方式來使用,有的還提供了額外的功能。
2.2 說了很多廢話,該說說使用哪些字體了。
2.2.1 西文字體首先推薦使用 Linux Libertine 系列字體,它不僅有襯線字體和等寬字體,還有一套與之相搭配的 Linux Biolinum 字體。質量極佳,吐血推薦。可以這樣子設置:% 襯線字體:Linux Libertine
% BoldFont 可以選擇 Bold 字重或者 Semibold 字重% BoldItalicFont 也有對應 BoldFont 的字重選擇% 這裡使用 Semibold 字重setmainfont{LinLibertine_R.otf}[ BoldFont = LinLibertine_RZ.otf, ItalicFont = LinLibertine_RI.otf, BoldItalicFont = LinLibertine_RZI.otf, ]% 無襯線字體:Linux Biolinumsetsansfont{LinBiolinum_R.otf}[ BoldFont = LinBiolinum_RB.otf, ItalicFont = LinBiolinum_RI.otf, BoldItalicFont = LinBiolinum_RBO.otf]% 等寬/印表機字體:Linux Libertine Monosetmonofont{LinLibertine_M.otf}[ BoldFont = LinLibertine_MB.otf, ItalicFont = LinLibertine_MO.otf, BoldItalicFont = LinLibertine_MBO.otf]其次推薦是谷歌的 Roboto 系列字體.襯線,無襯線,等寬字體都有,而且字重豐富,和思源黑體搭配很合適的.
% 襯線字體:Roboto Slab,只有 Light,Thin,Regular 和 Bold 四個字重
% 並沒有 ItalicFont 也沒有 BoldItalicFont,比較可惜setmainfont{RobotoSlab-Light.ttf}[ BoldFont = RobotoSlab-Bold.ttf]% 無襯線字體:setsansfont{Roboto-Light.ttf}[ BoldFont = Roboto-Medium.ttf, ItalicFont = Roboto-LightItalic.ttf, BoldItalicFont = Roboto-MediumItalic.ttf]% 等寬字體% TeXLive 沒有包含 Roboto Mono,有機會自己去下載看看效果如何.% 用 TeX Gyre Cursor,和 Light 字重搭配挺好看的setmonofont{texgyrecursor-regular.otf}[BoldFont = texgyrecursor-bold.otf, ItalicFont = texgyrecursor-italic.otf, BoldItalicFont = texgyrecursor-bolditalic.otf]再次推薦的就是 TeX Gyre 系列字體了。它的襯線字體有 TeX Gyre Bonum - Adobe Bookman 風格、TeX Gyre Pagella - Adobe Palatino 風格、TeX Gyre Schola - Adobe New Century Schoolbook 風格和 TeX Gyre Termes - Adobe Times 風格,共計四套,並有與之搭配的數學字體。而無襯線字體有兩套 TeX Gyre Adventor - Adobe Avant Garde 風格 和 TeX Gyre Heros - Adobe Helvetica 風格。等寬字體有 TeX Gyre Cursor - Adobe Courier 風格。這個等寬字體的筆劃偏細,適合搭配覺細的字體,比如 Light 字重的思源黑體。
我聽說 Will Robertson 萬年不變的 Palatino,你也可以試一試啊,很有特色.個人比較喜歡 TeX Gyre Bonum,然後是
TeX Gyre Schola,再然後是 TeX Gyre Termes.個人的設置如下:% TeX Gyre Bonum
setmainfont{texgyrebonum-regular.otf}[ BoldFont = texgyrebonum-bold.otf, ItalicFont = texgyrebonum-italic.otf, BoldItalicFont = texgyrebonum-bolditalic.otf]% TeX Gyre Heros
setsansfont{texgyreheros-regular.otf}[ BoldFont = texgyreheros-bold.otf, ItalicFont = texgyreheros-italic.otf, BoldItalicFont = texgyreheros-bolditalic.otf]% TeX Gyre Cursor
setmonofont{texgyrecursor-regular.otf}[ BoldFont = texgyrecursor-bold.otf, ItalicFont = texgyrecursor-italic.otf, BoldItalicFont = texgyrecursor-bolditalic.otf]2.2.2 中文字體
這個就比較無奈了.如果是學校論文之類的,規定是死的,沒什麼好改的.如果是自己用的話,個人目前會選用思源黑體.畢竟是開源/自由字體,無版權之憂.個人感覺思源黑體 Light 字重用來做正文挺不錯的,沒有用到宋體.斜體暫時用 Adobe 宋體代替,這個字體是 Adobe Reader 附帶的,只能說是可以免費使用,但是並非開源/自由字體.可以考慮換成文鼎提供的楷體.
% 襯線字體
setCJKmainfont[BoldFont = Source Han Sans CN Medium, ItalicFont = Adobe Kaiti Std R]{Source Han Sans CN Light}% 無襯線字體同上setCJKsansfont[BoldFont = Source Han Sans CN Medium, ItalicFont = Adobe Kaiti Std R]{Source Han Sans CN Light}%% 等寬字體/印表機字體setCJKmonofont[BoldFont = Source Han Sans CN Medium, ItalicFont = Adobe Kaiti Std R]{Source Han Sans CN Light}另外 TeXLive 自帶的 Fandol 系列字體也可以自由使用,只是並不是我喜歡的類型.
總的來說,我心中目前的最佳拍檔就是 Roboto 系列字體作為西文字體,思源黑體作為中文字體,至於數學字體,我選擇 TeX Gyre Bonum Math,因為它的積分號是直立的,我看得比較習慣.如果缺符號的話,那就只好選擇 XITS Math 了.
以上就是我大概會考慮的幾個方案.另外,DejaVu 系列字體、Open Sans 系列字體以及 GNU Free 系列字體也是比較可靠的選擇,不妨一試.
手機回答,就不貼圖了.以上.推薦閱讀:
※哪些字體有美觀的注音符號設計?
※為什麼 quora 上會有兩種風格的引號混排?
※印象筆記(Evernote)使用的是什麼字體?