我正在使用 Linux Libertine 字体并启用了旧式数字。
但是,在特定情况下,我想改用衬线数字。通常我应该能够切换使用,\addfontfeature
但这样做不起作用。MWE:
\documentclass{minimal}
\usepackage{fontspec}
\setmainfont[Numbers=OldStyle]{Linux Libertine}
\begin{document}
C++0x
C++{\addfontfeature{Numbers=Lining}0}x
{\fontspec{Linux Libertine}C++0x}
\end{document}
输出如下所示:
C++ox
C++ox
C++0x
但是,第二行应该看起来像第三行,而不是像第一行。设置其他字体功能(例如斜线零)也不起作用。
此外,如果我使用其他字体(例如 Hoefler Text),则输出将符合预期。
有人知道这里发生什么事吗?
答案1
这是解决您问题的方法(这是关于如何添加字体功能的已知问题(请参阅评论这里和这里))。解决方案是定义一个新的字体并使用它来更改数字样式:
\documentclass{minimal}
\usepackage{fontspec}
\setmainfont[Numbers=OldStyle]{Linux Libertine}
\newfontface\lining[Numbers=Lining]{Linux Libertine}
\begin{document}
C++0x
C++{\lining0}x
{\fontspec{Linux Libertine}C++0x}
\end{document}
一般来说,如果您要切换字体,最好使用\newfontfamily
或\newfontface
命令将切换转换为宏,而不是fontspec
直接调用。