平均能量损失

平均能量损失

此代码使用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{}只是一个具有默认空值的可选参数。

这适用于空白参数、带有空格的参数甚至没有括号的参数。

相关内容