xeCJK 未从文件中找到字体

xeCJK 未从文件中找到字体

到目前为止,我成功地使用了文件中的中文字体。现在我决定使用 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}

相关内容