我打算创建一个文档,其中部分文本是.csv
使用软件包datatool
(版本 2012/09/25 v2.11,在 debian 下手动更新)从文件条目中读取的。一切都按我想要的方式运行:
活动.csv:
"Role","Activity","NbActivity"
"Role 1","Activity A",1
"Role 1","Activity B",2
"Role 2","Activity C",3
读取以下.tex
文件:
\documentclass{minimal}
\usepackage[english]{babel}
\usepackage{datatool}
\DTLloaddb[]{activities}{activities.csv}
\begin{document}
\DTLforeach{activities}
{\role=Role, \activity=Activity, \NbA=NbActivity}{
\role
\activity \\
}
\end{document}
为了我想要创建的文档的目的,数据库的行应该按照“NbActivity”列中指示的数字进行复制,结果就像这样......
"Role","Activity","NbActivity"
"Role 1","Activity A",1
"Role 1","Activity B",2
"Role 1","Activity B",2
"Role 2","Activity C",3
"Role 2","Activity C",3
"Role 2","Activity C",3
...以便在文本中重复这些条目如下:
角色 1 活动 A
角色 1 活动 B
角色 1 活动 B
角色 2 活动 C
角色 2 活动 C
角色 2 活动 C
我尝试\DTLnewdbentry
按照建议使用和循环来解决这个问题重复命令 n 次?,但就是不知道该怎么做。我是 LaTeX 编程/宏的新手,非常希望得到任何帮助,谢谢。
答案1
如果您想复制数据库中的条目,我认为唯一的方法是使用新数据库,并在您逐步浏览原始数据库时在新数据库中创建条目。以下是活动数据库(从文件中读取的原始数据库),以及活动扩展数据库其中包含您想要的重复条目:
笔记:
- 我使用
\DTLforeach*
它来代替,因为我们处于我们正在逐步执行的 DB 的只读模式(并且速度更快)。
参考:
- 您应该知道在 \foreach 中向数据库添加成员时出现虚假空白以防您在输出中看到意外的空白。
代码:
\documentclass{article}
\usepackage{datatool}
\usepackage{pgffor}
%\usepackage{filecontents}% <-- commented out so file does not get overwritten
\begin{filecontents*}{activities.csv}
"Role","Activity","NbActivity"
"Role 1", "Activity A", 1
"Role 1", "Activity B", 2
"Role 2", "Activity C", 3
\end{filecontents*}
\begin{document}
\DTLloaddb{activities}{activities.csv}% Read original DB
\DTLnewdb{activitiesExpanded}% Initialize new DB
\noindent\textbf{activities DB:}
\DTLforeach*{activities}{%
\role=Role, \activity=Activity, \NbA=NbActivity% % <-- This percent is important
}{%
\par\noindent\role\ \activity
\dtlexpandnewvalue
\foreach \x in {1,...,\NbA} {% Duplicate entries as desired
\DTLnewrow{activitiesExpanded}
\DTLnewdbentry{activitiesExpanded}{Role}{\role}
\DTLnewdbentry{activitiesExpanded}{Activity}{\activity}
\DTLnewdbentry{activitiesExpanded}{NbActivity}{\NbA}
}%
}
\bigskip
\noindent\textbf{ActivitiesExpanded DB:}
\DTLforeach*{activitiesExpanded}{%
\role=Role, \activity=Activity, \NbA=NbActivity% <-- This percent is important
}{%
\par\noindent\role\ \activity
}
\end{document}