我正在尝试使用来自外部文件 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}