summaryrefslogtreecommitdiff
path: root/macros/latex/contrib
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2023-05-05 03:01:19 +0000
committerNorbert Preining <norbert@preining.info>2023-05-05 03:01:19 +0000
commit3cf2e76fc502cb474081c80838c95ecaba2f386d (patch)
tree5a1423600de3117087ef17bf28f4120c8f6c9fd6 /macros/latex/contrib
parentf5c7c9695f181a8fd6e28b572edea03ffc59de93 (diff)
CTAN sync 202305050301
Diffstat (limited to 'macros/latex/contrib')
-rw-r--r--macros/latex/contrib/biblatex-contrib/windycity/CHANGES.md41
-rw-r--r--macros/latex/contrib/biblatex-contrib/windycity/american-windycity.lbx4
-rw-r--r--macros/latex/contrib/biblatex-contrib/windycity/doc/windycity.bib36
-rw-r--r--macros/latex/contrib/biblatex-contrib/windycity/doc/windycity.pdfbin507249 -> 512581 bytes
-rw-r--r--macros/latex/contrib/biblatex-contrib/windycity/doc/windycity.sty26
-rw-r--r--macros/latex/contrib/biblatex-contrib/windycity/doc/windycity.tex221
-rw-r--r--macros/latex/contrib/biblatex-contrib/windycity/windycity.bbx542
-rw-r--r--macros/latex/contrib/biblatex-contrib/windycity/windycity.cbx24
-rw-r--r--macros/latex/contrib/biblatex-contrib/windycity/windycity.dbx8
-rw-r--r--macros/latex/contrib/colorwav/README9
-rw-r--r--macros/latex/contrib/colorwav/colorwav.dtx6
-rw-r--r--macros/latex/contrib/colorwav/colorwav.ins8
-rw-r--r--macros/latex/contrib/cool/README11
-rw-r--r--macros/latex/contrib/cool/cool.dtx4
-rw-r--r--macros/latex/contrib/cool/cool.ins8
-rw-r--r--macros/latex/contrib/coollist/coollist.dtx4
-rw-r--r--macros/latex/contrib/coollist/coollist.ins8
-rw-r--r--macros/latex/contrib/coolstr/README11
-rw-r--r--macros/latex/contrib/coolstr/coolstr.dtx6
-rw-r--r--macros/latex/contrib/coolstr/coolstr.ins8
-rw-r--r--macros/latex/contrib/dyntree/README48
-rw-r--r--macros/latex/contrib/dyntree/dyntree.dtx2280
-rw-r--r--macros/latex/contrib/dyntree/dyntree.ins80
-rw-r--r--macros/latex/contrib/forloop/README61
-rw-r--r--macros/latex/contrib/forloop/forloop.dtx290
-rw-r--r--macros/latex/contrib/forloop/forloop.ins80
-rw-r--r--macros/latex/contrib/thmtools/doc/changes.txt7
-rw-r--r--macros/latex/contrib/thmtools/doc/thmtools-manual.pdfbin251351 -> 251757 bytes
-rw-r--r--macros/latex/contrib/thmtools/source/VERSION.tex2
-rw-r--r--macros/latex/contrib/thmtools/source/thm-kv.dtx6
30 files changed, 2161 insertions, 1678 deletions
diff --git a/macros/latex/contrib/biblatex-contrib/windycity/CHANGES.md b/macros/latex/contrib/biblatex-contrib/windycity/CHANGES.md
index 2b166c9f5c..61b08926c1 100644
--- a/macros/latex/contrib/biblatex-contrib/windycity/CHANGES.md
+++ b/macros/latex/contrib/biblatex-contrib/windycity/CHANGES.md
@@ -8,6 +8,47 @@ indicate updates to Windy City's [repository on
GitHub](https://github.com/brianchase/windycity "GitHub:
brianchase/windycity").
+## 2023-05-03
+
+* added preamble option `sentencecase` to put titles in
+ sentence-style capitalization (see *CMOS* 8.158)
+* added entry options to override, per entry, the default formats of
+ titles:
+
+ - Supported fields: `title`, `blogtitle`, `bookbooktitle`,
+ `booktitle`, `issuetitle`, `journal`, `journaltitle`,
+ `maintitle`, `origtitle`, `shortbooktitle`, `shorthand`,
+ `shorttitle`, and `shortmaintitle`
+ - For italics: `emph:<field>` (`emph` is short for `emph:title`)
+ - For quotes: `quotes:<field>` (`quotes` is short for
+ `quotes:title`)
+ - For sentence-style capitalization: `sentencecase:<field>`
+ (`sentencecase` is short for `sentencecase:title`)
+ - To remove formatting: `noformat:<field>` (`noformat` is short for
+ `noformat:title`)
+ - Uppercase the first letter when `\ifcapital` is true:
+ `ifcapital:<field>` (`ifcapital` is short for `ifcapital:title`)
+ - You can use some of the options above at the same time, such as
+ putting a title in both italics and sentence case. Exceptions: You
+ can't use the `emph` and `quotes` options together (the `emph`
+ options prevail), you can't use either with the `noformat` options
+ (the `noformat` options prevail), and you can't use the
+ `setencecase` and `ifcapital` options together (the `sentencecase`
+ options prevail).
+ - Setting an option for a title sets the related option for its
+ short title (e.g. `sentencecase:maintitle` implies
+ `sentencecase:shortmaintitle`).
+
+* added support for the `yeardivision` field (support for `season`
+ remains for backward compatibility)
+* fixed the `year` field of `@standard` entries printing when
+ `pubstate` supersedes it
+* fixed a missing field format for `shortmaintitle`
+* fixed a setting that caused `@reference` and `@inreference` works to
+ format incorrectly if (1) `organization` was supposed to occupy the
+ author's position *and* (2) their bibliography database entries had
+ an `options` field
+
## 2021-12-04
* improved the handling of `labeldate` for `@inbook` and `@bookinbook`
diff --git a/macros/latex/contrib/biblatex-contrib/windycity/american-windycity.lbx b/macros/latex/contrib/biblatex-contrib/windycity/american-windycity.lbx
index f584258e78..95a214aaaf 100644
--- a/macros/latex/contrib/biblatex-contrib/windycity/american-windycity.lbx
+++ b/macros/latex/contrib/biblatex-contrib/windycity/american-windycity.lbx
@@ -1,4 +1,4 @@
-% Last modified: Sat 04 Dec 2021 12:44:02 PM CST
+% Last modified: Wed 03 May 2023 06:54:19 PM CDT
% Permission is granted to copy, distribute and/or modify this
% software under the terms of the LaTeX Project Public License (LPPL),
@@ -11,7 +11,7 @@
% implied warranties of merchantability and fitness for a particular
% purpose.
-\ProvidesFile{american-windycity.lbx}[2021/12/04 Windy City
+\ProvidesFile{american-windycity.lbx}[2023/05/03 Windy City
localization module for biblatex]
\InheritBibliographyExtras{american}
\InheritBibliographyStrings{american}
diff --git a/macros/latex/contrib/biblatex-contrib/windycity/doc/windycity.bib b/macros/latex/contrib/biblatex-contrib/windycity/doc/windycity.bib
index 9fc940a868..5eaf6ffeef 100644
--- a/macros/latex/contrib/biblatex-contrib/windycity/doc/windycity.bib
+++ b/macros/latex/contrib/biblatex-contrib/windycity/doc/windycity.bib
@@ -1,10 +1,11 @@
@STRING{ucp = "University of Chicago Press"}
@Book{chicago2017,
+ options = {emph:shorthand},
author = {{University of Chicago Press}},
title = {The Chicago Manual of Style},
- shorthand = {\emph{CMOS}},
- shorthandintro = {\addperiod\space Hereafter, \printfield{shorthand}},
+ shorthand = {CMOS},
+ shorthandintro = {\addperiod\space Hereafter, \printfield[emph]{shorthand}},
edition = {17},
address = {Chicago},
publisher = ucp,
@@ -433,10 +434,10 @@
% 14.59 Abbreviations for frequently cited works
@Collection{shurtleff1853,
- options = {listvols},
+ options = {emph:shorthand,listvols},
editor = {Shurtleff, Nathaniel B.},
title = {Records of the Governor and Company of the Massachusetts Bay in New England (1628–86)},
- shorthand = {\emph{Mass. Records}},
+ shorthand = {Mass. Records},
volumes = {5},
address = {Boston},
year = {1853–54}
@@ -882,10 +883,11 @@
year = {1977}
}
@Book{furet1999,% see also 14.59
+ options = {emph:shorthand},
author = {Furet, François},
title = {The Passing of an Illusion},
-% shorthand = {\emph{PI}},
- shorthandintro = {\mkbibparens{hereafter cited in text as \printfield{shorthand}}},
+% shorthand = {PI},
+ shorthandintro = {\mkbibparens{hereafter cited in text as \printfield[emph]{shorthand}}},
translator = {Furet, Deborah},
address = {Chicago},
publisher = ucp,
@@ -2353,6 +2355,26 @@
url = {https://www.facebook.com/junotdiaz.writer/posts/972495572815454?comment_id=972558569475821}
}
+% 14.210 Electronic mailing lists and forums
+
+@Online{powell1998,
+ author = {Powell, John},
+ title = {Pattern matching},
+ note = {Grapevine digest mailing list archives},
+ organization = {Electric Editors},
+ date = {1998-04-23},
+ url = {http://www.electriceditors.net/grapevine/archives.php}
+}
+@Online{braun2016,
+ keywords = {notinref},% not for reference lists (see 15.52)
+ options = {noformat,ifcapital},
+ author = {Braun, Caroline},
+ title = {reply to \mkbibquote{How did the `cool kids' from high school turn out?}},
+ organization = {Quora},
+ date = {2016-08-09},
+ url = {https://www.quora.com/How-did-the-cool-kids-from-high-school-turn-out/}
+}
+
% 14.215 Theses and dissertations
@Thesis{vedrashko2006,
@@ -2679,7 +2701,7 @@
title = {Bull's Head},
date = {1942-21},
type = {bicycle saddle and handlebars},
- typeaddon = {, 33.5\addthinspace ×\addthinspace 43.5 ×\addthinspace 19\,cm},
+ typeaddon = {, 33.5\addthinspace ×\addthinspace 43.5\addthinspace ×\addthinspace 19\,cm},
institution = {Musée Picasso Paris}
}
diff --git a/macros/latex/contrib/biblatex-contrib/windycity/doc/windycity.pdf b/macros/latex/contrib/biblatex-contrib/windycity/doc/windycity.pdf
index f944776846..16deb0a936 100644
--- a/macros/latex/contrib/biblatex-contrib/windycity/doc/windycity.pdf
+++ b/macros/latex/contrib/biblatex-contrib/windycity/doc/windycity.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-contrib/windycity/doc/windycity.sty b/macros/latex/contrib/biblatex-contrib/windycity/doc/windycity.sty
index c001e45902..07653b99c9 100644
--- a/macros/latex/contrib/biblatex-contrib/windycity/doc/windycity.sty
+++ b/macros/latex/contrib/biblatex-contrib/windycity/doc/windycity.sty
@@ -1,4 +1,4 @@
-% Last modified: Tue 13 Apr 2021 05:25:58 PM CDT
+% Last modified: Sun 13 Feb 2022 10:28:05 AM CST
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{windycity}
\RequirePackage{ifxetex}
@@ -105,6 +105,13 @@
{\end{enumerate}
\printbibliography[env=bib,heading=none,segment=\therefsegment]
\endrefsegment}%
+\newenvironment{citenobib}
+ {\begin{enumerate}[%
+ before=\RaggedRight\citereset\newrefsegment\small,
+ itemindent=2.2em,
+ labelsep=0.2em,
+ leftmargin=1.1em]}%
+ {\end{enumerate}}%
\newenvironment{citeref}
{\begin{itemize}[label=,labelsep=0.2em,leftmargin=1.1em]
\item\begin{enumerate*}[%
@@ -116,13 +123,16 @@
\end{itemize}
\printbibliography[env=ref,heading=none,segment=\therefsegment]
\endrefsegment}%
-\newenvironment{citeonly}
- {\begin{enumerate}[%
- before=\RaggedRight\citereset\newrefsegment\small,
- itemindent=2.2em,
- labelsep=0.2em,
- leftmargin=1.1em]}%
- {\end{enumerate}}%
+\newenvironment{citenoref}
+ {\begin{itemize}[label=,labelsep=0.2em,leftmargin=1.1em]
+ \item\begin{enumerate*}[%
+ afterlabel=,
+ before=\citereset\newrefsegment\small\noindent,
+ itemjoin={{, }},
+ label=]}%
+ {\end{enumerate*}
+ \end{itemize}
+ \endrefsegment}%
\newenvironment{bibonly}
{\citereset\newrefsegment\small}%
{\printbibliography[env=bib,heading=none,segment=\therefsegment]
diff --git a/macros/latex/contrib/biblatex-contrib/windycity/doc/windycity.tex b/macros/latex/contrib/biblatex-contrib/windycity/doc/windycity.tex
index a4bc14d059..d81be4bee3 100644
--- a/macros/latex/contrib/biblatex-contrib/windycity/doc/windycity.tex
+++ b/macros/latex/contrib/biblatex-contrib/windycity/doc/windycity.tex
@@ -1,4 +1,4 @@
-% Last modified: Sat 04 Dec 2021 01:43:53 PM CST
+% Last modified: Wed 03 May 2023 07:02:51 PM CDT
\documentclass[11pt,letterpaper,oneside]{article}
\usepackage{windycity}
@@ -8,7 +8,7 @@
\author{Brian Chase}
\email{brianmichaelchase@gmail.com}
\website{https://github.com/brianchase/windycity}
-\version{2021-12-04}
+\version{2023-05-03}
\maketitle
\begingroup
\hypersetup{linkcolor=black}
@@ -17,7 +17,7 @@
\section{Introduction}
-\nfootnote{Copyright \textcopyright\ 2014--2021 Brian Chase. Under the
+\nfootnote{Copyright \textcopyright\ 2014--2023 Brian Chase. Under the
terms of the \LaTeX\ Project Public License, version 1.3, permission
is granted to copy, distribute, or modify this software. See
\url{http://www.ctan.org/tex-archive/macros/latex/base/lppl.txt} or
@@ -136,14 +136,14 @@ style is meant to handle.
For a first set of examples, consider this passage from \textit{CMOS}
\ref{14.30}:
-\begin{citeonly}
+\begin{citenobib}
\item \cite[24--25]{morley1995}
\item \cite{schwartz1992}
\item \cite{kaiser1964}
\item \cite[43]{morley1995}
\item \cite[138]{schwartz1992}
\item \cite[189--90]{kaiser1964}
-\end{citeonly}
+\end{citenobib}
A work's first citation is similar to its entry in the bibliography.
It includes all or most of its bibliographic information. Subsequent
@@ -217,7 +217,7 @@ offers several preamble options and other means for producing them.
Let's start with another passage of default output:
-\begin{citeonly}
+\begin{citenobib}
\item \cite[3]{morrison2004a}
\item \cite[18]{morrison2004a}
\item \cite[18]{morrison2004a}
@@ -230,7 +230,7 @@ Let's start with another passage of default output:
\item \cite[201-2]{diaz2007}
\item \cites[240]{morrison2004b}[32]{morrison2004a}
\item \cite[33]{morrison2004a}
-\end{citeonly}
+\end{citenobib}
A shorter form of this passage appears in \textit{CMOS}
\ref{14.34}:\footnote{Switching forms within a document isn't a
@@ -240,7 +240,7 @@ possible.}
% Preamble option 'short' sets 'short' and 'shortfirst' toggles to
% true. Set them to true to simulate the 'short' preamble option.
-\begin{citeonly}
+\begin{citenobib}
\AtNextCitekey{\toggletrue{short}\toggletrue{shortfirst}}
\item \cite[3]{morrison2004a}
\AtNextCitekey{\toggletrue{short}}
@@ -265,7 +265,7 @@ possible.}
\item \cites[240]{morrison2004b}[32]{morrison2004a}
\AtNextCitekey{\toggletrue{short}}
\item \cite[33]{morrison2004a}
-\end{citeonly}
+\end{citenobib}
In this version, a work's first citation gives short names and titles
and omits all other publication information. Consecutive citations of
@@ -287,7 +287,7 @@ break here may affect the output.}
% toggles to true. Set all those toggles to true to simulate the
% 'short' and 'ibid' preamble options.
-\begin{citeonly}
+\begin{citenobib}
\AtNextCitekey{\toggletrue{short}\toggletrue{shortfirst}}
\item \cite[3]{morrison2004a}
\AtNextCitekey{\toggletrue{short}\toggletrue{ibid}}
@@ -312,7 +312,7 @@ break here may affect the output.}
\item \cites[240]{morrison2004b}[32]{morrison2004a}
\AtNextCitekey{\toggletrue{short}}
\item \cite[33]{morrison2004a}
-\end{citeonly}
+\end{citenobib}
For a compromise between standard and short forms, try the preamble
option \opt{shortfirst}. It swaps long first citations for short ones
@@ -495,6 +495,17 @@ reference list is to pass \opt{env=reflist} to
\cmd{printbibliography}. See section \ref{overview} for more
information.
+\optitem[false]{sentencecase}{\opt{true}, \opt{false}}
+
+\noindent This option puts titles in sentence-style capitalization,
+also called sentence case (see \textit{CMOS} 8.158), whereby the first
+letter is uppercase and subsequent letters are lowercase. Affected
+fields: \bibfield{title}, \bibfield{blogtitle},
+\bibfield{bookbooktitle}, \bibfield{booktitle}, \bibfield{issuetitle},
+\bibfield{journal}, \bibfield{journaltitle}, \bibfield{maintitle},
+\bibfield{origtitle}, \bibfield{shortbooktitle}, \bibfield{shorthand},
+\bibfield{shorttitle}, and \bibfield{shortmaintitle}.
+
\optitem[false]{short}{\opt{true}, \opt{false}}
\noindent As shown in section \ref{short}, this option prints short
@@ -524,7 +535,7 @@ in \textit{CMOS} \ref{14.34}:
% 'shortafter' doesn't. Hence, to display the output of 'shortafter'
% below, you need only toggle true 'short'.
-\begin{citeonly}
+\begin{citenobib}
\AtNextCitekey{\toggletrue{short}}
\item \cite[3]{morrison2004a}
\AtNextCitekey{\toggletrue{short}}
@@ -549,7 +560,7 @@ in \textit{CMOS} \ref{14.34}:
\item \cites[240]{morrison2004b}[32]{morrison2004a}
\AtNextCitekey{\toggletrue{short}}
\item \cite[33]{morrison2004a}
-\end{citeonly}
+\end{citenobib}
\optitem[false]{shortfirst}{\opt{true}, \opt{false}}
@@ -573,18 +584,18 @@ the author's name, \textit{ibid.}, or a shorthand. For comparison, the
blue text below shows default links:
\hypersetup{citecolor=blue}
-\begin{citeonly}
+\begin{citenobib}
\item \cite[24--25]{morley1995}
\item \cite{schwartz1992}
\item \cite{kaiser1964}
\item \cite[43]{morley1995}
\item \cite[138]{schwartz1992}
\item \cite[189--90]{kaiser1964}
-\end{citeonly}
+\end{citenobib}
\noindent And here they are with \opt{shortlinks}:
-\begin{citeonly}
+\begin{citenobib}
\AtNextCitekey{\toggletrue{shortlinks}}
\item \cite[24--25]{morley1995}
\AtNextCitekey{\toggletrue{shortlinks}}
@@ -597,7 +608,7 @@ blue text below shows default links:
\item \cite[138]{schwartz1992}
\AtNextCitekey{\toggletrue{shortlinks}}
\item \cite[189--90]{kaiser1964}
-\end{citeonly}
+\end{citenobib}
\hypersetup{citecolor=}
\optitem[false]{swapvol}{\opt{true}, \opt{false}}
@@ -654,12 +665,60 @@ the value of \cmd{bibitemsep}.
\noindent Set \opt{false} to prevent the \bibfield{doi} field from
printing.
+\optitem[false]{emph}{\opt{true}, \opt{false}}
+
+\noindent Short for \opt{emph:title}.
+
+\optitem[false]{emph:<field>}{\opt{true}, \opt{false}}
+
+\noindent This option puts titles in italics. Supported values of
+\bibfield{<field>}: \bibfield{title}, \bibfield{blogtitle},
+\bibfield{bookbooktitle}, \bibfield{booktitle}, \bibfield{issuetitle},
+\bibfield{journal}, \bibfield{journaltitle}, \bibfield{maintitle},
+\bibfield{origtitle}, \bibfield{shortbooktitle}, \bibfield{shorthand},
+\bibfield{shorttitle}, and \bibfield{shortmaintitle}.
+
\optitem[true]{eprint}{\opt{true}, \opt{false}}
\noindent Set \opt{false} to prevent the \bibfield{eprint} field from
printing. For more information about eprints, see section
\ref{datafields}.
+\optitem[false]{ifcapital}{\opt{true}, \opt{false}}
+
+\noindent Short for \opt{ifcapital:title}.
+
+\optitem[false]{ifcapital:<field>}{\opt{true}, \opt{false}}
+
+\noindent This option uppercases the first letter of titles when
+\cmd{ifcapital} is true. Supported values of \bibfield{<field>}:
+\bibfield{title}, \bibfield{blogtitle}, \bibfield{bookbooktitle},
+\bibfield{booktitle}, \bibfield{issuetitle}, \bibfield{journal},
+\bibfield{journaltitle}, \bibfield{maintitle}, \bibfield{origtitle},
+\bibfield{shortbooktitle}, \bibfield{shorthand},
+\bibfield{shorttitle}, and \bibfield{shortmaintitle}.
+
+In combination with \opt{noformat:<field>}, this option allows you to
+work with complex titles, where different parts need different formats
+in different contexts. From \textit{CMOS} \ref{14.210}:
+
+\begin{verbatim}
+ @Online{braun2016,
+ options = {noformat,ifcapital},
+ author = {Braun, Caroline},
+ title = {reply to \mkbibquote{How did the `cool kids' from high
+ school turn out?}},
+ organization = {Quora},
+ date = {2016-08-09},
+ url = {https://www.quora.com/How-did-the-cool-kids-from-high
+ -school-turn-out/}
+ }
+\end{verbatim}
+
+\begin{citebib}
+\item \cite{braun2016}
+\end{citebib}
+
\optitem[false]{isbn}{\opt{true}, \opt{false}}
\noindent Use this option to print the ISBN of a particular work in a
@@ -712,6 +771,19 @@ such as \cmd{cite*}, \cmd{footcite*}, and \cmd{parencite*}.
citations and bibliography entries of specific works. To disable
truncation in all works, use the \opt{noetal} preamble option.
+\optitem[false]{noformat}{\opt{true}, \opt{false}}
+
+\noindent Short for \opt{noformat:title}.
+
+\optitem[false]{noformat:<field>}{\opt{true}, \opt{false}}
+
+\noindent This option removes formatting from titles. Supported values
+of \bibfield{<field>}: \bibfield{title}, \bibfield{blogtitle},
+\bibfield{bookbooktitle}, \bibfield{booktitle}, \bibfield{issuetitle},
+\bibfield{journal}, \bibfield{journaltitle}, \bibfield{maintitle},
+\bibfield{origtitle}, \bibfield{shortbooktitle}, \bibfield{shorthand},
+\bibfield{shorttitle}, and \bibfield{shortmaintitle}.
+
\optitem[false]{noplace}{\opt{true}, \opt{false}}
\noindent In contexts where Windy City expects to print a publisher's
@@ -719,10 +791,10 @@ location, but no location is specified in the bibliography database,
you can tell it to print \textit{n.p.} (for \textit{no place}) with
this option. From \textit{CMOS} \ref{14.132}:
-\begin{citeonly}
+\begin{citenobib}
%\begin{itemize}[before=\small,itemindent=0ex]
\item[] \cite{windsor1910}
-\end{citeonly}
+\end{citenobib}
%\end{itemize}
\optitem[false]{noreprint}{\opt{true}, \opt{false}}
@@ -745,6 +817,34 @@ the author-year format):
\nocite{darwin1964}
\end{refonly}
+\optitem[false]{quotes}{\opt{true}, \opt{false}}
+
+\noindent Short for \opt{quotes:title}.
+
+\optitem[false]{quotes:<field>}{\opt{true}, \opt{false}}
+
+\noindent This option puts titles in quotes. Supported values of
+\bibfield{<field>}: \bibfield{title}, \bibfield{blogtitle},
+\bibfield{bookbooktitle}, \bibfield{booktitle}, \bibfield{issuetitle},
+\bibfield{journal}, \bibfield{journaltitle}, \bibfield{maintitle},
+\bibfield{origtitle}, \bibfield{shortbooktitle}, \bibfield{shorthand},
+\bibfield{shorttitle}, and \bibfield{shortmaintitle}.
+
+\optitem[false]{sentencecase}{\opt{true}, \opt{false}}
+
+\noindent Short for \opt{sentencecase:title}.
+
+\optitem[false]{sentencecase:<field>}{\opt{true}, \opt{false}}
+
+\noindent This option puts titles in sentence-style capitalization,
+also called sentence case (see \textit{CMOS} 8.158), whereby the first
+letter is uppercase and subsequent letters are lowercase. Supported
+values of \bibfield{<field>}: \bibfield{title}, \bibfield{blogtitle},
+\bibfield{bookbooktitle}, \bibfield{booktitle}, \bibfield{issuetitle},
+\bibfield{journal}, \bibfield{journaltitle}, \bibfield{maintitle},
+\bibfield{origtitle}, \bibfield{shortbooktitle}, \bibfield{shorthand},
+\bibfield{shorttitle}, and \bibfield{shortmaintitle}.
+
\optitem[false]{skipdate}{\opt{true}, \opt{false}}
\noindent On rare occasions, you may need an entry in a reference list
@@ -1007,9 +1107,9 @@ respectively, to elucidate the strategy in ``indirection''---do we
begin to get a sense of both the extent and the specificity of
Whitman's forms.\footnotemark[1] \end{quote}
-\begin{citeonly}
+\begin{citenobib}
\item \idemcites{sutton1959,fussell1962,coffman1954,coffman1955,rountree1958}[and][]{lovell1960}
-\end{citeonly}
+\end{citenobib}
Without commands like \cmd{idemcite}, there's often no easy way to
tell Windy City to shorten names. The preamble option
@@ -1139,9 +1239,9 @@ entry types. You may cross-reference \bibtype{inreference} entries to
\bibtype{reference} entries, but they're otherwise equivalent. Take an
example from \textit{CMOS} \ref{14.232}:
-\begin{citeonly}
+\begin{citenobib}
\item \cite{salvation1980}
-\end{citeonly}
+\end{citenobib}
\noindent One way to get that output is to cross-reference an
\bibtype{inreference} entry (for the article) to a \bibtype{reference}
@@ -2162,19 +2262,19 @@ short citations), the one with priority determines which one
identifies the work. By default, as you can see in the second note
below, the volume has priority:
-\begin{citeonly}
+\begin{citenobib}
\item \cite{armstrong2014}
\item \cite[45]{armstrong2014}
-\end{citeonly}
+\end{citenobib}
\noindent Whereas with \opt{swapvol}:
-\begin{citeonly}
+\begin{citenobib}
\AtNextCitekey{\toggletrue{swapvol}}
\item \cite{armstrong2014}
\AtNextCitekey{\toggletrue{swapvol}}
\item \cite[45]{armstrong2014}
-\end{citeonly}
+\end{citenobib}
Notice the volume number in the second note above, separated from the
page by a colon. When the collection has priority, the volume number
@@ -2426,9 +2526,9 @@ without regard to the \bibfield{postnote}, use the entry option
\opt{listvols}. Windy City uses it to match some examples in
\textit{CMOS}, such as in \ref{14.59}:
-\begin{citeonly}
+\begin{citenobib}
\item \cite[1:126]{shurtleff1853}
-\end{citeonly}
+\end{citenobib}
\subsection{Collections as Single Works}
\label{multivolume}
@@ -2440,12 +2540,12 @@ illustrate the distinction between a collection that counts as a
single work and one that doesn't, \textit{CMOS} gives the following
examples in \ref{14.118}:
-\begin{citeonly}
+\begin{citenobib}
\item \cite[4:243]{byrne1981}
\item \cite*[32--33]{james1963.5}
\item \cite[4:245]{byrne1981}
\item \cite*[34]{james1963.5}
-\end{citeonly}
+\end{citenobib}
In citations of \textit{The Lisle Letters}, volume numbers and pages
are separated by a colon. With \textit{The Complete Tales of Henry
@@ -2501,10 +2601,10 @@ Subsequent entries indicate the collection in whatever short form
corresponds to the preamble options. The following shows the default
output for two such citations of the collection:
-\begin{citeonly}
+\begin{citenobib}
\item \cite{byrne1981}
\item \cite{byrne1981}
-\end{citeonly}
+\end{citenobib}
For collections like \textit{The Complete Tales of Henry James}, which
don't count as single works, every volume needs to have its own entry
@@ -2545,11 +2645,11 @@ editor's name, long before the \bibfield{postnote}. The second prints
it just before the \bibfield{postnote}, separated from the page by a
colon:
-\begin{citeonly}
+\begin{citenobib}
\item[2.] \cite*[32--33]{james1963.5}
\item[\ldots]
\item[4.] \cite*[34]{james1963.5}
-\end{citeonly}
+\end{citenobib}
Neither type of collection uses cross-referencing in the bibliography
database. For \textit{The Lisle Letters}, cross-referencing would
@@ -2685,7 +2785,7 @@ To help with cross-checking, subsection numbers and headings are from
On short citations and the \opt{short} and \opt{ibid} preamble
options, see sections \ref{short} and \ref{preamble}.
-\begin{citeonly}
+\begin{citenobib}
\AtNextCitekey{\toggletrue{short}\toggletrue{shortfirst}}
\item \cite[3]{morrison2004a}
\AtNextCitekey{\toggletrue{short}}
@@ -2709,11 +2809,11 @@ options, see sections \ref{short} and \ref{preamble}.
\AtNextMultiCite{\toggletrue{short}}
\item \cites[240]{morrison2004b}[32]{morrison2004a}
\AtNextCitekey{\toggletrue{short}} \item \cite[33]{morrison2004a}
-\end{citeonly}
+\end{citenobib}
\noindent With options \opt{short} and \opt{ibid}:
-\begin{citeonly}
+\begin{citenobib}
\AtNextCitekey{\toggletrue{short}\toggletrue{shortfirst}}
\item \cite[3]{morrison2004a}
\AtNextCitekey{\toggletrue{short}\toggletrue{ibid}}
@@ -2738,7 +2838,7 @@ options, see sections \ref{short} and \ref{preamble}.
\item \cites[240]{morrison2004b}[32]{morrison2004a}
\AtNextCitekey{\toggletrue{short}}
\item \cite[33]{morrison2004a}
-\end{citeonly}
+\end{citenobib}
\setcounter{subsubsection}{53}
\subsubsection{Source notes for previously published material}
@@ -2768,9 +2868,9 @@ respectively, to elucidate the strategy in ``indirection''---do we
begin to get a sense of both the extent and the specificity of
Whitman's forms.\footnotemark[1] \end{quote}
-\begin{citeonly}
+\begin{citenobib}
\item \idemcites{sutton1959,fussell1962,coffman1954,coffman1955,rountree1958}[and][]{lovell1960}
-\end{citeonly}
+\end{citenobib}
\setcounter{subsubsection}{58}
\subsubsection{Abbreviations for frequently cited works}
@@ -3343,11 +3443,11 @@ field for the second example below contains \textit{vol. 6}.
To insert \textit{n.p.} (for \textit{no place}), you need to use the
entry option \opt{noplace}. See section \ref{entry}.
-\begin{citeonly}
+\begin{citenobib}
%\begin{itemize}[before=\small,itemindent=0ex]
\item[] \cite{windsor1910}
\item[] \cite{vliet1890}
-\end{citeonly}
+\end{citenobib}
%\end{itemize}
\setcounter{subsubsection}{136}
@@ -3729,6 +3829,15 @@ correct.
\item \cite{licis2016}
\end{citebib}
+\subsubsection{Electronic mailing lists and forums}
+% 14.210 Electronic mailing lists and forums
+\label{14.210}
+
+\begin{citebib}
+\item \cite{powell1998}
+\item \cite{braun2016}
+\end{citebib}
+
\setcounter{subsection}{7}
\subsection{Papers, Contracts, and Reports}
\setcounter{subsection}{14}
@@ -3800,7 +3909,7 @@ correct.
% 14.229 Examples of note forms for manuscript collections
\label{14.229}
-\begin{citeonly}
+\begin{citenobib}
\item \cite[Burton to Merriam, telegram, 26 January 1923, box 26, folder
17,][]{merriam}
\item \cite[Minutes of the Committee for Improving the Condition of the Free
@@ -3811,7 +3920,7 @@ Blacks, Pennsylvania Abolition Society, 1790--1803,][]{pasociety}
(Scotland), Document 1359, fol. 1r,][MS-12-84]{morris}
\item \cite[Daily Expenses, July 1787, images 7--8,][]{washington}
\item \cite[Minutes, 15 April 1795,][]{pasociety}
-\end{citeonly}
+\end{citenobib}
\setcounter{subsubsection}{229}
\subsubsection{Examples of bibliography entries for manuscript collections}
@@ -3866,12 +3975,12 @@ type. As odd as it may seem, but consistent with \textit{CMOS}, they,
too, aren't included in bibliographies. See section \ref{entrytypes}
for more information.
-\begin{citeonly}
+\begin{citenobib}
\item \cite{toscanini2016}
\item \cite{cairns2016}
\item \cite{wikipedia2016}
\item \cite{merriam2016}
-\end{citeonly}
+\end{citenobib}
\subsubsection{Citing individual reference entries by author}
% 14.234 Citing individual reference entries by author
@@ -4006,9 +4115,9 @@ after the year, not before.
\subsubsection{Additional material in text citations}
% 15.24 Additional material in text citations
-\begin{citeref}
+\begin{citenoref}
\item \parencite[; t-tests are used here]{mandolan2017}
-\end{citeref}
+\end{citenoref}
\subsubsection{Text citations in relation to surrounding text and punctuation}
% 15.25 Text citations in relation to surrounding text and punctuation
@@ -4024,7 +4133,7 @@ blue states and between churchgoers and secular voters. \end{quote}
\subsubsection{Several references to the same source}
% 15.27 Several references to the same source
-\begin{citeref}% 'even\-tanned' prevents even--[break]tanned
+\begin{citenoref}% 'even\-tanned' prevents even--[break]tanned
\item Complexion figures prominently in Morgan's descriptions. When
Jasper compliments his mother's choice of car (a twelve-cylinder
Mediterranean roadster with leather and wood-grained interior), ``his
@@ -4034,26 +4143,26 @@ never changes, her ``even\-tanned good looks''
\parencite[56]{chaston2000}, ``burnished visage''
\parencite[101]{chaston2000}, and ``air-brushed confidence''
\parencite[211]{chaston2000} providing the foil to the drama in her
-midst. \end{citeref}
+midst. \end{citenoref}
\setcounter{subsubsection}{28}
\subsubsection{Text citations of works with more than three authors}
% 15.29 Text citations of works with more than three authors
-\begin{citeref}
+\begin{citenoref}
\item \parencite{schonen2017a}
\item \parencite{schonen2017b}
-\end{citeref}
+\end{citenoref}
\subsubsection{Multiple text references}
% 15.30 Multiple text references
-\begin{citeref}
+\begin{citenoref}
\item \parencite{armstrong1989,beigl1989,pickett1985}
\item \parencites{whittaker1967,whittaker1975,wiens1989a,wiens1989b}
\item \parencites[328]{wong1999}[475]{wong2000}[67]{garcia1998}
\item \parencites{guest2006}[see also][]{stalle2008}{rahn2009}
-\end{citeref}
+\end{citenoref}
\setcounter{subsection}{2}
\subsection{Author-Date References: Special Cases}
@@ -4198,7 +4307,7 @@ with \ref{14.208} and \ref{15.42}.
\begin{citeref}
\item \parencite{diaz2016}
-\item \parencite{obrien2015}
+\item \parencite{brien2015}
\item \parencite{chicago2015}
\end{citeref}
diff --git a/macros/latex/contrib/biblatex-contrib/windycity/windycity.bbx b/macros/latex/contrib/biblatex-contrib/windycity/windycity.bbx
index f0ebc54803..7ec01ff0a4 100644
--- a/macros/latex/contrib/biblatex-contrib/windycity/windycity.bbx
+++ b/macros/latex/contrib/biblatex-contrib/windycity/windycity.bbx
@@ -1,4 +1,4 @@
-% Last modified: Sat 04 Dec 2021 01:25:10 PM CST
+% Last modified: Wed 03 May 2023 06:54:57 PM CDT
% Permission is granted to copy, distribute and/or modify this
% software under the terms of the LaTeX Project Public License (LPPL),
@@ -11,7 +11,7 @@
% implied warranties of merchantability and fitness for a particular
% purpose.
-\ProvidesFile{windycity.bbx}[2021/12/04 Windy City bibliography style
+\ProvidesFile{windycity.bbx}[2023/05/03 Windy City bibliography style
for biblatex]
\@ifpackagelater{biblatex}{2019/08/17}
{}
@@ -142,20 +142,20 @@
\settoggle{swapauth}{#1}}%
\providetoggle{swaptrans}
-\providetoggle{swaptrans:booktitle}
\providetoggle{swaptrans:bookbooktitle}
+\providetoggle{swaptrans:booktitle}
\providetoggle{swaptrans:issuetitle}
\providetoggle{swaptrans:maintitle}
\providetoggle{swaptrans:series}
\providetoggle{swaptrans:title}
\DeclareBiblatexOption{entry}[boolean]{swaptrans}[true]{%
\settoggle{swaptrans:title}{#1}%
- \settoggle{swaptrans:booktitle}{#1}%
- \settoggle{swaptrans:bookbooktitle}{#1}}%
-\DeclareBiblatexOption{entry}[boolean]{swaptrans:booktitle}[true]{%
+ \settoggle{swaptrans:bookbooktitle}{#1}%
\settoggle{swaptrans:booktitle}{#1}}%
\DeclareBiblatexOption{entry}[boolean]{swaptrans:bookbooktitle}[true]{%
\settoggle{swaptrans:bookbooktitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{swaptrans:booktitle}[true]{%
+ \settoggle{swaptrans:booktitle}{#1}}%
\DeclareBiblatexOption{entry}[boolean]{swaptrans:issuetitle}[true]{%
\settoggle{swaptrans:issuetitle}{#1}}%
\DeclareBiblatexOption{entry}[boolean]{swaptrans:maintitle}[true]{%
@@ -187,6 +187,250 @@
\DeclareBiblatexOption{entry,global}[boolean]{url}[true]{%
\settoggle{url}{#1}}%
+% Options for formatting titles and other fields:
+
+\providetoggle{emph:blogtitle}
+\providetoggle{emph:booktitle}
+\providetoggle{emph:bookbooktitle}
+\providetoggle{emph:issuetitle}
+\providetoggle{emph:journaltitle}
+\providetoggle{emph:labeltitle}
+\providetoggle{emph:maintitle}
+\providetoggle{emph:origtitle}
+\providetoggle{emph:shortbooktitle}
+\providetoggle{emph:shorthand}
+\providetoggle{emph:shortmaintitle}
+\providetoggle{emph:title}
+\providetoggle{emph}
+\DeclareBiblatexOption{entry}[boolean]{emph:blogtitle}[true]{%
+ \settoggle{emph:blogtitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{emph:bookbooktitle}[true]{%
+ \settoggle{emph:bookbooktitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{emph:booktitle}[true]{%
+ \settoggle{emph:booktitle}{#1}%
+ \settoggle{emph:shortbooktitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{emph:issuetitle}[true]{%
+ \settoggle{emph:issuetitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{emph:journal}[true]{%
+ \settoggle{emph:journaltitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{emph:journaltitle}[true]{%
+ \settoggle{emph:journaltitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{emph:maintitle}[true]{%
+ \settoggle{emph:maintitle}{#1}%
+ \settoggle{emph:shortmaintitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{emph:origtitle}[true]{%
+ \settoggle{emph:origtitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{emph:shortbooktitle}[true]{%
+ \settoggle{emph:shortbooktitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{emph:shorthand}[true]{%
+ \settoggle{emph:shorthand}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{emph:shortmaintitle}[true]{%
+ \settoggle{emph:shortmaintitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{emph:shorttitle}[true]{%
+ \settoggle{emph:labeltitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{emph:title}[true]{%
+ \settoggle{emph:title}{#1}%
+ \settoggle{emph:labeltitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{emph}[true]{%
+ \settoggle{emph:title}{#1}%
+ \settoggle{emph:labeltitle}{#1}}%
+
+\providetoggle{ifcapital:blogtitle}
+\providetoggle{ifcapital:booktitle}
+\providetoggle{ifcapital:bookbooktitle}
+\providetoggle{ifcapital:issuetitle}
+\providetoggle{ifcapital:journaltitle}
+\providetoggle{ifcapital:labeltitle}
+\providetoggle{ifcapital:maintitle}
+\providetoggle{ifcapital:origtitle}
+\providetoggle{ifcapital:shortbooktitle}
+\providetoggle{ifcapital:shorthand}
+\providetoggle{ifcapital:shortmaintitle}
+\providetoggle{ifcapital:title}
+\providetoggle{ifcapital}
+\DeclareBiblatexOption{entry}[boolean]{ifcapital:blogtitle}[true]{%
+ \settoggle{ifcapital:blogtitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{ifcapital:bookbooktitle}[true]{%
+ \settoggle{ifcapital:bookbooktitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{ifcapital:booktitle}[true]{%
+ \settoggle{ifcapital:booktitle}{#1}%
+ \settoggle{ifcapital:shortbooktitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{ifcapital:issuetitle}[true]{%
+ \settoggle{ifcapital:issuetitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{ifcapital:journal}[true]{%
+ \settoggle{ifcapital:journaltitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{ifcapital:journaltitle}[true]{%
+ \settoggle{ifcapital:journaltitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{ifcapital:maintitle}[true]{%
+ \settoggle{ifcapital:maintitle}{#1}%
+ \settoggle{ifcapital:shortmaintitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{ifcapital:origtitle}[true]{%
+ \settoggle{ifcapital:origtitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{ifcapital:shortbooktitle}[true]{%
+ \settoggle{ifcapital:shortbooktitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{ifcapital:shorthand}[true]{%
+ \settoggle{ifcapital:shorthand}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{ifcapital:shortmaintitle}[true]{%
+ \settoggle{ifcapital:shortmaintitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{ifcapital:shorttitle}[true]{%
+ \settoggle{ifcapital:labeltitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{ifcapital:title}[true]{%
+ \settoggle{ifcapital:title}{#1}%
+ \settoggle{ifcapital:labeltitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{ifcapital}[true]{%
+ \settoggle{ifcapital:title}{#1}%
+ \settoggle{ifcapital:labeltitle}{#1}}%
+
+\providetoggle{noformat:blogtitle}
+\providetoggle{noformat:booktitle}
+\providetoggle{noformat:bookbooktitle}
+\providetoggle{noformat:issuetitle}
+\providetoggle{noformat:journaltitle}
+\providetoggle{noformat:labeltitle}
+\providetoggle{noformat:maintitle}
+\providetoggle{noformat:origtitle}
+\providetoggle{noformat:shortbooktitle}
+\providetoggle{noformat:shorthand}
+\providetoggle{noformat:shortmaintitle}
+\providetoggle{noformat:title}
+\providetoggle{noformat}
+\DeclareBiblatexOption{entry}[boolean]{noformat:blogtitle}[true]{%
+ \settoggle{noformat:blogtitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{noformat:bookbooktitle}[true]{%
+ \settoggle{noformat:bookbooktitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{noformat:booktitle}[true]{%
+ \settoggle{noformat:booktitle}{#1}%
+ \settoggle{noformat:shortbooktitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{noformat:issuetitle}[true]{%
+ \settoggle{noformat:issuetitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{noformat:journal}[true]{%
+ \settoggle{noformat:journaltitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{noformat:journaltitle}[true]{%
+ \settoggle{noformat:journaltitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{noformat:maintitle}[true]{%
+ \settoggle{noformat:maintitle}{#1}%
+ \settoggle{noformat:shortmaintitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{noformat:origtitle}[true]{%
+ \settoggle{noformat:orig}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{noformat:shortbooktitle}[true]{%
+ \settoggle{noformat:shortbooktitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{noformat:shorthand}[true]{%
+ \settoggle{noformat:shorthand}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{noformat:shortmaintitle}[true]{%
+ \settoggle{noformat:shortmaintitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{noformat:shorttitle}[true]{%
+ \settoggle{noformat:labeltitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{noformat:title}[true]{%
+ \settoggle{noformat:labeltitle}{#1}%
+ \settoggle{noformat:title}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{noformat}[true]{%
+ \settoggle{noformat:labeltitle}{#1}%
+ \settoggle{noformat:title}{#1}}%
+
+\providetoggle{quotes:blogtitle}
+\providetoggle{quotes:booktitle}
+\providetoggle{quotes:bookbooktitle}
+\providetoggle{quotes:issuetitle}
+\providetoggle{quotes:journaltitle}
+\providetoggle{quotes:labeltitle}
+\providetoggle{quotes:maintitle}
+\providetoggle{quotes:origtitle}
+\providetoggle{quotes:shortbooktitle}
+\providetoggle{quotes:shorthand}
+\providetoggle{quotes:shortmaintitle}
+\providetoggle{quotes:title}
+\providetoggle{quotes}
+\DeclareBiblatexOption{entry}[boolean]{quotes:blogtitle}[true]{%
+ \settoggle{quotes:blogtitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{quotes:bookbooktitle}[true]{%
+ \settoggle{quotes:bookbooktitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{quotes:booktitle}[true]{%
+ \settoggle{quotes:booktitle}{#1}%
+ \settoggle{quotes:shortbooktitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{quotes:issuetitle}[true]{%
+ \settoggle{quotes:issuetitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{quotes:journal}[true]{%
+ \settoggle{quotes:journaltitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{quotes:journaltitle}[true]{%
+ \settoggle{quotes:journaltitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{quotes:maintitle}[true]{%
+ \settoggle{quotes:maintitle}{#1}%
+ \settoggle{quotes:shortmaintitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{quotes:origtitle}[true]{%
+ \settoggle{quotes:origtitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{quotes:shortbooktitle}[true]{%
+ \settoggle{quotes:shortbooktitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{quotes:shorthand}[true]{%
+ \settoggle{quotes:shorthand}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{quotes:shortmaintitle}[true]{%
+ \settoggle{quotes:shortmaintitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{quotes:shorttitle}[true]{%
+ \settoggle{quotes:labeltitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{quotes:title}[true]{%
+ \settoggle{quotes:labeltitle}{#1}%
+ \settoggle{quotes:title}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{quotes}[true]{%
+ \settoggle{quotes:labeltitle}{#1}%
+ \settoggle{quotes:title}{#1}}%
+
+\providetoggle{sentencecase:blogtitle}
+\providetoggle{sentencecase:booktitle}
+\providetoggle{sentencecase:bookbooktitle}
+\providetoggle{sentencecase:issuetitle}
+\providetoggle{sentencecase:journaltitle}
+\providetoggle{sentencecase:labeltitle}
+\providetoggle{sentencecase:maintitle}
+\providetoggle{sentencecase:origtitle}
+\providetoggle{sentencecase:shortbooktitle}
+\providetoggle{sentencecase:shorthand}
+\providetoggle{sentencecase:shortmaintitle}
+\providetoggle{sentencecase:title}
+\providetoggle{sentencecase}
+\DeclareBiblatexOption{entry}[boolean]{sentencecase:blogtitle}[true]{%
+ \settoggle{sentencecase:blogtitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{sentencecase:bookbooktitle}[true]{%
+ \settoggle{sentencecase:bookbooktitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{sentencecase:booktitle}[true]{%
+ \settoggle{sentencecase:booktitle}{#1}%
+ \settoggle{sentencecase:shortbooktitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{sentencecase:issuetitle}[true]{%
+ \settoggle{sentencecase:issuetitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{sentencecase:journal}[true]{%
+ \settoggle{sentencecase:journaltitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{sentencecase:journaltitle}[true]{%
+ \settoggle{sentencecase:journaltitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{sentencecase:maintitle}[true]{%
+ \settoggle{sentencecase:maintitle}{#1}%
+ \settoggle{sentencecase:shortmaintitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{sentencecase:origtitle}[true]{%
+ \settoggle{sentencecase:origtitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{sentencecase:shortbooktitle}[true]{%
+ \settoggle{sentencecase:shortbooktitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{sentencecase:shorthand}[true]{%
+ \settoggle{sentencecase:shorthand}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{sentencecase:shortmaintitle}[true]{%
+ \settoggle{sentencecase:shortmaintitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{sentencecase:shorttitle}[true]{%
+ \settoggle{sentencecase:labeltitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{sentencecase:title}[true]{%
+ \settoggle{sentencecase:title}{#1}%
+ \settoggle{sentencecase:labeltitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{sentencecase}[true]{%
+ \settoggle{sentencecase:title}{#1}%
+ \settoggle{sentencecase:labeltitle}{#1}}%
+\DeclareBiblatexOption{global}[boolean]{sentencecase}[true]{%
+ \settoggle{sentencecase:blogtitle}{#1}%
+ \settoggle{sentencecase:booktitle}{#1}%
+ \settoggle{sentencecase:bookbooktitle}{#1}%
+ \settoggle{sentencecase:issuetitle}{#1}%
+ \settoggle{sentencecase:journaltitle}{#1}%
+ \settoggle{sentencecase:labeltitle}{#1}%
+ \settoggle{sentencecase:maintitle}{#1}%
+ \settoggle{sentencecase:origtitle}{#1}%
+ \settoggle{sentencecase:shortbooktitle}{#1}%
+ \settoggle{sentencecase:shortmaintitle}{#1}%
+ \settoggle{sentencecase:title}{#1}}%
+
% For setting 'minbibnames' and such, see CMOS, 17th ed., 14.76 and
% 15.29. For 'citetracker' and 'loccittracker', 'constrict' is too
% strict but seems to work well for 'ibidtracker'.
@@ -386,7 +630,7 @@
}
\DeclareStyleSourcemap{
\maps[datatype=bibtex]{
- \map[overwrite=false]{
+ \map[overwrite]{
\pertype{inreference}
\pertype{reference}
\step[notfield=author, final]
@@ -554,6 +798,7 @@
\let\anona\empty
\let\anonb\empty
\let\crossreflist\empty
+\let\title@format\empty
\let\pluga\empty
\let\plugb\empty
\let\xtitle\empty
@@ -623,9 +868,22 @@
{\indexnames{labelname}}%
{}}
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Field Formats for Names %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%
+%% Field Formats %%
+%%%%%%%%%%%%%%%%%%%%%
+
+% Generic formats:
+
+\DeclareFieldFormat{brackets}{\mkbibbrackets{#1}}
+\DeclareFieldFormat{capital}{\MakeCapital{#1}}
+\DeclareFieldFormat{emph}{\mkbibemph{#1}}
+\DeclareFieldFormat{ifcapital}{\ifcapital{\MakeCapital{#1}}{#1}}
+\DeclareFieldFormat{noformat}{#1}
+\DeclareFieldFormat{parens}{\mkbibparens{#1}}
+\DeclareFieldFormat{quotes}{\mkbibquote{#1}}
+\DeclareFieldFormat{sentencecase}{\MakeSentenceCase{#1}}
+
+% Name formats (defaults set in biblatex.def):
\DeclareNameAlias{author}{sortname}
\DeclareNameAlias{afterword}{sortname}
@@ -712,33 +970,32 @@
\ifdefvoid{#3}{}{ #3}%
\ifdefvoid{#4}{}{, #4}}}
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Field Formats for Titles %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Title formats:
-\DeclareFieldFormat{blogtitle}{\mkbibemph{#1}}
-\DeclareFieldFormat{bookbooktitle}{\mkbibemph{#1}}
-\DeclareFieldFormat{booktitle}{\mkbibemph{#1}}
-\DeclareFieldFormat{journaltitle}{\mkbibemph{#1}}
-\DeclareFieldFormat{labeltitle}{\mkbibemph{#1}}
-\DeclareFieldFormat{maintitle}{\mkbibemph{#1}}
-\DeclareFieldFormat{shortbooktitle}{\mkbibemph{#1}}
-\DeclareFieldFormat{title}{\mkbibemph{#1}}
+\DeclareFieldAlias{blogtitle}{emph}
+\DeclareFieldAlias{bookbooktitle}{emph}
+\DeclareFieldAlias{booktitle}{emph}
+\DeclareFieldAlias{journaltitle}{emph}
+\DeclareFieldAlias{labeltitle}{emph}
+\DeclareFieldAlias{maintitle}{emph}
+\DeclareFieldAlias{shortbooktitle}{emph}
+\DeclareFieldAlias{shortmaintitle}{emph}
+\DeclareFieldAlias{title}{emph}
\DeclareIndexFieldFormat{indextitle}{%
\usebibmacro{index:title}{\index}{\mkbibemph{#1}}}
\renewbibmacro*{index:title}[2]{%
\usebibmacro{index:field}{#1}{\thefield{indexsorttitle}}{#2}}%
-\DeclareFieldFormat{blogtitleaddon}{\mkbibparens{#1}}
-\DeclareFieldFormat{journaltitleaddon}{\mkbibbrackets{#1}}
-\DeclareFieldFormat{titleaddon}{\mkbibbrackets{#1}}
+\DeclareFieldAlias{blogtitleaddon}{parens}
+\DeclareFieldAlias{journaltitleaddon}{brackets}
+\DeclareFieldAlias{titleaddon}{brackets}
\DeclareFieldFormat[article,incollection,online,reference,review,thesis]
{title}{\mkbibquote{#1}}
\DeclareFieldFormat[article,incollection,online,reference,review,thesis]
{labeltitle}{\mkbibquote{#1}}
-\DeclareIndexFieldFormat[article,incollection,online,reference,review,thesis]
+\DeclareIndexFieldFormat[article,incollection,reference,review,thesis]
{indextitle}{\usebibmacro{index:title}{\index}{\mkbibquote{#1}}}
\DeclareFieldFormat[letter,misc,patent]{title}{#1}
@@ -746,13 +1003,13 @@
\DeclareIndexFieldFormat[letter,misc,patent]
{indextitle}{\usebibmacro{index:title}{\index}{#1}}
-\DeclareFieldAlias[inbook]{title}{title}
-\DeclareFieldAlias[inbook]{labeltitle}{labeltitle}
+\DeclareFieldAlias[inbook]{title}{emph}
+\DeclareFieldAlias[inbook]{labeltitle}{emph}
\DeclareIndexFieldAlias[inbook]{indextitle}{indextitle}
-\DeclareFieldAlias[book]{origtitle}{title}
+\DeclareFieldAlias[book]{origtitle}{emph}
\DeclareFieldFormat{chapter}{\bibstring{chapter}\space #1}
-\DeclareFieldFormat{issuetitle}{\ifcapital{\MakeCapital{#1}}{#1}}
+\DeclareFieldAlias{issuetitle}{noformat}
\DeclareFieldFormat[unpublished]
{title}{\usebibmacro{unpublished:format}{#1}}
@@ -766,20 +1023,18 @@
{\mkbibquote{#1}}%
{#1}}%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Other Field Formats %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Other field formats:
-\DeclareFieldFormat{addendum}{\ifcapital{\MakeCapital{#1}}{#1}}%
+\DeclareFieldAlias{addendum}{ifcapital}
\DeclareFieldFormat{annotation}{\\[\bibitemsep] #1}
\DeclareFieldAlias{doi}{url}
\DeclareFieldFormat{edition}{%
\ifinteger{#1}
{\mkbibordedition{#1}~\bibstring{edition}}%
{\ifcapital{\MakeCapital{#1}}{#1}}}
-\DeclareFieldFormat{endmonth}{\mkbibmonth{#1}}%
-\DeclareFieldFormat{howpublished}{\ifcapital{\MakeCapital{#1}}{#1}}%
-\DeclareFieldFormat{issue}{\MakeCapital{#1}}% always capitalize
+\DeclareFieldAlias{endmonth}{month}
+\DeclareFieldAlias{howpublished}{ifcapital}
+\DeclareFieldAlias{issue}{capital}
\DeclareFieldFormat{journum}{%
\ifnumeral{#1}
{no\adddotspace\printfield{number}}%
@@ -789,28 +1044,58 @@
and test {\iffieldundef{bookyear}}}
{\biblcstring{#1}}%
{\ifbibstring{#1}{\bibstring{#1}}{\stripzeros{#1}}}}
-\DeclareListFormat{location}{#1}%
+\DeclareListFormat{location}{#1}
\DeclareFieldFormat{month}{\mkbibmonth{#1}}%
-\DeclareFieldFormat{note}{\ifcapital{\MakeCapital{#1}}{#1}}%
-\DeclareFieldFormat{pages}{#1}
+\DeclareFieldAlias{note}{ifcapital}
+\DeclareFieldAlias{pages}{noformat}
\DeclareFieldFormat{part}{\bibstring{part}\space#1}
-\DeclareFieldFormat{postnote}{#1}
+\DeclareFieldAlias{postnote}{noformat}
\DeclareListFormat{publisher}{#1}
-\DeclareFieldFormat{pubstate}{\ifcapital{\MakeCapital{#1}}{#1}}%
-\DeclareFieldFormat{season}{\MakeCapital{#1}}% always capitalize
-\DeclareFieldFormat{series}{\ifcapital{\MakeCapital{#1}}{#1}}
+\DeclareFieldAlias{pubstate}{ifcapital}
+\DeclareFieldAlias{season}{capital}% deprecated
+\DeclareFieldAlias{series}{ifcapital}
+\DeclareFieldAlias{yeardivision}{capital}
% A shorthand should be italicized if the title that it abbreviates is
% also italicized. See CMOS, 17th ed., 14.60. Set italics for it in
% the bibliography database with '\emph{}' or '\mkbibemph{}'.
-\DeclareFieldFormat{shorthand}{#1}
-\DeclareFieldFormat{shorthandintro}{\ifcapital{\MakeCapital{#1}}{#1}}%
-\DeclareFieldFormat{shorthandwidth}{#1}
-\DeclareFieldFormat{type}{\ifcapital{\MakeCapital{#1}}{#1}}%
+\DeclareFieldAlias{shorthand}{noformat}
+\DeclareFieldFormat[article,incollection,online,reference,review,thesis]
+ {shorthand}{\mkbibquote{#1}}
+\DeclareFieldAlias{shorthandintro}{ifcapital}
+\DeclareFieldAlias{type}{ifcapital}
\DeclareFieldFormat{url}{\url{#1}}
\DeclareFieldFormat{urldate}{\bibstring{urlseen}\space#1}
+\newbibmacro*{test:format}[2]{%
+ \iftoggle{noformat:#1}
+ {\iftoggle{ifcapital:#1}
+ {\usebibmacro{print:#2}{#1}{noformat}{ifcapital}}%
+ {\iftoggle{sentencecase:#1}
+ {\usebibmacro{print:#2}{#1}{noformat}{sentencecase}}%
+ {\usebibmacro{print:#2}{#1}{noformat}{noformat}}}}
+ {\iftoggle{sentencecase:#1}
+ {\iftoggle{emph:#1}
+ {\usebibmacro{print:#2}{#1}{emph}{sentencecase}}%
+ {\iftoggle{quotes:#1}
+ {\usebibmacro{print:#2}{#1}{quotes}{sentencecase}}%
+ {\usebibmacro{print:#2}{#1}{#1}{sentencecase}}}}
+ {\iftoggle{emph:#1}
+ {\iftoggle{ifcapital:#1}
+ {\usebibmacro{print:#2}{#1}{emph}{ifcapital}}%
+ {\usebibmacro{print:#2}{#1}{emph}{noformat}}}
+ {\iftoggle{quotes:#1}
+ {\iftoggle{ifcapital:#1}
+ {\usebibmacro{print:#2}{#1}{quotes}{ifcapital}}%
+ {\usebibmacro{print:#2}{#1}{quotes}{noformat}}}
+ {\iftoggle{ifcapital:#1}
+ {\usebibmacro{print:#2}{#1}{#1}{ifcapital}}%
+ {\usebibmacro{print:#2}{#1}{#1}{noformat}}}}}}}
+
+\newbibmacro*{print:field}[3]{%
+ \printtext[#2]{\printfield[#3]{#1}}}
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Bibliography Aliases %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1464,20 +1749,23 @@
\iffieldundef{#1title}
{}
{\renewcommand*{\xtitle}{#1}%
- \iftoggle{shortlinks}
- {\printtext[bibhyperref]{%
- \usebibmacro{title+subtitle}{#1}}}
- {\usebibmacro{title+subtitle}{#1}}%
+ \usebibmacro{title+shortlinks}{#1}%
\usebibmacro{titleaddon}{#1}%
\clearfield{#1title}}}
-\newbibmacro*{title+subtitle}[1]{%
- \printtext[#1title]{%
- \printfield[noformat]{#1title}%
- \iffieldundef{#1subtitle}
+\newbibmacro*{title+shortlinks}[1]{%
+ \iftoggle{shortlinks}
+ {\printtext[bibhyperref]{%
+ \usebibmacro{test:format}{#1title}{title}}}
+ {\usebibmacro{test:format}{#1title}{title}}}
+
+\newbibmacro*{print:title}[3]{%
+ \printtext[#2]{%
+ \printfield[#3]{#1}%
+ \iffieldundef{\xtitle subtitle}
{}
{\subtitlepunct
- \printfield[noformat]{#1subtitle}}%
+ \printfield[#3]{\xtitle subtitle}}%
\isdot}}%
\newbibmacro*{titleaddon}[1]{%
@@ -1486,11 +1774,6 @@
{\addspace% '\space' has issues with quotation marks
\printfield{#1titleaddon}}}
-\newbibmacro*{shorttitle+shortlinks}{%
- \iftoggle{shortlinks}
- {\printtext[bibhyperref]{\usebibmacro{shorttitle+crossref}{}}}
- {\usebibmacro{shorttitle+crossref}{}}}
-
\newbibmacro*{shorttitle+crossref}[1]{%
\ifboolexpr{ togl {collection:#1bk}
and togl {swapvol}}
@@ -1501,11 +1784,13 @@
{\usebibmacro{shorttitle}{label}}}}
\newbibmacro*{shorttitle}[1]{%
+ \renewcommand*{\xtitle}{#1}%
+ \clearfield{#1subtitle}%
\ifstrequal{#1}{label}
- {\printfield[\thefield{entrytype}]{labeltitle}\isdot}%
+ {\usebibmacro{title+shortlinks}{label}}%
{\iffieldundef{short#1title}
- {\printfield[#1title]{#1title}\isdot}%
- {\printfield[#1title]{short#1title}\isdot}}}
+ {\usebibmacro{title+shortlinks}{#1}}%
+ {\usebibmacro{title+shortlinks}{short#1}}}}
\renewbibmacro*{booktitle}{%
\iffieldundef{booktitle}
@@ -1648,28 +1933,25 @@
\newbibmacro*{issue+month+etc}[1]{%
\iffieldundef{year}
- {\setunit{\space}%
- \iffieldundef{month}
- {\usebibmacro{pubstate}{parens}}%
- {\printtext[parens]{\printdate}}}
+ {\ifstrequal{#1}{parens}
+ {\setunit{\space}}%
+ {\setunit{\addcomma\space}}%
+ \usebibmacro{pubstate}{#1}}%
{\ifboolexpr{ test {\iffieldundef{volume}}
and test {\iffieldundef{number}}}
- {\iffieldundef{journal}
- {}
- {\setunit{\addcomma\space}}%
- \iffieldundef{month}
+ {\iffieldundef{month}
{\usebibmacro{issue+season+year}}%
{\usebibmacro{reflist+year+day}%
\printdate}}%
{\iffieldundef{month}
- {\usebibmacro{reflist+issue+season}}%
- {\ifstrequal{#1}{noparens}
- {\usebibmacro{reflist+year+day}%
- \newunit
- \usebibmacro{pubstate}{date}}%
- {\usebibmacro{reflist+year+day}%
- \setunit{\space}%
- \printtext[parens]{\printdate}}}}}}
+ {\setunit{\space}%
+ \usebibmacro{reflist+issue+season}}%
+ {\usebibmacro{reflist+year+day}%
+ \ifstrequal{#1}{parens}
+ {\setunit{\space}%
+ \printtext[parens]{\printdate}}%
+ {\newunit
+ \usebibmacro{pubstate}{date}}}}}}
\newbibmacro*{pubstate}[1]{%
\iftoggle{authposition}
@@ -1694,21 +1976,27 @@
\setunit{\addcomma\space}}%
{\ifstrequal{#1}{parens}
{\printtext[parens]{\printfield{pubstate}}}
- {\printfield{pubstate}}}}}% needs '%'
- \clearfield{pubstate}}}}
+ {\printfield{pubstate}}}}}}}}
\newbibmacro*{labeldate+date}[1]{%
\ifstrequal{#1}{label}
{\printlabeldate}%
{\ifstrequal{#1}{date}
- {\printdate}%
+ {\ifboolexpr{ test {\iffieldundef{year}}
+ and test {\iffieldundef{month}}}
+ {\iffieldundef{yeardivision}
+ {\printfield{season}}% deprecated
+ {\printfield{yeardivision}}}
+ {\printdate}}%
{}}}
\newbibmacro*{reflist+year+day}{%
\ifboolexpr{ togl {bibliography}
and togl {reflist}
- and test {\iffieldundef{day}}}
- {\iffieldundef{endyear}
+ and test {\iffieldundef{day}}
+ and test {\iffieldundef{season}}% deprecated
+ and test {\iffieldundef{yeardivision}}}
+ {\iffieldundef{endyear}
{\clearfield{year}}%
{\iffieldsequal{year}{endyear}
{\clearfield{year}%
@@ -1716,32 +2004,28 @@
{}}}
{}}
-% Treat 'season' as an alternative for 'issue'.
+% Treat 'yeardivision' and 'season' as alternatives for 'issue'.
+
+\newbibmacro*{issue+season+year}{%
+ \iffieldundef{issue}
+ {\usebibmacro{labeldate+date}{date}}%
+ {\ifboolexpr{ test {\iffieldundef{season}}% deprecated
+ and test {\iffieldundef{yeardivision}}}
+ {\printfield{issue}%
+ \setunit{\addspace}% not '\addspace'
+ \printfield{year}}%
+ {\usebibmacro{labeldate+date}{date}}}}
\newbibmacro*{reflist+issue+season}{%
\ifboolexpr{ togl {bibliography}
and togl {reflist}}
{\ifboolexpr{ test {\iffieldundef{issue}}
- and test {\iffieldundef{season}}}
+ and test {\iffieldundef{season}}% deprecated
+ and test {\iffieldundef{yeardivision}}}
{}
- {\setunit{\space}%
- \iffieldundef{issue}
- {\printtext[parens]{\printfield{season}}}
- {\printtext[parens]{\printfield{issue}}}}}
- {\setunit{\space}%
- \printtext[parens]{\usebibmacro{issue+season+year}}}}
-
-\newbibmacro*{issue+season+year}{%
- \ifboolexpr{ test {\iffieldundef{issue}}
- and test {\iffieldundef{season}}}
- {\printfield{year}}%
- {\iffieldundef{issue}
- {\printfield{season}%
- \space
- \printfield{year}}%
- {\printfield{issue}%
- \space
- \printfield{year}}}}
+ {\clearfield{year}%
+ \printtext[parens]{\usebibmacro{issue+season+year}}}}
+ {\printtext[parens]{\usebibmacro{issue+season+year}}}}
% Per CMOS, 17th ed., 14.119, print the publication year of the
% last-mentioned title.
@@ -1784,23 +2068,14 @@
{}
{\textendash\printfield{#1endyear}}}
-\newbibmacro*{month+season+year}{%
- \ifboolexpr{ togl {reflist}
+\newbibmacro*{year+month+day}[1]{%
+ \ifboolexpr{ togl {bibliography}
+ and togl {reflist}
and test {\iffieldundef{month}}
- and test {\iffieldundef{season}}}
+ and test {\iffieldundef{season}}% deprecated
+ and test {\iffieldundef{yeardivision}}}
{}
- {\iffieldundef{year}
- {\printlabeldate}% for 'n.d.'
- {\printdate
- \clearfield{year}}}}
-
-\newbibmacro*{year+month+day}{%
- \iffieldundef{year}
- {}
- {\iffieldundef{month}
- {\usebibmacro{reflist+year+day}%
- \printdate}%
- {\printdate}}}
+ {\usebibmacro{labeldate+date}{#1}}}
% For reference lists.
@@ -1936,12 +2211,12 @@
{\newunit}%
{\setunit{\addcomma\space}}%
\iffieldequalstr{type}{newsmag}
- {\usebibmacro{issue+month+etc}{noparens}%
+ {\usebibmacro{issue+month+etc}{}%
\usebibmacro{periodical:number}}%
{\usebibmacro{periodical:number}%
\iffieldequalstr{pubstate}{prepub}
- {\usebibmacro{issue+month+etc}{noparens}}%
- {\usebibmacro{issue+month+etc}{}}}% needs '%'
+ {\usebibmacro{issue+month+etc}{}}%
+ {\usebibmacro{issue+month+etc}{parens}}}% needs '%'
\toggletrue{edshift}%
\usebibmacro{edition}{noformat}}%
@@ -1957,7 +2232,8 @@
{\ifboolexpr{test {\iffieldundef{number}}
and test {\iffieldundef{month}}
and test {\iffieldundef{issue}}
- and test {\iffieldundef{season}}}
+ and test {\iffieldundef{season}}% deprecated
+ and test {\iffieldundef{yeardivision}}}
{\setunit{\addcolon}%
\printfield{pages}}%
{\setunit{\addcolon\space}%
@@ -1975,7 +2251,7 @@
\usebibmacro{author+bookauthor+etc}%
\usebibmacro{title+titleaddon}{}%
\newunit
- \usebibmacro{month+season+year}%
+ \usebibmacro{year+month+day}{date}%
\usebibmacro{type+typeaddon}%
\usebibmacro{note}%
\newunit
@@ -2108,7 +2384,7 @@
\usebibmacro{institution+venue}%
\printlist{location}%
\setunit*{\addcomma\space}%
- \usebibmacro{year+month+day}}%
+ \usebibmacro{year+month+day}{date}}%
\newbibmacro*{type+typeaddon}{%
\iffieldundef{type}
@@ -2141,7 +2417,7 @@
\usebibmacro{title+titleaddon}{}%
\usebibmacro{type+typeaddon}%
\setunit{\addcomma\space}%
- \usebibmacro{month+season+year}%
+ \usebibmacro{year+month+day}{label}%
\iffieldundef{type}
{\newunit
\usebibmacro{unpublished:collection}}%
@@ -2199,7 +2475,8 @@
{\ifboolexpr{ togl {bibliography}
and togl {reflist}
and test {\iffieldundef{issue}}
- and test {\iffieldundef{season}}
+ and test {\iffieldundef{season}}% deprecated
+ and test {\iffieldundef{yeardivision}}
and test {\iffieldundef{month}}
and not test {\iffieldundef{volume}}}
{\setunit{\space}%
@@ -2431,10 +2708,9 @@
\newbibmacro*{loc+pub+year}{%
\usebibmacro{loc+pub+etc}{}%
- \setunit{\addcomma\space}%
- \usebibmacro{month+season+year}%
- \setunit{\addcomma\space}%
- \usebibmacro{pubstate}{}}%
+ \iffieldundef{pubstate}
+ {\usebibmacro{year+month+day}{date}}%
+ {\usebibmacro{pubstate}{}}}
% Thanks to David Fussner's biblatex-chicago for pointing me to this
% command by Philipp Lehman. Source:
@@ -2679,7 +2955,7 @@
\usebibmacro{author+title+etc}%
\newunit
\usebibmacro{websites}%
- \usebibmacro{issue+month+etc}{}%
+ \usebibmacro{issue+month+etc}{parens}%
\usebibmacro{doi+finentry+etc}}%
\DeclareBibliographyDriver{patent}{%
diff --git a/macros/latex/contrib/biblatex-contrib/windycity/windycity.cbx b/macros/latex/contrib/biblatex-contrib/windycity/windycity.cbx
index 155407ad63..28d29a3265 100644
--- a/macros/latex/contrib/biblatex-contrib/windycity/windycity.cbx
+++ b/macros/latex/contrib/biblatex-contrib/windycity/windycity.cbx
@@ -1,4 +1,4 @@
-% Last modified: Sat 04 Dec 2021 12:44:00 PM CST
+% Last modified: Wed 03 May 2023 06:54:38 PM CDT
% Permission is granted to copy, distribute and/or modify this
% software under the terms of the LaTeX Project Public License (LPPL),
@@ -11,7 +11,7 @@
% implied warranties of merchantability and fitness for a particular
% purpose.
-\ProvidesFile{windycity.cbx}[2021/12/04 Windy City citation style for
+\ProvidesFile{windycity.cbx}[2023/05/03 Windy City citation style for
biblatex]
\@ifpackagelater{biblatex}{2019/08/17}
{}
@@ -242,7 +242,7 @@
\newbibmacro*{parencite:new}{%
\iffieldundef{shorthand}
{\usebibmacro{parencite:auth+title}}%
- {\printfield{shorthand}}%
+ {\usebibmacro{test:format}{shorthand}{field}}%
\setunit{\addspace}% not '\setunit{\space}'
\usebibmacro{parencite:date}}%
@@ -289,9 +289,9 @@
{\usebibmacro{cite:short}}}
{\iftoggle{shortlinks}
{\printtext[bibhyperref]{%
- \printfield{shorthand}%
+ \usebibmacro{test:format}{shorthand}{field}%
\usebibmacro{cite:volume}}}
- {\printfield{shorthand}%
+ {\usebibmacro{test:format}{shorthand}{field}%
\usebibmacro{cite:volume}}}}
\newbibmacro*{test:loccit}{%
@@ -322,14 +322,14 @@
\ifnameundef{author}
{\bibcpstring{reviewnoauth}%
\space
- \usebibmacro{shorttitle+shortlinks}}%
+ \usebibmacro{shorttitle+crossref}{}}%
{\usebibmacro{author+bookauthor+etc}}%
\usebibmacro{cite:volume}}%
\newbibmacro*{cite:author+title+etc}{%
\usebibmacro{author+bookauthor+etc}%
\iftoggle{noauth}
- {\usebibmacro{shorttitle+shortlinks}}%
+ {\usebibmacro{shorttitle+crossref}{}}%
{}% needs '%'
\usebibmacro{cite:volume}}%
@@ -339,7 +339,7 @@
\ifentrytype{review}
{\usebibmacro{short:review}}%
{\usebibmacro{collection+author+etc}%
- \usebibmacro{shorttitle+shortlinks}%
+ \usebibmacro{shorttitle+crossref}{}%
\ifboolexpr{ togl {ibidpage}
and test \ifloccit
and not test \iffirstonpage}
@@ -360,14 +360,14 @@
\setunit{\space}%
\usebibmacro{shorttitle}{book}}%
{\ifnameundef{author}
- {\usebibmacro{shorttitle+shortlinks}}%
+ {\usebibmacro{shorttitle+crossref}{}}%
{\iffieldundef{title}
{\usebibmacro{author+bookauthor+etc}%
\bibstring{review}%
\setunit{\space}%
\usebibmacro{shorttitle}{book}}%
{\usebibmacro{author+bookauthor+etc}%
- \usebibmacro{shorttitle+shortlinks}}}}}
+ \usebibmacro{shorttitle+crossref}{}}}}}
\newbibmacro*{collection+author+etc}{%
\ifboolexpr{ test {\ifentrytype{unpublished}}
@@ -540,7 +540,7 @@
{\setunit{\addspace}%
\printtext[parens]{%
\bibstring{citedas}\space
- \printfield{shorthand}}}
+ \usebibmacro{test:format}{shorthand}{field}}}
{\setunit{\addspace}%
\printfield{shorthandintro}}}}
@@ -599,7 +599,7 @@
\usebibmacro{author+title+etc}%
\setunit*{\newunitpunct}% needs '*'
\usebibmacro{websites}%
- \usebibmacro{issue+month+etc}{}%
+ \usebibmacro{issue+month+etc}{parens}%
\newunit}%
\DeclareBibliographyDriver{cite:patent}{%
diff --git a/macros/latex/contrib/biblatex-contrib/windycity/windycity.dbx b/macros/latex/contrib/biblatex-contrib/windycity/windycity.dbx
index 165a90319c..a67ea7dfa9 100644
--- a/macros/latex/contrib/biblatex-contrib/windycity/windycity.dbx
+++ b/macros/latex/contrib/biblatex-contrib/windycity/windycity.dbx
@@ -1,7 +1,7 @@
-\ProvidesFile{windycity.dbx}[2021/12/04 Windy City data model file for biblatex]
+\ProvidesFile{windycity.dbx}[2025/05/03 Windy City data model file for biblatex]
\DeclareDatamodelFields[type=field,datatype=key]{%
- booktitlekey,
bookbooktitlekey,
+ booktitlekey,
titlekey,
translatortype,
translatoratype,
@@ -11,11 +11,11 @@
blogtitle,
blogtitleaddon,
bookauthortype,
- bookbooktitle,
bookbooksubtitle,
+ bookbooktitle,
bookbooktitleaddon,
- bookvolume,
bookbookvolume,
+ bookvolume,
bookyear,
collection,
editoraddon,
diff --git a/macros/latex/contrib/colorwav/README b/macros/latex/contrib/colorwav/README
index 1c6a28051c..138b59d0f5 100644
--- a/macros/latex/contrib/colorwav/README
+++ b/macros/latex/contrib/colorwav/README
@@ -20,11 +20,12 @@ License
-------
This package is released under the GNU Lesser General Public License. See
-http://www.gnu.org/licenses/licenses.html#LGPL for more details.
+https://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
+Any bugs may be reported to the author by sending an email to the
+address with the first part being "latex", a dash, then "inquiries",
+then an at sign, the next part is nsetzer, and finally it ends in dot com.
+
diff --git a/macros/latex/contrib/colorwav/colorwav.dtx b/macros/latex/contrib/colorwav/colorwav.dtx
index 1128b0a28e..6d1caa37c5 100644
--- a/macros/latex/contrib/colorwav/colorwav.dtx
+++ b/macros/latex/contrib/colorwav/colorwav.dtx
@@ -2,10 +2,12 @@
%
%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<package>\ProvidesPackage{colorwav}
-%<package> [2007/04/12 v1.0 specify wavelength for color]
+%<package> [2023/05/03 v1.0 specify wavelength for color]
%<package>\RequirePackage{ifthen}
%<package>\RequirePackage{fp}
%
+% Update on 2023/05/03 purely to clarify the license; no code changes.
+% This package is released under the GNU LGPL.
%
%<*driver>
\documentclass{ltxdoc}
@@ -530,4 +532,4 @@
%
%
% \Finale
-\endinput \ No newline at end of file
+\endinput
diff --git a/macros/latex/contrib/colorwav/colorwav.ins b/macros/latex/contrib/colorwav/colorwav.ins
index 4cce8df576..847f6b9b24 100644
--- a/macros/latex/contrib/colorwav/colorwav.ins
+++ b/macros/latex/contrib/colorwav/colorwav.ins
@@ -1,8 +1,8 @@
%%
-%% Copyright (C) 2007 by nsetzer
+%% Copyright (C) 2007-2023 by nsetzer
%%
%% This file may be distributed and/or modified under the
-%% conditions of the Limited General Product License
+%% conditions of the GNU Lesser General Public License.
%%
\input docstrip.tex
@@ -16,7 +16,7 @@
This is a generated file
This file may be distributed and/or modified under the
-conditions of the Limited General Product License
+conditions of the GNU Lesser General Public License.
\endpreamble
@@ -37,4 +37,4 @@ conditions of the Limited General Product License
\Msg{* *}
\Msg{****************************************************}
-\endbatchfile \ No newline at end of file
+\endbatchfile
diff --git a/macros/latex/contrib/cool/README b/macros/latex/contrib/cool/README
index d2b3cc6b7d..5ead37b059 100644
--- a/macros/latex/contrib/cool/README
+++ b/macros/latex/contrib/cool/README
@@ -32,12 +32,13 @@ by using MikTeX Options
License
-------
-This pacakge is released under the Lesser GNU General Public License. See
-http://www.gnu.org/licenses/licenses.html#LGPL for more details.
+This package is released under the GNU Lesser General Public License. See
+https://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
+Any bugs may be reported to the author by sending an email to the
+address with the first part being "latex", a dash, then "inquiries",
+then an at sign, the next part is nsetzer, and finally it ends in dot com.
+
diff --git a/macros/latex/contrib/cool/cool.dtx b/macros/latex/contrib/cool/cool.dtx
index 55094a69c1..ce15efab44 100644
--- a/macros/latex/contrib/cool/cool.dtx
+++ b/macros/latex/contrib/cool/cool.dtx
@@ -2,7 +2,7 @@
%
%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<package>\ProvidesPackage{cool}
-%<package> [2006/12/29 v1.35 COntent Oriented LaTeX]
+%<package> [2023/05/03 v1.35 COntent Oriented LaTeX]
%<package>\RequirePackage{ifthen}
%<package>\RequirePackage{coollist}
%<package>\RequirePackage{coolstr}
@@ -11,6 +11,8 @@
%<package>\RequirePackage{amssymb}
%<package>\RequirePackage{bbm}
%
+% Update on 2023/05/03 purely to clarify the license; no code changes.
+% This package is released under the GNU LGPL.
%
%<*driver>
\documentclass{ltxdoc}
diff --git a/macros/latex/contrib/cool/cool.ins b/macros/latex/contrib/cool/cool.ins
index cf0c9ee534..e1f99554b6 100644
--- a/macros/latex/contrib/cool/cool.ins
+++ b/macros/latex/contrib/cool/cool.ins
@@ -1,8 +1,8 @@
%%
-%% Copyright (C) 2005 by nsetzer
+%% Copyright (C) 2005-2023 by nsetzer
%%
%% This file may be distributed and/or modified under the
-%% conditions of the Lesser General Product License
+%% conditions of the GNU Lesser General Public License.
%%
\input docstrip.tex
@@ -16,7 +16,7 @@
This is a generated file
This file may be distributed and/or modified under the
-conditions of the Limited General Product License
+conditions of the GNU Lesser General Public License.
\endpreamble
@@ -37,4 +37,4 @@ conditions of the Limited General Product License
\Msg{* *}
\Msg{****************************************************}
-\endbatchfile \ No newline at end of file
+\endbatchfile
diff --git a/macros/latex/contrib/coollist/coollist.dtx b/macros/latex/contrib/coollist/coollist.dtx
index 9fa4ea70a8..7b611234a2 100644
--- a/macros/latex/contrib/coollist/coollist.dtx
+++ b/macros/latex/contrib/coollist/coollist.dtx
@@ -2,14 +2,14 @@
%
%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<package>\ProvidesPackage{coollist}
-%<package> [2022/06/09 v1.4 COntent Oriented LaTeX Lists]
+%<package> [2023/05/03 v1.4 COntent Oriented LaTeX Lists]
%<package>\RequirePackage{ifthen}
%<package>\RequirePackage{amsmath}
%<package>\RequirePackage{amssymb}
%<package>\RequirePackage{coolstr}
%<package>\RequirePackage{forloop}
%
-% Update on 2022/06/09 purely to clarify the license; no code changes.
+% Update on 2023/05/03 purely to clarify the license; no code changes.
% This package is released under the GNU LGPL.
%
%<*driver>
diff --git a/macros/latex/contrib/coollist/coollist.ins b/macros/latex/contrib/coollist/coollist.ins
index cede022fdb..48f12ae1d3 100644
--- a/macros/latex/contrib/coollist/coollist.ins
+++ b/macros/latex/contrib/coollist/coollist.ins
@@ -1,8 +1,8 @@
%%
-%% Copyright (C) 2005 by nsetzer
+%% Copyright (C) 2005-2023 by nsetzer
%%
%% This file may be distributed and/or modified under the
-%% conditions of the Limited General Product License
+%% conditions of the GNU Lesser General Public License.
%%
\input docstrip.tex
@@ -16,7 +16,7 @@
This is a generated file
This file may be distributed and/or modified under the
-conditions of the Limited General Product License
+conditions of the GNU Lesser General Public License.
\endpreamble
@@ -37,4 +37,4 @@ conditions of the Limited General Product License
\Msg{* *}
\Msg{****************************************************}
-\endbatchfile \ No newline at end of file
+\endbatchfile
diff --git a/macros/latex/contrib/coolstr/README b/macros/latex/contrib/coolstr/README
index 6c52e8a6a0..21615479fc 100644
--- a/macros/latex/contrib/coolstr/README
+++ b/macros/latex/contrib/coolstr/README
@@ -23,12 +23,13 @@ by using MikTeX Options
License
-------
-This pacakge is released under the GNU Lesser General Public License. See
-http://www.gnu.org/licenses/licenses.html#LGPL for more details.
+This package is released under the GNU Lesser General Public License. See
+https://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
+Any bugs may be reported to the author by sending an email to the
+address with the first part being "latex", a dash, then "inquiries",
+then an at sign, the next part is nsetzer, and finally it ends in dot com.
+
diff --git a/macros/latex/contrib/coolstr/coolstr.dtx b/macros/latex/contrib/coolstr/coolstr.dtx
index 7014f0d7f5..6c0513a813 100644
--- a/macros/latex/contrib/coolstr/coolstr.dtx
+++ b/macros/latex/contrib/coolstr/coolstr.dtx
@@ -2,11 +2,13 @@
%
%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<package>\ProvidesPackage{coolstr}
-%<package> [2009/09/09 v2.2 COntent Oriented LaTeX Strings]
+%<package> [2023/05/03 v2.2 COntent Oriented LaTeX Strings]
%<package>\RequirePackage{ifthen}
%<package>\RequirePackage{amsmath}
%<package>\RequirePackage{amssymb}
%
+% Update on 2023/05/03 purely to clarify the license; no code changes.
+% This package is released under the GNU LGPL.
%
%<*driver>
\documentclass{ltxdoc}
@@ -823,4 +825,4 @@
%
%
% \Finale
-\endinput \ No newline at end of file
+\endinput
diff --git a/macros/latex/contrib/coolstr/coolstr.ins b/macros/latex/contrib/coolstr/coolstr.ins
index 5ee160edfd..b4ff26524d 100644
--- a/macros/latex/contrib/coolstr/coolstr.ins
+++ b/macros/latex/contrib/coolstr/coolstr.ins
@@ -1,8 +1,8 @@
%%
-%% Copyright (C) 2005 by nsetzer
+%% Copyright (C) 2005-2023 by nsetzer
%%
%% This file may be distributed and/or modified under the
-%% conditions of the Limited General Product License
+%% conditions of the GNU Lesser General Public License.
%%
\input docstrip.tex
@@ -16,7 +16,7 @@
This is a generated file
This file may be distributed and/or modified under the
-conditions of the Limited General Product License
+conditions of the GNU Lesser General Public License.
\endpreamble
@@ -37,4 +37,4 @@ conditions of the Limited General Product License
\Msg{* *}
\Msg{****************************************************}
-\endbatchfile \ No newline at end of file
+\endbatchfile
diff --git a/macros/latex/contrib/dyntree/README b/macros/latex/contrib/dyntree/README
index 4e4b87814a..b1a99643a2 100644
--- a/macros/latex/contrib/dyntree/README
+++ b/macros/latex/contrib/dyntree/README
@@ -1,22 +1,26 @@
-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
+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 package is released under the GNU Lesser General Public License.
+See https://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 "latex", a dash, then "inquiries",
+then an at sign, the next part is nsetzer, and finally it ends in dot com.
+
diff --git a/macros/latex/contrib/dyntree/dyntree.dtx b/macros/latex/contrib/dyntree/dyntree.dtx
index c5e4997146..ef7ec35d81 100644
--- a/macros/latex/contrib/dyntree/dyntree.dtx
+++ b/macros/latex/contrib/dyntree/dyntree.dtx
@@ -1,1139 +1,1141 @@
-% \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
+% \iffalse
+%
+%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%<package>\ProvidesPackage{dyntree}
+%<package> [2023/05/03 v1 Dynkin Tree Typsetting]
+%<package>\RequirePackage{coollist}
+%<package>\RequirePackage{calc}
+%<package>\RequirePackage{epic}
+%<package>\RequirePackage{eepic}
+%<package>\RequirePackage{amsmath}
+%<package>\RequirePackage{amssymb}
+%
+% Update on 2023/05/03 purely to clarify the license; no code changes.
+% This package is released under the GNU LGPL.
+%
+%<*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
diff --git a/macros/latex/contrib/dyntree/dyntree.ins b/macros/latex/contrib/dyntree/dyntree.ins
index 14835853a3..04fa242da9 100644
--- a/macros/latex/contrib/dyntree/dyntree.ins
+++ b/macros/latex/contrib/dyntree/dyntree.ins
@@ -1,40 +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
+%%
+%% Copyright (C) 2006-2023 by nsetzer
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the GNU Lesser General Public 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 Public 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
diff --git a/macros/latex/contrib/forloop/README b/macros/latex/contrib/forloop/README
index 4e2566ce98..9a2398e234 100644
--- a/macros/latex/contrib/forloop/README
+++ b/macros/latex/contrib/forloop/README
@@ -1,30 +1,31 @@
-Description
------------
-
-The forloop package provides the command \forloop for the user.
-
-
-Installation
-------------
-
-To install this package, run forloop.ins through LaTeX. This will generate
-a file called forloop.sty. Put this file somewhere where LaTeX will find
-it---for instance localtexmf/tex/latex/forloop/ (note that you will need
-to create the folder forloop).
-
-If you are using MikTeX, you then need to refresh the file name database
-by using MikTeX Options
-
-
-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
+Description
+-----------
+
+The forloop package provides the command \forloop for the user.
+
+
+Installation
+------------
+
+To install this package, run forloop.ins through LaTeX. This will generate
+a file called forloop.sty. Put this file somewhere where LaTeX will find
+it---for instance localtexmf/tex/latex/forloop/ (note that you will need
+to create the folder forloop).
+
+If you are using MikTeX, you then need to refresh the file name database
+by using MikTeX Options
+
+
+License
+-------
+
+This package is released under the GNU Lesser General Public License. See
+https://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 "latex", a dash, then "inquiries",
+then an at sign, the next part is nsetzer, and finally it ends in dot com.
+
diff --git a/macros/latex/contrib/forloop/forloop.dtx b/macros/latex/contrib/forloop/forloop.dtx
index 45214ff9df..0da5a2c649 100644
--- a/macros/latex/contrib/forloop/forloop.dtx
+++ b/macros/latex/contrib/forloop/forloop.dtx
@@ -1,144 +1,146 @@
-% \iffalse
-%
-%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
-%<package>\ProvidesPackage{forloop}
-%<package> [2006/09/18 v3.0 For Loops for LaTeX]
-%<package>\RequirePackage{ifthen}
-%
-%
-%<*driver>
-\documentclass{ltxdoc}
-\usepackage{forloop}
-\EnableCrossrefs
-\CodelineIndex
-\RecordChanges
-\begin{document}
-\DocInput{forloop.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/09/17}{Initial Release}
-% \changes{v2.0}{2006/09/18}{Re-wrote forloop command after discovering that whiledo took too many resources}
-% \changes{v3.0}{2006/09/18}{total restructure of forloop command to make nested loops work}
-%
-% \GetFileInfo{forloop.sty}
-%
-% \DoNotIndex{\#,\$,\%,\&,\@,\\,\{,\},\^,\_,\~,\ ,\!,\(,\),\,}
-% \DoNotIndex{\@ne,\expandafter}
-% \DoNotIndex{\advance,\begingroup,\catcode,\closein}
-% \DoNotIndex{\newcommand,\renewcommand,\providecommand}
-% \DoNotIndex{\closeout,\day,\def,\edef,\gdef,\let,\empty,\endgroup}
-% \DoNotIndex{\newcounter,\providecounter,\addtocounter,\setcounter,\stepcounter,\value,\arabic}
-% \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{\mod,\bmod,\pmod,\pod,\operatorname}
-%
-% \title{The \textsf{forloop} package\thanks{This document
-% corresponds to \textsf{forloop}~\fileversion,
-% dated~\filedate.}}
-% \author{nsetzer}
-%
-% \maketitle
-%
-% \setcounter{IndexColumns}{2}
-% \StopEventually{\PrintChanges\PrintIndex}
-%
-% The \textsf{forloop} package defines two commands |\forloop| (preferred usage) and |\forLoop| (deprecated).
-%
-% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%\section{Implementation}
-% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% \begin{macro}{\forloop}
-% |\forloop|\oarg{step}\marg{counter}\marg{initial value}\marg{condition}\marg{code}
-%
-% |\newcounter{ct} \forloop{ct}{1}{\value{ct} < 10}{\arabic{ct} }|
-%
-% \newcounter{ct} \forloop{ct}{1}{\value{ct} < 10}{\arabic{ct} }
-% \begin{macrocode}
-\newcommand{\forloop}[5][1]%
-{%
-\setcounter{#2}{#3}%
-\ifthenelse{#4}%
- {%
- #5%
- \addtocounter{#2}{#1}%
- \forloop[#1]{#2}{\value{#2}}{#4}{#5}%
- }%
-% \end{macrocode}
-% Else
-% \begin{macrocode}
- {%
- }%
-}%
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\forLoop}
-% |\forLoop|\oarg{step}\marg{start}\marg{stop}\marg{counter name}\marg{code}
-% \begin{macrocode}
-\newcommand{\forLoop}[5][1]
-{%
-\setcounter{#4}{#2}%
-\ifthenelse{ \value{#4}<#3 }%
- {%
- #5%
- \addtocounter{#4}{#1}%
- \forLoop[#1]{\value{#4}}{#3}{#4}{#5}%
- }%
-% Else
- {%
- \ifthenelse{\value{#4}=#3}%
- {%
- #5%
- }%
- % Else
- {}%
- }%
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-% \Finale
-\endinput \ No newline at end of file
+% \iffalse
+%
+%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%<package>\ProvidesPackage{forloop}
+%<package> [2023/05/03 v3.0 For Loops for LaTeX]
+%<package>\RequirePackage{ifthen}
+%
+% Update on 2023/05/03 purely to clarify the license; no code changes.
+% This package is released under the GNU LGPL.
+%
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage{forloop}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+\DocInput{forloop.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/09/17}{Initial Release}
+% \changes{v2.0}{2006/09/18}{Re-wrote forloop command after discovering that whiledo took too many resources}
+% \changes{v3.0}{2006/09/18}{total restructure of forloop command to make nested loops work}
+%
+% \GetFileInfo{forloop.sty}
+%
+% \DoNotIndex{\#,\$,\%,\&,\@,\\,\{,\},\^,\_,\~,\ ,\!,\(,\),\,}
+% \DoNotIndex{\@ne,\expandafter}
+% \DoNotIndex{\advance,\begingroup,\catcode,\closein}
+% \DoNotIndex{\newcommand,\renewcommand,\providecommand}
+% \DoNotIndex{\closeout,\day,\def,\edef,\gdef,\let,\empty,\endgroup}
+% \DoNotIndex{\newcounter,\providecounter,\addtocounter,\setcounter,\stepcounter,\value,\arabic}
+% \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{\mod,\bmod,\pmod,\pod,\operatorname}
+%
+% \title{The \textsf{forloop} package\thanks{This document
+% corresponds to \textsf{forloop}~\fileversion,
+% dated~\filedate.}}
+% \author{nsetzer}
+%
+% \maketitle
+%
+% \setcounter{IndexColumns}{2}
+% \StopEventually{\PrintChanges\PrintIndex}
+%
+% The \textsf{forloop} package defines two commands |\forloop| (preferred usage) and |\forLoop| (deprecated).
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%\section{Implementation}
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\forloop}
+% |\forloop|\oarg{step}\marg{counter}\marg{initial value}\marg{condition}\marg{code}
+%
+% |\newcounter{ct} \forloop{ct}{1}{\value{ct} < 10}{\arabic{ct} }|
+%
+% \newcounter{ct} \forloop{ct}{1}{\value{ct} < 10}{\arabic{ct} }
+% \begin{macrocode}
+\newcommand{\forloop}[5][1]%
+{%
+\setcounter{#2}{#3}%
+\ifthenelse{#4}%
+ {%
+ #5%
+ \addtocounter{#2}{#1}%
+ \forloop[#1]{#2}{\value{#2}}{#4}{#5}%
+ }%
+% \end{macrocode}
+% Else
+% \begin{macrocode}
+ {%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\forLoop}
+% |\forLoop|\oarg{step}\marg{start}\marg{stop}\marg{counter name}\marg{code}
+% \begin{macrocode}
+\newcommand{\forLoop}[5][1]
+{%
+\setcounter{#4}{#2}%
+\ifthenelse{ \value{#4}<#3 }%
+ {%
+ #5%
+ \addtocounter{#4}{#1}%
+ \forLoop[#1]{\value{#4}}{#3}{#4}{#5}%
+ }%
+% Else
+ {%
+ \ifthenelse{\value{#4}=#3}%
+ {%
+ #5%
+ }%
+ % Else
+ {}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+% \Finale
+\endinput
diff --git a/macros/latex/contrib/forloop/forloop.ins b/macros/latex/contrib/forloop/forloop.ins
index dd7247cfd1..5453649c46 100644
--- a/macros/latex/contrib/forloop/forloop.ins
+++ b/macros/latex/contrib/forloop/forloop.ins
@@ -1,40 +1,40 @@
-%%
-%% Copyright (C) 2005 by nsetzer
-%%
-%% This file may be distributed and/or modified under the
-%% conditions of the Limited General Product License
-%%
-
-\input docstrip.tex
-
-\keepsilent
-
-\usedir{tex/latex/forloop}
-
-\preamble
-
-This is a generated file
-
-This file may be distributed and/or modified under the
-conditions of the Limited General Product License
-
-\endpreamble
-
-
-\generate{\file{forloop.sty}{\from{forloop.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{* forloop.sty *}
-\Msg{* *}
-\Msg{* To produce the documentation run the file *}
-\Msg{* forloop.dtx through LaTeX. *}
-\Msg{* *}
-\Msg{* *}
-\Msg{****************************************************}
-
-\endbatchfile \ No newline at end of file
+%%
+%% Copyright (C) 2005-2023 by nsetzer
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the GNU Lesser General Public License.
+%%
+
+\input docstrip.tex
+
+\keepsilent
+
+\usedir{tex/latex/forloop}
+
+\preamble
+
+This is a generated file
+
+This file may be distributed and/or modified under the
+conditions of the GNU Lesser General Public License.
+
+\endpreamble
+
+
+\generate{\file{forloop.sty}{\from{forloop.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{* forloop.sty *}
+\Msg{* *}
+\Msg{* To produce the documentation run the file *}
+\Msg{* forloop.dtx through LaTeX. *}
+\Msg{* *}
+\Msg{* *}
+\Msg{****************************************************}
+
+\endbatchfile
diff --git a/macros/latex/contrib/thmtools/doc/changes.txt b/macros/latex/contrib/thmtools/doc/changes.txt
index 97bbbfdcdc..a3b4fbb7dd 100644
--- a/macros/latex/contrib/thmtools/doc/changes.txt
+++ b/macros/latex/contrib/thmtools/doc/changes.txt
@@ -69,3 +69,10 @@
* thm-kv.dtx:
wrapped long code lines to avoid exceeding the page margin
+
+2023-05-04 Yukai Chou <muzimuzhi@gmail.com>
+
+ * thm-kv.dtx:
+ worked around an `ntheorem` issue that the theorem title cannot contain direct
+ brackets, which may come from the expansion of new `\MakeUppercase` or
+ `\MakeLowercase`, starting from LaTeX2e 2022-11-01. #36
diff --git a/macros/latex/contrib/thmtools/doc/thmtools-manual.pdf b/macros/latex/contrib/thmtools/doc/thmtools-manual.pdf
index 7e1bd87645..7a190cb47a 100644
--- a/macros/latex/contrib/thmtools/doc/thmtools-manual.pdf
+++ b/macros/latex/contrib/thmtools/doc/thmtools-manual.pdf
Binary files differ
diff --git a/macros/latex/contrib/thmtools/source/VERSION.tex b/macros/latex/contrib/thmtools/source/VERSION.tex
index b93d3d5934..104bcf8026 100644
--- a/macros/latex/contrib/thmtools/source/VERSION.tex
+++ b/macros/latex/contrib/thmtools/source/VERSION.tex
@@ -1 +1 @@
-\def\VERSION{2023/02/17 v0.75}
+\def\VERSION{2023/05/04 v0.76}
diff --git a/macros/latex/contrib/thmtools/source/thm-kv.dtx b/macros/latex/contrib/thmtools/source/thm-kv.dtx
index 9fb16c499f..f0fddfd30b 100644
--- a/macros/latex/contrib/thmtools/source/thm-kv.dtx
+++ b/macros/latex/contrib/thmtools/source/thm-kv.dtx
@@ -23,15 +23,15 @@
\DeclareOption{lowercase}{%
\PackageInfo{thm-kv}{Theorem names will be lowercased}%
- \global\let\thmt@modifycase\MakeLowercase}
+ \global\def\thmt@modifycase{\protect\MakeLowercase}}
\DeclareOption{uppercase}{%
\PackageInfo{thm-kv}{Theorem names will be uppercased}%
- \global\let\thmt@modifycase\MakeUppercase}
+ \global\def\thmt@modifycase{\protect\MakeUppercase}}
\DeclareOption{anycase}{%
\PackageInfo{thm-kv}{Theorem names will be unchanged}%
- \global\let\thmt@modifycase\@empty}
+ \global\def\thmt@modifycase{}}
\ExecuteOptions{uppercase}
\ProcessOptions\relax