\fontseries 的奇怪行为

\fontseries 的奇怪行为

在以下 MWE 中,“Lorem ipsum”应该很轻,但你得到的是常规重量。

%\RequirePackage[2019/10/01]{latexrelease}
\documentclass{article}
  
\begin{document}

\fontseries{l}\fontfamily{NotoSans-TLF}\selectfont Lorem ipsum

\end{document}

警告称:

LaTeX Font Warning: Font shape `OT1/cmr/l/n' undefined
(Font)              using `OT1/cmr/m/n' instead on input line 6.

显然,LaTeX 尝试 OT1/cmr/l/n(不存在),替换 OT1/cmr/m/n,最后得到 OT1/NotoSans-TLF/m/n。

如果您使用\RequirePackage[2019/10/01]{latexrelease}(这会取消 LaTeX 2020-02-02 的 NFSS 更改),您将获得预期的浅色系列。

进一步观察:

  • 如果你要求\fontseries{sb},你就会得到b
  • 如果你要求\fontseries{c},你就会得到m
  • 如果您请求ulelmbebub您将获得所请求的字体系列。(这非常令人困惑,因为例如 OT1/cmr/ul/n 也不存在)
  • 如果您使用\fontfamily{NotoSans-TLF}\fontseries{l}\selectfont Lorem ipsum,您将获得所请求的字体系列。
  • 其他字体也存在同样的问题。

更新:此问题已讨论过在 GitHub 上并归类为错误。它将在新版 LaTeX 2021-06-01 中修复(以及字体选择机制中的其他不一致问题)。

答案1

字体属性按顺序改变

\fontencoding
\fontfamily
\fontshape
\fontseries
\fontsize

因此,对于您的输入,首先形状会变为l,而 Computer Modern 却没有,因此它会被默认的 所替代m

使用正确的顺序,输出将符合预期:

\documentclass{article}

\begin{document}

\fontfamily{NotoSans-TLF}\fontseries{l}\selectfont Lorem ipsum

\end{document}

最重要的是在开始时进行家族声明,因为这将导致 LaTeX 读取字体定义文件(如果尚未完成),从而了解可能的其他属性。


重要更新

随着即将发布的 2021-06-01 版 LaTeX 内核,这个问题应该不再令人担忧。另一方面,在更改字体时保持声明的语义顺序通常更好。

答案2

ul和系列的区别l在于,LaTeX 内核对于m/l开关有一个规则:

\DeclareFontSeriesChangeRule {m}{l}{l}{m}

该规则意味着,如果m(第一个参数)是当前系列,并且l请求(第二个参数),则l尝试(第三个参数),如果不存在,则系列将回退到m(第四个参数)。

正如 egreg 所写,您正尝试在cmr仍处于活动状态时更改系列,因此,由于它没有l系列,所以m是强制的。

ul如果您也为其声明一条规则,则可以获得类似的效果:

\documentclass{article}

\begin{document}

{ \fontseries{ul}\fontfamily{NotoSans-TLF}\selectfont Lorem ipsum }

\DeclareFontSeriesChangeRule {m}{ul}{ul}{m}

{ \fontseries{ul}\fontfamily{NotoSans-TLF}\selectfont Lorem ipsum }

\end{document}  

在此处输入图片描述

m您可以通过从规则中删除第四个参数来避免这种情况:

\documentclass{article}

\DeclareFontSeriesChangeRule {m}{l}{l}{}
\begin{document}

\fontseries{l}\fontfamily{NotoSans-TLF}\selectfont Lorem ipsum 

\end{document}

在此处输入图片描述

相关内容