将数字字母转换为计数器兼容数字?(datatool,newcounter)

将数字字母转换为计数器兼容数字?(datatool,newcounter)

我从 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}

相关内容