在以下 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
。 - 如果您请求
ul
、el
、m
、b
或eb
,ub
您将获得所请求的字体系列。(这非常令人困惑,因为例如 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}