% \iffalse Meta-Kommentar
%
% Copyright (C) 1997 Projektgruppe ACIT, Lehrstuhl VII,
%                    Fachbereich Informatik, Universit"at Dortmund
%               1997-1999,2006,2009-2012 Thomas Leineweber (protocol@tleine.de)
% 
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
% The latest version of this license is in
%   http://www.latex-project.org/lppl.txt
% and version 1.3 or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
%
% This work has the LPPL maintenance status `maintained'.
% 
% The Current Maintainer of this work is Thomas Leineweber.
%
% This work consists of the files protocol.dtx and protocol.ins,
% protest.tex, readme
% and the derived file protocol.cls.
%
%
% Dies ist der dokumentierte Makrocode zur Erzeugung und Dokumentation
% der LaTeX-Klasse `protocol'.
% \fi
%
% \CheckSum{380}
%% \CharacterTable
%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%%   Digits        \0\1\2\3\4\5\6\7\8\9
%%   Exclamation   \!     Double quote  \"     Hash (number) \#
%%   Dollar        \$     Percent       \%     Ampersand     \&
%%   Acute accent  \'     Left paren    \(     Right paren   \)
%%   Asterisk      \*     Plus          \+     Comma         \,
%%   Minus         \-     Point         \.     Solidus       \/
%%   Colon         \:     Semicolon     \;     Less than     \<
%%   Equals        \=     Greater than  \>     Question mark \?
%%   Commercial at \@     Left bracket  \[     Backslash     \\
%%   Right bracket \]     Circumflex    \^     Underscore    \_
%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%%   Right brace   \}     Tilde         \~}
%
% \title{\LaTeX-Dokumentklasse zur Erstellung von Sitzungs-Protokollen}
% \author{Thomas Leineweber}
% \maketitle
% \tableofcontents
% 
% \section{Identifizierung und Dokumentation}
%
%    Diese Dokumentklasse kann nur mit \LaTeXe\ benutzt werden. Deshalb
%    wird sichergestellt, da\ss eine entsprechende Fehlermeldung ausgegeben
%    wird, falls ein anderes \TeX-Format benutzt wird.
%    \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
%    \end{macrocode}
%
%    Nenne den Klassennamen und die Version.
%    \begin{macrocode}
%<+protocol>\ProvidesClass{protocol}
%<+protocol>              [2012/02/18 v1.13
%<+protocol>               LaTeX-Class fuer Sitzungs-Protokolle TL]
%    \end{macrocode}
%
%
%    Es gibt eine eigene Klasse um \LaTeXe-Klassen zu dokumentieren.
%    \begin{macrocode}
%<*driver>
\documentclass[a4paper]{ltxdoc}
%    \end{macrocode}
%    Setze entsprechende Optionen. Die Zeilen sollen numeriert werden
%    und der Index soll in die Zeilen verweisen. Au"serdem wird auf
%    Deutsch dokumentiert.
%    \begin{macrocode}
\CodelineNumbered
\CodelineIndex
\EnableCrossrefs
\RecordChanges
\setcounter{StandardModuleDepth}{1}
\usepackage{german}
\usepackage[T1]{fontenc}
%    \end{macrocode}
%    Alle Details sollen ausgegeben werden.
%    \begin{macrocode}
\begin{document}
\DocInput{protocol.dtx}
\PrintIndex
\PrintChanges
\end{document}
%</driver>
%    \end{macrocode}
%
% \changes{v1.0}{1997/06/08}{Erste Version.}
% \changes{v1.2}{1997/06/09}{Dokumentation berichtigt}
% \changes{v1.4}{1999/01/07}{Ab sofort kann auch der Name der
% Gruppe ge"andert werden}
% \changes{v1.5}{1999/01/22}{Die Klasse hei"st ab sofort protocol und
% ist fuer generische Protokolle gedacht.}
% \changes{v1.6}{1999/02/05}{"Anderungen von Norbert G"overt eingebaut.}
% \changes{v1.6a}{1999/02/19}{Versuch, die Befehlsnamen anzugleichen}
% \changes{v1.7}{1999/07/30}{Endg"ultige Befehlsnamen festgelegt}
% \changes{v1.11}{2010/04/21}{Neues Macro \cs{place}, um den Ort der Sitzung anzugeben}
% \changes{v1.12}{2011/10/09}{Wenn \cs{nextplace} nicht angegeben wurde, dann wird der Text am Ende des Dokumentes zum Ort der n"achsten Sitzung nicht mehr ausgegeben.}
% \changes{v1.12}{2011/10/09}{Verbesserung der Ausgabe der Unterschriftenzeile.}
% \changes{v1.13}{2012/02/18}{Aufnahme von Aufgaben und Abstimmungen}
% \iffalse
% Copyright (C) 1997 Projektgruppe ACIT, Universit"at Dortmund
%               1997-1999,2006,2009-2012 Thomas Leineweber (protocol@tleine.de)
% all rights reserved.
% \fi
%
% \StopEventually
%
%
% \section{Grundeinstellungen}
%
% Hier werden die einzelnen Optionen deklariert und an die Klasse scrartcl,
% auf der alles basiert weitergegeben. Ein paar Optionen werden einfach
% ausgeschaltet.
% \changes{v1.3}{1997/06/10}{Verschiedene Optionen d"urfen in dieser Klasse
% nicht benutzt werden.}
% Die Optionen a5paper, b5paper, twocolumn und titlepage sind f"ur
% diese Klasse nicht vorgesehen und werden deshalb abgefangen.
%    \begin{macrocode}
\DeclareOption{a5paper}
     {\ClassError{protocol}{Option `a5paper' not supported}{}}
\DeclareOption{b5paper}
     {\ClassError{protocol}{Option `b5paper' not supported}{}}
\DeclareOption{twocolumn}
     {\ClassError{protocol}{Option `twocolumn' not supported}{}}
\DeclareOption{titlepage}
     {\ClassError{protocol}{Option `titlepage' not supported}{}}
%    \end{macrocode}
% Die Option [nonext] sorgt daf"ur, dass der Termin f"ur die n"achste
% Sitzung nicht ausgegeben wird. L"osche daf"ur am Anfang des Dokuments
% das Kommando \cs{\@makefoot}.
% \changes{v1.10}{2009/04/24}{Zus"atzliche Option nonext zum Unterdr"ucken des n"achsten Termins}
%    \begin{macrocode}
\DeclareOption{nonext}
     {\AtBeginDocument{\let\@makefoot\relax}}
%    \end{macrocode}
% Die Option [signatures] sorgt daf"ur, dass am Ende des Protokolls Platz
% f�r die Unterschriften von Sitzungsleiter und Protokollf�hrer eingebaut wird.
% Dabei wird das Makro |\@protocol@signatures| entsprechend gesetzt.
% \changes{v1.11}{2010/04/21}{Zus"atzliche Option signatures f"ur Unterschriftenzeile}
%    \begin{macrocode}
\DeclareOption{signatures}
     {\AtBeginDocument{\let\@protocol@signatures\protocol@signatures}}
%    \end{macrocode}

% Alle anderen Optionen werden an die Klasse scrartcl weitergegeben.
% \changes{v1.8}{2004/02/05}{Basisklasse article durch scrartcl ersetzt.}
%    \begin{macrocode}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{scrartcl}}
\ProcessOptions\relax
%    \end{macrocode}
%
%    Nun kann die Klasse scrartcl geladen werden.
%   \changes{v1.1}{1997/06/09}{\cs{LoadClassWithOptions} durch \cs{LoadClass}
%    ersetzt. Leider ist im PG-Pool noch eine verdammt alte \LaTeXe-Version.
%     Die Optionen m"ussen noch angepa"st werden.}
%   \changes{v1.3}{1997/06/10}{Der Befehl \cs{LoadClass} kann bleiben.}
%    \begin{macrocode}
\PassOptionsToClass{halfparskip}{scrartcl}
\LoadClass{scrartcl}
%    \end{macrocode}
%
% \section{Layout}
%
%  Zuerst werden ein paar zus"atzliche Befehle definiert, die einige 
%  Eigenschaften des Protokolls definieren.
%
% \subsection{Definitionen f"ur den Benutzer}
%
% \begin{macro}{\groupname}
%    \changes{v1.4}{1998/01/07}{Neues Makro \cs{pgname}}
%    \changes{v1.5}{1998/01/22}{\cs{pgname} in \cs{groupname} geaendert}
% \begin{macro}{\ProtocolGroupName}
%    \changes{v1.10}{2009/04/24}{Im Protokoll kann ab sofort das Makro \cs{ProtocolGroupName} genutzt werden. Es gibt den mit \cs{groupname} definierten Gruppennamen wieder aus.}
% \begin{macro}{\chair}
%    \changes{v1.6a}{1999/02/19}{\cs{vorsitz} in \cs{chair} umbenannt}
% \begin{macro}{\writer}
%    \changes{v1.6a}{1999/02/19}{\cs{protokoll} in \cs{writer} umbenannt}
% \begin{macro}{\date}
% \begin{macro}{\place}
%    \changes{v1.11}{2010/04/21}{Neues Makro \cs{place}}
% \begin{macro}{\begintime}
%    \changes{v1.6a}{1999/02/19}{\cs{beginn} in \cs{begintime} umbenannt}
% \begin{macro}{\endtime}
%    \changes{v1.6}{1999/02/05}{Neues Makro \cs{ende}}
%    \changes{v1.6a}{1999/02/19}{\cs{ende} in \cs{endtime} umbenannt}
% \begin{macro}{\nextdate}
% \begin{macro}{\nextplace}
%    \changes{v1.6}{1999/02/05}{Neues Makro \cs{nextplace}}
% \begin{macro}{\nexttime}
% Die folgenden Deklarationen, die hier mit Beispielen angegeben werden,
% stellen Informationen "uber die Sitzung zur Verf"ugung.
% \begin{itemize}
%   \item |\groupname{PG 296 -- ACIT}| : Nummer und/oder Name der
%   Gruppe, deren Sitzung protokolliert wird. Ist auf jeden Fall zu setzen. Hier wird auch das Makro \cs{ProtocolGroupName} gesetzt, mit dem der Gruppenname innerhalb des Protokolls ausgegeben werden kann.
%    \begin{macrocode}
\def\groupname#1{\gdef\@groupname{#1}\gdef\ProtocolGroupName{#1}}
%    \end{macrocode} 
%   \item |\chair{Lothar Laber}| : gibt an, wer den Vorsitz in der
%   Sitzung hatte. Mu"s definiert werden.
%    \begin{macrocode}
\def\chair#1{\gdef\@chair{#1}}
%    \end{macrocode}
%   \item |\writer{Siggi Schreiber}| : Wer Protokoll gef"uhrt
%   hat. Mu"s definiert werden.
%    \begin{macrocode}
\def\writer#1{\gdef\@writer{#1}}
%    \end{macrocode}
%   \item |\date{10. Juni 1997}| : Das Datum der Sitzung. Hierf"ur wird die
%          Standarddeklaration aus der Klasse article genommen. Wenn |\date|
%          nicht deklariert wird, wird das aktuelle Datum genommen.
%   \item |\place{Raum 4711}| : Ort der Sitzung, wenn nicht gesetzt, wird kein Sitzungsort ausgegeben.
%    \begin{macrocode}
\def\place#1{\gdef\protocol@place{#1}}
%    \end{macrocode}
%   \item |\begintime{08:30}| : Beginn der Sitzung. Mu"s ebenfalls
%   gesetzt werden.
%    \begin{macrocode}
\def\begintime#1{\gdef\@begintime{#1}}
%    \end{macrocode}
%   \item |\endtime{14:47}| : Ende der Sitzung. Mu"s auch
%   gesetzt werden.
%    \begin{macrocode}
\def\endtime#1{\gdef\@endtime{#1}}
%    \end{macrocode}
%   \item |\nextdate{17. Juni 1997}| : Datum der folgenden Sitzung.
%    \begin{macrocode}
\def\nextdate#1{\gdef\@nextdate{#1}}
%    \end{macrocode}
%   \item |\nextplace{Raum 08/15 im Geb"aude 4711}| : Ort der folgenden
%     Sitzung.
%    \begin{macrocode}
\def\nextplace#1{\gdef\@nextplace{#1}}
%    \end{macrocode}
%   \item |\nexttime{08:30}| : Uhrzeit der n"achsten Sitzung. Dito.
%    \begin{macrocode}
\def\nexttime#1{\gdef\@nexttime{#1}}
%    \end{macrocode}
% \end{itemize}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \subsection{Aufnahme von Aufgaben und Abstimmungen}
% \begin{macro}{\actionitem}
%    \changes{v1.13}{2012/02/18}{Neues Makro \cs{actionitem}}
% \begin{macro}{\vote}
%    \changes{v1.13}{2012/02/18}{Neues Makro \cs{vote}}
% Mit Hilfe der Kommandos \cs{actionitem} und \cs{vote} k�nnen im Verlauf des Protokolls
% vergebene Aufgaben und durchgef�hrte Abstimmungen systematisch formatiert werden.
% \begin{itemize}
%   \item |\actionitem{Erweitern der protocol-Klasse um Aufgaben}{Thomas Leineweber}{29.02.2012}| : Ausgabe einer Ausgabe mit den drei Parameter: Titel der Aufgabe, mit der Aufgabe betraute Person und Termin f�r die Aufgabe
%    \begin{macrocode}
\def\actionitem#1#2#3{\par Aufgabe: #1\\Verantwortlich: #2\\Termin: #3\par}
%    \end{macrocode} 
%   \item |\vote{Sollen wir etwas neues machen?}{5}{3}{12}{Der Beschluss wurde angenommen}| : Ausgabe, wie eine Abstimmung
%    abgelaufen ist. Der erste Parameter bestimmt den Text der Abstimmung, der zweite den Text f�r die Stimmen daf�r, der dritte den Text f�r die Stimmen dagegen, der vierte den Text f�r die Enthaltungen. Der f�nfte Parameter gibt das Ergebnis wieder.
%    Es kann bei den Texten wie schon beschrieben die Anzahl der Stimmen angegeben werden, es ist aber auch z.\,B. m�glich, Namen einzutragen:
%    |\vote{Sollen wir nichts neues machen?}{Willi, Horst}{Kevin}{keine}{Der Beschluss wurde mit einer Gegenstimme angenommen}|
%    \begin{macrocode}
\def\vote#1#2#3#4#5{\par Abstimmung: #1\\Stimmen daf�r: #2. Stimmen dagegen: #3. Enthaltungen: #4.\\Ergebnis: #5\par}
%    \end{macrocode}
% \end{itemize}
% \end{macro}
% \end{macro}
%
% \subsection{Interne Befehle zur Umsetzung}
% \begin{macro}{\@groupname}
%    \changes{v1.4}{1998/01/07}{Neues Makro \cs{@pgname}}
%    \changes{v1.5}{1998/01/22}{\cs{@pgname} in \cs{@groupname} geaendert}
% \begin{macro}{\@chairman}
% \begin{macro}{\@writer}
% \begin{macro}{\protocol@place}
% \begin{macro}{\@nextdate}
% \begin{macro}{\@nextplace}
%    \changes{v1.6}{1999/02/05}{Neues Makro \cs{@nextplace}}
% \begin{macro}{\@nexttime}
% \begin{macro}{\@begintime}
% \begin{macro}{\@endtime}
%    \changes{v1.6}{1999/02/05}{Neues Makro \cs{@ende}}
%    Dies sind die internen Makros, in denen die entsprechenden Werte
%    gespeichert werden. Es wird sichergestellt, da"s eine Warnung ausgegeben
%    wird, falls kein Wert eingegeben wird. Bei Standardwerten werden
%    sie hier gesetzt.
%    \begin{macrocode}
\def\@groupname{\ClassWarning{protocol}{No \noexpand\groupname given}}
\def\@chair{\ClassWarning{protocol}{No \noexpand\chair given}}
\def\@writer{\ClassWarning{protocol}{No \noexpand\writer given}}
\global\let\protocol@place\@empty
\global\let\@nextdate\@empty
\global\let\@nextplace\@empty
\gdef\@nexttime{\ClassWarning{protocol}{No \noexpand\nexttime given}}
\gdef\@begintime{\ClassWarning{protocol}{No \noexpand\beginn given}}
\gdef\@endtime{\ClassWarning{protocol}{No \noexpand\endtime given}}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
%
% \subsection{Deklarationen zur Ausgabe der Daten} 
% \begin{macro}{\makehead}
% \begin{macro}{\@makehead}
%     Das Kommando |\makehead| sorgt daf"ur, da"s alle wichtigen
%     Informationen zum Anfang des Dokumentes ausgegeben werden. Es wird mit
%     |\AtBeginDocument| aufgerufen. Hier habe ich schamlos die Definition von
%     |\maketitle| aus den Standard-Klassen kopiert und f"ur meine Zwecke
%     mi"sbraucht. Dabei wird dann auch das Makro |\@makehead|
%     aufgerufen. Am Ende werden die gebrauchten Makros wieder zur"uckgesetzt.
%    \begin{macrocode}
\newcommand\makehead{\par
  \begingroup
    \renewcommand\thefootnote{\@fnsymbol\c@footnote}%
    \def\@makefnmark{\rlap{\@textsuperscript{\normalfont\@thefnmark}}}%
    \long\def\@makefntext##1{\parindent 1em\noindent
            \hb@xt@1.8em{%
                \hss\@textsuperscript{\normalfont\@thefnmark}}##1}%
    \newpage
    \global\@topnum\z@   % Prevents figures from going at top of page.
    \@makehead
    \thispagestyle{plain}\@thanks
  \endgroup
  \setcounter{footnote}{0}%
  \global\let\thanks\relax
  \global\let\maketitle\relax
  \global\let\@maketitle\relax
  \global\let\@thanks\@empty
  \global\let\@author\@empty
  \global\let\@date\@empty
  \global\let\@title\@empty
  \global\let\title\relax
  \global\let\author\relax
  \global\let\date\relax
  \global\let\and\relax
  \global\let\makehead\relax
  \global\let\@makehead\relax
  \global\let\chairman\relax
  %\global\let\@chair\@empty
  \global\let\writer\relax
  %\global\let\@writer\@empty
  \global\let\place\relax
  \global\let\protocol@place\@empty
  \global\let\begintime\relax
  \global\let\@begintime\@empty
  \global\let\endtime\relax
  \global\let\@endtime\@empty
  \global\let\groupname\relax
  \global\let\@groupname\@empty
}
%    \end{macrocode}
% Das Kommando |\@makehead| erzeugt nun den Titel selber.
% \changes{v1.8}{2004/02/04}{Groupname nun in boldface}
%    \begin{macrocode}
\def\@makehead{%
    \clearpage
    \let\footnote\thanks
    \null
    \vskip 2em%
    \begin{center}%
    {\titlefont\huge \@groupname \par}%
    \vskip 1.5em%
    {\Large
      \lineskip .5em%
	Protokoll der Sitzung vom \@date \par}%
    \vskip 1em%
    {\Large Sitzungsleitung: \@chair\\
       Protokollf\"uhrer: \@writer \par}%
    \vskip \z@ \@plus 1em
  \end{center}%
  \par
  \vskip 2em{%
    \ifx\protocol@place\@empty
    \noindent\begin{tabular}{@{}ll}
      Beginn: & \@begintime\ Uhr \\
      Ende: &   \@endtime\ Uhr \\
    \end{tabular}
    \else
    \noindent\begin{tabular}{@{}ll}
      Beginn: & \@begintime\ Uhr \\
      Ende: &   \@endtime\ Uhr \\
      Ort: & \protocol@place \\
    \end{tabular}
    \fi\par}\vskip 0.5cm}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\@makefoot}
% Das Kommando |\@makefoot| stellt den Abschlu"s f"ur das Protokoll dar. Es
% formatiert eine \"Uberschrift und gibt die Daten f"ur die n"achste Sitzung
% an. Es wird implizit mit
% |\AtEndOfDocument| aufgerufen. Die Option [nonext] sorft daf�r, das dieser Teil nicht gesetzt wird.
% \changes{v1.7a}{2002/04/23}{Wenn keine n\"achste Sitzung vereinbart wurde, schreibe dieses auch (Idee und Implementierung: Boris Majowski)}
% \changes{v1.8}{2004/02/05}{Punkt am Satzende eingef\"ugt.}
% \changes{v1.9}{2006/11/02}{Korrektur von |\@makefoot| nach Hinweisen von L. Humbert und C. Timm}
% \changes{v1.12}{2011/10/09}{Ort der n�chsten Sitzung nur ausgeben, wenn er vorher mit \cs{nextplace} gesetzt wurde. Wenn er nicht gesetzt wurde, eine Warnung ausgeben.}
%    \begin{macrocode}
\newcommand{\@makefoot}{
    \ifx\@nextdate\@empty
      \section*{N\"achste Sitzung}
      Es wurde keine n\"achste Sitzung vereinbart.
    \else
       \section*{N\"achste Sitzung} Die n\"achste Sitzung
       findet am \@nextdate\ um \@nexttime\ Uhr statt.
       \ifx\@nextplace\@empty
         \ClassWarning{protocol}{No \noexpand\nextplace given}
        \else
         Ort:~\@nextplace.
       \fi
    \fi
    }
%    \end{macrocode}
% \end{macro}
%
% Das Makro |\protocol@signatures| enth�lt den Text f�r die mit der Klassenoption [signatures] angeforderte Unterschriftenzeile.
% \begin{macro}{\protocol@signatures}
%    \begin{macrocode}
\newcommand{\protocol@signatures}{\vspace{20mm}\par\noindent\hrulefill\hrulefill\hfill\hrulefill\hrulefill\\
   \@chair\hfill\@writer\\
   (Sitzungsleitung)\hfill{}(Protokoll)\\[-1cm]\mbox{}}
%    \end{macrocode}
% \end{macro}
%
% Das Makro |\@makeend| erzeugt den \emph{Abspann} des Protokolls, bestehend aus den Daten zur n�chsten Sitzung (siehe |@makefoot|) und einer eventuellen, mit der Klassenoption [signatures] angeforderten Unterschriftenzeile.
% \begin{macro}{\@makeend}
% \begin{macro}{\@protocol@signatures}
%    \begin{macrocode}
\newcommand{\@makeend}{\@makefoot\@protocol@signatures}
\let\@protocol@signatures\relax
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \subsection{Die Umgebung Persons}
%
% \begin{environment}{Persons}
% \begin{environment}{Absent}
% Die Umgebung Persons stellt eine "Uberschrift f"ur die Anwesenheitsliste
% zur Verf"ugung. Daf"ur kann ein beliebiger Text in die Umgebung
% geschrieben werden. Das gleiche gilt f�r die Umgebung Absent f"ur eine
% Aufstellung von Abwesenden.
%    \begin{macrocode}
\newenvironment{Persons}{\section*{Anwesenheit:}}{}
\newenvironment{Absent}{\section*{Abwesenheit:}}{}
%    \end{macrocode}
% \end{environment}
% \end{environment}
%
% \section{Abschlu"sdeklarationen}
% 
%  Zum Beginn soll |\makehead|, zum Ende |\@makeend| aufgerufen werden.  
%    \begin{macrocode}
\AtBeginDocument{\makehead}
\AtEndDocument{\@makeend}
%    \end{macrocode}
%
%
% \Finale
%
\endinput