我发现这个代码数据工具按什么分组?
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents*}{ff14.txt}
ClassID; Schueler_Name; Schueler_Vorname; Subject
5a; Stiner; Markus; Big Band
3c; Meier; Stefan; Latein
5b; Muggli; Elena; Instrument
3b; Strang; Flurin; Band
3b; Nomer; Ulrike; Big Band
\end{filecontents*}
\usepackage{datatool, etoolbox}
\DTLsetseparator{;}
\DTLloaddb{anmeldungen}{ff14.txt}
\begin{document}
% Taken from https://tex.stackexchange.com/q/108712/5764
\newcommand*{\uniqueclass}{}
\newcommand{\csvlistsep}{\renewcommand{\csvlistsep}{,}}
\DTLforeach*{anmeldungen}{\Class=ClassID}{%
\expandafter\DTLifinlist\expandafter{\Class}{\uniqueclass}%
{}% do nothing, already in list
{% add to list
\ifdefempty{\uniqueclass}%
{\let\uniqueclass\Class}% first element of list
{% append to list
\eappto\uniqueclass{,\Class}%
}%
}%
}
\newcommand{\nextrow}{}
\renewcommand{\do}[1]{%
\subsection*{Klasse #1}
\renewcommand{\nextrow}{}
\begin{tabular}{ll}
\hline
\textbf{Name} & \textbf{Vorname} \\ \hline
\DTLforeach{anmeldungen}
{\class=ClassID, \fn=Schueler_Vorname, \ln=Schueler_Name}
{\ifnum\pdfstrcmp{#1}{\class}=0
\eappto\nextrow{\ln \noexpand& \fn \noexpand\\}% Collect rows
\fi}%
\nextrow % Print table rows
\hline \hline
\end{tabular}
}
\expandafter\docsvlist\expandafter{\uniqueclass}
\end{document}
我现在正在努力为此创建一个“动态命令”。
我想要的是这样的一个命令:
\dyntemplate{databasename}{keyname}{
\begin{tabular}{ll}
Groupheader & Groupheader2...
\DTLforeach*{currentgroup}{\propone=PropOne,\proptwo=PropTwo}{
\propone & \proptwo
}
\end{tabular}
}
所以我最终也可以将它用于项目列表,如下所示:
\dyntemplate{databasename}{keyname}{
\subsection{Groupname}
\begin{itemize}
\DTLforeach*{currentgroup}{\propone=PropOne,\proptwo=PropTwo}{
\item \propone, \proptwo
}
\end{itemize}
}
其中 databasename 是我之前定义的数据库的名称,keyname 是分组的键。
我对这些宏还不太熟悉,我甚至连静态代码都搞不清楚,所以我很难为此创建自己的宏。还没有找到任何解决方案,不过这似乎是经常需要的东西,不是吗?