我会编写一个宏\defineThisCommand
来定义一个新命令\TheCommand
,然后在本地调用它。代码应该是这样的:
\defineThisCommand{}{
\newcommand \ThisCommand{
#1
}
\ThisCommand
}
\begin{document}
\defineTopicOne{Some text printed}
\defineTopicTwo{and this too}
\end{document}
最后生成输出
Some text printed
and this too
请问,您能建议我一种解决这个问题的方法吗?
答案1
答案2
当 TeX 找到控制序列时\foo
,首先要区分两种情况:TeX 正在进行宏扩展,或者没有。后一种情况并不会影响您的情况,因此我们来看看前一种情况会发生什么。情况如下:
- 控制序列已被赋予含义,或
- 控制序列未定义。
在第一种情况下,TeX 使用适合上下文的含义:如果\foo
是宏,它将被扩展,如果是标记,\chardef
则会打印相应的字符,等等。
在第二种情况下,TeX 将停止,发出错误消息,并且忽略未定义的标记。
因此你不能按照你想的方式做,除非你之前定义了一堆宏
\newcommand\defineThisCommand[1]{\newcommand\ThisCommand{#1}\ThisCommand}
对于您需要的每个本地命令。这显然违背了您的意图:\defineOtherCommand
如果您之前没有定义它,您就无法拥有它。
要使用的策略是使用通用宏二参数:
\newcommand\define[2]{%
\newcommand#1{#2}% define the local command
#2% and also use it now
}
你可以说
\define\ThisCommand{whatever}
做你想做的事。