我使用kpfonts
字体包,我想将其用作oldstylenums
默认字体,但在显示数据或图表的表格中,我想使用经典(大写)字母。我宁愿使用切换命令,而不是在每个数字上使用命令\classicstylenums
(由提供kpfonts
)。我可以成功地从旧数字切换到经典数字,但我无法恢复它们。MWE 如下:
\documentclass{article}
\usepackage[oldstylenums]{kpfonts}
\def\allnums{01234567890}
\makeatletter
\def\togclsnums{\fontfamily{jkp\kp@stylemath\kp@famillem}\selectfont} %% from kpfonts.sty
\makeatother
\begin{document}
\section{Test}
default, old: \allnums\\
command to switch to classic: \classicstylenums{\allnums}\\
command to switch to oldstyle: \oldstylenums{\allnums}
\togclsnums %% works
\allnums\begin{tabular}{l}\allnums\end{tabular}
\meaning\oldstylenums ???
\end{document}
答案1
在 LuaLaTeX 或 XeLaTeX 中,您可以加载kpfonts-otf
包,它可以启用oldstylenums
和\liningnums
命令fontspec
:
\documentclass{article}
\usepackage[oldstylenums]{kpfonts-otf}
\def\allnums{01234567890}
\begin{document}
\section{Test}
default, old: \allnums\\
command to switch to classic: \liningnums{\allnums}\\
command to switch to oldstyle: \oldstylenums{\allnums}
\allnums\begin{tabular}{l}\allnums\end{tabular}
\meaning\oldstylenums
\end{document}
如果您确实需要切换,则可以使用\addfontfeature{Numbers=Lining}
或\addfontfeature{Numbers=OldStyle}
。
使用旧式 8 位字体包,衬线数字和旧式数字位于单独的 NFSS 字体系列中,这些系列在手册的第 5.1 节中有记录kpfonts
。您需要声明命令来更改字体系列。在这里,我使用了与以下相同的命令fontspec
:
\documentclass{article}
\usepackage[oldstylenums]{kpfonts}
\def\allnums{01234567890}
\makeatletter
\newcommand{\kproman@osf@on}{\fontfamily{jkposn}}
\newcommand{\kproman@osf@off}{\fontfamily{jkp}}
\DeclareTextFontCommand\oldstylenums{\kproman@osf@on\selectfont}
\DeclareTextFontCommand\liningnums{\kproman@osf@off\selectfont}
\makeatother
\begin{document}
\section{Test}
default, old: \allnums\\
command to switch to classic: \liningnums{\allnums}\\
command to switch to oldstyle: \oldstylenums{\allnums}
\allnums\begin{tabular}{l}\allnums\end{tabular}
\meaning\oldstylenums
\end{document}
这始终会为您提供 KP 罗马数字,并且应该适用于各种字体粗细和形状。编写一个可以与衬线或无衬线正交添加此功能的版本会复杂得多。
答案2
这远未经过彻底测试(oldstylemath
例如有的情况),但这对我来说很有帮助:
\def\togoldnums{\fontfamily{jkplosn}\selectfont}
如果你使用灯光选项
\def\togoldnums{\fontfamily{jkpxosn}\selectfont}
如果不使用灯光选项。