我从 CSV 文件中读取了一些数据,datatool
如下所示:
\documentclass{article}
\usepackage{datatool,filecontents}
\begin{filecontents*}{test.csv}
STUFF,NUMBER
"twentyfour",24
"thirtyone",31
"blank",
"minusseven",-7
\end{filecontents*}
\DTLloaddb{data}{test.csv}
\begin{document}
\newcounter{examplecounter}
\begin{tabular}{cc}
Stuff & Number \\
\hline
\DTLforeach*{data}{%
\TestStuff=STUFF,%assignments
\TestNumber=NUMBER% really just a number like 1, 2, 3...
}{%
\setcounter{examplecounter}{\TestNumber} % this does not work
\\
\TestStuff & \arabic{examplecounter}
}
\end{tabular}
\end{document}
我需要将导入的数字分配给计数器进行一些计算。基本上我需要类似\arabic{}
反向的东西。
我必须使用\DTLloaddb{}
而不能使用\DTLloadrawdb{}
,因为同一个 csv 文件包含一些带有 LaTeX 格式说明的打印良好的文本,例如\emph{}
。(我不知道会帮助...)
答案1
从 CSV 进行数字转换的工作方式与预期一致,允许您执行
\setcounter{<cntr>}{<cmd>}
其中。但是,如果结果为空白(或 null),<cmd>
则可能会出现问题。幸运的是<cmd>
datatool
提供了一个条件来检查这一点
\DTLifnullorempty{<cmd>}{<true>}{<false>}
这是一个简单的例子:
\documentclass{article}
\usepackage{datatool,filecontents}
\begin{filecontents*}{test.csv}
STUFF,NUMBER
"twentyfour",24
"thirtyone",31
"blank",
"minusseven",-7
\end{filecontents*}
\DTLloaddb{data}{test.csv}
\begin{document}
\newcounter{examplecounter}
\begin{tabular}{cc}
Stuff & Number \\
\hline
\DTLforeach*{data}{%
\TestStuff=STUFF,%assignments
\TestNumber=NUMBER% really just a number like 1, 2, 3...
}{%
\DTLifnullorempty{\TestNumber}{}{\setcounter{examplecounter}{\TestNumber}} % this does not work
\\
\TestStuff & \TestNumber
}
\end{tabular}
\end{document}