奇数個の括弧でコマンドを定義する

奇数個の括弧でコマンドを定義する

私のコードでは、次のように入力して「2 列」モードに変更します。

\twocolumn[{

新しいコマンドを作成して、このコードを簡素化しようとしています:

\renewcommand{\twocolumn}{\twocolumn[{}

この新しいコマンドに括弧と中括弧を挿入することは可能ですか? これを実行すると多くのエラーが発生します。

答え1

シーケンス

\renewcommand{\twocolumn}{\twocolumn[{}

\twocolumnは、とりわけ自分自身を呼び出すコマンドを定義します。TeX capacity exceeded再帰中に開き括弧と開き中括弧が多すぎると、エラー メッセージなどでコンパイルが終了するような再帰ループが発生します。

また、これは\twocolumnマクロ パッケージ内などで使用される可能性のあるマクロです。これを再定義すると、 の本来の意味に依存している (パッケージ) コードで問題が発生する可能性があります\twocolumn

おそらく、呼び出し用の独自のマクロを定義することも\twocolumn オプションになるかもしれません:

\makeatletter
\newcommand\calltwocolumn{%
  \expandafter\twocolumn
  \expandafter[%
  \expandafter{%
  \romannumeral0\expandafter\@gobble\string} %
}%
\makeatother

このコマンドにより、\calltwocolumn次のトークンが生成されます。

  \expandafter\twocolumn
  \expandafter[%
  \expandafter{%
  \romannumeral0\expandafter\@gobble\string} %

-chainは、実行される 前に -expansion\expandafterをオンにします。次に、-expansion は文字列化につながり、閉じ括弧を飲み込んでから、トークンを配信せずに終了します。\romannumeral\twocolumn\romannumeral

を使うことに抵抗を感じる人もいます\makeatletter。 を使うことでそれを回避できます\csname:

\newcommand\calltwocolumn{%
  \expandafter\twocolumn
  \expandafter[%
  \expandafter{%
  \romannumeral0\csname @gobble\expandafter\endcsname\string} %
}%

\iffalseGustavo Mezzetti の提案に従って、これを回避することもできます。

\newcommand\calltwocolumn{%
  \expandafter\twocolumn
  \expandafter[%
  \expandafter{%
  \iffalse}\fi
}%

関連情報