summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/dyntree
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/dyntree
Initial commit
Diffstat (limited to 'macros/latex/contrib/dyntree')
-rw-r--r--macros/latex/contrib/dyntree/README22
-rw-r--r--macros/latex/contrib/dyntree/dyntree.dtx1139
-rw-r--r--macros/latex/contrib/dyntree/dyntree.ins40
-rw-r--r--macros/latex/contrib/dyntree/dyntree.pdfbin0 -> 149074 bytes
4 files changed, 1201 insertions, 0 deletions
diff --git a/macros/latex/contrib/dyntree/README b/macros/latex/contrib/dyntree/README
new file mode 100644
index 0000000000..4e4b87814a
--- /dev/null
+++ b/macros/latex/contrib/dyntree/README
@@ -0,0 +1,22 @@
+Description
+-----------
+
+The dyntree package is intended for users needing to typeset a dykin tree---a group theoretical construct consisting of cartan coefficients in boxes connected by a series of lines. Such a diagram is a tool for working out the states and their weights in terms of the fundamental weights and the simple roots.
+
+This package concerns itself with making it easy for the user to generate these objects by allowing the user to specify only the cartan coefficients and the roots to which they connect below---rather than concern themselves with the placement of boxes and lines (which can be quite tedious for even simple Dynkin Tree Diagrams, let alone more complex ones).
+
+Installation
+------------
+
+To install this package, run dyntree.ins through LaTeX. This will generate a file called dyntree.sty. Put this file somewhere where LaTeX will find it---for instance localtexmf/tex/latex/dyntree/ (note that you will need to create the folder dyntree).
+
+
+License
+-------
+
+This pacakge is released under the GNU Lesser General Public License. See http://www.gnu.org/licenses/licenses.html#LGPL for more details.
+
+Contact
+-------
+
+Any bugs may be reported to the author by sending an email to the address with the first part being nsetzer, then an at sign, the next part is umd, and finally it ends in dot edu. \ No newline at end of file
diff --git a/macros/latex/contrib/dyntree/dyntree.dtx b/macros/latex/contrib/dyntree/dyntree.dtx
new file mode 100644
index 0000000000..c5e4997146
--- /dev/null
+++ b/macros/latex/contrib/dyntree/dyntree.dtx
@@ -0,0 +1,1139 @@
+% \iffalse
+%
+%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%<package>\ProvidesPackage{dyntree}
+%<package> [2006/08/14 v1 Dynkin Tree Typsetting]
+%<package>\RequirePackage{coollist}
+%<package>\RequirePackage{calc}
+%<package>\RequirePackage{epic}
+%<package>\RequirePackage{eepic}
+%<package>\RequirePackage{amsmath}
+%<package>\RequirePackage{amssymb}
+%
+%
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage{dyntree}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+\DocInput{dyntree.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \iffalse meta-comment
+% remove this comment to get a checksum
+% \CheckSum{0}
+% \fi
+%
+%% \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 \~}
+%
+% \changes{v1.0}{2006/08/14}{Initial Release}
+%
+% \GetFileInfo{dyntree.sty}
+%
+% \DoNotIndex{\#,\$,\%,\&,\@,\\,\{,\},\^,\_,\~,\ ,\!,\(,\),\,}
+% \DoNotIndex{\@ne,\expandafter}
+% \DoNotIndex{\advance,\begingroup,\catcode,\closein,\errmessage}
+% \DoNotIndex{\newcommand,\renewcommand,\providecommand}
+% \DoNotIndex{\closeout,\day,\def,\edef,\xdef,\gdef,\let,\empty,\endgroup}
+% \DoNotIndex{\newcounter,\providecounter,\addtocounter,\setcounter,\stepcounter,\value,\arabic,\the}
+% \DoNotIndex{\if,\fi,\ifthenelse,\else,\setboolean,\boolean,\newboolean,\provideboolean,\equal,\AND,\OR,\NOT,\whiledo}
+% \DoNotIndex{\ifcase,\ifcat,\or,\else}
+% \DoNotIndex{\par,\parbox,\mbox,\hbox,\begin,\end,\nabla,\partial}
+% \DoNotIndex{\overline,\bar,\small,\tiny,\mathchoice,\scriptsize,\textrm,\texttt}
+% \DoNotIndex{\alpha,\beta,\gamma,\epsilon,\varepsilon,\delta,\zeta,\eta,\theta,\vartheta,\iota,\kappa,\lambda,\mu,\nu}
+% \DoNotIndex{\xi,\omicron,\pi,\varpi,\rho,\varrho,\sigma,\tau,\upsilon,\phi,\varphi,\chi,\psi,\omega}
+% \DoNotIndex{\Delta,\Gamma,\Theta,\Lambda,\Xi,\Pi,\Sigma,\Phi,\Psi,\Omega}
+% \DoNotIndex{\digamma,\lceil,\rceil,\lfloor,\rfloor,\left,\right,\inp,\inb,\inbr,\inap,\nop}
+% \DoNotIndex{\sum,\prod,\int,\log,\ln,\exp,\sin,\cos,\tan,\csc,\sec,\cot,\arcsin,\arccos,\arctan,\det}
+% \DoNotIndex{\sinh,\cosh,\tanh,\csch,\sech,\coth,\arcsinh,\arccosh,\arctanh}
+% \DoNotIndex{\mod,\max,\min,\gcd,\lcm,\wp,\arg,\dots,\infty,}
+% \DoNotIndex{\frac,\binom,\braket,\@@atop}
+% \DoNotIndex{\cdot,\ldots,\tilde,\times,\dagger,\relax}
+% \DoNotIndex{\mathbb,\roman,\bf,\mathord,\cal,\DeclareMathOperator,\PackageError,\PackageWarning}
+% \DoNotIndex{\csname,\endcsname,\ifx,\ifnum}
+% \DoNotIndex{\makeatother,\makeatletter}
+% \DoNotIndex{\copy,\setbox,\usebox,\newbox}
+% \DoNotIndex{\addtolength,\setlength,\newlength,\unitlength,\settoheight,\settodepth,\settowidth,\lengthtest}
+% \DoNotIndex{\drawline,\line,\put}
+% \DoNotIndex{
+% \DYNTREE@temparray,\DYNTREE@templen,\DYNTREE@tempboxnum,\DYNTREE@tempxCoord,
+% \DYNTREE@tempinsert,\DYNTREE@temproot,\DYNTREE@tempswap,\DYNTREE@temprootX}
+%
+% \title{The \textsf{dyntree} package\thanks{This document
+% corresponds to \textsf{dyntree}~\fileversion,
+% dated~\filedate.}}
+% \author{nsetzer}
+%
+% \maketitle
+%
+% \setcounter{IndexColumns}{2}
+% \StopEventually{\PrintChanges\PrintIndex}
+%
+% The \textsf{dyntree} package is intended for users needing to typeset a dykin tree---a group theoretical construct
+% consisting of cartan coefficients in boxes connected by a series of lines.
+% This package makes it easy for the user to generate these objects by allowing the user to specify only the
+% cartan coefficients and the root number(s) that they connect to below.
+%
+% This package requires the \textsf{coollist} package, which is not a standard \LaTeX package but is available at CTAN.
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%\section{Basics}
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% To create a Dynkin Tree Diagram, the syntax is as follows \DescribeEnv{dyntree} \DescribeMacro{\dynbox}:
+%
+% |\start{dyntree}|\marg{num\_roots}
+%
+% |\dynbox|\marg{cartan\_coefficients}\marg{cvs\_descendant\_root\_list} |\lend|
+%
+% $\vdots$
+%
+% |\finish{dyntree}|
+%
+% where
+%
+% \meta{num\_roots} is an integer indicating the number of simple roots
+%
+% \meta{cartan\_coefficients} is an \emph{ampersand} (\&) delimited list of cartan coefficients
+% (the number of which \emph{must} be equal to \meta{num\_roots}
+%
+% \meta{cvs\_descendant\_root\_list} is a comma delimited list of integers indicating which simple root can be lowered
+% from this box. The simple roots are numbered from left to right starting at $1$ and ending at \meta{num\_roots}
+%
+%
+% Thus, if the group of interest had $3$ simple roots, each |\dynbox| would have a \meta{cartan\_coefficients} with three entries; that is, it would be a list with three integers as in
+%
+% \begin{center}
+% |1 & 0 & 0|
+% \end{center}
+%
+% and the list \meta{cvs\_descendant\_root\_list} would have at most three entries (but it need not have exactly three entries) with the entries being between $1$ and $3$. The entry $1$ would correspond to the first (left-most) simple root being lowered, the entry $2$ the second simple root, and $3$ the third:
+%
+% \DeleteShortVerb{\|}
+% \begin{center}
+% \begin{picture}(200,70)
+% \put(20,40){simple root:}
+% \put(80,40){$\begin{array}{ccc} 1 & 2 & 3 \end{array}$}
+% \put(80,30){$\begin{array}{|ccc|} \hline 1 & 0 & 0 \\ \hline \end{array}$}
+% \end{picture}
+% \end{center}
+% \MakeShortVerb{\|}
+%
+% So, finally, an entry such as
+%
+% \begin{center}
+% |\dynbox{-1 & 0 & 0}{1,3}|
+% \end{center}
+%
+% would specify that the program should draw two lines below the box \DeleteShortVerb{\|} $\begin{array}{|ccc|} \hline 1 & 0 & 0 \\ \hline \end{array}$ \MakeShortVerb{\|}; one for the first simple root, and another for the third simple root. The resulting portion of the diagram would look like
+%
+% \begin{center}
+% \start{dyntree}{3}
+% \dynbox{-1 & 0 & 0}{1,3} \lend
+% \finish{dyntree}
+% \end{center}
+%
+% \makeatletter
+% \vspace{\DYNTREE@levelsep}
+% \makeatother
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
+%\subsection{Quirks}
+% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% There are two quirks with this package, and they are
+% \begin{itemize}
+% \item{if there are multiple Dynkin Tree Diagrams required for your document, you \emph{must} enclose each tree in braces}
+% \item{The lowest state (bottom-most dynbox) must have a non-empty entry in \meta{cvs\_descendant\_root\_list} even though no lines are to be drawn from it. To meet both criteria, place a zero in this spot.}
+% \end{itemize}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
+%\subsection{Examples}
+% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \newcounter{examples}
+% \setcounter{examples}{1}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+%\subsubsection{Example \theexamples} \stepcounter{examples}
+% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{verbatim}
+% {
+% \start{dyntree}{2}
+% \dynbox{3 & 0}{1} \lend
+% \dynbox{1 & 1}{1,2} \lend
+% \dynbox{2 & -1}{1}
+% \dynbox{-1 & 2}{1,2} \lend
+% \dynbox{0 & 0}{1,2}
+% \dynbox{-3 & 3}{0,2} \lend
+% \dynbox{1 & -2}{1}
+% \dynbox{-2 & 1}{0,2} \lend
+% \dynbox{-1 & -1}{0,2} \lend
+% \dynbox{0 & -3}{0} \lend
+% \finish{dyntree}
+% }
+% \end{verbatim}
+%
+% {
+% \start{dyntree}{2}
+% \dynbox{3 & 0}{1} \lend
+% \dynbox{1 & 1}{1,2} \lend
+% \dynbox{2 & -1}{1}
+% \dynbox{-1 & 2}{1,2} \lend
+% \dynbox{0 & 0}{1,2}
+% \dynbox{-3 & 3}{0,2} \lend
+% \dynbox{1 & -2}{1}
+% \dynbox{-2 & 1}{0,2} \lend
+% \dynbox{-1 & -1}{0,2} \lend
+% \dynbox{0 & -3}{0} \lend
+% \finish{dyntree}
+% }
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+%\subsubsection{Example \theexamples} \stepcounter{examples}
+% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{verbatim}
+% \begin{center}
+% {
+% \start{dyntree}{3}
+% \dynbox{2 & 0 & 0}{1} \lend
+% \dynbox{0 & 1 & 0}{1,2} \lend
+% \dynbox{1 & -1 & 1}{1,3}
+% \dynbox{-2 & 2 & 0}{2} \lend
+% \dynbox{1 & 1 & -1}{1,2}
+% \dynbox{-1 & 0 & 1}{2,3} \lend
+% \dynbox{2 & -1 & 0}{1}
+% \dynbox{-1 & 2 & -1}{2}
+% \dynbox{0 & -2 & 2}{3} \lend
+% \dynbox{0 & 0 & 0}{0} \lend
+% \finish{dyntree}
+% }
+% \end{center}
+% \end{verbatim}
+%
+% \begin{center}
+% {
+% \start{dyntree}{3}
+% \dynbox{2 & 0 & 0}{1} \lend
+% \dynbox{0 & 1 & 0}{1,2} \lend
+% \dynbox{1 & -1 & 1}{1,3}
+% \dynbox{-2 & 2 & 0}{2} \lend
+% \dynbox{1 & 1 & -1}{1,2}
+% \dynbox{-1 & 0 & 1}{2,3} \lend
+% \dynbox{2 & -1 & 0}{1}
+% \dynbox{-1 & 2 & -1}{2}
+% \dynbox{0 & -2 & 2}{3} \lend
+% \dynbox{0 & 0 & 0}{0} \lend
+% \finish{dyntree}
+% }
+% \end{center}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+%\subsubsection{Example \theexamples} \stepcounter{examples}
+% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{verbatim}
+% This is a $15$ of $SU(5)$
+%
+% \begin{center}
+% {
+% \start{dyntree}{4}
+% \dynbox{2 & 0 & 0 & 0}{1} \lend
+% \dynbox{0 & 1 & 0 & 0}{1,2} \lend
+% \dynbox{1 & -1 & 1 & 0}{1,3}
+% \dynbox{-2 & 2 & 0 & 0}{2} \lend
+% \dynbox{1 & 0 & -1 & 0}{1,4}
+% \dynbox{-1 & 0 & 1 & 0}{2,3} \lend
+% \dynbox{1 & 0 & 0 &-1}{1}
+% \dynbox{-1 & 1 & -1 & 1}{2,4}
+% \dynbox{0 & -2 & 2 & 0}{3} \lend
+% \dynbox{-1 & 1 & 0 & -1}{2}
+% \dynbox{0 & -1 & 0 & 1}{3,4} \lend
+% \dynbox{0 & -1 & 1 & -1}{3}
+% \dynbox{0 & 0 & -2 & 2}{4} \lend
+% \dynbox{0 & 0 & -1 & 0}{4} \lend
+% \dynbox{0 & 0 & 0 & -2}{0} \lend
+% \finish{dyntree}
+% }
+% \end{center}
+% \end{verbatim}
+%
+% This is a $15$ of $SU(5)$
+%
+% \begin{center}
+% {
+% \start{dyntree}{4}
+% \dynbox{2 & 0 & 0 & 0}{1} \lend
+% \dynbox{0 & 1 & 0 & 0}{1,2} \lend
+% \dynbox{1 & -1 & 1 & 0}{1,3}
+% \dynbox{-2 & 2 & 0 & 0}{2} \lend
+% \dynbox{1 & 0 & -1 & 0}{1,4}
+% \dynbox{-1 & 0 & 1 & 0}{2,3} \lend
+% \dynbox{1 & 0 & 0 &-1}{1}
+% \dynbox{-1 & 1 & -1 & 1}{2,4}
+% \dynbox{0 & -2 & 2 & 0}{3} \lend
+% \dynbox{-1 & 1 & 0 & -1}{2}
+% \dynbox{0 & -1 & 0 & 1}{3,4} \lend
+% \dynbox{0 & -1 & 1 & -1}{3}
+% \dynbox{0 & 0 & -2 & 2}{4} \lend
+% \dynbox{0 & 0 & -1 & 0}{4} \lend
+% \dynbox{0 & 0 & 0 & -2}{0} \lend
+% \finish{dyntree}
+% }
+% \end{center}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+%\subsubsection{Example \theexamples} \stepcounter{examples}
+% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{verbatim}
+% \begin{center}
+% {
+% \start{dyntree}{2}
+% \dynbox{0 & 2}{2} \lend
+% \dynbox{1 & 0}{1,2} \lend
+% \dynbox{2 & -2}{1}
+% \dynbox{-1 & 1}{2} \lend
+% \dynbox{0 & -1}{1} \lend
+% \dynbox{-2 & 0}{0} \lend
+% \finish{dyntree}
+% }
+% \end{center}
+% \end{verbatim}
+%
+% \begin{center}
+% {
+% \start{dyntree}{2}
+% \dynbox{0 & 2}{2} \lend
+% \dynbox{1 & 0}{1,2} \lend
+% \dynbox{2 & -2}{1}
+% \dynbox{-1 & 1}{2} \lend
+% \dynbox{0 & -1}{1} \lend
+% \dynbox{-2 & 0}{0} \lend
+% \finish{dyntree}
+% }
+% \end{center}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%\section{Implementation}
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
+%\subsection{Variables and Constants}
+% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% The \textsf{dyntree} package utilizes a picture environment to create the tree. To do this it requires several
+% constant length values, as well as calculated length values and counters. These are define below.
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+%\subsubsection{Cartan Coefficients Box Variables}
+% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% The first thing to do is declare the length variables associated with a cartan coefficients box---dynbox for short.
+% These variables are
+%
+% \begin{tabular}{lp{.5\textwidth}}
+% |\DYNTREE@widechar| & the width of a $-1$ \\
+% |\DYNTREE@thinchar| & the width of a $1$ \\
+% |\DYNTREE@cartancoefwidth| & the width of a cartan coefficient (a combination of $-1$ and $1$) \\
+% |\DYNTREE@marginwidth| & the width of the margin of the cartan coefficients box \\
+% |\DYNTREE@colsepwidth| & the width between columns of the cartan coefficients box \\
+% |\DYNTREE@dynboxheight| & the height (baseline to top) of the cartan coefficients box \\
+% |\DYNTREE@dynboxdepth| & the depth (baseline to bottom) of the cartan coefficients box \\
+% |\DYNTREE@dynboxvlen| & the full vertical height of a cartan coefficients box \\
+% |\DYNTREE@dynboxwidth| & the width of a dynbox (calculated based on numroots) \\
+% \end{tabular}
+%
+% \begin{macrocode}
+\newlength{\DYNTREE@widechar}%
+\newlength{\DYNTREE@thinchar}%
+\newlength{\DYNTREE@cartancoefwidth}%
+\newlength{\DYNTREE@marginwidth}%
+\newlength{\DYNTREE@colsepwidth}%
+\newlength{\DYNTREE@dynboxheight}%
+\newlength{\DYNTREE@dynboxdepth}%
+\newlength{\DYNTREE@dynboxvlen}%
+\newlength{\DYNTREE@dynboxwidth}%
+% \end{macrocode}
+%
+% Now that they are declared, initialize the ``exterior" ones
+%
+% \begin{macrocode}
+\settowidth{\DYNTREE@widechar}{$-1$}%
+\settowidth{\DYNTREE@thinchar}{$1$}%
+\setlength{\DYNTREE@cartancoefwidth}%
+ {\DYNTREE@widechar*1/2 + \DYNTREE@thinchar*1/2}%
+\settowidth{\DYNTREE@marginwidth}%
+ {$\begin{array}{|c|}\hline 1 \\ \hline \end{array}$}%
+ \addtolength{\DYNTREE@marginwidth}{-\DYNTREE@thinchar}%
+\settowidth{\DYNTREE@colsepwidth}%
+ {$\begin{array}{|cc|}\hline 1 & 1 \\ \hline \end{array}$}%
+ \addtolength{\DYNTREE@colsepwidth}{-\DYNTREE@marginwidth - \DYNTREE@thinchar*2}%
+\settoheight{\DYNTREE@dynboxheight}%
+ {$\begin{array}{|c|}\hline 1 \\ \hline \end{array}$}%
+\settodepth{\DYNTREE@dynboxdepth}%
+ {$\begin{array}{|c|}\hline 1 \\ \hline \end{array}$}%
+\setlength{\DYNTREE@dynboxvlen}{\DYNTREE@dynboxheight + \DYNTREE@dynboxdepth}%
+% \end{macrocode}
+%
+% and now for convenience and error testing, print them out
+%
+% \makeatletter
+% \begin{tabular}{rl}
+% widechar: & \the\DYNTREE@widechar \\
+% thinchar: & \the\DYNTREE@thinchar \\
+% cartancoefwidth: & \the\DYNTREE@cartancoefwidth \\
+% marginwidth: & \the\DYNTREE@marginwidth \\
+% colsepwidth: & \the\DYNTREE@colsepwidth \\
+% dynboxheight & \the\DYNTREE@dynboxheight \\
+% dynboxdepth & \the\DYNTREE@dynboxdepth \\
+% dynboxvlen & \the\DYNTREE@dynboxvlen \\
+% \end{tabular}
+% \makeatother
+%
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+%\subsubsection{Dynkin Tree Variables}
+% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% These variables are specific to the actual creation of the tree structure.
+%
+% \begin{tabular}{lp{0.55\textwidth}}
+% {\bf \Large counters} \\
+% |DYNTREE@numlevel| & the number of levels in the tree \\
+% |DYNTREE@nextlevel| & the number of the next level \\
+% |DYNTREE@numboxes| & counter for counting number of boxes in a row \\
+% |DYNTREE@nextnumboxes| & counter for counting number of boxes in the next row \\
+% |DYNTREE@target| & used to record the `targeted' array element when sorting \\
+% |DYNTREE@listlen| & the length of the list of descendents \\
+% |DYNTREE@xCoord| & the x coordinate in scaled points \\
+% |DYNTREE@yCoord| & the y coordinate in scaled points \\
+% |DYNTREE@xPos| & the x coordinate in scaled points \\
+% |DYNTREE@yPos| & the y coordinate in scaled points \\
+% |DYNTREE@xComp| & the x coordinate in scaled points \\
+% |DYNTREE@yComp| & the y coordinate in scaled points \\
+% |DYNTREE@leftX| & the left most x coordinate in scaled points \\
+% |DYNTREE@ct| & generic counter \\
+% |DYNTREE@counter| & generic counter \\
+% |DYNTREE@index| & generic counter \\
+% |DYNTREE@root| & the root number \\
+% \end{tabular}
+%
+% \begin{tabular}{lp{0.55\textwidth}}
+% {\bf \Large lengths} \\
+% |\DYNTREE@dynboxsep| & the distance between dynkin boxes \\
+% |\DYNTREE@levelsep| & the distances between each level (from dynkin box bottom to top of next layer's dynbox)
+% \\
+% |\DYNTREE@leftmostX| & the left most x value \\
+% |\DYNTREE@rightmostX| & the right most x value \\
+% |\DYNTREE@unitlen| & the unit length value before altering (to allow it to be restored) \\
+% |\DYNTREE@templen| & temporary length storage \\
+% |\DYNTREE@holdlen| & temporary length storage \\
+% \end{tabular}
+%
+% \begin{tabular}{lp{0.55\textwidth}}
+% {\bf \Large commands} \\
+% |\DYNTREE@treestop| & indicates the point where the gobbler stops reading (to allow \LaTeX to properly
+% read all the data. Its value is |\&\&\&| \\
+% |\DYNTREE@treeend| & indicates the end of the tree. It is in the definition of the gobbler.
+% It has a value of |\%\%\%| \\
+% \end{tabular}
+%
+%
+% \begin{macro}{\lend}
+% \begin{macro}{\dynbox}
+%
+% And there are two external commands:
+%
+% \begin{tabular}{lp{0.75\textwidth}}
+% |\lend| & indicates the end of one tree level. The value is never used: this token is used as
+% a delimiter by the user and the code. Its value, which should never be typed,
+% is |\&\%\&\%| \\
+% |\dynbox| & indicates the start of a dynbox. The value is never used: this token is purely for
+% delimiting the start of the dynbox by the user; it is only defined to satisfy the
+% |\ifthenelse| statement \\
+% \end{tabular}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macrocode}
+\newcounter{DYNTREE@numlevel}%
+\newcounter{DYNTREE@nextlevel}%
+\newcounter{DYNTREE@numboxes}%
+\newcounter{DYNTREE@nextnumboxes}%
+\newcounter{DYNTREE@target}%
+\newcounter{DYNTREE@listlen}%
+\newcounter{DYNTREE@xCoord}%
+\newcounter{DYNTREE@yCoord}%
+\newcounter{DYNTREE@xPos}%
+\newcounter{DYNTREE@yPos}%
+\newcounter{DYNTREE@xComp}%
+\newcounter{DYNTREE@yComp}%
+\newcounter{DYNTREE@leftX}%
+\newcounter{DYNTREE@ct}%
+\newcounter{DYNTREE@counter}%
+\newcounter{DYNTREE@index}%
+\newcounter{DYNTREE@root}%
+\newlength{\DYNTREE@dynboxsep}%
+\newlength{\DYNTREE@levelsep}%
+\newlength{\DYNTREE@leftmostX}%
+\newlength{\DYNTREE@rightmostX}%
+\newlength{\DYNTREE@unitlen}%
+\newlength{\DYNTREE@templen}%
+\newlength{\DYNTREE@holdlen}%
+\newcommand{\DYNTREE@treestop}{\&\&\&}%
+\newcommand{\DYNTREE@treeend}{\%\%\%}%
+\newcommand{\lend}{\&\%\&\%}%
+\newcommand{\dynbox}{}%
+% \end{macrocode}
+%
+% Now that they are declared, initialize the ``exterior" ones
+%
+% \begin{macrocode}
+\setlength{\DYNTREE@dynboxsep}{\DYNTREE@colsepwidth}%
+\setlength{\DYNTREE@levelsep}{1cm}%
+% \end{macrocode}
+%
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
+%\subsection{The Tree Eater}
+% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% While the dynkin tree structure resembles that of an environment, it actually consists of a \LaTeX command that
+% consumes the data, sorts it, and displays the proper items. The basis of this consumption are several
+% ``gobblers"---the first of which eats the tree one level at a time
+%
+%
+% \begin{macrocode}
+\def\DYNTREE@gobbletree#1\lend#2\DYNTREE@treeend{%
+% \end{macrocode}
+% Before the level can be processed, several things must be adjusted. First, since a new level is beginning
+% the counter must be incremented by one
+% \begin{macrocode}
+\addtocounter{DYNTREE@numlevel}{1}%
+% \end{macrocode}
+% initialize the number of boxes for this level
+% \begin{macrocode}
+\setcounter{DYNTREE@numboxes}{0}%
+% \end{macrocode}
+% initialize the number of boxes for the next level
+% \begin{macrocode}
+\setcounter{DYNTREE@nextnumboxes}{0}%
+% \end{macrocode}
+% Process the level:
+% \begin{macrocode}
+\DYNTREE@gobbledynboxes#1\lend%
+% \end{macrocode}
+% \iffalse
+% \makeatletter
+% \begin{tabular}{lp{.55\textwidth}}
+% \multicolumn{2}{l}{{\bf ERROR CHECK}} \\
+% level: & \arabic{DYNTREE@numlevel} \\
+% boxes: & \arabic{DYNTREE@numboxes} \\
+% \end{tabular}
+% \makeatother
+% \fi
+% Record the number of boxes for this level
+% \begin{macrocode}
+\expandafter\xdef%
+ \csname DYNTREE@level@\roman{DYNTREE@numlevel}@numbox\endcsname%
+ {\arabic{DYNTREE@numboxes}}%
+% \end{macrocode}
+% Now check for the signal to stop processing
+% \begin{macrocode}
+\ifthenelse{ \equal{#2}{\DYNTREE@treestop} }%
+ {%
+% \end{macrocode}
+% The End---just do nothing
+% \begin{macrocode}
+ }%
+% Else
+ {%
+% \end{macrocode}
+% continue processing levels until the end of the tree
+% \begin{macrocode}
+ \DYNTREE@gobbletree#2\DYNTREE@treeend%
+ }%
+}%
+% \end{macrocode}
+%
+%
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
+%\subsection{The Box Eater}
+% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% The second ``gobbler" eats the boxes one by one:
+%
+% \begin{macrocode}
+\def\DYNTREE@gobbledynboxes#1\dynbox#2#3#4{%
+% \end{macrocode}
+% increment the number of boxes
+% \begin{macrocode}
+\addtocounter{DYNTREE@numboxes}{1}%
+% \end{macrocode}
+% \iffalse
+%! boxnum: \arabic{DYNTREE@numboxes}
+% \fi
+% Store the boxes for this level in registers
+% \begin{macrocode}
+\expandafter\newbox%
+ \csname DYNTREE@box@\roman{DYNTREE@numlevel}@\roman{DYNTREE@numboxes}\endcsname%
+\expandafter\setbox%
+ \csname DYNTREE@box@\roman{DYNTREE@numlevel}@\roman{DYNTREE@numboxes}\endcsname=%
+ \hbox{$\begin{array}{|*{\DYNTREE@numroots}{c}|}\hline #2 \\ \hline \end{array}$}%
+% \end{macrocode}
+% Calculate the X value for each descendent and place in sorted list
+%
+% * Get the length of the list
+% \begin{macrocode}
+\listlenstore{DYNTREE@listlen}{#3}%
+\expandafter\xdef
+ \csname DYNTREE@childline@\roman{DYNTREE@numlevel}@\roman{DYNTREE@numboxes}@boxnum\endcsname%
+ {\arabic{DYNTREE@listlen}}%
+\ifthenelse{\value{DYNTREE@listlen} > \DYNTREE@numroots}%
+ {%
+ \PackageError{dyntree}%
+ {%
+ Length of descendant of \arabic{DYNTREE@numboxes}%
+ on level \arabic{DYNTREE@numlevel} exceeds number of roots%
+ (\DYNTREE@numroots)%
+ }%
+ }%
+% Else
+ {}%
+% \end{macrocode}
+% * store the list in a temp variable for convenience in typing, store it more permanently for use later on.
+% \begin{macrocode}
+\liststore{#3}{DYNTREE@templist@}%
+\liststore{#3}%
+ {DYNTREE@childlist@\roman{DYNTREE@numlevel}@\roman{DYNTREE@numboxes}@}%
+% \end{macrocode}
+% * go through the list and generate the sorted 'array' |DYNTREE@level@|\meta{level}|@|\meta{boxnum}|@X|
+% \begin{macrocode}
+\setcounter{DYNTREE@ct}{1}%
+\whiledo{ \NOT \(\value{DYNTREE@ct} > \value{DYNTREE@listlen}\) \AND
+ \NOT\(\value{DYNTREE@ct} > \DYNTREE@numroots\) }%
+ {%
+% \end{macrocode}
+ % need to store the `root' value in a counter to retrieve the data
+% \begin{macrocode}
+ \setcounter{DYNTREE@counter}{\csname DYNTREE@templist@\roman{DYNTREE@ct}\endcsname}%
+% \end{macrocode}
+ % check that the number submitted is within the allowed range
+% \begin{macrocode}
+ \ifthenelse{ \(\value{DYNTREE@counter} > \DYNTREE@numroots\) \OR
+ \(\value{DYNTREE@counter} < 1\) }%
+ {%
+ \ifthenelse{\value{DYNTREE@counter} = 0}%
+ {%
+% \end{macrocode}
+ % Do nothing - this is the last level
+% \begin{macrocode}
+ }%
+ % Else
+ {%
+ \PackageError{dyntree}%
+ {%
+ Descendant root of \arabic{DYNTREE@numboxes} on level%
+ \arabic{DYNTREE@numlevel} out of bounds%
+ (\arabic{DYNTREE@counter} > \DYNTREE@numroots)%
+ }%
+ }%
+ }%
+ % Else
+ {%
+% \end{macrocode}
+ % temporarily store the length
+% \begin{macrocode}
+ \setlength{\DYNTREE@templen}%
+ {\csname DYNTREE@level@\roman{DYNTREE@numlevel}@\roman{DYNTREE@numboxes}@X\endcsname}%
+ \addtolength{\DYNTREE@templen}%
+ {\csname DYNTREE@rootX@\roman{DYNTREE@counter}\endcsname*(-1)}%
+% \end{macrocode}
+ % adjust the left most length
+% \begin{macrocode}
+ \ifthenelse{\DYNTREE@templen < \DYNTREE@leftmostX}%
+ {%
+ \setlength{\DYNTREE@leftmostX}{\DYNTREE@templen}%
+ }%
+ % Else
+ {}%
+% \end{macrocode}
+ % adjust right most length
+% \begin{macrocode}
+ \setlength{\DYNTREE@holdlen}{\DYNTREE@templen}%
+ \addtolength{\DYNTREE@holdlen}{\DYNTREE@dynboxwidth}%
+ \ifthenelse{ \DYNTREE@holdlen > \DYNTREE@rightmostX }%
+ {%
+ \setlength{\DYNTREE@rightmostX}{\DYNTREE@holdlen}%
+ }%
+ % Else
+ {}%
+% \end{macrocode}
+ % now store the x value for the line
+% \begin{macrocode}
+ \setlength{\DYNTREE@holdlen}%
+ {\expandafter\csname DYNTREE@dynboxX@\roman{DYNTREE@counter}\endcsname}%
+ \addtolength{\DYNTREE@holdlen}{\DYNTREE@templen}%
+ \setcounter{DYNTREE@xPos}{\DYNTREE@holdlen}%
+% \end{macrocode}
+ % \iffalse
+ %! \begin{tabular}{cc}
+ %! rootX.\roman{DYNTREE@counter} & \csname DYNTREE@rootX@\roman{DYNTREE@counter}\endcsname \\
+ %! DYNTREE@numlevel: & \arabic{DYNTREE@numlevel} \\
+ %! numboxes: & \arabic{DYNTREE@numboxes} \\
+ %! templen: & \the\DYNTREE@templen \\
+ %! \end{tabular}
+ %!
+ % \fi
+ % |counter| has served its purpose and may be used in another context
+ %
+ % add the length to the sorted 'array'
+ %
+ % * initialize the counter to the END of the array
+% \begin{macrocode}
+ \setcounter{DYNTREE@counter}{\value{DYNTREE@nextnumboxes}}%
+% \end{macrocode}
+ % * get the value of the next level
+% \begin{macrocode}
+ \setcounter{DYNTREE@nextlevel}{\value{DYNTREE@numlevel} + 1}%
+% \end{macrocode}
+ % * Check for array elements
+% \begin{macrocode}
+ \ifthenelse{\value{DYNTREE@counter} = 0}%
+ {%
+% \end{macrocode}
+ % set the first element as the length
+% \begin{macrocode}
+ \expandafter\xdef%
+ \csname DYNTREE@level@\roman{DYNTREE@nextlevel}@i@X\endcsname%
+ {\the\DYNTREE@templen}%
+% \end{macrocode}
+ % increment the number of elements
+% \begin{macrocode}
+ \addtocounter{DYNTREE@nextnumboxes}{1}%
+ }%
+ % Else
+ {%
+% \end{macrocode}
+ % there is at least one element
+% \begin{macrocode}
+ \edef\DYNTREE@temparray%
+ {\csname DYNTREE@level@\roman{DYNTREE@nextlevel}@\roman{DYNTREE@counter}@X\endcsname}%
+ \edef\DYNTREE@tempinsert{\the\DYNTREE@templen}%
+% \end{macrocode}
+ % \iffalse
+ %! \begin{tabular}{cc}
+ %! nextnumboxes: & \arabic{DYNTREE@nextnumboxes} \\
+ %! nextlevel: & \arabic{DYNTREE@nextlevel} \\
+ %! counter: & \arabic{DYNTREE@counter} \\
+ %! temparray: & \DYNTREE@temparray \\
+ %! level\&\roman{DYNTREE@nextlevel}\&\roman{DYNTREE@counter}\&X
+ %! &
+ %! \csname DYNTREE@level@\roman{DYNTREE@nextlevel}@\roman{DYNTREE@counter}@X\endcsname
+ %! \\
+ %! tempinsert: & \DYNTREE@tempinsert \\
+ %! \end{tabular}
+ % \fi
+ % find where element should be inserted
+% \begin{macrocode}
+ \whiledo{ \(\value{DYNTREE@counter} > 0\) \AND
+ \lengthtest{\DYNTREE@tempinsert < \DYNTREE@temparray} }%
+ {%
+ \edef\DYNTREE@temparray%
+ {\csname DYNTREE@level@\roman{DYNTREE@nextlevel}@\roman{DYNTREE@counter}@X\endcsname}%
+ \addtocounter{DYNTREE@counter}{-1}%
+ }%
+% \end{macrocode}
+ % the thing needs to be inserted at \value{DYNTREE@counter} + 1
+% \begin{macrocode}
+ \setcounter{DYNTREE@target}{\value{DYNTREE@counter} + 1}%
+% \end{macrocode}
+ % \iffalse
+ %! \begin{tabular}{cc}
+ %! target: \arabic{DYNTREE@target} \\
+ %! temparray: & \DYNTREE@temparray \\
+ %! tempinsert: & \DYNTREE@tempinsert \\
+ %! \end{tabular}
+ %!
+ %!
+ % \fi
+ % if they aren't equal, move from target to nextnumboxes up to target+1 to nextnumboxes+1
+% \begin{macrocode}
+ \ifthenelse{ \NOT \lengthtest{\DYNTREE@tempinsert = \DYNTREE@temparray} }%
+ {%
+ \setcounter{DYNTREE@counter}{\value{DYNTREE@nextnumboxes} + 1}%
+ \whiledo{ \value{DYNTREE@counter} > \value{DYNTREE@target} }%
+ {%
+% \end{macrocode}
+ % get the value in the array spot one before
+% \begin{macrocode}
+ \addtocounter{DYNTREE@counter}{-1}%
+ \edef\DYNTREE@tempswap%
+ {%
+ \csname DYNTREE@level@\roman{DYNTREE@nextlevel}@\roman{DYNTREE@counter}@X\endcsname%
+ }%
+% \end{macrocode}
+ % store this value in the next array spot
+% \begin{macrocode}
+ \addtocounter{DYNTREE@counter}{1}%
+ \expandafter\xdef%
+ \csname DYNTREE@level@\roman{DYNTREE@nextlevel}@\roman{DYNTREE@counter}@X\endcsname%
+ {\DYNTREE@tempswap}%
+ \addtocounter{DYNTREE@counter}{-1}%
+ }%
+% \end{macrocode}
+ % insert the original
+% \begin{macrocode}
+ \expandafter\xdef%
+ \csname DYNTREE@level@\roman{DYNTREE@nextlevel}@\roman{DYNTREE@target}@X\endcsname%
+ {\DYNTREE@tempinsert}%
+% \end{macrocode}
+ % increment the number of boxes in the next level
+% \begin{macrocode}
+ \addtocounter{DYNTREE@nextnumboxes}{1}%
+ }%
+ % Else
+ {%
+% \end{macrocode}
+ % Do nothing
+% \begin{macrocode}
+ }%
+ }%
+ }%
+ \addtocounter{DYNTREE@ct}{1}%
+ }%
+\ifthenelse{\equal{#4}{\lend}}%
+ {%
+ }%
+% Else
+ {%
+% \end{macrocode}
+% % Eat the boxes until there are no more
+% \begin{macrocode}
+ \DYNTREE@gobbledynboxes#4%
+ }%
+}%
+% \end{macrocode}
+%
+%
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
+%\subsection{The Dyntree Environment}
+% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Dynkin Tree Environment
+%
+%
+% \begin{macrocode}
+\def\start#1#2#3\finish#4%
+{%
+\ifthenelse{\equal{#1}{#4} \AND \equal{#4}{dyntree}}%
+ {%
+ \providecommand{\DYNTREE@numroots}{#2}%
+% \end{macrocode}
+ % \iffalse
+ %! \DYNTREE@numroots
+ % \fi
+ % Initialize Interior Dynkin Box Variables
+% \begin{macrocode}
+ \setlength{\DYNTREE@dynboxwidth}
+ {%
+ \DYNTREE@marginwidth +
+ \DYNTREE@cartancoefwidth*\DYNTREE@numroots +
+ \DYNTREE@colsepwidth*(\DYNTREE@numroots-1)
+ }%
+% \end{macrocode}
+ % Initialize Interior Dynkin Tree Variables
+% \begin{macrocode}
+ \setlength{\DYNTREE@leftmostX}{0pt}%
+ \setlength{\DYNTREE@rightmostX}{\DYNTREE@dynboxwidth}%
+% \end{macrocode}
+ % the highest left starts at zero, so initialize this value
+% \begin{macrocode}
+ \expandafter\gdef\csname DYNTREE@level@i@i@X\endcsname{0pt}%
+% \end{macrocode}
+ % There are no levels, so initialize |numlevel| to zero
+% \begin{macrocode}
+ \setcounter{DYNTREE@numlevel}{0}%
+% \end{macrocode}
+ % Determine the root lines and dynkin box offsets
+% \begin{macrocode}
+ \setcounter{DYNTREE@ct}{1}%
+ \whiledo{\NOT \(\value{DYNTREE@ct}>\DYNTREE@numroots\)}%
+ {%
+% \end{macrocode}
+ % Calculate the length and store it in a temporary length
+% \begin{macrocode}
+ \setlength{\DYNTREE@templen}%
+ {%
+ (\DYNTREE@dynboxwidth + \DYNTREE@dynboxsep)*\value{DYNTREE@ct}%
+ -(\DYNTREE@dynboxwidth + \DYNTREE@dynboxsep)*1/2%
+ -(\DYNTREE@dynboxwidth + \DYNTREE@dynboxsep)*\DYNTREE@numroots/2%
+ }%
+% \end{macrocode}
+ % \iffalse
+ %! ct: \arabic{DYNTREE@ct}
+ %! templen: \the\DYNTREE@templen
+ % \fi
+ % store the actual length in a command
+% \begin{macrocode}
+ \expandafter\xdef\csname DYNTREE@rootX@\roman{DYNTREE@ct}\endcsname%
+ {\the\DYNTREE@templen}%
+% \end{macrocode}
+ % Calculate the dynkin box x offset and store it in a temporary length
+% \begin{macrocode}
+ \setlength{\DYNTREE@templen}%
+ {%
+ \DYNTREE@dynboxwidth/2/\DYNTREE@numroots +
+ \DYNTREE@dynboxwidth*(\value{DYNTREE@ct}-1)/\DYNTREE@numroots
+ }%
+% \end{macrocode}
+ % store the actual length in a command
+% \begin{macrocode}
+ \expandafter\xdef\csname DYNTREE@dynboxX@\roman{DYNTREE@ct}\endcsname%
+ {\the\DYNTREE@templen}%
+% \end{macrocode}
+ % \iffalse
+ % Print the Lengths
+ %! DYNTREE@rootX@\roman{DYNTREE@ct}: \expandafter\csname DYNTREE@rootX@\roman{DYNTREE@ct}\endcsname
+ %!
+ %! DYNTREE@dynboxX@\roman{DYNTREE@ct}: \expandafter\csname DYNTREE@dynboxX@\roman{DYNTREE@ct}\endcsname
+ % \fi
+% \begin{macrocode}
+ \addtocounter{DYNTREE@ct}{1}%
+ }%
+% \end{macrocode}
+ % \iffalse
+ % dynboxwidth: \the\DYNTREE@dynboxwidth
+ % \fi
+ % Eat the tree
+% \begin{macrocode}
+ \DYNTREE@gobbletree#3\DYNTREE@treestop\DYNTREE@treeend%
+% \end{macrocode}
+ % \iffalse
+ %! numlevels: \arabic{DYNTREE@numlevel}
+ % \fi
+ % Now the data has been stored, Draw The Tree:
+ %
+ % store the current unit length to restore when finished
+% \begin{macrocode}
+ \setlength{\DYNTREE@unitlen}{\unitlength}%
+ \setlength{\unitlength}{1sp}%
+% \end{macrocode}
+ % get the width of the picture
+% \begin{macrocode}
+ \setcounter{DYNTREE@xCoord}{\DYNTREE@rightmostX - \DYNTREE@leftmostX}%
+% \end{macrocode}
+ % store the leftmost point as a counter
+% \begin{macrocode}
+ \setcounter{DYNTREE@leftX}{\DYNTREE@leftmostX}%
+% \end{macrocode}
+ % get the height of the picture
+% \begin{macrocode}
+ \setcounter{DYNTREE@yCoord}%
+ {%
+ \DYNTREE@dynboxvlen*\value{DYNTREE@numlevel} +
+ \DYNTREE@levelsep*(\value{DYNTREE@numlevel} - 1)
+ }%
+ \begin{picture}%
+ (\arabic{DYNTREE@xCoord},\arabic{DYNTREE@yCoord})%
+ (\value{DYNTREE@leftX},0)%
+ \setcounter{DYNTREE@ct}{1}%
+ \whiledo{\NOT \(\value{DYNTREE@ct} > \value{DYNTREE@numlevel}\)}%
+ {%
+ \setcounter{DYNTREE@counter}{1}%
+% \end{macrocode}
+ % get the y coordinate as a length
+% \begin{macrocode}
+ \setlength{\DYNTREE@templen}%
+ {%
+ \DYNTREE@dynboxvlen*\value{DYNTREE@numlevel}
+ - \DYNTREE@dynboxvlen*\value{DYNTREE@ct}
+ + \DYNTREE@levelsep*\value{DYNTREE@numlevel}
+ - \DYNTREE@levelsep*\value{DYNTREE@ct}
+ + \DYNTREE@dynboxdepth
+ }%
+% \end{macrocode}
+ % convert the length to an integer in scaled points (sp)
+% \begin{macrocode}
+ \setcounter{DYNTREE@yCoord}{\DYNTREE@templen}%
+ \def\DYNTREE@tempboxnum{\csname DYNTREE@level@\roman{DYNTREE@ct}@numbox\endcsname}%
+ \whiledo{\NOT \( \value{DYNTREE@counter} > \DYNTREE@tempboxnum \)}%
+ {%
+% \end{macrocode}
+ % grab the value of the x coordinate (it's a length but not stored as one)
+% \begin{macrocode}
+ \xdef\DYNTREE@tempxCoord%
+ {%
+ \expandafter%
+ \csname DYNTREE@level@\roman{DYNTREE@ct}@\roman{DYNTREE@counter}@X\endcsname%
+ }%
+% \end{macrocode}
+ % convert x coordinate to a length
+% \begin{macrocode}
+ \setlength{\DYNTREE@holdlen}{\DYNTREE@tempxCoord}%
+% \end{macrocode}
+ % convert length to an integer in scaled points (sp)
+% \begin{macrocode}
+ \setcounter{DYNTREE@xCoord}{\DYNTREE@holdlen}%
+% \end{macrocode}
+ % place each dynkin box
+% \begin{macrocode}
+ \put(\arabic{DYNTREE@xCoord},\arabic{DYNTREE@yCoord})%
+ {%
+ \expandafter%
+ \copy\csname DYNTREE@box@\roman{DYNTREE@ct}@\roman{DYNTREE@counter}\endcsname%
+ }%
+% \end{macrocode}
+ % go through the descendants and place the lines
+% \begin{macrocode}
+ \setcounter{DYNTREE@listlen}%
+ {%
+ \expandafter%
+ \csname DYNTREE@childline@\roman{DYNTREE@ct}@\roman{DYNTREE@counter}@boxnum\endcsname%
+ }%
+ \setcounter{DYNTREE@index}{1}%
+ \whiledo{\NOT \(\value{DYNTREE@index} > \value{DYNTREE@listlen}\)}%
+ {%
+ \xdef\DYNTREE@childroot%
+ {%
+ \expandafter%
+ \csname DYNTREE@childlist@\roman{DYNTREE@ct}@\roman{DYNTREE@counter}@\roman{DYNTREE@index}\endcsname%
+ }%
+ \ifthenelse{\NOT \DYNTREE@childroot = 0 }%
+ {%
+ \setcounter{DYNTREE@root}{\DYNTREE@childroot}%
+ \setcounter{DYNTREE@xPos}{\value{DYNTREE@xCoord}}%
+ \setcounter{DYNTREE@xComp}{\value{DYNTREE@xCoord}}%
+ \setcounter{DYNTREE@yPos}{\value{DYNTREE@yCoord}}%
+ \setcounter{DYNTREE@yComp}{\value{DYNTREE@yCoord}}%
+ \xdef\DYNTREE@temprootX%
+ {\expandafter\csname DYNTREE@rootX@\roman{DYNTREE@root}\endcsname}%
+ \setlength{\DYNTREE@templen}{\DYNTREE@temprootX}%
+ \addtocounter{DYNTREE@xPos}{\DYNTREE@templen*(-1)}%
+ \xdef\DYNTREE@dynoffset%
+ {\expandafter\csname DYNTREE@dynboxX@\roman{DYNTREE@root}\endcsname}%
+ \setlength{\DYNTREE@templen}{\DYNTREE@dynoffset}%
+ \addtocounter{DYNTREE@xPos}{\DYNTREE@templen}%
+ \addtocounter{DYNTREE@xComp}{\DYNTREE@templen}%
+ \setlength{\DYNTREE@templen}{1pt}% for frame thickness
+ \addtocounter{DYNTREE@yPos}%
+ {\DYNTREE@levelsep*(-1) - \DYNTREE@dynboxdepth - \DYNTREE@templen}%
+ \addtocounter{DYNTREE@yComp}{\DYNTREE@dynboxdepth*(-1) - \DYNTREE@templen}%
+ \put(0,0)%
+ {%
+ \drawline%
+ (\arabic{DYNTREE@xComp},\arabic{DYNTREE@yComp})%
+ (\arabic{DYNTREE@xPos},\arabic{DYNTREE@yPos})%
+ }%
+ }%
+ % Else
+ {%
+ }%
+ \addtocounter{DYNTREE@index}{1}%
+ }%
+ \addtocounter{DYNTREE@counter}{1}%
+ }%
+ \addtocounter{DYNTREE@ct}{1}%
+ }%
+ \end{picture}%
+% \end{macrocode}
+ % restore the unit length to original value
+% \begin{macrocode}
+ \setlength{\unitlength}{\DYNTREE@unitlen}%
+% \end{macrocode}
+% \iffalse
+ %!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Error Check BEGIN
+ %! \setcounter{DYNTREE@ct}{1}
+ %! \whiledo{\NOT \(\value{DYNTREE@ct} > \value{DYNTREE@numlevel}\)}%
+ %! {%
+ %! \setcounter{act}{1}%
+ %! \def\DYNTREE@tempboxnum{\csname DYNTREE@level@\roman{DYNTREE@ct}@numbox\endcsname}
+ %! \whiledo{\NOT \( \value{act} > \DYNTREE@tempboxnum \)}%
+ %! {%
+ %! level.\roman{DYNTREE@ct}.\roman{act}.x: \csname DYNTREE@level@\roman{DYNTREE@ct}@\roman{act}@X\endcsname;
+ %!
+ %! \addtocounter{act}{1}
+ %! }
+ %! \addtocounter{DYNTREE@ct}{1}%
+ %! }%
+ %!
+ %!
+ %! \setcounter{DYNTREE@ct}{1}%
+ %! \whiledo{\NOT \(\value{DYNTREE@ct}>\value{DYNTREE@numlevel}\)}%
+ %! {%
+ %! \setcounter{act}{1}%
+ %! \def\DYNTREE@tempboxnum{\csname DYNTREE@level@\roman{DYNTREE@ct}@numbox\endcsname}%
+ %! \whiledo{\NOT \(\value{act}>\DYNTREE@tempboxnum\)}%
+ %! {%
+ %! level: \arabic{DYNTREE@ct}, box: \arabic{act};
+ %! \expandafter\copy\csname DYNTREE@box@\roman{DYNTREE@ct}@\roman{act}\endcsname
+ %!
+ %! \addtocounter{act}{1}%
+ %! }%
+ %! \addtocounter{DYNTREE@ct}{1}%
+ %! }%
+ %!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Error Check END
+% \fi
+% \begin{macrocode}
+ }%
+% Else
+ {%
+ \PackageError{dyntree}{Invalid start(#1)/finish(#4) call}%
+ }%
+}%
+% \end{macrocode}
+%
+%
+% \Finale
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/dyntree/dyntree.ins b/macros/latex/contrib/dyntree/dyntree.ins
new file mode 100644
index 0000000000..14835853a3
--- /dev/null
+++ b/macros/latex/contrib/dyntree/dyntree.ins
@@ -0,0 +1,40 @@
+%%
+%% Copyright (C) 2006 by nsetzer
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the GNU Lesser General Product License
+%%
+
+\input docstrip.tex
+
+\keepsilent
+
+\usedir{tex/latex/dyntree}
+
+\preamble
+
+This is a generated file
+
+This file may be distributed and/or modified under the
+conditions of the GNU Lesser General Product License
+
+\endpreamble
+
+
+\generate{\file{dyntree.sty}{\from{dyntree.dtx}{package}}}
+
+\obeyspaces
+\Msg{****************************************************}
+\Msg{* *}
+\Msg{* To finish the installation you have to move the *}
+\Msg{* following file into a directory searched by TeX: *}
+\Msg{* *}
+\Msg{* dyntree.sty *}
+\Msg{* *}
+\Msg{* To produce the documentation run the file *}
+\Msg{* dyntree.dtx through LaTeX. *}
+\Msg{* *}
+\Msg{* *}
+\Msg{****************************************************}
+
+\endbatchfile \ No newline at end of file
diff --git a/macros/latex/contrib/dyntree/dyntree.pdf b/macros/latex/contrib/dyntree/dyntree.pdf
new file mode 100644
index 0000000000..6170f175e4
--- /dev/null
+++ b/macros/latex/contrib/dyntree/dyntree.pdf
Binary files differ