你能在 xparser 中创建布尔表达式吗?

你能在 xparser 中创建布尔表达式吗?

我在作业中使用了一个序言,其中包含以下命令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 时,它会在命令主体的第一行使用\ointin 代替。并且,在其他所有情况下,它都应保持原样,并具有功能。\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}

在此处输入图片描述

相关内容