定义返回 true/false 的命令(多个条件)

定义返回 true/false 的命令(多个条件)

在使用datatool-package 时,我遇到了一些奇怪的事情。我有一个循环,每次迭代都会定义一些变量,这些变量稍后会被-package\DTLforeach中的命令使用datatool。该命令有一个可选参数,这些条件对于每次迭代都不同,因此需要使用命令进行声明(而不是复制表 14 次)。

我将使用包ifthen而不是datatool-包,因为它更常用。

\documentclass{article}
\usepackage{ifthen}

\def\One{abc}
\def\Two{cde}

\def\condition{\equal{\One}{\One} \AND \equal{\Two}{\Two}}

\begin{document}

\ifthenelse{\condition}{% if condition returns true
  True.
}{% if condition returns false
  False.
}

\end{document}

这会导致错误:

! Undefined control sequence
<argument> \AND

l.11 \ifthenelse{\condition}
                            {% if condition returns true

但是,如果你将 的内容复制粘贴到 的\condition第一个参数中,它就会起作用。用小写版本\ifthenelse替换也不起作用。错误消息变得更加复杂,但它仍然是一个未定义的控制序列。\AND\and

一种可能的解决方案是定义 2 个单独的条件。但这不是首选方法,因为条件数量并不总是限制为 2,我不会总是使用\AND,我必须在里面迭代它们\ifthenelse(我不知道是否可行),等等。此外,这会使代码不太清晰,因此如果有可能在一个变量中定义多个条件,那就太好了。

(我也尝试了\setboolean,但它只接受字符串truefalse,而没有实际条件)

答案1

这是扩展问题。您应该先扩展,\condition然后再将其传递给\ifthenelse。使用

\expandafter\ifthenelse\expandafter{\condition}{% if condition returns true
  True.
}{% if condition returns false
  False.
}

你会得到正确的结果。

相关内容