在使用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
,但它只接受字符串true
或false
,而没有实际条件)
答案1
这是扩展问题。您应该先扩展,\condition
然后再将其传递给\ifthenelse
。使用
\expandafter\ifthenelse\expandafter{\condition}{% if condition returns true
True.
}{% if condition returns false
False.
}
你会得到正确的结果。