计算 datatools foreach 中的时间差

计算 datatools foreach 中的时间差

我正在尝试使用来自外部文件 data.csv 的一些计算来构建一个表格:

From,To,Task
10:00,11:00,Task1
11:00,13:13,Task2

我正在使用 datatool 读取 csv,并使用 foreach 输出数据。但是,在计算 10:00 - 11:00 (=60 分钟) 的时间差时,我遇到了问题。我有宏 \dur,但它在 foreach 中不起作用 -.-

这是我的 tex 代码:

\documentclass{article}

\usepackage{datatool}
\usepackage{fp}

\DTLloaddb{data}{data.csv}

\def\dur#1#2{\the\numexpr(\xdur#2\relax)-(\xdur#1\relax)\relax\ }
\def\xdur#1:#2\relax{(#1)*60+#2}

\begin{document}

Here dur works:
\dur{10:00}{13:30} \par

Here dur does not work:
\DTLforeach{data}{\from=From,\to=To}{\from--\to=\dur{\from}{\to} \par}

\end{document}

所以我的问题是如何创建一个宏来计算 foreach 中的时间差。我还想总结一下结果。

(我已经成功地通过使用 fp 像这样总结了读入的值:\DTLforeach{scores}{\score=Score}{\FPeval\result{clip(\result+\score)}},但我需要将持续时间作为变量传递到那里)

答案1

调用\xdur\from不起作用,因为在\xdur寻找参数时 TeX 不会扩展标记。

您必须先扩展参数,然后\xdur再扩展。当时间明确给出时,\expandafter不会产生任何效果,但也不会造成任何伤害。

\begin{filecontents*}{\jobname.csv}
From,To,Task
10:00,11:00,Task1
11:00,13:13,Task2
\end{filecontents*}

\documentclass{article}

\usepackage{datatool}

\DTLloaddb{data}{\jobname.csv}

\def\dur#1#2{%
  \the\numexpr\expandafter\xdur#2\relax-\expandafter\xdur#1\relax\relax
}
\def\xdur#1:#2\relax{(#1)*60+#2}

\begin{document}

Here dur works:
\dur{10:00}{13:30} \par

Here too:
\DTLforeach{data}{\from=From,\to=To}{\from--\to=\dur{\from}{\to} \par}

\end{document}

在此处输入图片描述

相关内容