在旧式(小写)数字和经典(大写)数字之间切换?

在旧式(小写)数字和经典(大写)数字之间切换?

我使用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}如果不使用灯光选项。

相关内容