我想使用 datatool 和 textpos 包打印标签。
然而,当我在 \DTLforeach 循环内的文本框中插入一个段落时,我收到“段落在 \DTLifnumeq 完成之前结束。”错误消息。
以下示例可以顺利编译:
文件 testdb.csv:
field1,field2,field3
row11,row12,row13
row21,row22,row23
文件 example01.tex:
\documentclass[11pt,a4paper]{article}
\usepackage[absolute]{textpos}
\usepackage{datatool}
\DTLloadrawdb{testdb}{testdb.csv}
\begin{document}
\DTLforeach*{testdb}{\addFieldi=field1}{%
\DTLifnumeq{\DTLcurrentindex}{1}{%
\begin{textblock}{3}(1,1)
\addFieldi
more text.
\end{textblock}%
}{}%
}
\end{document}
在 \addFieldi 命令后插入一个段落之后,示例(称为 example02.tex)不再编译:
文件 example02.tex:
\documentclass[11pt,a4paper]{article}
\usepackage[absolute]{textpos}
\usepackage{datatool}
\DTLloadrawdb{testdb}{testdb.csv}
\begin{document}
\DTLforeach*{testdb}{\addFieldi=field1}{%
\DTLifnumeq{\DTLcurrentindex}{1}{%
\begin{textblock}{3}(1,1)
\addFieldi
more text.
\end{textblock}%
}{}%
}
\end{document}
我找不到解决该错误的解决方案。
非常感谢你的帮助!
答案1
问题是宏\DTLifnumeq
不接受\par
(或空行)作为参数。从技术角度来说,它不是\long
。您可以修改它,采用我在我的这个答案:
\usepackage{datatool}
\begingroup
\toks0=\expandafter{\DTLifnumeq{#1}{#2}{#3}{#4}}
\edef\x{\endgroup
\long\def\noexpand\DTLifnumeq##1##2##3##4{\the\toks0 }}\x
\DTLloadrawdb{testdb}{testdb.csv}
现在您的宏将会满意\par
并且有空行。
技术说明
我们将其存储在\toks0
第一级扩展中,\DTLifnumeq
并将其重新定义为具有\long
与原始相同数量参数和相同替换文本的宏。