
아마도 etoolbox 또는 expl3 문제일 수 있는데 어떻게 해결해야 할지 모르겠습니다. 나는 문서를 컴파일합니다:
\documentclass{article}
\usepackage{expl3,etoolbox}
\begin{document}
\ExplSyntaxOn
\newcommand{\test}[1][true]{
\str_case:nnF {#1}{
{true}
{\message{true}
}
}
}
\AfterEndEnvironment{equation}{\test}
\begin{equation}
0
\end{equation}
\ExplSyntaxOff
\end{document}
그리고 오류가 발생합니다: ! 추가 \fi. \end ...if@ignore @ignorefalse \ignorespaces \fi
l.15 \end{equation} 이 문제를 해결하도록 도와주세요. 도움을 주신 모든 분들께 감사드립니다.
답변1
대답이 틀렸습니다. 대신 @egreg의 답변을 사용하세요.
답변2
문제는 을 사용 \str_case:nnF
하지만 공급만 한다는 것입니다.둘이에 대한 인수는 세 가지 대신 필요하므로 하나를 더 찾습니다.
\documentclass{article}
\usepackage{expl3,etoolbox}
\begin{document}
\ExplSyntaxOn
\newcommand{\test}[1][true]{
\str_case:nn {#1}{
{true}
{\message{true}
}
}
}
\AfterEndEnvironment{equation}{\test}
\begin{equation}
0
\end{equation}
\ExplSyntaxOff
\end{document}
더 깔끔한 코딩과 xparse
:
\documentclass{article}
\usepackage{xparse,etoolbox}
\ExplSyntaxOn
\NewDocumentCommand{\test}{O{true}}
{
\str_case:nn {#1}
{
{true}{\message{true}}
}
}
\ExplSyntaxOff
\AfterEndEnvironment{equation}{\test}
\begin{document}
\begin{equation}
0
\end{equation}
\end{document}
언어 의 장점 중 하나 expl3
는 모든 함수에 예상되는 인수 수와 그 성격을 설명하는 시그니처가 있다는 것입니다. 글쎄요, 지정자가 있지만 w
이는 일반적으로 상위 수준 코드가 아닌 내부 코드로 이관됩니다.
두 가지 주요 인수 지정자는 N
및 입니다 n
. 전자는 함수가 단일 토큰으로 구성된 인수를 예상함을 나타내고 후자는 중괄호 안에 인수를 지정합니다.
다음에는 와 매우 유사한 T
및 지정자가 옵니다 . 즉, 중괄호 인수가 필요합니다. 이러한 지정자는 조건부 분기를 수행하는 함수에 사용됩니다.F
n
다른 인수 지정자는 다음 을 통해 정의된 서명에만 나타날 수 있는 c
, o
, V
, v
, 및 입니다 .e
f
x
\cs_generate_variant:Nn
c
제어 시퀀스 이름이 형성될 중괄호 인수를 지정합니다.o
주 함수에 전달되기 전에 내용이 한 번 확장될 중괄호 인수를 지정합니다.V
변수 이름 부동 소수점이어야 하는 단일 토큰(중괄호가 없는) 인수를 지정합니다. 변수의 값은 중괄호로 묶인 인수로 주 함수에 전달됩니다.v
와 비슷V
하지만 인수는 중괄호로 작성되어야 합니다. 변수 이름이 형성되고 그 이후의 동작은V
;e
, 기본 함수에 전달되기 전에 확장될 중괄호 인수를 지정합니다f
.x
따라서 귀하의 경우 \str_case:nnF
함수는 기대합니다삼인수. TeX는 세 번째 것을 찾을 것이고 그 결과는 메인 입력 스트림에서 다음에 나오는 내용에 따라 임의의 쓰레기일 수 있습니다. 우연히도 \test
매크로를 호출해도 \BeforeBeginEnvironment
문제가 발생하지 않습니다.