使用来自 textpos 的文本块时,datatool 的 DTLforeach 中不可能存在段落

使用来自 textpos 的文本块时,datatool 的 DTLforeach 中不可能存在段落

我想使用 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与原始相同数量参数和相同替换文本的宏。

相关内容