当 DTLforeach 与条件一起使用时,DTlilastrow 不起作用

当 DTLforeach 与条件一起使用时,DTlilastrow 不起作用

在下面的代码中,我的数据集是{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 不同......

相关内容