홀수 개의 중괄호를 사용하여 명령 정의

홀수 개의 중괄호를 사용하여 명령 정의

내 코드에서는 다음과 같이 '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켭니다 . - 확장은 토큰을 전달하지 않고 종료되기 전에 닫는 중괄호를 문자열화하고 삼키게 됩니다.\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
}%

관련 정보