![制作一个宏以在“文本模式”下使用 nbRoman](https://linux22.com/image/450912/%E5%88%B6%E4%BD%9C%E4%B8%80%E4%B8%AA%E5%AE%8F%E4%BB%A5%E5%9C%A8%E2%80%9C%E6%96%87%E6%9C%AC%E6%A8%A1%E5%BC%8F%E2%80%9D%E4%B8%8B%E4%BD%BF%E7%94%A8%20nbRoman.png)
该包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)建议在其内部样式中使用此方法处理数学符号。