无法在水平模式下使用 `\numexpr`

无法在水平模式下使用 `\numexpr`

我尝试学习使用\numexpr但在基础知识上遇到了一些麻烦。etex_man 不够详细,无法在这种情况下提供帮助。

以下是 MWE:

\documentclass{article}
\begin{document}
Hi \numexpr 6 + 1 \relax
\end{document}

当我从 TexLive 调用 pdflatex 时出现的错误是“您不能在水平模式下使用‘\numexpr’。”如果我切换到垂直或数学模式,也会出现类似的错误。

显然我遗漏了一些基本的东西。有人能告诉我吗?

答案1

\numexpr是一个附加项目,可以在 TeX 寻找 的上下文中使用<number>

就其语法而言,它基本上是一个“未命名的计数器寄存器”,并且不允许“裸露”。

它本质上的工作原理类似于\countX(其中\countX代表“无法到达”的计数寄存器号),在这个未命名的寄存器中加载表达式的值之后。

因此,就像您不能说Hi \count232打印存储在中的值一样\count232,您也不能说

Hi \numexpr 6+1\relax

只需考虑\count232\numexpr 6+1\relax参考抽象数,它独立于其表示而存在。您需要访问此抽象数字的表示:

Hi \number\count232

Hi \romannumeral\count232

Hi \number\numexpr 6+1\relax

Hi \romannumeral\numexpr 6+1\relax

TeX 的基本框架仅提供\number(用于十进制表示)和\romannumeral(用于小写罗马数字表示)。附加软件包可能会提供其他表示。

答案2

您需要在表达式前面加上\number或:其工作原理类似于 TeX 。或者,您可以使用包来提供薄包装器\the\numexpr\countxfp

\documentclass{article}
\usepackage{xfp}
\begin{document}

\number\numexpr 1 + 2 * 3 \relax

\the\numexpr 1 + 2 * 3 \relax

\inteval{1 + 2 * 3}

\end{document}

相关内容