同时在英文和中文上使用一个 xeCJK 字体系列

同时在英文和中文上使用一个 xeCJK 字体系列

我尝试使用字体系列来更改由中文和英文字母组成的文本的字体。但它似乎只影响中文字符。

有什么方法可以使用相同的字体系列来更改它们的字体吗?

\documentclass{standalone}
\usepackage{xeCJK}

\newCJKfontfamily\familyA{NotoSansCJKtc-Medium}
\newCJKfontfamily\familyB{NotoSansCJKtc-Light}
\newCJKfontfamily\familyC{NotoSansCJKtc-Regular}
\newCJKfontfamily\familyD{NotoSansCJKtc-Black}

\begin{document}
{   \familyA 中文 Eng     } ||
{   \familyB 中文 Eng     } ||
{   \familyC 中文 Eng     } ||
{   \familyD 中文 Eng     } 
\end{document}{}

上述代码的结果

答案1

您应该认真对待“字体系列”的概念,即,不要使用不同的系列来表示不同的粗细,而应该使用单个系列并配合合适的字体命令来切换字体粗细。此外,您应该为拉丁字符定义相应的字体。这里我使用的是 Noto Serif:

\documentclass{standalone}
\usepackage{fontspec}
\setmainfont{NotoSerif}[
  UprightFont=*-Regular,
  BoldFont=*-Bold,
  FontFace={l}{n}{*-Light},
  FontFace={mb}{n}{*-Medium},
  FontFace={k}{n}{*-Black},
]


\usepackage{xeCJK}
\setCJKmainfont{NotoSansCJKtc}[
  UprightFont=*-Regular,
  BoldFont=*-Bold,
  FontFace={l}{n}{*-Light},
  FontFace={mb}{n}{*-Medium},
  FontFace={k}{n}{*-Black},
]

\DeclareRobustCommand\lseries{\fontseries{l}\selectfont}
\DeclareTextFontCommand{\textl}{\lseries}
\DeclareRobustCommand\mbseries{\fontseries{mb}\selectfont}
\DeclareTextFontCommand{\textmb}{\mbseries}
\DeclareRobustCommand\kseries{\fontseries{k}\selectfont}
\DeclareTextFontCommand{\textk}{\kseries}

\begin{document}
{   \mbseries 中文 Eng     } ||
{   \lseries 中文 Eng     } ||
{   中文 Eng     } ||
{   \kseries 中文 Eng     }

\end{document}

结果:

在此处输入图片描述

请注意,这个答案部分基于https://tex.stackexchange.com/a/264275/140850

相关内容