在下面的代码中,我的数据集是{1,2,3,4}。
在没有过滤器的情况下,DTLiffirstrow 将在“1”处返回 true,而 DTLilastrow 将在“4”处返回 true。这正是我对这些函数的期望。
当我将数据集过滤为 {2,3} 时,DTLiffisrtrow 在“2”处返回 true。完美。
但 DTLilastrow 始终为 false。我希望它对值“3”返回 true。
\documentclass{article}
\usepackage{datatool}
\DTLnewdb{table}
\DTLnewrow{table}
\DTLnewdbentry{table}{C1}{1}
\DTLnewrow{table}
\DTLnewdbentry{table}{C1}{2}
\DTLnewrow{table}
\DTLnewdbentry{table}{C1}{3}
\DTLnewrow{table}
\DTLnewdbentry{table}{C1}{4}
\begin{document}
\DTLforeach*%
[\DTLisclosedbetween{\COne}{2}{3}]%
{table}%
{\COne=C1}%
{%
\COne%
\DTLiffirstrow{FIRST}{}%
\DTLiflastrow{LAST}{}%
\\%
}%
\end{document}
我如何检测过滤数据集的最后一行?
答案1
这不是一个错误,而是一个功能!
参见文档(datatool-code.pdf,第 199 页左右):
\DTLiflastrow{〈true part 〉}{〈false part 〉}
检查当前行是否是数据库的最后一行。它没有 采取条件(\DTLforeach 的可选参数)考虑到,因此它可能永远不会执行〈true part〉,因为数据库的最后一行可能不满足条件。
因此,它不是很有用,而且容易引起混淆,因为它的行为与接受条件的 \DTLiffirstrow 不同......