\documentstyle[bar,german]{article}

\newdimen\mydim\mydim\textwidth\advance\mydim -6pt\divide\mydim 2
\def\back{$\backslash$}
\def\mycs#1{{\tt\back #1}}
\def\myhelp#1{\back#1\{barenv\}}
\def\mybar#1#2{\back bar\{#1\}\{#2\}}


\begin{document}
\centerline{\LARGE Balkendiagramme in \LaTeX-Dokumenten}
\vspace{3ex}
\centerline{\large\sc Joachim Bleser\hfil Edmund Lang}
\vspace{2ex}
\centerline{\large TH Darmstadt, Hochschulrechenzentrum}
\vspace{2ex}

Als Hilfsmittel, um Daten zu veranschaulichen, werden heutzutage immer
h„ufiger Diagramme, insbesondere Balken- oder Kuchendiagramme, eingesetzt.
Jeder kennt die Balkendiagramme, die z.B.\ nach Wahlen Gewinne und Verluste
der einzelnen Parteien auf einen Blick verdeutlichen.

Das hier vorgestellte Style-File {\tt bar.sty} hilft dem \LaTeX-Anwender,
solche {\em Balkendiagramme} in seinen Dokumenten zu verwenden, ohne auf externe
Programme, wie z.B.\ {\sc Havard Graphics} oder {\sc Excel} im PC-Bereich,
zurckgreifen zu mssen.

\begin{center}
\parbox{6cm}{\tt%
  \back begin\{barenv\}\\ \hspace*{5mm}{\em Deklarationen}\\
  \hspace*{5mm}\back bar\{{\em H”he}\}\{{\em Fllungsindex}\}[{\em Wert}]\\
  \hspace*{1cm}\vdots\\
  \hspace*{5mm}\back bar\{{\em H”he}\}\{{\em Fllungsindex}\}[{\em Wert}]\\
  \back end\{barenv\}\\
  {\em Legende}}
\end{center}

Innerhalb der neu definierten Umgebung {\tt barenv} k”nnen beliebig
positive und negative Balken gezeichnet werden. Acht verschiedene Schraffuren
stehen zur Verfgung.

\begin{tabular}{lcccccccc}
Schraffur: &\legend1{}&\legend2{}&\legend3{}&\legend4{}&%
\legend5{}&\legend6{}&\legend7{}&\legend8{}\\
Index: & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8
\end{tabular}

Die {\em Deklarationen} definieren Einstellungen wie z.B.\ Balkenbreite oder
die Einteilung	der Achsen.

Der einfachste Fall ist ein zweidimensionales Balkendiagramm. Die Balken werden
durch ihre H”he und ihren Fllungsindex definiert. Optional ist noch eine
beliebige Zeichenfolge m”glich, die unter den Balken geschrieben wird.

\vspace{\baselineskip}
\noindent\parbox{\mydim}{
\begin{barenv}
  \setwidth{30}
  \setyaxis{0}{50}{10}
  \bar{10}{1}
  \bar{45}{2}[\tt\small max]
  \bar{30}{3}
  \bar{25}{4}
\end{barenv}
}\hfill
\parbox{\mydim}{\tt
\back begin\{barenv\}\\
% \back setxaxis\{1\}\{4\}\{1\}\\
  \back setyaxis\{0\}\{50\}\{10\}\\
  \back bar\{10\}\{1\}\\
  \back bar\{45\}\{2\}[\back tt max]\\
  \back bar\{30\}\{3\}\\
  \back bar\{25\}\{4\}\\
\back end\{barenv\}\\
}

Die x-Achse kann auch anstelle von Zahlen mit den Monatsnamen (d.h.\ mit den
ersten drei Buchstaben der Monatsnamen) oder Tagen (d.h.\ mit den ersten
drei Buchstaben der Tage) beschriftet werden.

