我在作业中使用了一个序言,其中包含以下命令xparse
:
\ProvideDocumentCommand{\integral}{s m m e{_^}}{%
\int%
\IfValueT{#4}{_{#4}}%
\IfValueT{#5}{^{#5}}%
\IfBooleanTF{#1}{\parenth*{#3}}{#3}%
\odif{#2}%
}
这并不重要,但命令\parenth*{}
是我自己写的,\odif{}
来自衍生物包裹。
基本上,此代码执行以下操作:
\integral{z}{f(z)}_a^b
\integral{z}{f(z)}_C
变成:
我想改变此代码的行为方式,以便当给出参数 #4 但没有给出参数 #5 时,它会在命令主体的第一行使用\oint
in 代替。并且,在其他所有情况下,它都应保持原样,并具有功能。\int
\int
我知道有诸如etoolbox
之类的命令\ifboolexpr{expr}{true}{false}
,但如果我确实需要使用它,我不确定如何正确使用它。我最接近的例子是
\ProvideDocumentCommand{\integral}{s m m e{_^}}{%
\ifboolexpr{bool {#4} nand bool {#5}}{\oint}{\int}%
\IfValueT{#4}{_{#4}}%
\IfValueT{#5}{^{#5}}%
\IfBooleanTF{#1}{\parenth*{#3}}{#3}%
\odif{#2}%
}
但是,由于 #4 和 #5 不是布尔值,因此这不起作用。我不确定什么是实现我的目标的最简洁的方法。
答案1
您可以简单地利用已知的\IfValue(TF)
。为了实现A && !B
,可以按以下方式嵌套条件
\IfValueTF{#5}{\int}{\IfValueTF{#4}{\oint}{\int}}
\documentclass{article}
\usepackage{derivative}
\ProvideDocumentCommand{\integral}{s m m e{_^}}{%
\IfValueTF{#5}{\int}{\IfValueTF{#4}{\oint}{\int}}
\IfValueT{#4}{_{#4}}%
\IfValueT{#5}{^{#5}}%
\IfBooleanTF{#1}{\parenth*{#3}}{#3}%
\odif{#2}%
}
\begin{document}
\[
\integral{z}{f(z)}_a^b
\qquad
\integral{z}{f(z)}_C
\qquad
\integral{z}{f(z)}
\]
\end{document}