此代码使用LaTeX3, 这解析-package 以及具体\IfNoValueTF
命令,如Robertson 的回答致 OP”带有和不带有可选参数的不同命令定义“。
如果你想使用一个名为的命令\IfNoValueTF
,这个命令的名字似乎表明它检查一个参数是否包含任何值,那么你必须问一个问题力量返回的结果好像检查结果是“无值”,而在日常语言中,人们会认为该参数中确实没有非空值。
但恰恰相反...\IfNoValueTF
似乎只检查是否有括号。请查看下面不言自明的 MWE,它检查是否包含第三个参数。
当然,很可能我只是误解了如何使用\IfNoValueTF
或\DeclareDocumentCommand \mainentry { m m o } {%
。
平均能量损失
\documentclass[a4paper]{article}
\usepackage{xparse}
\DeclareDocumentCommand \mainentry { m m o } {%
\IfNoValueTF {#3} {%
\Large {\bfseries#1} \endgraf #2 \scriptsize NO \normalsize \vskip 1cm
}{%
\Large {\bfseries#1} \endgraf #2 \endgraf #3 \scriptsize YES \normalsize \vskip 1cm
}%
}
\begin{document}
A) There should be a YES here. OK.
\mainentry{
first
}{
second
}[
third
]
B) There should be a NO here. OK.
\mainentry{
first
}{
second
}
C) There should be a NO here. FAIL.
\mainentry{
first
}{
second
}[]
D) There should be a NO here. FAIL.
\mainentry{
first
}{
second
}[
]
E) There should be a NO here. FAIL.
\mainentry{
first
}{
second
}[
%
]
\end{document}
答案1
按照Ulrike Fischer 的评论,结合Manuel 的第一条评论:
必须改变路线
\DeclareDocumentCommand \mainentry { m m o } {%
\IfNoValueTF {#3} {%
进入
\DeclareDocumentCommand \mainentry { m m O{} } {%
\tl_if_blank:nTF { #3 } {%
Manuel 的第二条评论解释说 forO{}
只是一个具有默认空值的可选参数。
这适用于空白参数、带有空格的参数甚至没有括号的参数。