\ProvidesPackage{baum}[2003/12/21 v1.0 Weihnachtsbäume für TeX]
\RequirePackage{calc}
\makeatletter
  \def\ts@b@baum@schleife
    {\typeout{ef:\the\@tempcntb/\csname%
       ts@b@teile@faktor@zeilen@\romannumeral\@tempcnta\endcsname}%
      \edef\ts@b@baum@zeilen{\ts@b@baum@zeilen %
      \space\the\@tempdima\space%
        \the\@tempdimb}%
      \addtolength{\@tempdima}{\csname%
        ts@b@teile@faktor@prozeile@\romannumeral\@tempcnta\endcsname}%
      \setlength\@tempdimb{\linewidth - 2\@tempdima}%
    \ifnum\@tempcntb<\csname%
       ts@b@teile@faktor@zeilen@\romannumeral\@tempcnta\endcsname%
      \advance\@tempcntb1\relax%
      \ts@b@baum@schleife%
    \fi  %
    }
\newcommand*\baum[3][3]{%
\def\teilezahl{#1}%
\def\zeilenzahl{#2}%
\def\spitzentext{\centerline{#3}}%
  \@tempcntb \teilezahl\relax%
  \advance\@tempcntb1\relax%
  \setlength{\@tempdimb}{\zeilenzahl\baselineskip / \@tempcntb}%
  % Durchschnittliche Teilhöhe=Zeilenzahl*Zeilenhöhe/anzahl der Teile
  %
  \edef\ts@b@teile@hoehe@d{\the\@tempdimb}% Durchschittliche Teilhöhe
  \edef\ts@b@ges@teile{\the\@tempcntb}%Gesamtanzahl der Teile
                                % (incl. Stamm)
  \edef\ts@b@basis@einheit{0.225\linewidth}% Einheit für Basis
  % Gesamthöhe des Baumes ist 1/2*Stern+Zeilenzahl*Zeilenhöhe
  \setlength\@tempdima{\heightof{\spitzentext}}%
  \divide\@tempdima by 2%
  \advance\@tempdima by \zeilenzahl\baselineskip%
  \edef\ts@b@gesamt@hoehe{\the\@tempdima} % Gesamthoehe des Baumes
  % Einheit für Spitze (innere ecken)
%  \setlength\@tempdima{\ts@b@basis@einheit/2}%
  \edef\ts@b@spitze@einheit{0.225\linewidth}% Einheit für Spitze
  % Berechnung der Höhe der Krone
  %    =1/2*Stern+Teilezahl*Teilhöhe
  \setlength{\@tempdima}{\ts@b@gesamt@hoehe}%
  \setlength\@tempdimb{\ts@b@teile@hoehe@d}%
  \addtolength\@tempdima{-\@tempdimb}%
  \edef\ts@b@krone@hoehe{\the\@tempdima}% Gesamthöhe der Krone
  \divide\@tempdima\baselineskip % Zeilen der Krone
  \edef\ts@b@krone@zeilen@real{\the\@tempdima}%
  \@tempcnta\@tempdima% abrunden
  \edef\ts@b@krone@zeilen@int{\the\@tempcnta}%
  \typeout{Kronenzeilen: \ts@b@krone@zeilen@int}
  % Faktor für äußere Ecken
  \setlength\@tempdimb{-0.5\linewidth + \ts@b@spitze@einheit}%
  \edef\ts@b@krone@o@zaehler{\the\@tempdimb}% Faktor pro Zeile für die
                                % Krone
  \edef\ts@b@krone@o@nenner{\the\@tempcnta}% Faktor pro Zeile für die
                                % Krone 
  \divide\@tempdimb by \@tempcnta%
  \edef\ts@b@krone@o@faktor{\the\@tempdimb}%
  % Faktor für innere Ecken
  \setlength\@tempdimb{-\ts@b@basis@einheit}%
  \divide\@tempdimb by\@tempcnta%
  \edef\ts@b@krone@i@zaehler{-\ts@b@basis@einheit}%
  \edef\ts@b@krone@i@nenner{\the\@tempcnta}%
  \edef\ts@b@krone@i@faktor{\the\@tempdimb}%
  %
  \@tempcnta1\relax%
  \setlength\@tempdima{0pt}%
%  \advance\@tempdima\baselineskip
  \typeout{^^J^^JAbschnitt \the\@tempcnta}%
  \edef\ts@b@temp@altcount{0}%
  \edef\ts@b@temp@althoehe{0pt}%
  \setlength{\@tempdimb}{\heightof{\spitzentext}+2\baselineskip}%
  \divide\@tempdimb by -2%
  \addtolength\@tempdima{\@tempdimb}%
  \edef\ts@b@temp@anfang@w{\the\@tempdimb}%
  \divide\@tempdimb by \baselineskip%
  \@tempcntb\@tempdimb%
%  \advance\@tempcntb1%
  \edef\ts@b@temp@anfang{\the\@tempcntb}%
  \advance\@tempcntb\zeilenzahl%
  \edef\ts@b@gesamt@zeilen@zahl{\the\@tempcntb}%
  \setlength\@tempdimb{\ts@b@gesamt@hoehe}%
  \addtolength\@tempdimb{\ts@b@temp@anfang@w}%
  \edef\ts@b@gesamt@hoehe{\the\@tempdimb}%

  \addtolength{\@tempdima}{\ts@b@teile@hoehe@d}%
%  \addtolength{\@tempdima}{0.5\baselineskip * \teilezahl }
%  \addtolength{\@tempdima}{0.5\baselineskip}
%  \addtolength{\@tempdima}{-\baselineskip * \@tempcnta}
  \expandafter\edef\csname%
    ts@b@teile@hoehe@\romannumeral\@tempcnta\endcsname%
  {\the\@tempdima}%
  \typeout{Hoehe des Teils:    \csname%
    ts@b@teile@hoehe@\romannumeral\@tempcnta\endcsname}%
  \calc@assign@count{\@tempcntb}{\@tempdima / \baselineskip}%
%  \advance\@tempcntb \ts@b@temp@anfang
  \expandafter\edef\csname%
    ts@b@teile@ges@zeilen@\romannumeral\@tempcnta\endcsname%
  {\the\@tempcntb}%
  \typeout{Zeilen d. Teils: \csname%
    ts@b@teile@ges@zeilen@\romannumeral\@tempcnta\endcsname} %
  \setlength\@tempdimb{\ts@b@krone@o@faktor}%
  \multiply \@tempdimb by \@tempcntb%
  \addtolength\@tempdimb{-\ts@b@spitze@einheit}%
  \divide\@tempdimb by \@tempcntb%
  \expandafter\edef\csname%
    ts@b@teile@faktor@prozeile@\romannumeral\@tempcnta\endcsname%
  {\the\@tempdimb}%
  \typeout{pro Zeile: \csname%
    ts@b@teile@faktor@prozeile@\romannumeral\@tempcnta\endcsname} %
%  \advance\@tempcntb1
%  \setlength\@tempdimb{}
  \multiply\@tempdimb by -\ts@b@temp@anfang%
  \advance\@tempdimb by 0.5\linewidth%
  \expandafter\edef\csname%
    ts@b@teile@start@einzug@\romannumeral\@tempcnta\endcsname%
  {\the\@tempdimb}  %
  \typeout{Einzug am Anfang:           \csname%
    ts@b@teile@start@einzug@\romannumeral\@tempcnta\endcsname}%
  \setlength\@tempdimb{\heightof{\spitzentext}}%
  \divide\@tempdimb by 2%
  \divide\@tempdimb by \baselineskip\relax%
  \addtolength\@tempcntb{-\@tempdimb}%
  \expandafter\edef\csname%
    ts@b@teile@faktor@zeilen@\romannumeral\@tempcnta\endcsname%
  {\the\@tempcntb}%
  \typeout{Zeilen f. Faktor: \csname%
    ts@b@teile@faktor@zeilen@\romannumeral\@tempcnta\endcsname} %
  \advance\@tempcnta1\relax%
  \loop%
    \typeout{^^J^^JAbschnitt \the\@tempcnta}%
    \calc@assign@count{\@tempcntb}{\@tempdima / \baselineskip}%
 %   \advance\@tempcntb \ts@b@temp@anfang
    \edef\ts@b@temp@altcount{\the\@tempcntb}%
    \edef\ts@b@temp@althoehe{\the\@tempdima}%
    \advance\@tempcntb1%
    \setlength\@tempdimb{\ts@b@krone@i@faktor}%
    \multiply\@tempdimb by \@tempcntb%
    \advance\@tempdimb by 0.5\linewidth%
    \expandafter\edef\csname%
      ts@b@teile@start@einzug@\romannumeral\@tempcnta\endcsname%
    {\the\@tempdimb}  %
    \typeout{Einzug am Anfang:           \csname%
      ts@b@teile@start@einzug@\romannumeral\@tempcnta\endcsname}%
    \addtolength{\@tempdima}{\ts@b@teile@hoehe@d}%
%    \addtolength{\@tempdima}{0.5\baselineskip * \teilezahl }
%    \addtolength{\@tempdima}{0.5\baselineskip}
%    \addtolength{\@tempdima}{-\baselineskip * \@tempcnta}
    \expandafter\edef\csname%
      ts@b@teile@hoehe@\romannumeral\@tempcnta\endcsname%
    {\the\@tempdima}%
    \typeout{Hoehe des Teils:    \csname%
      ts@b@teile@hoehe@\romannumeral\@tempcnta\endcsname}%
    \calc@assign@count{\@tempcntb}{\@tempdima / \baselineskip}%
%    \advance\@tempcntb \ts@b@temp@anfang
    \expandafter\edef\csname%
      ts@b@teile@ges@zeilen@\romannumeral\@tempcnta\endcsname%
    {\the\@tempcntb}%
    \typeout{Zeilen d. Teils: \csname%
      ts@b@teile@ges@zeilen@\romannumeral\@tempcnta\endcsname} %
    \setlength\@tempdimb{\ts@b@krone@o@faktor}%
    \multiply \@tempdimb by \@tempcntb%
    \addtolength\@tempdimb{0.5\linewidth-\ts@b@spitze@einheit}%
    \addtolength\@tempdimb{-\csname%
      ts@b@teile@start@einzug@\romannumeral\@tempcnta\endcsname}%
    \advance\@tempcntb by -\ts@b@temp@altcount%
    \divide\@tempdimb by \@tempcntb%
    \expandafter\edef\csname%
      ts@b@teile@faktor@zeilen@\romannumeral\@tempcnta\endcsname%
    {\the\@tempcntb}%
    \typeout{Zeilen f. Faktor: \csname%
      ts@b@teile@faktor@zeilen@\romannumeral\@tempcnta\endcsname} %
    \expandafter\edef\csname%
      ts@b@teile@faktor@prozeile@\romannumeral\@tempcnta\endcsname%
    {\the\@tempdimb}%
    \typeout{pro Zeile: \csname%
      ts@b@teile@faktor@prozeile@\romannumeral\@tempcnta\endcsname} %
  \ifnum\@tempcnta<\teilezahl%
    \advance\@tempcnta1\relax%
  \repeat%
  \advance\@tempcnta1\relax%
  \calc@assign@count{\@tempcntb}{\@tempdima / \baselineskip}%
 %   \advance\@tempcntb \ts@b@temp@anfang
  \edef\ts@b@temp@altcount{\the\@tempcntb}%
  \edef\ts@b@temp@althoehe{\the\@tempdima}%
  \setlength\@tempdimb{\ts@b@basis@einheit}%
  \multiply\@tempdimb by 2%
  \expandafter\edef\csname%
    ts@b@teile@start@einzug@\romannumeral\@tempcnta\endcsname%
  {\the\@tempdimb}  %
  \expandafter\edef\csname%
      ts@b@teile@hoehe@\romannumeral\@tempcnta\endcsname%
  {\ts@b@gesamt@hoehe}%
  \setlength\@tempdima{\ts@b@gesamt@hoehe + 0.5\baselineskip}%
  \calc@assign@count{\@tempcntb}{\@tempdima / \baselineskip}%
  \advance\@tempcntb \ts@b@temp@anfang%
  \expandafter\edef\csname%
    ts@b@teile@ges@zeilen@\romannumeral\@tempcnta\endcsname%
  {\the\@tempcntb}%
  \advance\@tempcntb by -\ts@b@temp@altcount%
  \divide\@tempdimb by \@tempcntb%
  \expandafter\edef\csname%
    ts@b@teile@faktor@zeilen@\romannumeral\@tempcnta\endcsname%
  {\the\@tempcntb}%
  \expandafter\edef\csname%
    ts@b@teile@faktor@prozeile@\romannumeral\@tempcnta\endcsname%
  {0pt}%
  %
  \@tempcntb0\relax%
  \setlength\@tempdima{\widthof{\spitzentext}}%
%  \multiply\@tempdima\ts@b@krone@o@nenner
  \setlength\@tempdimb{0.5\linewidth-0.5\@tempdima}%
%  \multiply\@tempdimb\ts@b@krone@o@nenner
  \edef\ts@b@baum@zeilen{\parshape \ts@b@gesamt@zeilen@zahl}%\the\@tempcnta
  \@tempcnta1\relax%
%  \ts@b@ges@teile
  \loop%
    \setlength\@tempdima{\csname%
      ts@b@teile@start@einzug@\romannumeral\@tempcnta\endcsname}%
    \setlength\@tempdimb{\linewidth - 2\@tempdima}%
    \@tempcntb1%
    \ts@b@baum@schleife%
    \ifnum\@tempcnta<\ts@b@ges@teile%
    \typeout{a=\the\@tempcnta}%
    \advance\@tempcnta by 1\relax%
  \repeat%
  \smallskip%
  \spitzentext%
%  \show\ts@b@baum@zeilen
  \ts@b@baum@zeilen%
  0pt \the\linewidth\relax%
%  \edef\ts@b@segment@d{\@tempdimb}
%  \setcounter\tempcntb{\teilezahl}
  %
%  \edef\ts@b@baum@zeilen{\ts@b@baum@zeilen 0pt \the\linewidth}%
%  \ts@b@baum@zeilen
  \noindent%
}
%%% Local Variables: 
%%% mode: latex
%%% TeX-master: t
%%% End: 
