新しいコマンドを定義してローカルで呼び出すマクロを書く

新しいコマンドを定義してローカルで呼び出すマクロを書く

\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、まず区別すべき 2 つのケースがあります。TeX がマクロ展開を行っているか、行っていないかのどちらかです。後者のケースは状況によっては問題にならないので、前者のケースで何が起こるかを見てみましょう。ケースは次のとおりです。

  1. 制御シーケンスに意味が割り当てられている、または
  2. 制御シーケンスは未定義です。

最初のケースでは、TeX はコンテキストに適した意味を使用します。\fooマクロの場合はマクロが展開され、トークンの場合は\chardef対応する文字が印刷される、などとなります。

2番目のケースでは、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}

やりたいことをやる。

関連情報