背景

背景

背景

我想创建一个包含学校网络用户数据的文档,并将其分发给用户。这应该按班级进行。

方法

用户数据以 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}

相关内容