\centerline{\bf Temperatur / Monat}
\begin{center}
\begin{barenv}
  \setwidth{30}
  \setstyle{\sc}
  \setxvaluetyp{month}
  \setxaxis{1}{11}{2}
  \setstyle{\tt}
  \setyaxis{0}{40}{10}
  \bar{0}{1}
  \bar{8}{1}
  \bar{15}{1}
  \bar{25}{1}
  \bar{20}{1}
  \bar{5}{1}
\end{barenv}
\end{center}

\vspace{\baselineskip}
Zwischen die Balken kann zus„tzlicher Zwischenraum eingefgt oder
auch eine Trennlinie gezogen werden.
Ein Diagramm kann sehr leicht an der x-Achse gespiegelt werden, indem
der Anfangs- und der Endwert der y-Achse vertauscht werden. In diesem Fall
muá aber auch die Schrittweite negiert werden.

\vspace{1ex}
\noindent\parbox{\mydim}{
{\bf Gnu-Aktienindex}

\vspace{\baselineskip}
 \begin{barenv}
  \setwidth{30}
  \setstyle{\tt}
  \setyaxis[10]{-20}{40}{10}
  \setstyle{\sc}
  \setxvaluetyp{day}
  \setxaxis{5}{8}{1}
  \bar{36.5}{8}
  \bar{6.2}{8}
  \vline
  \bar{-3.2}{8}
  \bar{-16}{8}
 \end{barenv}
}
\parbox{\mydim}{
{\bf Gnu-Aktienindex}

\vspace{\baselineskip}
 \begin{barenv}
  \setwidth{30}
  \setstyle{\tt}
  \setyaxis[10]{40}{-20}{-10}
  \setstyle{\sc}
  \setxvaluetyp{day}
  \setxaxis{5}{8}{1}
  \bar{36.5}{8}
  \bar{6.2}{8}
  \vline
  \bar{-3.2}{8}
  \bar{-16}{8}
 \end{barenv}
}

\vspace{\baselineskip}
Wenn der zweidimensionale Fall nicht ausreicht, k”nnen die Balken auch
dreidimensional darstellen werden. Der Befehl \mycs{setdepth} setzt die
Balkentiefe auf einen Wert gr”áer 0; dadurch erhalten die Balken Plastizit„t.

\noindent\parbox{\mydim}{
 \begin{barenv}
  \setdepth{10}\setwidth{30}
  \setxaxis{1}{4}{1}
  \setyaxis[10]{-20}{60}{20}
  \bar{10,2}{1}
  \bar{45,6}{2}
  \bar{30}{3}
  \bar{-12,7}{4}
 \end{barenv}
}\hfill
\parbox{\mydim}%
{\tt\myhelp{begin}\\
  \back setdepth\{10\}\back setwidth\{30\}\\
  \back setxaxis\{1\}\{4\}\{1\}\\
  \back setyaxis[10]\{0\}\{60\}\{20\}\\
  \mybar{10,2}{1}\\
  \mybar{45,6}{2}\\
  \mybar{30}{3}\\
  \mybar{-12,7}{4}\\
 \myhelp{end}
}


\vspace{\baselineskip}
Die Beschriftung der Balken kann an verschiedenen Stellen erfolgen.
Voreingestellt ist {\em oberhalb}, wenn die Gr”áe $>$ 0 ist, und unterhalb,
wenn die Gr”áe $<$ 0 ist. Fnf weitere M”glichkeiten sind zugelassen, so z.B.
{\em innerhalb} der Balken oder stets {\em unterhalb}.

\noindent\parbox{\mydim}{
 \vspace*{\baselineskip}
 \begin{barenv}
  \setdepth{10}\setwidth{30}
  \setnumberpos{inside}
  \setxaxis{1}{4}{1}
  \setyaxis[10]{-20}{60}{20}
  \bar{10,2}{1}
  \bar{45,6}{1}
  \bar{30}{1}
  \bar{-12,7}{1}
 \end{barenv}
}\hfill
\parbox{\mydim}%
{\tt\myhelp{begin}\\
  \back setdepth\{10\}\back setwidth\{30\}\\
  \back setnumberpos\{inside\}\\
  \back setxaxis\{1\}\{4\}\{1\}\\
  \back setyaxis[10]\{0\}\{60\}\{20\}\\
  \mybar{10,2}{1}\\
  \mybar{45,6}{1}\\
  \mybar{30}{1}\\
  \mybar{-12,7}{1}\\
 \myhelp{end}
}

