如何使用“BoldFeatures”为粗体文本着色,但覆盖单个文本字符串的颜色?

如何使用“BoldFeatures”为粗体文本着色,但覆盖单个文本字符串的颜色?

在我的文档序言中,我使用以下代码来设置我想要的字体,同时将斜体、粗体和粗斜体文本的不同灰度值设置为默认文本颜色:

\usepackage{fontspec}
\usepackage{xcolor}
....
\setmainfont[{
   BoldFont=WeidemannStd-Bold.otf,
   ItalicFont=WeidemannBookItalic.otf,
   BoldItalicFont=WeidemannStd-BoldItalic.otf,
   ItalicFeatures={Colour=666666},
   BoldFeatures={Colour=6f6f6f},
   BoldItalicFeatures={Colour=777777}
  }]{WeidemannBook}

总的来说,通过以下方式生成 PDF 时,效果如预期xelatex-- 除了一件事:如果我想设置具体的分别将字符串加粗到不同的颜色,比如说红色,像这样:

\textcolor{red}{\textbf{these words should be red}}

或这个:

{\textbf{\textcolor{red}these words should be red}}}

它不起作用预期,并且这两个字符串的 PDF 输出仍然是灰色......


fontspec如何覆盖使用包的字体功能时设置为默认的灰色?

答案1

命令\addfontfeature将覆盖指定范围内的标准字体颜色和其他特征,例如

{\addfontfeature{BoldItalicFeatures={Colour=red}}\bfseries\itshape these words are red}

但这可能不太实用。以下方法\newcommand可能有效:

\newcommand{\mycolouredtext}[2]{{\addfontfeature{%
  ItalicFeatures={Colour=#1},%
  BoldFeatures={Colour=#1},%
  BoldItalicFeatures={Colour=#1}}%
  #2}}

然后调用\mycolouredtext{green}{\bfseries\itshape This text is green}以获取斜体和粗体的绿色文本。此命令不会对其他文本(尤其是后续文本)产生任何影响。

顺便说一句,你最后的代码示例中有一个语法错误。

{\textbf{\textcolor{red}these words should be red}}

应该

{\textbf{\textcolor{red}{these words should be red}}}

否则,只有第一个这些将以红色打印。

相关内容