
В своем коде я переключаюсь в режим «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 \expandafter
включит \romannumeral
-expansion до того, как \twocolumn
будет выполнено.
\romannumeral
-expansion, в свою очередь, приведет к строкообразованию и поглощению закрывающей скобки перед завершением без доставки какого-либо токена.
Некоторые люди неохотно используют \makeatletter
. Вы можете избежать этого, используя \csname
:
\newcommand\calltwocolumn{%
\expandafter\twocolumn
\expandafter[%
\expandafter{%
\romannumeral0\csname @gobble\expandafter\endcsname\string} %
}%
Вы также можете избежать этого, используя \iffalse
совет Густаво Меццетти:
\newcommand\calltwocolumn{%
\expandafter\twocolumn
\expandafter[%
\expandafter{%
\iffalse}\fi
}%