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 |