\vspace{\baselineskip}
Sind die Werte der Balken klein, treten Differenzen zwischen den
H”hen nicht besonders deutlich hervor. In  solchen F„llen kann das Diagramm
vertikal mit dem Befehl \mycs{setstretch} skaliert werden.
Der umgekehrte Fall, wenn das Diagramm zu groá wird, kann
ebenfalls mit \mycs{setstretch} und einem Wert $<1$ abgefangen werden.
Die Skalierung betrifft nur die Balkenh”hen, nicht aber Breite und Tiefe.

\noindent\parbox{\mydim}{%
 \begin{barenv}
  \setstretch{50}
  \setdepth{10}\setwidth{30}
  \setnumberpos{up}
  \setxaxis{1}{4}{1}
  \setprecision{2}
  \setyaxis{0}{2}{0.5}
  \bar{0,2}{1}
  \bar{1,6}{2}
  \bar{0,05}{3}
  \bar{0,13}{4}
 \end{barenv}
}\hfill
\parbox{\mydim}%
{\tt\myhelp{begin}\\
  \back setstretch\{50\}\\
  \back setdepth\{10\}\back setwidth\{30\}\\
  \back setnumberpos\{up\}\\
  \back setxaxis\{1986\}\{1989\}\{1\}\\
  \back setprecision\{2\}\\
  \back setyaxis\{0\}\{2\}\{0.5\}\\
  \back bar\{0,2\}\{1\}\\
  \back bar\{1,6\}\{2\}\\
  \back bar\{0,05\}\{3\}\\
  \back bar\{0,13\}\{4\}\\
 \myhelp{end}
}

Der im obigen Beispiel verwendete Befehl \mycs{setprecision} bestimmt die
Anzahl der Nachkommastellen fr die Beschriftungen der Achsen. Im Beispiel
wurde, da der Befehl {\em nach} dem \mycs{setxaxis}-Befehl erfolgt, fr
die y-Achse zwei Nachkommastellen gew„hlt.


Das Diagramm kann mit horizontalen Hintergrundlinien versehen werden.
Dies erleichtert das Ablesen der Werte der einzelnen Balken.
Es kann zwischen gepunkteten oder durchgezogenen Hintergrundlinien
gew„hlt werden. Voreingestellt sind gepunktete Hintergrundlinien.

\noindent\parbox{\mydim}{
 \begin{barenv}
  \setstretch{0.05}
  \setdepth{10}\setwidth{30}
  \setnumberpos{down}
  \setyaxis{0}{2500}{500}
  \hlineon
  \bar{1400}{4}
  \bar{2340}{5}
  \bar{890}{6}
  \bar{1973}{7}
 \end{barenv}
}\hfill
\parbox{\mydim}%
{\tt\myhelp{begin}\\
  \back setstretch\{0.05\}\\
  \back setdepth\{10\}\back setwidth\{30\}\\
  \back setnumberpos\{down\}\\
  \back setyaxis\{0\}\{2500\}\{500\}\\
  \back hlineon\\
  \mybar{1400}{4}\\
  \mybar{2340}{5}\\
  \mybar{890}{6}\\
  \mybar{1973}{7}\\
 \myhelp{end}
}

\vspace{\baselineskip}
Zus„tzliche Erkl„rungen k”nnen mit dem	\LaTeX-eigenen
{\tt\back put} Befehl hinzugefgt werden.
Da das Balkendiagramm in eine {\tt picture}-Umgebung gezeichnet wird, sind
grunds„tzlich alle Befehle erlaubt, die in einer {\tt picture}-Umgebung
Verwendung finden (z.B.\ {\tt\back line,\back oval} usw.).


\end{document}
