我遇到了一个非常复杂且难以解释的问题:
我正在使用自己的命令,如果在主文件中调用它们,它们将创建并填充保存框tex
。像这样:
\newcommand{\Hello}[1]{\newsavebox{\HelloBox}\sbox{\Hellobox}{#1}}
在文档的后面,这些框被调用并显示:
\usebox{\Hellobox}
这很好用。我通过这个实现的功能是,命令在主文档中给出,我可以按照我想要的方式对齐和布局它们,无论何时给出哪个命令。
我的问题:这必须是有条件的,即:如果\Hello
在主文档中没有调用该命令,\usebox{\Hellobox}
则也不能调用,因为显然它不会起作用,因为没有创建该框。不幸的是,我不能使用 if
建筑。
我试图通过伪代码实现以下目标:
if \Hello is being called in the main document
create a savebox and fill it with content
if \Hello is not being called in the main document
maybe create the savebox, but don't call it
答案1
在另一个宏中分配寄存器通常不是一个好主意,因为如果您重新运行该命令,则每次都会分配一个新寄存器。e-tex 比经典 TeX 拥有更多的寄存器(经典 TeX 只有 256 个,其中一半通常在您启动之前使用)
\newsavebox{\HelloBox}
\newcommand{\Hello}[1]{\sbox{\Hellobox}{#1}}
然后你可以使用
\usebox{\Hellobox}
它会表现得像\mbox{}
没有设置一样,或者如果你不想要,你可以使用
\ifvoid\Hellobox\else\usebox{\Hellobox}\fi