
Я бы написал макрос \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}
делать то, что хочешь.