编写宏来定义新命令并在本地调用它

编写宏来定义新命令并在本地调用它

我会编写一个宏\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

你的意思是这样的吗:

\documentclass[]{article}

\newcommand\defineanduse[2]
  {%
    \newcommand#1{#2}%
    #1%
  }

\begin{document}

\defineanduse\mycmd{abc}

\defineanduse\myothercmd{def}

\mycmd\myothercmd

\end{document}

在此处输入图片描述

答案2

当 TeX 找到控制序列时\foo,首先要区分两种情况:TeX 正在进行宏扩展,或者没有。后一种情况并不会影响您的情况,因此我们来看看前一种情况会发生什么。情况如下:

  1. 控制序列已被赋予含义,或
  2. 控制序列未定义。

在第一种情况下,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}

做你想做的事。

相关内容