到目前为止,我成功地使用了文件中的中文字体。现在我决定使用 xeCJK 包,但我的设置不再起作用。您能建议我应该为 xeCJK 添加什么吗?
在下面的例子中,如果\usecjktrue
注释掉该行,则文件编译成功,并且我在 pdf 中得到中文字母。如果\usecjktrue
处于活动状态,则错误消息为:
kpathsea: Running mktextfm ukai
...
! I can't find file `ukai'.
...
! fontspec error: "font-not-found"
! The font "ukai" cannot be found.
代码:
\documentclass{article}
\usepackage{polyglossia}
\DeclareFontFamily{EU1}{ukai}{}
\DeclareFontShape{EU1}{ukai}{m}{n}{ <-> "[ukai.ttc]"}{}
\newif\ifusecjk
%\usecjktrue % uncomment to use xeCJK and fail
\ifusecjk
\usepackage[BoldFont,SlantFont]{xeCJK}
\setCJKmainfont{ukai}
\setCJKsansfont{ukai}
\setCJKmonofont{ukai}
\fi
\begin{document}
\XeTeXlinebreaklocale "zh"\relax
\XeTeXlinebreakskip = 0pt plus 1pt minus 0.5pt \relax
\ifusecjk\else
\renewcommand\rmdefault{ukai}
\fontencoding{\encodingdefault}\fontfamily{\rmdefault}\selectfont
\fi
危险
\end{document}
答案1
如果您读过中文,您应该阅读该包的文档xeCJK
。
该xeCJK
包可以直接访问字体文件。也就是说,\DeclareFontFamily
和\DeclareFontShape
在这里是多余的。
顺便说一句,该包已经处理了换行问题。\XeTeXlinebreaklocale
并且\XeTeXlinebreaklocale
也是多余的。
根据您的代码,最小的工作示例可能是:
\documentclass{article}
\usepackage[BoldFont,SlantFont]{xeCJK}
\setCJKmainfont{ukai.ttc}
\begin{document}
Some latin letters
危险
Latin letters again
\end{document}
答案2
看来 xeCJK 使用的\fontspec
是\selectfont
:
> \xeCJK@font@rm=macro:
->\fontspec [BoldFont={ukai},BoldFeatures={RawFeature={embolden=4}},ItalicFont=
{ukai},ItalicFeatures={RawFeature={slant=0.17}},BoldItalicFont={ukai},BoldItali
cFeatures={RawFeature={embolden=4,slant=0.17}}]{ukai}.
l.17 \show\xeCJK@font@rm
相当昂贵。通过强制更改,\selectfont
我得到了我需要的东西:
\documentclass{article}
\usepackage{polyglossia}% get "EU1"
\DeclareFontFamily{EU1}{ukai}{}
\DeclareFontShape{EU1}{ukai}{m}{n}{ <-> "[ukai.ttc]"}{}
\usepackage[BoldFont,SlantFont]{xeCJK}
\setCJKmainfont{ukai}
\setCJKsansfont{ukai}
\setCJKmonofont{ukai}
\begin{document}
\XeTeXlinebreaklocale "zh"\relax
\XeTeXlinebreakskip = 0pt plus 1pt minus 0.5pt \relax
\makeatletter
\show\xeCJK@font@rm
\def\xeCJK@font@rm{\fontfamily{ukai}\selectfont}
\makeatother
Some latin letters
危险
Latin letters again
\end{document}