![使用带有小数点和连字符的 \oldstylenums 时出现问题](https://linux22.com/image/256501/%E4%BD%BF%E7%94%A8%E5%B8%A6%E6%9C%89%E5%B0%8F%E6%95%B0%E7%82%B9%E5%92%8C%E8%BF%9E%E5%AD%97%E7%AC%A6%E7%9A%84%20%5Coldstylenums%20%E6%97%B6%E5%87%BA%E7%8E%B0%E9%97%AE%E9%A2%98.png)
我使用 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 内的文本显示为小写字母而不是斜体。