在 Latex 中展开宏

在 Latex 中展开宏

我有一个非常简单的问题,但一直无法找到简单的答案。这是关于宏扩展的。

假设我定义了 4 个符号:

\documentclass{minimal}

\newcommand* \A {1}
\newcommand* \B {2}
\newcommand* \C {\A + \B}
\newcommand* \D {\C + 1}

\begin{document}
A = \A, B = \B, C = \C, D = \D
\end{document}

打印输出是A = 1, B = 2, C = 1+ 2, D = 1+ 2+ 1。有没有办法扩展宏以便A = 1, B = 2, C = 3, D = 4?我知道有\expandafter宏,但它的语法很粗暴。如果可能的话,我想保持 Latex 的简单性。

答案1

你不想“扩展”宏,而是想进行计算。扩展是将宏替换为其“替换文本”的过程。因此,当 TeX 找到\A它时,它会将其替换为1;然而,除非得到明确指示,否则 TeX 永远不会进行计算,因为它是一种旨在排版的语言,有人会想打印

2 + 2 = 4

4=4并且这不应该被引擎盖下的东西取代。

您可以轻松定义一个\compute用于处理整数的宏。

\documentclass{article}

\newcommand* \A {1}
\newcommand* \B {2}
\newcommand* \C {\A + \B}
\newcommand* \D {\C + 1}

\newcommand{\compute}[1]{\number\numexpr#1\relax}

\begin{document}
$A = \compute{\A}$, $B = \compute{\B}$, 
$C = \compute{\C}$, $D = \compute{\D}$
\end{document}

在此处输入图片描述

当然,\compute{\A}这并不是必需的,因为\A直接扩展为1

相关内容