<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">% \iffalse (meta-comment)
% -----------------------------------------------------------------
% File:       booktabs-de.dtx
% Author:     Simon Fear
% Maintainer: Danie Els (dnjels@sun.ac.za)
% Modifiziert von: Christine R"omer and Thomas Manderla
%
% This file is part of the booktabs package for publication
% quality tables for LaTeX
%
%       Copyright (C) 1995--2005 Simon Fear
%
% This program is free software; you can redistribute it and/or
% modify it under the terms of the GNU General Public License as
% published by the Free Software Foundation; either version 2 of
% the License, or (at your option) any later version.
%
% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public
% License along with this program; if not, write to the Free
% Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
% MA 02111-1307 USA
%
% -----------------------------------------------------------------
% This file contains the documentations and source code for the
% booktabs-de package for use with LaTeX2e. See the file 'README-DE'
% for a list of all the files as well as directions for the
% installation of this package.
% -----------------------------------------------------------------
% \fi
%
% \iffalse
%&lt;*driver&gt;
\ProvidesFile{booktabs-de.dtx}
%&lt;/driver&gt;
%&lt;package&gt;\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%&lt;package&gt;\ProvidesPackage{booktabs-de}
%&lt;*package&gt;
    [2005/04/14 v1.61803 publication quality tables]
