\newif를 사용하여 수학 모드에서 줄바꿈과 앰퍼샌드를 삽입할 수 없습니다.

\newif를 사용하여 수학 모드에서 줄바꿈과 앰퍼샌드를 삽입할 수 없습니다.

나는 수학 표현식이 포함된 많은 매크로를 사용하여 강의 노트와 비머 슬라이드를 작성합니다. 나는 비머를 실행하고 있는지 여부에 따라 조건부로 포맷할 수 있기를 원합니다. 그래서 나는 \newif작동하는 문을 사용하여 조건부 코드를 작성했습니다.제외하고\\및 같은 서식 지정 문자를 포함하려고 할 때 &, 이 경우 비머에서 오류가 발생합니다. 다음은 샘플 코드입니다. 세 줄의 코드가 있습니다 \ifThenBeamer. 처음 두 줄은 동일한 오류를 발생시킵니다. 즉,

! Missing } inserted.
<inserted text> 
                }
l.40 \end{frame}

세 번째 줄은 괜찮습니다.

\documentclass{beamer}
\newif\ifConditionOnBeamer
\makeatletter
\def\isConditionOnBeamer#1{
        \ifnum\pdf@strcmp{\useBeamer}{#1}=0
                \ConditionOnBeamertrue
        \else
                \ConditionOnBeamerfalse
        \fi
}
\makeatother
\def\useBeamer{on}
\def\BeamerOn{\isConditionOnBeamer{on}}
\def\BeamerOff{\isConditionOnBeamer{off}}
\def\ifThenBeamer#1#2{
    \ifConditionOnBeamer
        {#1}
    \else
        {#2}
    \fi
}
\BeamerOn
\begin{document}
\begin{frame}
\begin{align}
\ifThenBeamer{a \\ b}{c   d} %This throws a Missing } inserted error
\ifThenBeamer{a & b}{c   d}%This throws a Missing } inserted error
\ifThenBeamer{a b}{c   d}
\end{align}
\end{frame}
\end{document}

누군가 오류가 발생하는 이유와 해결 방법을 설명해 주시겠습니까? 아니면 해결 불가능한 경우 해결 방법이 있나요?

감사해요!

답변1

환경은 align내부적으로 테이블( \halign)을 사용하고 매크로는 \ifThenBeamer인수 주위에 그룹 중괄호를 넣습니다. 그룹은 테이블 셀과 라인의 그룹을 엉망으로 만듭니다. 중괄호가 없으면 예제가 작동합니다.

\def\ifThenBeamer#1#2{
    \ifConditionOnBeamer
        #1%
    \else
        #2%
    \fi
}

보다 방어적인 버전은 처음에 조건문의 확장을 이동합니다.

\makeatletter
\newcommand*{\ifThenBeamer}{%
  \ifConditionOnBeamer
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
}
\makeatother

먼저 \ifConditionOnBeamer호출됩니다. 그런 다음 \expandafter분기에서 종료를 실행 \else하거나 조건부에서 다음 토큰 없이 \fi. It remains\@firstoftwo or\@secondoftwo . The macro reads the two arguments and selects one of them. Then#1 #2`가 호출됩니다.or

관련 정보