使用带有小数点和连字符的 \oldstylenums 时出现问题

使用带有小数点和连字符的 \oldstylenums 时出现问题

我使用 Computer Modern 字体(默认)和\oldstylenums命令以旧式格式排版数字。但是,我在使用它处理非数字字符(例如小数点和连字符)时遇到了麻烦。

例如小数点显示为三角形:

Master of Science, Computer Science, \oldstylenums{3.76/4.0}

显示为:

在此处输入图片描述

另外,我对连字符等有疑问。

请提出补救措施。

答案1

\usepackage{textcomp}

重新定义\oldstylenums为使用 8 位编码 TS1 而不是 7 位数学编码OML

扩展支持

以下示例解析字符串,用旧式变体替换数字。

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{lmodern}

\usepackage{textcomp}
\usepackage{ltxcmds}

\makeatletter
\newcommand*{\oldstyle}[1]{%
  \begingroup
  \toks@={}%
  \@oldstyle#1\scrollmode
}
\newcommand*{\@oldstyle}{%
  \ltx@ifnextchar@nospace\scrollmode{%
    \expandafter\endgroup\the\expandafter\toks@\@gobble
  }{%
  \ltx@ifnextchar@nospace\@sptoken{%
    \expandafter
    \@oldstyleadd\expandafter\space\expandafter\@empty
    \romannumeral-`\x
  }{%
  \ltx@ifnextchar@nospace0{\@oldstyleadd\textzerooldstyle}{%
  \ltx@ifnextchar@nospace1{\@oldstyleadd\textoneoldstyle}{%
  \ltx@ifnextchar@nospace2{\@oldstyleadd\texttwooldstyle}{%
  \ltx@ifnextchar@nospace3{\@oldstyleadd\textthreeoldstyle}{%
  \ltx@ifnextchar@nospace4{\@oldstyleadd\textfouroldstyle}{%
  \ltx@ifnextchar@nospace5{\@oldstyleadd\textfiveoldstyle}{%
  \ltx@ifnextchar@nospace6{\@oldstyleadd\textsixoldstyle}{%
  \ltx@ifnextchar@nospace7{\@oldstyleadd\textsevenoldstyle}{%
  \ltx@ifnextchar@nospace8{\@oldstyleadd\texteightoldstyle}{%
  \ltx@ifnextchar@nospace9{\@oldstyleadd\textnineoldstyle}{%
    \@@oldstyle
  }}}}}}}}}}}}%
}
\newcommand*{\@oldstyleadd}[2]{%
  \toks@\expandafter{\the\toks@#1}%
  \@oldstyle
}
  \newcommand*{\@@oldstyle}[1]{%
  \@oldstyleadd{#1}{}%
}
\makeatother

\begin{document}
Master of Science, Computer Science, \oldstyle{0-1--2---3; 7, 3.76/4.0}
\end{document}

结果

答案2

如果您希望在整个文档中使用旧式图形,那么您可以有几个选择,假设您仍然想使用 Computer Modern 字体或其变体。

包裹eco

\usepackage[T1]{fontenc}
\usepackage{eco}

包裹cfr-lm

\usepackage[T1]{fontenc}
\usepackage[oldstyle=true]{cfr-lm}

第二个包使用 Latin Modern 字体,与 Computer Modern 非常相似;第一个包使用一组基于 European Modern 的虚拟字体,这也是 Computer Modern 的变体。我更喜欢后者。

答案3

我认为最好的做法是省略数字以外的字符。

不过,我可能有点乱,但您可以\oldstylenums通过这种方式获取小数点(中间点或下点)、连字符和分数:

\usepackage{ulem} % needed for \sout{}
 ...
\oldstylenums{3·76=4·0 \sout{~} 3:76=4:0}

另一个不太复杂的解决方案是定义一个使用其他字体的 \oldstylenums 的新命令允许在命令中使用普通字符:

\newcommand{\oldnum}[1]{{\fontfamily{artemisia}\scshape #1}}

\oldnum{3·76/4·0 - 3.76/4.0}

请注意,在这种情况下, \oldnum 内的文本显示为小写字母而不是斜体。

平均能量损失

相关内容