制作一个宏以在“文本模式”下使用 nbRoman

制作一个宏以在“文本模式”下使用 nbRoman

该包modroman提供\nbRoman以罗马数字排版数字的功能。在文本模式下,它可以正常工作。

但在数学模式下,字体以斜体呈现,就像数学符号一样:

\documentclass{article}
\usepackage{modroman}

\begin{document}
$\nbRoman{3}$
\end{document}

而我希望它呈现为与文本模式相同的形式(作为氧化数)。我知道我可以将其括在内\text{},但我想编写一个可以在两种模式下工作并产生相同结果的宏。类似\ensuremath但相反。

我唯一能想到的就是类似的东西\ensuremath{\text{\nbRoman{#1}}},但是在文本模式下使用时它看起来像一个丑陋的黑客,我不喜欢它。我通常使用 LuaLaTeX。

答案1

你可能想要:

\newcommand{\myRoman}[1]{\textup{\nbRoman{#1}}}

该版本与周围文本的粗细相匹配,特别是如果您在标题中使用它,它会为您提供粗体罗马数字。

如果您想在文本模式而不是数学模式下复制周围的格式,您可以这样做:

\newcommand{\myRoman}[1]{\relax
  \ifmmode\textup{\nbRoman{#1}}%
  \else\nbRoman{#1}%
  \fi}

不过,您可能不需要它,因为您只需\nbRoman在文本模式和\myRoman数学模式下使用即可。

@egreg 在评论中提出的另一种解决方案是使用\textnormal而不是\textup。该版本将始终使用默认粗细和形状排版符号。一些出版商(例如 AMS)建议在其内部样式中使用此方法处理数学符号。

相关内容