我有一个非常简单的问题,但一直无法找到简单的答案。这是关于宏扩展的。
假设我定义了 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
。