標籤:

xelatex編譯加粗楷體為什麼會失敗?

documentclass[UTF8]{ctexbook}

egin{document}

{fkaishu 哈 }

kaishu 哈

end{document}

簡化例子如上,使用latex+dvipdf可以成功,使用xelatex就會失敗,而且貌似新版本的xelatex會失敗,退回到比較舊的版本就能成功,是xelatex的bug嗎?


〇、粗體命令應該用 fseries 或 extbf{...},不要用 f。這與你的問題無關,但 f 是過時的錯誤用法,應該糾正。

一、XeLaTeX 編譯時會有警告,如:

LaTeX Font Warning: Font shape `TU/KaiTi(0)/bx/n" undefined
(Font) using `TU/KaiTi(0)/m/n" instead on input line 5.

告訴你在要使用的字體中,不存在粗體形式的楷體,所以 LaTeX 就用不粗的楷體代替了。

二、latex+dvipdfmx 採用的是 CJK 包處理中文,由於沒有粗楷體,粗體命令的效果是採用偽粗體。偽粗體沒有真正的粗體效果好,有條件的用戶可以購買商業字體使用,如「方正粗楷」。CJK 包不方便更換字體,所以偽粗體功能就默認打開了。由於 XeTeX 下用的 xeCJK 包則很方便更換字體,我們又希望在默認選項下避免這種效果,所以偽粗體功能默認關閉了。關閉這個功能的另一個原因是為了避免不希望的加粗——恐怕多數情況你不會希望黑體、仿宋體甚至隸書自動加粗。

三、可以給文檔類加全局選項 AutoFakeBold(它會傳遞給 xeCJK 和 fontspec)來打開全局的偽粗體功能,這樣就和 latex+dvipdfmx 命令的效果相似了。

% 全局打開偽粗體
documentclass[UTF8,AutoFakeBold]{ctexbook}
egin{document}

{kaishu 楷書}

{fserieskaishu 使用偽粗體的楷書}

end{document}

在使用 xeCJK 提供的
ewCJKfontfamily 等命令設置單個字體族時,加 AutoFakeBold 命令,局部打開偽粗體功能,可能效果更好些。

documentclass[UTF8]{ctexart}
letkaishu
elax % 清除舊定義

ewCJKfontfamilykaishu{KaiTi}[AutoFakeBold] % 重定義 kaishu
egin{document}

{kaishu 楷書}

{fserieskaishu 使用偽粗體的楷書}

end{document}

四、類似地,使用 CJK 包時,還有偽斜體功能。傳統上漢字排版根本沒有斜體的概念,所以在 XeLaTeX 編譯時,偽斜體功能默認也被關閉了。它可以由 AutoFakeSlant 選項打開。


更新:

按照第一個答案試了之後發現可行。謝謝!

接觸latex不久,懂得不多,回答的不對希望不要誤導他人。之前的答案還是留在這兒吧。

————————————————

用bfseries 和 textbf命令試了對漢字加粗,發現都失敗了。但是在漢字中如果加入英文的話,英文部分可以被加粗。在網上查了一下,得到的信息是bfseries和textbf命令只作用於英文的加粗,如果需要對漢字加粗可能需要裝字體。


推薦閱讀:

TeXLive如何查看一個宏包的目錄結構(TDS)?
如何在LaTex或Word中表示卓里奇《數學分析》基的符號?
如何快速查看 LaTeX 的宏命令的實現?
LaTeX 在 Mac 上無法編譯出字元「〇」, 該如何解決?
LaTeX中如何實現在自定義命令中對自定義的變數進行簡單的運算?

TAG:LaTeX |