
내 코드에서는 다음과 같이 '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} %
}%
\iffalse
Gustavo Mezzetti가 제안한 대로 사용하는 것을 피할 수도 있습니다 .
\newcommand\calltwocolumn{%
\expandafter\twocolumn
\expandafter[%
\expandafter{%
\iffalse}\fi
}%