xparse: \NoValue 없음 -> 지금 여러 NoValue를 확인하는 방법은 무엇입니까?

xparse: \NoValue 없음 -> 지금 여러 NoValue를 확인하는 방법은 무엇입니까?

나는 모든 선택적 인수가 누락되었는지 확인하기 위해 다음과 같은 정의를 사용했습니다.

\NewDocumentCommand \question {o o o m} {
    \bool_if:nTF {
        \str_if_eq_p:nn { \NoValue } { #1 } &&
        \str_if_eq_p:nn { \NoValue } { #2 } &&
        \str_if_eq_p:nn { \NoValue } { #3 }
     } {
         <DO STUFF 1>
     } {
         <DO STUFF 2>
     }
}

하지만 최신 xparse업데이트로 인해 문제가 발생했습니다. 이제 매크로만 있는 것 같지만 \IfNoValueTF{}{}{}그 중 하나를 반복해야 합니다 DO STUFF x. 나는 읽었 xparse.sty지만 "해킹"으로 인해 더 이상 쉬운 해결책이 없는 것 같습니다 QNoValue-.

어떤 아이디어가 있나요?

답변1

편집하다:빈 값은 "값 없음"이 아니므로 첫 번째 옵션이 제공되는지 확인하는 것으로 충분합니다.

\ExplSyntaxOn
\NewDocumentCommand \question { o o o m } {
    \IfNoValueTF { #1 } {
         <DO STUFF 1>
     } {
         <DO STUFF 2>
     }
}
\ExplSyntaxOff

그러나 예상되는 입력 유형에 따라 전체적으로 다른 구문이 더 나은 방법일 수 있습니다. 세 가지 선택적 인수는 대부분의 경우 명령을 불필요하게 복잡하게 만듭니다. keyval과 유사한 입력을 기대하는 하나의 선택적 인수가 더 나은 선택이 될 수 있을까요?

이전 답변:

아이디어는 다음과 같습니다.

\documentclass{article}
\usepackage{expl3,xparse}

\ExplSyntaxOn
\NewDocumentCommand \question {O{\NoValue} O{\NoValue} O{\NoValue} m} {
    \bool_if:nTF {
        \str_if_eq_p:nn { \NoValue } { #1 } &&
        \str_if_eq_p:nn { \NoValue } { #2 } &&
        \str_if_eq_p:nn { \NoValue } { #3 }
     } {
         <DO STUFF 1>
     } {
         <DO STUFF 2>
     }
}
\ExplSyntaxOff

\begin{document}

\question{}

\question[]{}

\question[][]{}

\question[][][]{}
\end{document}

관련 정보