%&lt;/package&gt;
%
%&lt;*driver&gt;
\documentclass{ltxdoc}
\usepackage{booktabs}[2005/04/14]
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel} 
%\usepackage[marginal]{footmisc}
\usepackage{charter}
\setlength{\parindent}{0pt}
\setlength{\parskip}{1ex plus 0.2ex minus 0.1ex}
  \EnableCrossrefs
  \CodelineIndex
  \RecordChanges
  \setlength\hfuzz{15pt}
  \hbadness=7000
  \MakeShortVerb{\=}
  \MakeShortVerb{\"}
 \PageIndex 
\begin{document}
  \DocInput{booktabs-de.dtx}
\end{document}
%&lt;/driver&gt;
% \fi
%
% \CheckSum{484}
% \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     \&amp;
%     Acute accent  \'     Left paren    \(     Right paren   \)
%     Asterisk      \*     Plus          \+     Comma         \,
%     Minus         \-     Point         \.     Solidus       \/
%     Colon         \:     Semicolon     \;     Less than     \&lt;
%     Equals        \=     Greater than  \&gt;     Question mark \?
%     Commercial at \@     Left bracket  \[     Backslash     \\
%     Right bracket \]     Circumflex    \^     Underscore    \_
%     Grave accent  \`     Left brace    \{     Vertical bar  \|
%     Right brace   \}     Tilde         \~}
%
%
%
% \DeleteShortVerb{\|}
% \GetFileInfo{booktabs-de.dtx}
%
%\title{Anfertigen von hochwertigen Tabellen mit \LaTeX \thanks{Diese Datei
%basiert auf der booktabs-Version vl.61803 und der Revision von
%2005/04/14.}}
%\author{\Large{Simon Fear}\\300A route de Meyrin Meyrin\\Switzerland.\\\\
%"Uberf"uhrt ins Deutsche\\ von Thomas Manderla und\\ Christine
%R"omer\footnote{christine\_roemer@t-online.de}}
%\date{Printed \today}
%
% \maketitle
%
% \begin{abstract}
% \noindent Dieser Artikel beschreibt einige zus"atzliche Befehle in
% =booktabs=, geschaffen f"ur die Verbesserung der Qualit"at von
% Tabellen in \LaTeX{}. Richtlinien, was eine gute Tabelle
% ausmacht, werden in diesem Zusammenhang auch angegeben. Die Ausf"uhrungen
% sind zum =booktabs=-Paket aus dem Jahr 2000 (Version 1.61), das
% der Ausgabe von 1995 (Version 1.00) einige Verbesserungen hinzugef"ugt
% hatte, vor allem =longtable=-Kompatibilit"at.
% Weitere Ausgaben (Versionen 1.618, 1.6180 und 1.61803) sind
% blo"s \emph{bug patches} und Unterst"utzung f"ur das =colortbl=-Paket\footnote{Von Danie Els
%  (\texttt{dnjels@sun.ac.za}) in Abwesenheit des Autors.}.
% \end{abstract}
%
% \bigskip
%
% \section{Einf"uhrung}
%
% Die unten beschriebenen Routinen sollten das einfache Erstellen von
% Tabellen, wie sie in wissenschaftlichen B"uchern und Zeitschriften erscheinen,
% erm"oglichen. Was sie von gew"ohnlichen \LaTeX -Tabellen unterscheidet,
% ist die vorgegebene Nutzung von Abstand "uber- und unterhalb von Linien,
% sowie Linien unterschiedlicher `Dicke'. Was sie weiterhin von Tabellen, wie sie
% von vielen Leuten, die \LaTeX{} nutzen, erstellt werden, unterscheidet, ist
% das Fehlen vertikaler und doppelter Linien.
%
% Es muss eine deutliche Unterscheidung zwischen dem, was man hier eine
% {\em formale Tabelle} nennt, was ein Set an Werten in beschrifteten Spalten ist,
% und dem, was man {\em Tableau} nennen werde, vornehmen. Letzteres ist das, was im
% \LaTeX -Handbuch dargestellt ist, und zunehmend auch als Ausgabe vieler
% Datenbankverwaltungssysteme zu finden ist. Solche Tableaus haben wahrscheinlich
% Icons im "Uberfluss und verwenden sicherlich auch Farben. Das Layout solche eines
% {em Tableaus} ist (hoffentlich) etwas Einmaliges, wenn man das Durcheinander an
% Material,
% das der Designer zu einer sinnvollen Kombination zusammenzustellen versucht,
% bedenkt. Das Layout einer {\em Tabelle} hingegen hat sich durch Jahrhunderte an
% Erfahrung etabliert und sollte nur in au"sergew"ohnlichen Umst"anden ge"andert
% werden.
%
% Zur Illustration kann dieses Tableau aus dem \LaTeX -Handbuch
% herangezogen werden (S.\,64 alte Edition):
%
% \begin{center}
% \begin{tabular}{||l|lr||} \hline
% M"ucken     &amp; Gramm      &amp; \$13.65 \\ \cline{2-3}
%           &amp; je     &amp; .01 \\ \hline
% Gnu       &amp; ausgestopft   &amp; 92.50 \\ \cline{1-1} \cline{3-3}
% Emu       &amp;           &amp; 33.33 \\ \hline
% G"urteltier &amp; gefroren    &amp; 8.99 \\ \hline
% \end{tabular}
% \end{center}
%
% Das ist ein Mischmasch an Informationen, das zwar wahrscheinlich,
% so wie es ist, vern"unftig dargestellt ist (Aber ist der Emu nun ausgestopft
% oder nicht?). Jedoch sollte es als ver"offentlichte Tabelle viel eher
% gem"a"s der Richtlinien, die weiter unten auf der Seite im Handbuch empfohlen
% werden, erscheinen:
%
% \begin{center}
% \begin{tabular}{@{}llr@{}} \toprule
% \multicolumn{2}{c}{Artikel} \\ \cmidrule(r){1-2}
% Tier &amp; Beschreibung &amp; Preis (\$)\\ \midrule
% M"ucke  &amp; pro Gramm  &amp; 13.65 \\
%       &amp; pro St"uck      &amp; 0.01 \\
% Gnu   &amp; ausgestopft   &amp; 92.50 \\
% Emu   &amp; ausgestopft   &amp; 33.33 \\
% G"urtetier &amp; gefroren &amp; 8.99 \\ \bottomrule
% \end{tabular}
% \end{center}
%
% Es bedarf viel weniger M"uhe, das als formale Tabelle zu setzen.
% Es muss kein neues Layout f"ur alles, was gemacht wird, ausgearbeitet werden.
% Zudem kann fast gewiss sein, dass die Daten nicht falsch gelesen werden, weil 
% der Leser nicht lernen muss, wie er irgendeine neuartige Pr"asentation zu 
% lesen hat.
%
% Ungl"ucklicherweise kann die obige Tabelle nicht in reinem \LaTeX ,
% erzeugt werden. Sie kann so gesetzt werden, aber trotz
% bester Bem"uhungen erzeugt das Nutzen simpler =\hline=-Befehle das
% Nachfolgende:
%
% \begin{center}
% \begin{tabular}{@{}llr@{}} \hline
% \multicolumn{2}{c}{Artikel} \\ \cline{1-2}
% Tier &amp; Beschreibung &amp; Preis (\$)\\ \hline
% M"ucke  &amp; pro Gramm  &amp; 13.65 \\
%       &amp; pro St"uck      &amp; 0.01 \\
% Gnu   &amp; ausgestopft   &amp; 92.50 \\
% Emu   &amp; ausgestopft   &amp; 33.33 \\
% G"urteltier &amp; gefroren &amp; 8.99 \\ \hline
% \end{tabular}
% \end{center}
%
% Zu beachten ist (wenn es nicht schon offensichtlich ist), dass nicht genug
% Abstand zwischen der obersten Linie und dem großen `A' von `Artikel' ist.
% "Ahnliches gilt f"ur die anderen Linien: Ein direkter Vergleich zeigt dies
% deutlich.
% Au"serdem sind in der ersten Version die oberen und unteren Linien 
% st"arker als die mittlere, die wiederum st"arker als die Teillinie
% unterhalb von
% `Artikel' ist. Nat"urlich \emph{k"onnte} man =\doublerulesep= neu definieren
% und dann =\hline\hline= nutzen, um einen "ahnlichen Effekt zu erzielen. Und man
% k"onnte \emph{struts} nutzen, um die Abst"ande zu verbessern. Aber es ist nicht n"otig,
% an solche Sachen denken zu m"ussen.
% Der =booktabs=-Style definiert seine Befehle so,
% dass sich um solche Dinge automatisch gek"ummert wird.
%
% Allgemein w"urde ich sagen, dass dieses Paket von keinem Interesse f"ur
% diejenigen
% ist, die nach einer Alternative zu Pic\TeX{} suchen, um schicke Tableaus zu
% zaubern. Eher ist es eine Gestaltungsrichtlinie im Bereich Tabellenlayout  
% f"ur Autoren von wissenschaftlichen Artikeln und B"uchern.
% Es geht nicht zu weit, zu sagen, dass, wenn Sie mit den Befehlen dieses Pakets
% keine Tabelle erstellen können, es neu entwerfen sollten.
%
% \subsection{Eine Anmerkung zur Terminologie\label{notation}}
%
% Im Britischen Setzen wird eine `line' stets `rule' genannt. Vielleicht
% verwirrenderweise (jedenfalls aus historischen Gr"unden) wird die `thickness'
% einer Linie oft als `width' bezeichnet. (wobei nahezu jeder andere dies
% `depth' oder `height' nennen w"urde, wenn sie sich auf eine horizontale
% Linie bezieht). Eine `thick black line' wird `heavy
% rule' genannt. Ich habe diese Terminologie in den meisten der neuen Befehle
% beibehalten. Wenn es f"ur nichts anderes gut ist, dann zumindest, um 
% Verwirrung mit =\hline= auszuschlie"sen. In der Deutschen "Ubersetzung wird an
% der Stelle von `St"arke' gesprochen.
%
% \section{Das Layout formaler Tabellen}
%
% Man geht nicht sehr weit fehl, wenn man zwei einfache Regeln
% im Hinterkopf behält:
% \begin{enumerate}
%   \item Nie vertikale Linien benutzen.
%   \item Nie doppelte Linien benutzen.
% \end{enumerate}
% Diese Richtlinien wirken extrem, aber mir ist noch kein gutes Argument,
% warum man sie brechen sollte, untergekommen. Zum Beispiel, wenn man das
% Gef"uhl hat, 
% dass die Information in der linken H"alfte der Tabelle von der rechten
% Seite so verschieden ist, dass sie durch eine vertikale Linie getrennt
% werden muss, so sollte man stattdessen lieber zwei Tabellen verwenden.
% Nicht jeder h"alt sich an die zweite Regel: Ich habe f"ur einen Verleger
% gearbeitet, der auf doppelte Linien "uber Summen bestand. Meine Wahl
% w"are das nicht gewesen.
%
% Es gibt drei weitere Regeln, die es wert sind, hier erw"ahnt zu werden, weil
% sie normalerweise au"serhalb der Kreise von professionellen Setzern
% und Redakteuren unbekannt sind:
% \begin{enumerate}\setcounter{enumi}{2}
%   \item St"uckzahlen sollten in den Spaltenkopf (nicht in den K"orper der
%           Tabelle) gesetzt werden.
%   \item Einem Dezimalpunkt sollte stets eine Ziffer vorangehen; also 0.1
%       {\em nicht} blo\ss .1.
%   \item `Ditozeichen', wie G"ansef"'u"schen, sollten nicht benutzt werden,
%       um einen Wert zu wiederholen. Unter vielen Umst"anden macht eine freie
%       Zelle das Ganze genauso gut. Falls nicht, sollte der Wert wiederholt
%				werden.
% \end{enumerate}
%
% Ob Sie den kleinen Penibilit"aten folgen wollen oder nicht, wenn Sie nur die
% folgenden Befehle in Ihren formalen Tabellen benutzen, werden Ihnen Ihre Leser
% dankbar sein. Ich möchte betonen, dass die Richtlinien nicht nur dazu da sind,
% die Pedanten gl"ucklich zu machen. Das Prinzip ist, dass eine verst"arkte Struktur
% in der Pr"asentation bereits von Beginn an die Gedanken strukturiert.
%
% \section{Verwenden der neuen Befehle}
%
% \DescribeMacro\toprule
% \DescribeMacro\midrule
% \DescribeMacro\bottomrule
% Im einfachsten aller F"alle beginnt eine Tabelle mit =\toprule=, hat
% eine einzelne Reihe von Spaltenk"opfen und dann eine trennende Linie, die
% =\midrule=. Nach den Datenspalten wird mit =\bottomrule= abgeschlossen.
% Die meisten Buchverleger setzen =\toprule= und
% =\bottomrule= st"arker (also dicker, siehe Punkt 1.1\ref{notation}) als die
% zwischenliegende =\midrule=. Wenn die Tabellen jedoch in sehr kleinen 
% Schriftgr"o"sen erscheinen, ist es manchmal unm"oglich, diese Unterscheidung zu
% treffen und zudem setzen manche Journals routinem"a"sig alle Linien in der
% gleichen St"arke.
%
% Die Linienbefehle hier verwenden alle eine Voreinstellung, der im Dokument
% (vorzugs- aber nicht notwendigerweise in der Pr"aambel) nachjustiert werden
% kann. F"ur die oberste und die unterste Linie ist diese Voreinstellung 
% =\heavyrulewidth= und f"ur mittlere Linien ist er =\lightrulewidth= (eine
% genauere Beschreibung folgt). In sehr seltenen F"allen, wenn etwas besonderes 
% getan werden muss, k"onnen die optionalen Argumente in die Linienbefehle
% eingesetzt werden, welche folgende formale Syntax haben:
% 
% \begin{quote}
%   =\toprule=[\meta{wd}] \\
%   =\midrule=[\meta{wd}] \\
%   =\bottomrule=[\meta{wd}]
% \end{quote}
%
%  Hierbei ist \meta{wd} eine \TeX dimension (zum Beispiel 1pt, .5em,
% etc.).
%
% Alle hier beschriebenen Linienbefehle stehen nach dem Abschluss =\\=
% der vorigen Reihe (au"ser =\toprule=, der
% gleich nach dem =\tabular{}=befehl kommt). In anderen Worten, sie stehen
% genau da, wo simples \LaTeX{} =\hline= oder =\cline= erlaubt.
%
% \DescribeMacro\cmidrule
% H"aufig wird eine Teillinie ben"otigt, die sich nur "uber einige der Spalten
% erstreckt, wof"ur ein =\cmidrule= (Der Pendant vom \LaTeX =\cline=
% Befehl) ben"otigt wird. F"ur gew"ohnlich sollte diese Linie nicht "uber die
% gesamte Breite der Spalten reichen. Dies ist insbesondere der Fall, wenn ein
% =\cmidrule= direkt nach dem Ende eines anderen begonnen werden muss (\LaTeX 
% =\cline=n sto"sen hier zusammen, wenn man nicht ganz besonders vorsichtig mit
% =\extracolsep= ist).  Von daher wird man f"ur gew"ohnlich die optionalen
% `Trimm'befehle nutzen wollen.
%
% Die Trimmbefehle stehen, wenn sie "uberhaupt genutzt werden, in
% Klammern (wie diese hier), ohne trennende Leerzeichen. Die m"oglichen
% Festlegungen sind =r=, =r{=\meta{wd}=}=, =l= und
% =l{=\meta{wd}=}=, oder jede Kombination davon, wobei \meta{wd} eine
% Abmessung ist, und =r= und =l= anzeigen, ob das rechte und/oder linke Ende
% der Linie beschnitten werden soll. Die Form ohne explizites Argument entspricht
% =r{\cmidrulekern}=, wobei =\cmidrulekern= voreingestellt 
% $0.5$\,em enth"alt, aber es kann vom Nutzer in der Pr"aambel
% festgelegt werden.\footnote{Nutzerr"uckmeldungen ergaben, dass die Vorgabe der
%   Version 1.00, 0.25\,em, zu klein war. Entschuldigung f"ur alle Verluste an
%   R"uckw"artskompatibilit"at. Zu beachten ist, dass das urspr"ungliche
% Verhalten einfach durch \texttt{\textbackslash cmidrulekern} in der Pr"aambel
%   wiederhergestellt werden kann, oder einfach \texttt{(r\{.25\,em\})}
%    verwendet werden kann.}
%
% Hier ist ein erl"auterndes Beispiel: =(lr{.75em})= macht einen vorgegebenes
% linkes Beschneiden und genau $0.75$\,em auf der rechten Seite. =(r{.75em}l)=
% ist hier genauso g"ultig.\footnote{\texttt{(lrrlr\{.75em\})} macht "ubrigens das
% gleiche: Nur die zuletzt angetroffenen linken und rechten Festlegungen werden
% angewandt.}
%
% Die vollst"andige Syntax des Befehls lautet
% \begin{quote}
%   =\cmidrule=[\meta{wd}](\meta{trim})\{$a$--$b$\}
% \end{quote}
% wobei \meta{wd} ein optionaler Linienst"arkenbefehl ist, in eckigen
% Klammern [wie diese hier] (die
% Voreinstellung hierbei ist =\cmidrulewidth=) und das letzte Argument, 
% \emph{das nicht optional ist}, gibt die Zahlen der Spalten an, die "uberspannt
% werden sollen.
%
% Als Beispiel einer Anwendung dieser Befehle kann der Code, der die
% Beispieltabelle oben erzeugte, dienen:
% \begin{verbatim}
% \begin{tabular}{@{}llr@{}} \toprule
% \multicolumn{2}{c}{Artikel} \\ \cmidrule(r){1-2}
% Tier  &amp; Beschreibung &amp; Preis (\$)\\ \midrule
% Mücke &amp; pro Gramm    &amp; 13.65 \\
%       &amp; pro Stück    &amp; 0.01 \\
% Gnu   &amp; ausgestopft  &amp; 92.50 \\
% Emu   &amp; ausgestopft  &amp; 33.33 \\
% Gürteltier &amp; gefroren &amp; 8.99 \\ \bottomrule
% \end{tabular}
% \end{verbatim}
%
% \DescribeMacro\addlinespace
% Gelegentlich m"ochte man ein wenig zus"atzlichen Abstand zwischen manchen Reihen
% der Tabelle einzuf"ugen; zum Beispiel vor der letzten Reihe, wenn sie eine Summe
% angibt. Dazu bedarf es blo"s des Einf"ugens von
% \begin{quote}
%   =\addlinespace=[\meta{wd}]
% \end{quote}
%  nach den =\\= Abschlusszeichen. Zwischen normalen Textreihen ist der Effekt
%  genau wie bei herk"ommlichem \LaTeX verwendung von
%  =\\[\defaultaddspace]=, was ich eher klobig finde. Au"serdem ist es besser
%  als =\\ \\=, was zu viel Abstand einf"ugt. Zudem kann
%  =\addlinespace= vor, nach oder zwischen Zeilen verwendet werden, wenn man das
%  genaue Ausma"s an Abstand, der eingef"ugt werden soll, kontrollieren will. Der
%  voreingestellte Abstand vor oder nach einer angrenzenden Linie wird entweder
%  durch genau =\defaultaddspace= oder die Gr"o"se des Abstands, die im optionalen
%  Argument angegeben wird, ersetzt.\footnote{Das ist eine "Anderung zur Version
%  1.00,
% wo der Abstand manchmal \emph{zus"atzlich} zum voreingestellten Abstand um die
% Linie berechnet wurde.}
%
% \section{Missbrauch der neuen Befehle}
%
% F"ur ein Zusammenarbeiten der neuen Linienbefehle mit =\hline= oder
%  =\cline= kann nicht garantiert werden, auch wenn diese verf"ugbar und
% unver"andert bleiben. Man kann sich aber auch keinen Grund vorstellen,
% warum man sie vermischen wollte.
%
% Viel wichtiger ist, dass die Linien, die durch neue Befehle erstellt
% werden, unter keiner Garantie mit Vertikalen verbunden werden, die durch ={|}=
% -Buchstaben in der Pr"aambel gebaut werden. Das ist ein Feature (siehe oben). Man
% sollte in Tabellen einfach keine vertikalen Linien verwenden, Punkt.
%
% \DescribeMacro\morecmidrules
% Wenn man sich vom Benutzen einer Doppellinie beim besten Willen nicht abhalten
% kann, wird selbst eine so bizarre Konstruktion wie =\toprule\bottomrule\midrule=
% ohne eine Fehlermeldung funktionieren (genauso wie man =\hline= verdoppeln
% kann). Diese Linien werden vom normalen \LaTeX separator =\doublerulesep=
% getrennt. Wenn die Perversion, doppelte Linien zu setzen, soweit geht,
% doppelte =\cmidrule=s einzubauen, so wird man den zus"atzlichen Befehl
% =\morecmidrules= ben"otigen, um das ordentlich zu machen, denn normalerweise sind
% zwei =\cmidrule=s  in einer Reihe eine vern"unftige Konstruktion, die nach zwei
% Linien in derselben `Linienreihe' ruft. Daher schreibt der zweite Befehl bei
% \begin{quote}
%   =\cmidrule=\{1-2\}=\cmidrule{1-2}=
% \end{quote}
% eine Linie, die die erste genau "uberschreibt.
% Ich nehme an, man m"ochte dann eher
% \begin{quote}
%   =\cmidrule=\{1-2\}=\morecmidrules==\cmidrule=\{1-2\}
% \end{quote}
% was eine doppelte Linie zwischen den Spalten eins und zwei ergibt und durch
% =\cmidrulesep= getrennt wird (Hinweis: Da eine =\cmidrule= normalerweise
% sehr d"unn ist, richtet das normale =\doublerulesep= hier wahrscheinlich
% zu viel Abstand ein). Eine ganze neue Reihe an Linien sollte abgeschlossen 
% werden, bevor der Befehl =\morecmidrules= eingegeben wird. Zu beachten ist, dass 
% =\morecmidrules= keinerlei Effekt hat, wenn er nicht unmittelbar einer
% =\cmidrule= folgt. (d.\,h. es ist kein allgemeiner abstandschaffender Befehl).
%
% \DescribeMacro\specialrule
% Falls man das au"sergew"ohnliche Bed"urfnis hat, genau $0.5$\,em, zwischen zwei
% Linien festzulegen, so lie"se sich eine Konstruktion wie =\midrule =
% =\addlinespace[.5em] \midrule= verwenden. In einem seltenen Anfall von Toleranz
% habe ich dann doch den Befehl
% \begin{quote}
%   =\specialrule=\{\meta{wd}\}\{\meta{abovespace}\}\{\meta{belowspace}\}
% \end{quote}
% erstellt, bei dem alle drei Argumente obligatorisch sind. Aber, wer den h"aufig 
% verwendet, hat Zweck und Inhalt der obigen Richtlinien falsch verstanden. Eine
% vorangehende Linie f"ugt ihren voreingestellten Abstand nicht unter sich und
% eine nachstehende Linie f"ugt keinen Abstand "uber sich hinzu, folglich bekommt 
% man \emph{genau} den Abstand, der in den Argumenten angegeben wird.\footnote{Das 
% ist eine "Anderung zur Version 1.00, die vielmehr einen extra
% \texttt{\textbackslash doublerulesep}, wo immer sie konnte, hinzuf"ugte.}
%
%
% \section{Booktabs und longtables}
%
% Wenn man sowohl das =booktabs=- als auch das =longtable=-Paket geladen hat,
% k"onnen die =booktabs= Linienbefehle ganz genau wie oben beschrieben in einer
% =longtable= verwendet werden.
%
% Es gibt eine Neuheit, die es wert ist, erw"ahnt zu werden: Innerhalb 
% einer =longtable= k"onnen die optionalen linken und rechten Trimmbefehle
% verwendet werden, die normalerweise nur f"ur =\cmidrule=s, mit =\toprule=,
% =\midrule= und =\bottomrule= (und wenn es sein muss auch mit=\specialrule=)
% funktionieren. Nutzer, die die vorherige Ausgabe wegen longtable-Kompatibilit"at
% gehackt haben,\footnote{Jim Service war der Erste.} schienen alle Linien auf der 
% rechten Seite um 0.5\,em beschneiden zu wollen. Ich denke, dasselbe l"asst sich
% durch =@{}= als Spezifikation der letzten Spalte erreichen.
% Dennoch, nach dem Ausarbeiten des restlichen Codes war es ein 
% leichtes, Parsing f"ur die optionalen Argumente hinzuzuf"ugen, also hab
% ich es  gemacht. (Ich habe es aber nicht durchgezogen, noch das optionale Beschneiden der
% Linien \emph{au"serhalb} einer =longtable= zu erm"oglichen. Das w"are eine
% Riesenarbeit gewesen. Wenn man unbedingt beschnittene Linien haben muss, dann
% sollte man =longtable=s verwenden!)
%
% Ein Hinweis etwas technischer Natur: Innerhalb einer =longtable= ergeben
% =\hline= und
% =\hline\hline= beide eine \emph{doppelte} Linie (um Seitenumbr"uche an
% dieser Stelle zu erm"oglichen). Die =booktabs=-Linie tut das hingegen 
% \emph{nicht}. Die automatische Doppelung von =\hline= in der =longtable= ist
% fragw"urdig, sogar nach Aussage der Dokumentation zu dem Paket.
% Aber doppelte =booktabs=Linien ergeben auch beinahe gar keinen Sinn. Im
% ungl"ucklichen Fall, dass eine =booktabs=linie an einem Seitenumbruch
% erscheinen sollte, muss man die notwendigen Anpassungen per Hand machen.
% (Im Allgemeinen heißt das, die st"orende Linie zu l"oschen.)
%
%
% \section{Booktabs und das colortbl-Paket}
%
%  =Booktabs= ist jetzt mit dem =colortbl=-Paket kompatibel.\footnote{Seit v1.6180}
%  Der Befehl \cmd{\arrayrulecolor}\\
% wird farbige Linien hervorrufen, wenn das =colortbl=-Paket geladen ist.
%
%
% \section{Technische Zusammenfassung der Befehle}
%
% Die neuen Linienbefehle sind innerhalb der voreingestellten =tabular=- (und
% =array=-) Umgebungen g"ultig, im modifizierten =tabular= und =array= von
% =\usepackage{array}=, und innerhalb der voreingestellten Tabellen und
% =longtables= nach\\
% =\usepackage{longtable}=.
%
% Die Befehle folgen der Standardplatzierungssyntax von =\hline=.
% Es kann Platz (sogar ein, aber nicht zwei Enter)
% zwischen aufeinanderfolgenden Linienbefehlen sein.
% \footnote{Eine willkommene Ver"anderung gegen"uber Version 1.00, 
% bei der Abstand zwischen Linienbefehlen f"ur r"atselhafte Fehlermeldungen sorgte.}
%
% Was sich als gro"se Ver"anderung zu vorherigen Ausgaben zeigt, ist, dass
% ich innerhalb des Macrocodes jetzt drei Linienklassen definiere. (Im
% normalen Gebrauch ben"otigt man diese Definitionen nicht, deshalb habe ich sie
% oben nicht erw"ahnt.
% Eine Linie der Klasse 1 (ansonsten eine `normale' Linie genannt) ist jede
% =\toprule=, =\midrule=, =\bottomrule=, oder =\cmidrule=. Die Linien der Klasse 2
% sind =\specialrule= und =\addlinespace=. Schlie"slich ist eine Linie der Klasse
% 0 keine der vorhergehenden -- oder in anderen Worten, "uberhaupt keine 
% Linie.\footnote{Mit der Ausnahme, dass \texttt{\textbackslash hline} und
% \texttt{\textbackslash cline} Klasse 0 sind. Doch es gibt keinen Grund, dar"uber
%   schlaflose N"achte zu verbringen, da man die beiden Linienziehsysteme nicht 
%   durcheinander bringen m"ochte.} Zu beachten ist, dass =\addlinespace= als
%  eine Klasse-2-Regel gilt, nicht als Klasse-0-Text.
%
% Im Folgenden, wird jeder Befehl im `normalen Gebrauch', beschrieben, also
% die Linie wird zwischen zwei Textzeilen verwendet. (Oder technischer,
% ihr geht eine Klasse-0-Linie vorher und eine schlie"st sich ihr an). Danach
% wird ein Blick auf die Ausnahmen geworfen.
% \begin{quote}
%   =\toprule=[\meta{wd}]
% \end{quote}
% Eine Linie von der St"arke \meta{wd} (default =\heavyrulewidth=) mit
% =\abovetopsep= Abstand dar"uber und
% =\belowrulesep= zus"atzlichen vertikalen darunter eingef"ugten Abstand. Als
% Voreinstellung ist =\abovetopsep= null, was f"ur eine Linie, die ganz oben
% stehen soll,
% recht vern"unftig scheint. Wenn die Tabellen jedoch Beschriftungen haben,
% kann es sinnvoller sein, =\abovetopsep= zu verwenden, um eine angemessene Menge
% an Abstand zwischen Beschriftung und Tabelle einf"ugen, als im Eifer des Gefechts
% daran zu denken, einen =\vspace{}=-Befehl einzusetzen.
% \begin{quote}
%   =\midrule=[\meta{wd}]
% \end{quote}
% Eine \meta{wd} (default =\lightrulewidth=) Linie mit
% =\aboverulesep= Abstand dar"uber und
% mit =\belowrulesep= Abstand darunter.
% \begin{quote}
%   =\bottomrule=[\meta{wd}]
% \end{quote}
% Eine \meta{wd} (default =\heavyrulewidth=) Linie mit =\aboverulesep=
% Abstand dar"uber und mit =\belowbottomsep= Abstand darunter. Voreingestellt ist
% =\belowbottomsep= null\footnote{Das ist eine Ver"anderung zur Version 1.00,
% bei der stets ein \texttt{\textbackslash belowrulesep}} war.
% Es gibt einen h"aufig vorkommenden und legitimen Grund, warum man Platz unter 
% der untersten Linie schaffen möchte: n"amlich, wenn es um Fu"snoten in Tabellen
% geht.
% Wenn man nicht die Voreinstellung "uberschreibt, kann man
% =\bottomrule \addlinespace[\belowrulesep]= verwenden
% oder einen passend gestalteten \emph{strut} in den Fu"snotentext setzen.
% Aber damit es sich sinnvoll in einer =longtable=-Fu"szeile verh"alt,
% muss die Voreinstellung null sein.
% \begin{quote}
%   =\cmidrule=[\meta{wd}](\meta{trim})\{$a$--$b$\}
% \end{quote}
% Eine \meta{wd} (default =\cmidrulewidth=) Linie mit
% =\aboverulesep= Abstand dar"uber (au"ser sie folgt einer anderen
% =\cmidrule=, in welchem Fall sie der gleichen vertikalen Anordnung folgt. Das
% gleiche passiert, wenn sie auf eine =\morecmidrules= folgt, getrennt von einer
% vorhergehenden =\cmidrule= um =\cmidrulesep=).
% Eine =\cmidrule= hat
% =\belowrulesep= unter sich (au"ser ihr folgt eine andere
% =\cmidrule=, in welchem Fall die folgende Linie der gleichen vertikalen
% Anordnung folgt; oder wenn nach ihr eine =\morecmdirules= kommt, in welchem Fall
% =\cmidrulesep= unter ihr Platz gelassen wird).
%
% Die =\cmidrule= "uberspannt Spalten $a$ bis $b$ genauso, wie es im obligatorischen
% Argument angegeben wurde. Das optionale Argument \meta{trim}, das wenn
% "uberhaupt in Klammern steht, kann jede Sequenz der Zeichen =r=, =l=
% und ={=\meta{wd}=}= beinhalten, wobei letzteres das Kerning auf die Seite
% anwendet, die das direkt vorhergehende Zeichen angab.
% (Momentan wird hier noch nicht auf Fehler "uberpr"uft, es gilt also darauf zu
% achten, die Syntax richtig zu setzen.)
% \begin{quote}
%   =\morecmidrules=
% \end{quote}
% Instruiert \LaTeX\ damit, eine neue Reihe von =\cmidrules= zu beginnen,
% die von der letzten durch =\cmidrulesep= getrennt wird. Hat in einem anderen
% Kontext keine Bedeutung.
% \begin{quote}
%   =\specialrule=\{\meta{wd}\}\{\meta{abovespace}\}\{\meta{belowspace}\}
% \end{quote}
% Eine \meta{wd} Linie -- zu beachten ist, dass das hier ein obligatorisches
% Argument ist -- mit
% \meta{abovespace} dar"uber und \meta{belowspace} darunter.
% \begin{quote}
%   =\addlinespace=[\meta{wd}]
% \end{quote}
% Technisch gesehen hat das denselben Effekt wie
% =\specialrule{0pt}{0pt}{=\meta{wd}=}=, d.\,h. eine Linie ohne St"arke und ohne
% Abstand dar"uber und mit \meta{wd} (default =\defaultaddspace=) Abstand
% darunter. Dieser Befehl wurde in erster Linie designed , um im Tabellenk"orper
% Abst"ande hinzuzuf"ugen, kann aber auch genutzt werden, um eine genaues
% Ma"s an Abstand "uber oder unter einer Klasse-1-Linie festzulegen.
%
% \vspace{1em}
% Nun zu den Ausnahmen zu den oberen Befehlen. Es wurde bereits in den
% Definitionen gezeigt, dass vor und nach den Klasse-2-Linien genauso viel
% Abstand gelassen wird, wie in den Argumenten angegeben.
% Das hat zur Folge, dass eine Klasse-2-Linie den Abstand, der normalerweise
% durch eine Klasse-1-Linie erzeugt w"urde, unterdr"uckt (Z.\,B.
% =\belowrulesep= nach einer =\toprule=) und ihn mit dem Argument
% der Klasse-2-Linie ersetzt. Analog dazu wird bei der Kombination
%  \{Klasse-2-Linie\}\{Klasse-1-Linie\} der "ubliche Abstand oberhalb
% der Klasse-1-Linie (z.\,B. =\aboverulesep=) unterdr"uckt. Allerdings wird bei
% der Kombination \{Klasse-2-Linie\}\{Klasse-2-Linie\} kein Abstand unterdr"uckt:
% die Linien werden sowohl durch ={=\meta{belowspace}=}= der ersten Linie
% als auch durch ={=\meta{abovespace}=}= der zweiten Linie getrennt.
% Nicht zuletzt ergibt die Kombination \{Klasse-1-Linie\}\{Klasse-1-Linie\}
% immer Linien, die durch =\doublerulesep= getrennt sind und sie unterdr"uckt
% allen normalen Abstand, der zwischen den Linien erzeugt worden ist (aber
% l"asst "uber der ersten und unter der zweiten normale Abst"ande).
%
% Als eine Ausnahme zu dieser Ausnahme schlie"st `Klasse-1-Linie'
% =\cmidrule= aus. Derartige Linien lassen sich mit anderen =\cmidrule=s und
% =\morecmidrules= ganz normal wie oben beschrieben kombinieren. Ich wei"s
% nicht, und es ist mir auch egal, was die Kombination
% =\toprule\cmidrule{1-2}\midrule= erg"abe. Ich sehe keine Entschuldigung
% f"ur eine derartige Anwendung.
%
%\vspace{1em}
% Die voreingestellten Ausma"se werden zu Beginn der Makrobeschreibung
% (Section \ref{code}) definiert. Der Nutzer kann diese Voreinstellungen
% in der Pr"aambel "andern oder auch au"serhalb einer Tabellenumgebung,
% ganz einfach, indem er einen Befehl in genau demselben Format wie in 
% Sektion \ref{code} einf"ugt. Eine Neudefinition wird bis zum Ende des Dokuments,
% oder bis sie wieder neu definiert wird, wirken.
% \emph{Innerhalb einer Tabelle} m"usste man die "Anderung global in einer
% =noalign=-Gruppe machen:
% z.\,B. \verb|\noalign\{\global\abovetopsep=1em\toprule}|. Ich hoffe,
% wird nie n"otig sein.
%
% \section{Danksagungen}
% Bin nat"urlich dem DEK und Lamport riesig zu Dank verpflichtet; das optionale
% Argument und das =\cmidrule=zeug
% insbesondere wurde von =latex.sty= geklaut.
% Das Dokumentationtreiberzeug wurde von der tools-Paketbeschreibung
% =dcolumn.dtx= von David Carlisle geklaut.
%
% F"ur das beta-Testen und die Unterstützung \ldots
%
% \StopEventually
%
% \section{Der code\label{code}}
%
%    Die aktuelle Version wird am Anfang der Datei definiert, was in etwa so
%    aussieht
%    \begin{macrocode}
%&lt;*package&gt;
%\NeedsTeXFormat{LaTeX2e}
%\ProvidesPackage{booktabs}
%        [\filedate\space version\fileversion]
%    \end{macrocode}
%
% Zuerst werden die oben beschriebenen neuen Dimensionen eingerichtet:
%    \begin{macrocode}
\newdimen\heavyrulewidth
\newdimen\lightrulewidth
\newdimen\cmidrulewidth
\newdimen\belowrulesep
\newdimen\belowbottomsep
\newdimen\aboverulesep
\newdimen\abovetopsep
\newdimen\cmidrulesep
\newdimen\cmidrulekern
\newdimen\defaultaddspace
\heavyrulewidth=.08em
\lightrulewidth=.05em
\cmidrulewidth=.03em
\belowrulesep=.65ex
\belowbottomsep=0pt
\aboverulesep=.4ex
\abovetopsep=0pt
\cmidrulesep=\doublerulesep
\cmidrulekern=.5em
\defaultaddspace=.5em
%    \end{macrocode}
% Und einige interne Z"ahler, die f"ur den Endnutzer von keinem Interesse
% sind, die unten beschrieben werden, sobald es n"otig sein sollte:
%
% \changes{v1.618}{2003/03/28}{Remove \cs{@cmidrulewidth} }
%    \begin{macrocode}
\newcount\@cmidla
\newcount\@cmidlb
\newdimen\@aboverulesep
\newdimen\@belowrulesep
\newcount\@thisruleclass
\newcount\@lastruleclass
\@lastruleclass=0
\newdimen\@thisrulewidth
%  \end{macrocode}

% \DescribeMacro\futurenonspacelet
% 
% Als n"achstes wird ein n"utzliches Makro definiert
% (mehr oder weniger direkt aus dem
% Kapitel Dirty Tricks aus dem \TeX book; dort verzeichnet). Man sollte
% =\futurenonspacelet= anstelle von =\futurelet= verwenden, wenn man nach dem
% n"achsten (non-space) Zeichen, nach einem Makro mit einem Argument sucht.
% (Nach einem Makro
% ohne ein Argument wird ein Leerzeichen ohnehin ignoriert, also w"urde
% =\futurenonspacelet= nicht gebraucht werden.) Dieser Kniff erlaubt es dem
% Nutzer, wei"se Leerzeichen zwischen aufeinanderfolgenden Linienbefehlen zu
% setzen (was in Version 1.00 nicht klappte).
% \begin{macrocode}
\def\futurenonspacelet#1{\def\@BTcs{#1}%
   \afterassignment\@BTfnslone\let\nexttoken= }
\def\@BTfnslone{\expandafter\futurelet\@BTcs\@BTfnsltwo}
\def\@BTfnsltwo{\expandafter\ifx\@BTcs\@sptoken\let\next=\@BTfnslthree
   \else\let\next=\nexttoken\fi \next}
\def\@BTfnslthree{\afterassignment\@BTfnslone\let\next= }
%    \end{macrocode}
% 
%
% \subsection{Linien von ganzer St\"arke}
%
% Wenn man nicht in einer =longtable=Umgebung ist, kann man einfach
% Linien von ganzer St"arke als =\hrule= in  einer =\noalign{}=-Gruppe
% bearbeiten. Innerhalb einer =longtable= jedoch muss die Linie wie eine
% =\cmidrule{1-\LT@cols}= gezogen werden (Die Begr"undung daf"ur ist in der
% =longtable=-Dokumentation erkl"art).
%
% Um beides zu erlauben, m"ussen alle Linienmakros sofort eine
% =\noalign=-Gruppe "offnen, w"ahrend sie ausarbeiten, ob sie innerhalb
% einer =longtable= aufgerufen wurden; wenn das nicht gemacht wird, bekommt,
% der \TeX zu Grunde liegender =\halign=-Prozess Schluckauf.
% Ich verwende den kleinen Trick von \LaTeX{} 
% (\verb?\ifnum=0`}?), um dem Parser vorzumachen, dass die
% Klammerzahl in Ordnung ist. Die Klammer wird nach dem ganzen "Uberspringen
% am Ende des =\@BTendrule=-Makros dann tats"achlich geschlossen.
%
% Die Klasse-1-Linien und =\specialrule= unterscheiden sich in den Voreinstellungen
% nur im Abstand dar"uber und darunter und in der St"arke, die durch eine normale
% Routine erlassen wird, =\@BTrule=,
% siehe unten. Die Abst"ande, =\@aboverulesep= und =\@belowrulesep=,
% werden innerhalb der =\noalign=gruppe festgelegt, werden also von
% =\@BTrule= "ubernommen. Genauso wei"s =\@BTrule= alles, was es "uber die
% Routine, die es aufgerufen hat, wissen muss, durch das Untersuchen der 
% "ubernommenen =\@thisruleclass=. Das optionale St"arkenargument wird von
% =\@BTrule= analysiert, nachdem es auf die Voreinstellung gesetzt wurde, falls
% es fehlt.
%
%\begin{macro}{\toprule}
% \changes{v1.61803}{2005/04/14}{Change \cmd{\@belowrulesep} to \cmd{\belowrulesep}}
% \begin{macro}{\midrule}
% \begin{macro}{\bottomrule}
% \begin{macro}{\specialrule}
%    \begin{macrocode}
\def\toprule{\noalign{\ifnum0=`}\fi
  \@aboverulesep=\abovetopsep
  \global\@belowrulesep=\belowrulesep 
  \global\@thisruleclass=\@ne
  \@ifnextchar[{\@BTrule}{\@BTrule[\heavyrulewidth]}}
\def\midrule{\noalign{\ifnum0=`}\fi
  \@aboverulesep=\aboverulesep
  \global\@belowrulesep=\belowrulesep
  \global\@thisruleclass=\@ne
  \@ifnextchar[{\@BTrule}{\@BTrule[\lightrulewidth]}}
\def\bottomrule{\noalign{\ifnum0=`}\fi
  \@aboverulesep=\aboverulesep
  \global\@belowrulesep=\belowbottomsep
  \global\@thisruleclass=\@ne
  \@ifnextchar[{\@BTrule}{\@BTrule[\heavyrulewidth]}}
\def\specialrule#1#2#3{\noalign{\ifnum0=`}\fi
  \@aboverulesep=#2\global\@belowrulesep=#3\global\@thisruleclass=\tw@
  \@BTrule[#1]}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \begin{macro}{\addlinespace}
% Ein =\addlinespace= ist im Wesentlichen eine Linie ohne Breite, keinem Abstand
% dar"uber und angegebem (oder voreingestelltem) Abstand darunter. Aber weil die 
%  Linie nicht wirklich gezogen wird, sondern blo\ss ein =\vskip= ist, ist es nicht
%  n"otig, zu schauen, ob man in einer longtable ist. Also muss man
%  =\@BTrule= nicht als `echte' Linie bezeichnen. Aber wir teilen den =\@BTendrule=
%  Vorausschau- und flagsetting -Code (sieh unten), und der =\vskip= wir dort
% gemacht.
%    \begin{macrocode}
\def\addlinespace{\noalign{\ifnum0=`}\fi
  \@ifnextchar[{\@addspace}{\@addspace[\defaultaddspace]}}
\def\@addspace[#1]{\global\@belowrulesep=#1\global\@thisruleclass=\tw@
  \futurelet\@tempa\@BTendrule}
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\@BTrule}
% Alle Linien (au"ser =\addlinespace=) teilen diesen Code.
%    \begin{macrocode}
\def\@BTrule[#1]{%
  \global\@thisrulewidth=#1\relax
%    \end{macrocode}
% Das St"arkenargument (wenn der Nutzer keines angibt, dann wird
% die Aufrufroutine =\@BTrule= mit der Voreinstellung aufgerufen haben) sollte f"ur
% sp"atere Verwendung in einer globalen Variable gespeichert werden.
%    \begin{macrocode}
  \ifnum\@thisruleclass=\tw@\vskip\@aboverulesep\else
%    \end{macrocode}
% Speziallinien f"ugen immer angegebenen Abstand dar"uber ein. (Es ist
% zu beachten, dass =addlinespaces= hier nicht gehen).
%    \begin{macrocode}
  \ifnum\@lastruleclass=\z@\vskip\@aboverulesep\else
  \ifnum\@lastruleclass=\@ne\vskip\doublerulesep\fi\fi\fi
%    \end{macrocode}
% Nach Text (der letzten Klasse-1-Linie) sollte der Linie =\aboverulesep=
% vorangehen; doch falls es direkt nach einer vorhergehenden Linie kommt,
% sollte ein =\doublerulesep= eingef"ugt werden.
%
% Nun wird durch einen sehr fiesen Hack herausbekommen, ob man sich in einer
%  =longtable= befindet. Das ist leicht, wenn =\longtable= nicht mal definiert
%  ist: Dann ist man nicht drin.
%  Aber es reicht nicht einfach nur zu gucken, ob =longtable= geladen
%  ist -- man k"onnte ja auch innerhalb einer normalen Tabelle anstatt einer
%  =longtable= sein. Also wird geguckt, ob =\hline= von seiner
%  \LaTeX definition umgemodelt wurde, um genauso wie
%  =\LT@hline= zu sein. (Momentan macht =longtable= diese Umdefinition, wenn es
%  eine =longtable=-Umgebung "offnet, aber nicht global, also ist es gel"oscht,
%  sobald sich die Umgebung schlie"st.) Ein weiteres Paket k"onnte
%  das m"oglicherweise tun! Und =longtable= k"onnte sich ver"andern, insofern
%  es das einf"uhrt! Bisher ist es nicht v"ollig sicher, aber ich habe noch
%  keine bessere Methode gefunden.
%
% Wir richten =\@BTswitch= ein, um =\@BTnormal= oder =\@BLTrule= aufzurufen,
% je nachdem was passt, und rufen es dann auf.
%    \begin{macrocode}
  \ifx\longtable\undefined
     \let\@BTswitch\@BTnormal
  \else\ifx\hline\LT@hline
     \let\@BTswitch\@BLTrule
  \else
     \let\@BTswitch\@BTnormal
  \fi\fi
  \@BTswitch}
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\CT@arc@}
%   \changes{v1.6180}{2005/03/16}{add colortbl command for color support}
%   Das ist Unterst"utzung f"ur das =colortbl=-Paket f"ur farbige
%   Linien.  \cmd{\CT@arc@} h"alt das \cmd{\arrayrulecolor} Setting.
%    \begin{macrocode}
\AtBeginDocument{%
   \providecommand*\CT@arc@{}}%% colortbl support
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\@BTnormal}
%   \changes{v1.6180}{2005/03/16}{add colortbl \cmd{\CT@arc@} command for color support}
% Das ist f"ur den Fall, dass wir \emph{nicht} in einer =longtable= sind.
% Wir sind bereits in einer
%  =\noalign=-Gruppe, alles, was getan werden muss, ist eine =\hrule= zu ziehen
%  und alle zur"uckliegenden Abst"ande zu verschlingen, um dann
%  die Abschlussroutine mit =\@tempa= mit dem n"achsten Zeichen im Dokument
%  gleichzusetzen.
%
%    \begin{macrocode}
\def\@BTnormal{%
    {\CT@arc@\hrule\@height\@thisrulewidth}%
    \futurenonspacelet\@tempa\@BTendrule}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@BLTrule}
% Das ist f"ur eine Linie voller St"arke in einer =longtable=. Zuerst wird geguckt,
%  ob ein Kerningargument verwendet wurde; falls das so ist, soll =\@@BLTrule=
%  es auslesen,
%  ansonsten kann =\@@BLTrule= mit einem leeren String aufgerufen werden:
%    \begin{macrocode}
\def\@BLTrule{\@ifnextchar({\@@BLTrule}{\@@BLTrule()}}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@BLTrule}
%    \begin{macrocode}
\def\@@BLTrule(#1){\@setrulekerning{#1}%
\global\@cmidlb\LT@cols
%    \end{macrocode}
% Die Routine =\@setrulekerning= analysiert die Zeichen des Kerningarguments
% und setzt die globalen Kerningst"arken entsprechend (oder zur Voreinstellung,
% wenn der Nutzer
% sie nicht explizit angegeben hat). Die globale Anweisung an =\@cmidlb=
% legt die Spaltenzahl f"ur die =\@cmidruleb=makro fest, die mit 
% =cmidrules= geteilt wird.
%    \begin{macrocode}
\ifnum0=`{\fi}%
%    \end{macrocode}
% Schlie"st die momentan ge"offnete =\noalign=-Gruppe. Innerhalb einer =longtable=
% werden Linien als Bezugsstriche in einer Textbox, die 
% =\LT@cols= Spalten breit ist, gezogen.
%    \begin{macrocode}
\@cmidruleb
%    \end{macrocode}
% Zeichnet die Linie. Der =\@cmidruleb=-Code wird mit gew"ohnlichen =\cmidrule=s
%  geteilt.
%    \begin{macrocode}
\noalign{\ifnum0=`}\fi
%    \end{macrocode}
% Ein neues =noalign= muss aber sofort ge"offnet werden, da \TeX{} sonst eine
%    neue Textbox beginnen wird, wo wir keine wollen. Dann, nach dem Löschen
%    des nicht gewollten wei"sen Platzes, kann die Abschlussroutine aufgerufen
%     werden.
%    \begin{macrocode}
\futurenonspacelet\@tempa\@BTendrule}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@BTendrule}
% Wir schauen einen Schritt weiter; das Zeichen ist in =\@tempa=), um zu sehen, ob
% eine andere Linie folgt (Der Nutzer sollte sich sch"amen!). Wenn dem so ist,
% wird =\@lastruleclass= =\@thisruleclass= gleichgesetzt
% (und damit f"ur die folgende Linie festgelegt). Wenn es keine darauffolgende
% Linie gibt, wird =\@lastruleclass= freigelassen (d.\,h. auf Null
% gesetzt), was technisch gesehen, nicht wahr ist, da gerade eine Linie gezogen
% wurde. Aber es stellt es korrekt f"ur die n"achste Linie, der begegnet wird,
% ein; die muss auf dazwischenliegenden Text folgen.
%    \begin{macrocode}
\def\@BTendrule{\ifx\@tempa\toprule\global\@lastruleclass=\@thisruleclass
  \else\ifx\@tempa\midrule\global\@lastruleclass=\@thisruleclass
  \else\ifx\@tempa\bottomrule\global\@lastruleclass=\@thisruleclass
  \else\ifx\@tempa\cmidrule\global\@lastruleclass=\@thisruleclass
  \else\ifx\@tempa\specialrule\global\@lastruleclass=\@thisruleclass
  \else\ifx\@tempa\addlinespace\global\@lastruleclass=\@thisruleclass
  \else\global\@lastruleclass=\z@\fi\fi\fi\fi\fi\fi
  \ifnum\@lastruleclass=\@ne\relax\else\vskip\@belowrulesep\fi
  \ifnum0=`{\fi}}
%    \end{macrocode}
% \end{macro}
%
%
% \subsection{Spezielle Unterlinien}
%
% \begin{macro}{\@setrulekerning}
% Der folgende Code analysiert die Trimmingargumente (wenn es welche gibt)
%    f"ur =\cmidrule= oder eine =\BLTrule=. Die Linie
%     wird links und rechts durch =\cmrkern@l= und =\cmrkern@l= beschnitten,
%     die beide als Voreinstellung Null haben, auf =\cmidrulekern= durch die
% einfachen Argumente
%     =(lr)= gesetzt werden oder durch den Nutzer wie bei =(r{.5em})= eingestellt
%  werden. Es wird Zeichen f"ur Zeichen durch die Argumente gest"obert.
%     Die Zeichen =r= und =l= bewirken, dass =\cmrkern@r= oder =\cmrkern@l= auf
%     =\cmidrulekern= gesetzt werden. Es gibt keine Vorschau, um zu sehen, ob
%     eine St"arke das n"achste Zeichen ist. Diese Strategie ist f"ur die
% einfachen Befehle effizient, wohingegen es f"ur die bedingten Befehle
%     ineffizient ist. Viel wichtiger ist jedoch, dass es viel einfacher
%     zu programmieren ist. Die Zeichen =r= und =l= legen auch
%     =\cmrswitch= fest, sodass, wenn sich das n"achste Zeichen als
%     ={=\meta{wd}=}= herausstellt, das Kerning auf der Seite, die gerade
%     festgelegt ist, gemacht wird. Ich war zu faul, um eine Fehlermeldung zu
%     zu programmieren, falls anderen Zeichen als =r=, =l= oder
%     ={=\meta{wd}=}= begegnet wird.
% \changes{v1.6180}{2005/03/16}{Refine option testing in \cmd{\@setrulekerning}}
%    \begin{macrocode}
\def\@setrulekerning#1{%
   \global\let\cmrkern@l\z@
   \global\let\cmrkern@r\z@
   \@tfor\@tempa :=#1\do
  {\def\@tempb{r}%
   \ifx\@tempa\@tempb
      \global\let\cmrkern@r\cmidrulekern
      \def\cmrsideswitch{\cmrkern@r}%
   \else
      \def\@tempb{l}%
      \ifx\@tempa\@tempb
         \global\let\cmrkern@l\cmidrulekern
         \def\cmrsideswitch{\cmrkern@l}%
      \else
         \global\expandafter\let\cmrsideswitch\@tempa
      \fi
   \fi}}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\cmidrule}
% \begin{macro}{\@cmidrule}
% \begin{macro}{\@@cmidrule}
% \begin{macro}{\@@@cmidrule}
% =\cmidrule= nutzt =\@lastruleclass= auf eine v"ollig andere Weise
%  als die Linien von ganzer St"arke. (Vielleicht h"atte ich ein anderes
%  Flag nutzen sollen; es erschien mir zu der Zeit effizient \ldots). Das
% wird (links) auf eins gesetzt, wenn man sich in der Mitte einer Reihe von
% =\cmidrules= befindet oder eine neue (mit =\morecmidrules=) anf"angt.
% Ansonsten, f"ur den Fall, dass =\@lastruleclass= null ist, wird vor die Linie
% ein =\aboverulesep= gesetzt.
%    \begin{macrocode}
\def\cmidrule{\noalign{\ifnum0=`}\fi
    \@ifnextchar[{\@cmidrule}{\@cmidrule[\cmidrulewidth]}}
\def\@cmidrule[#1]{\@ifnextchar({\@@cmidrule[#1]}{\@@cmidrule[#1]()}}
\def\@@cmidrule[#1](#2)#3{\@@@cmidrule[#3]{#1}{#2}}
%    \end{macrocode}
% Das hier ist ein Herumt"ufteln, um die Voreinstellungen f"ur fehlende
% optionale Argumente einzustellen.
% Es wird au"serdem in einer anderen Reihenfolge zu =\@@@cmidrule= "ubergegangen,
% n"amlich =[a-b]=={width required}= ={kerning commands}= (das ist
% die Reihenfolge, in der die Argumente wirklich abgehandelt werden):
%    \begin{macrocode}
\def\@@@cmidrule[#1-#2]#3#4{\global\@cmidla#1\relax
    \global\advance\@cmidla\m@ne
    \ifnum\@cmidla&gt;0\global\let\@gtempa\@cmidrulea\else
    \global\let\@gtempa\@cmidruleb\fi
    \global\@cmidlb#2\relax
    \global\advance\@cmidlb-\@cmidla
%    \end{macrocode}
% Das erstellt einen Schalter (=\@gtempa=), um die relvanten Routinen 
% =\@cmidrulea= oder =\@cmidruleb= aufzurufen, abh"angig davon, ob man von
% Spalte anf"angt oder nicht.
%    \begin{macrocode}
    \global\@thisrulewidth=#3
%    \end{macrocode}
% Das wird durch Voreinstellung oder eingesetztes Argument eingestellt. Dann
% werden alle Trimmingargumente analysiert, um dementsprechend
% =\cmrkern@r= und =\cmrkern@l= einzustellen:
%    \begin{macrocode}
    \@setrulekerning{#4}
%    \end{macrocode}
% Nun kann dar"uber, falls gew"unscht, Platz einf"ugen, das =\noalign=
% geschlossen
% und dann zur angemessenen Linienziehroutine, wie oben beschrieben, gewechselt
% werden (=\let= bis =\@gtempa=):
%    \begin{macrocode}
    \ifnum\@lastruleclass=\z@\vskip \aboverulesep\fi
    \ifnum0=`{\fi}\@gtempa
%    \end{macrocode}
% Nach gezogener Linie kann nun
% ein anderes =\noalign= ge"offnet und die Abschlussroutine aufgerufen werden:
%    \begin{macrocode}
    \noalign{\ifnum0=`}\fi\futurenonspacelet\@tempa\@xcmidrule}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\@xcmidrule}
% In dieser Abschlussroutine ist zu rp"ufen, ob ein anderes =\cmidrule= folgt;
% wenn ja, sollte vertikal zur"uckgeschritten werden, damit es sich mit der gerade 
% gezeichneten Linie f"ugt.
% Das Setzen von =\@lastruleclass= auf 1 wird verhindern, dass "uber dem n"achsten
% wieder ein Abstand eingef"ugt wird. Wenn eine =\morecimdrules= folgt,
% wird ein (positives) =\cmidrulesep= eingef"ugt (und wieder einmal
% =\@lastruleclass= auf 1 gesetzt).
% Ansonsten ist das die letzte Linie der momentanen Gruppe und es l"asst sich ganz
% einfach =\belowrulesep= dahintersetzen. Abschlie"send wird das =\noalign=
% geschlossen.
% \changes{v1.618}{2003/03/28}{Change to \cmd{\@xcmidrule}:
%         replace \cmd{\@cmidrulewidth} with \cmd{\@thisrulewidth }}
%    \begin{macrocode}
\def\@xcmidrule{%
   \ifx\@tempa\cmidrule
       \vskip-\@thisrulewidth
       \global\@lastruleclass=\@ne
   \else \ifx\@tempa\morecmidrules
       \vskip \cmidrulesep
       \global\@lastruleclass=\@ne\else
       \vskip \belowrulesep
       \global\@lastruleclass=\z@
   \fi\fi
   \ifnum0=`{\fi}}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@cmidrulea}
% Dieser Code (wird unter diesem Text aufgerufen) zeichnet die
% Linien. Sie werden als Boxen
% im Text gezeichnet, anstatt in einer =\noalign=gruppe, was das Kerning
% links und rechts gestattet.
%   \changes{v1.6180}{2005/03/16}{add colortbl \cmd{\CT@arc@} command for color support}
%    \begin{macrocode}
\def\@cmidrulea{%
   \multispan\@cmidla&amp;\multispan\@cmidlb
   \unskip\hskip\cmrkern@l%
  {\CT@arc@\leaders\hrule \@height\@thisrulewidth\hfill}%
   \hskip\cmrkern@r\cr}%
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@cmidruleb}
%   \changes{v1.6180}{2005/03/16}{add colortbl \cmd{\CT@arc@} command for color support}
%    \begin{macrocode}
\def\@cmidruleb{%
    \multispan\@cmidlb
    \unskip\hskip \cmrkern@l%
   {\CT@arc@\leaders\hrule \@height\@thisrulewidth\hfill}%
    \hskip\cmrkern@r\cr}%
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\morecmidrules}
% Das ist wirklich ein hohler Befehl; die ganze Arbeit ist davor bereits
% in der =\cmidrule=routine gemacht worden. Es l"asst sich einen Schritt voraus
% schauen, um zu gucken, ob ein =\morecmidrules= der aktuellen =\cmidrule= folgt,
% und k"onnen das Flag setzen, falls ja. Ansonsten macht =\morecmidrules= an sich
% "uberhaupt nichts.
%    \begin{macrocode}
\def\morecmidrules{\noalign{\relax}}
%    \end{macrocode}
% \end{macro}
%
%    \begin{macrocode}
%&lt;/package&gt;
%    \end{macrocode}
%
%
%\PrintChanges
%\PrintIndex
%\end{document}
</pre></body></html>