背景
我想创建一个包含学校网络用户数据的文档,并将其分发给用户。这应该按班级进行。
方法
用户数据以 csv 文件的形式提供。我习惯csvsimple
按如下方式处理它们。我知道有更好的方法来构造数据\newline
,但我想保持简单。
\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{filecontents}
\usepackage{csvsimple}
\begin{filecontents*}{user.csv}
Adam Apfel;5a
Alexander Arthur;5a
Arndt Albrecht;5a
Barbara Boll;5b
Bert Brüller;5b
Brian Blaumann;5b
Charles Chaume;5c
Claude Claudette;5c
\end{filecontents*}
\newcommand{\csvfilename}{user.csv}
\begin{document}
\csvreader[
separator=semicolon,
after line=\newline
]
{\csvfilename}
{1=\name, 2=\class}
{
\name, \class
}
\end{document}
问题
我想按类别打印用户信息。因此,类别更改后应该有一个分页符,并且我有一页(或多页)用于类别 5a,一页用于类别 5b,依此类推。
我尝试了很多不同的方法,但都不起作用。我的想法(在沮丧之后我删除了它...)是创建一个临时宏,保存当前类并将其与下一行的当前类进行比较。但我没有让它起作用。
答案1
您可以将 csv 列表中的实际类存储在命令中\lastclass
,并检查下一个是否仍然相同,然后执行\clearpage
。
请务必使用\edef
来更新的值,\lastclass
以便它在此刻更新。
\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{filecontents}
\usepackage{csvsimple}
\usepackage{ifthen}
\begin{filecontents*}{user.csv}
Adam Apfel;5a
Alexander Arthur;5a
Arndt Albrecht;5a
Barbara Boll;5b
Bert Brüller;5b
Brian Blaumann;5b
Charles Chaume;5c
Claude Claudette;5c
\end{filecontents*}
\newcommand{\csvfilename}{user.csv}
\begin{document}
\def\lastclass{}%
\csvreader[
separator=semicolon,
after line=\newline
]
{\csvfilename}
{1=\myname, 2=\myclass}
{%
\ifthenelse{\equal{\lastclass}{\myclass}}{}{%
\clearpage
\edef\lastclass{\myclass}%
}
\myname, \myclass
}
\end{document}