
私のコードでは、次のように入力して「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} %
}%
\iffalse
Gustavo Mezzetti の提案に従って、これを回避することもできます。
\newcommand\calltwocolumn{%
\expandafter\twocolumn
\expandafter[%
\expandafter{%
\iffalse}\fi
}%