\section{Einleitung}\label{einleitung} Es ist mir klar, dass die wenigsten Leser Einleitungen lesen. Ich empfehle dennoch, diesen Abschnitt nicht zu überspringen, da er zu erläutern versucht, wa\-rum die Pakete sets und vhistory entwickelt wurden. So können Sie frühzeitig erkennen, ob sie Ihren Anforderungen gerecht werden. %\index{Versionshistorie|(} Bei Softwareprojekten entstehen (hoffentlich) viele Dokumente wie Spezifikation oder Entwurf. Diese Dokumente werden mehrfach überarbeitet. Um Änderungen direkt nachvollziehen zu können, sollten diese Dokumente eine sogenannte \emph{Versionshistorie} enthalten. Dabei handelt es sich um eine Tabelle, deren Einträge folgende Daten umfassen: \begin{itemize} \item eine Versionsnummer, \item das Datum der Änderung, \item die Kürzel der Personen, die die Änderungen vorgenommen haben (die Autoren), \item eine Beschreibung der Änderungen. \end{itemize} Bestimmte Daten der Versionshistorie sollen häufig an anderen Stellen im Dokument wiederholt werden. So soll typischerweise die Titelseite die aktuelle Versionsnummer und alle Autoren aufführen. Die Versionsnummer sollte außerdem auf allen Seiten des Dokuments, z.\,B. in einer Fußzeile, wiederholt werden. Dadurch kann leicht überprüft werden, ob eine Seite zur aktuellsten Version gehört oder schon veraltet ist. Normalerweise werden die Daten, die z.\,B. auf der Titelseite erscheinen, nicht aus der Versionshistorie übernommen, sondern an anderer Stelle erneut angegeben. Die Einträge der Versionshistorie werden in der Regel immer aktualisiert. In der Hektik wird aber meist vergessen, die Angaben für Titelseite etc. zu aktualisieren. Das Ergebnis sind inkonsistente Dokumente. Aus eigener Erfahrung weiß ich, dass die Angaben zu den Autoren praktisch nie stimmen, besonders wenn im Laufe der Zeit mehrere Personen an einem Dokument gearbeitet haben. %\index{Versionshistorie|)} Es wäre also schön, wenn der Autor eines Dokuments sich nur darum kümmern müsste, die Versionshistorie auf dem aktuellen Stand zu halten. Die Informationen auf der Titelseite und in Fußzeilen sollten automatisch aus der Versionshistorie generiert werden. Diese Anforderungen sind ohne einen gewissen Aufwand nicht umzusetzen, da beispielsweise die Titelseite erzeugt wird, bevor die Versionshistorie überhaupt gelesen wurde. Die relevanten Daten müssen deshalb in eine Datei geschrieben und noch vor Bearbeitung der Titelseite wieder eingelesen werden. Da für manche Anwendungen auch der Zeitpunkt, zu dem die aux-Datei eingelesen wird zu spät ist, wird eine eigene Datei mit der Endung hst angelegt. Für die Tabelle mit der Versionshistorie ist ebenfalls eine eigene Datei notwendig, doch dazu später. Ein anderes Problem stellt die Liste der Autoren dar. Diese Liste kann nicht einfach durch Aneinanderreihung der Autor-Einträge in der Versionshistorie erzeugt werden, da sonst einige Personen mehrfach auftreten würden. Dies war die Geburtsstunde des Pakets sets, mit dem einfache Mengen von Text verwaltet werden können. Die Menge aller Autoren wird bei jedem Eintrag in der Versionshistorie mit der Menge der angegebenen Autoren vereinigt. Die Menge aller Autoren kann dann in alphabetisch sortierter Form an beliebiger Stelle -- eben meist auf der Titelseite -- ausgegeben werden. Soweit zur Vorrede. Die beiden folgenden Abschnitte beschreiben die beiden Pakete eingehender und zeigen, wie man mit ihnen arbeitet. Dabei wurde darauf verzichtet, den Quellcode der Pakete wiederzugeben. Wer sich dafür interessiert, kann direkt in die Quellen schauen. Ich habe versucht, den Quellcode so zu strukturieren und zu kommentieren, dass er lesbar ist. %Außerdem habe ich einen Trick angewandt, der sich unter \TeX{}nischen Programmierern leider kaum herumgesprochen hat; ich habe Kommentare sowohl zwischen, als auch innerhalb der Makros eingefügt.