Определите команду с нечетным количеством фигурных скобок.

Определите команду с нечетным количеством фигурных скобок.

В своем коде я переключаюсь в режим «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
}%

Связанный контент