用奇数个括号定义命令

用奇数个括号定义命令

在我的代码中,我更改为“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 。反过来,-expansion 会导致字符串化并吞噬右括号,然后终止而不提供任何标记。\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
}%

相关内容