나는 모든 선택적 인수가 누락되었는지 확인하기 위해 다음과 같은 정의를 사용했습니다.
\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}