\IfStrEqCase의 마지막 선택적 매개변수에 문제가 있습니다.

\IfStrEqCase의 마지막 선택적 매개변수에 문제가 있습니다.

제가 당황스러운 질문을 한 지 꽤 시간이 지났고 이것이 그 중 또 다른 질문이라고 확신합니다. 아래 코드는 다음 \IfStrEqCase에서 사용하려고 시도합니다.패키지xstring결과는 다음과 같습니다.

Runaway argument? 
{document} \par \par \par \documentclass {article} \usepackage {pgfpl\ETC.
! File ended while scanning use of \@xs@testcase.

일치하는 사례가 없는 경우인데 이유를 모르겠습니다.

노트:

암호:

\documentclass{article}
\usepackage{xstring}

%\newcommand{\CaseVar}{case A}% This works
%\newcommand{\CaseVar}{case B}%  This works
\newcommand{\CaseVar}{case C}% This does NOT!!!

\begin{document}
    \IfStrEqCase{\CaseVar}{%
        {case A}{Found Case A}
        {case B}{Found Case B}
    }[Oppsss, unknown case '\CaseVar'.]
\end{document}

답변1

사례를 확인하는 내부 매크로는 \@xs@testcase. 원래 입력을 사용하여 \tracingmacros=1다음을 찾습니다.

\@xs@testcase #1#2#3\@xs@nil ->\@xs@reserved@E {\CaseVar }{#1}{#2}{\@xs@ifempty
 {#3}{Oppsss, unknown case '\CaseVar '.}{\@xs@testcase #3\@xs@nil }}
#1<-case A
#2<-Found Case A
#3<- {case B}{Found Case B} 

첫 번째 테스트를 위해; 뒤에 줄 끝으로 인해 공백이 생기는 것을 볼 수 있습니다 {Found Case A}. 이 공간은 다음 테스트에서 고려되지 않기 때문에 문제가 되지 않습니다.

\@xs@testcase #1#2#3\@xs@nil ->\@xs@reserved@E {\CaseVar }{#1}{#2}{\@xs@ifempty
 {#3}{Oppsss, unknown case '\CaseVar '.}{\@xs@testcase #3\@xs@nil }}
#1<-case B
#2<-Found Case B
#3<- 

문제가 보이시나요? 세 번째 인수는 \@xs@testcase다음으로 구분되며 \@xs@nil이 경우 공백은 토큰 목록만큼 인수만큼 좋습니다. TeX는 찾을 때만 공백을 무시합니다.무제한인수.

%해당 종류의 입력 스타일을 사용하는 경우 줄 끝에 추가하세요 .

아마도 .xstring\ifblank\ifempty

답변2

해결 방법은 다음과 같습니다 \IfStrEqCase. 항상 일치하는 사례가 포함되도록 재정의하세요. \IfEqCase에도 동일한 접근 방식이 적용됩니다.

\documentclass{article}
\usepackage{xstring}

%\newcommand{\CaseVar}{case A}% This works
%\newcommand{\CaseVar}{case B}%  This works
\newcommand{\CaseVar}{case C}% Prints "Unknown case 'case C'."

% redefine \IfStrEqCase
\let\XstringIfStrEqCase\IfStrEqCase
\renewcommand\IfStrEqCase[2]{%
    \XstringIfStrEqCase{#1}{%
        #2%
        {#1}{Unknown case '#1'.}%
    }%
}

\begin{document}
    \IfStrEqCase{\CaseVar}{%
        {case A}{Found Case A}
        {case B}{Found Case B}
    }
\end{document}

관련 정보