summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/youngtab
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-01-11 23:59:35 +0000
committerKarl Berry <karl@freefriends.org>2006-01-11 23:59:35 +0000
commit03bbdca8223b2d2590f34f46e6ea18bc4cbbf0bc (patch)
treed48b157656115ae20f33f706d7f058a1d3352f33 /Master/texmf-dist/source/latex/youngtab
parent85708bcce1bdcb647385d9c1af2fa0b3ed746e6d (diff)
trunk/Master/texmf-dist/source/latex/youngtab
git-svn-id: svn://tug.org/texlive/trunk@602 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/youngtab')
-rw-r--r--Master/texmf-dist/source/latex/youngtab/README94
-rw-r--r--Master/texmf-dist/source/latex/youngtab/makeydoc59
-rw-r--r--Master/texmf-dist/source/latex/youngtab/makeydoc.bat45
-rw-r--r--Master/texmf-dist/source/latex/youngtab/youngtab.dtx842
-rw-r--r--Master/texmf-dist/source/latex/youngtab/youngtab.el42
-rw-r--r--Master/texmf-dist/source/latex/youngtab/youngtab.ins36
-rw-r--r--Master/texmf-dist/source/latex/youngtab/youngtab.tex146
7 files changed, 1264 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/youngtab/README b/Master/texmf-dist/source/latex/youngtab/README
new file mode 100644
index 00000000000..5facde72a07
--- /dev/null
+++ b/Master/texmf-dist/source/latex/youngtab/README
@@ -0,0 +1,94 @@
+YOUNGTAB-Package
+================
+-----------------------------------------------------------------------
+Authors:
+-----------------------------------------------------------------------
+
+Volker B"orchers (email: boercher@physik.uni-bremen.de)
+and Stefan Gieseke (email: gieseke@physik.uni-bremen.de)
+
+-----------------------------------------------------------------------
+Legal stuff:
+-----------------------------------------------------------------------
+Copyright (C) 1996,98,99 Volker B"orchers and Stefan Gieseke,
+This program can be redistributed and/or modified under the terms
+of the LaTeX Project Public License Distributed from CTAN
+archives in directory macros/latex/base/lppl.txt; either
+version 1 of the License, or any later version.
+
+-----------------------------------------------------------------------
+FILES:
+-----------------------------------------------------------------------
+
+README
+---------------- the file you're reading now
+
+youngtab.dtx
+---------------- a documentated version of the package. From it you can
+generate both a documentation and the .sty file without most comments
+using the docstrip utility.
+
+youngtab.ins
+---------------- run TeX on it to generate the youngtab.sty in your
+current working directory (from the .dtx file)
+
+makeydoc
+---------------- this (unix-) script generates youngtab.dvi, the
+documentation for the package.
+
+makeydoc.bat
+---------------- same as makeydoc but for MSDOS (may need some editing).
+
+gind.ist
+---------------- You need it to generate the index for the
+documentation. (gind.ist is a official part of doc/docstrip
+package. Just in the case this is not installed...)
+
+youngtab.tex
+---------------- For thoose who don't use LaTeX but TeX.
+
+youngtab.el
+---------------- Only for thoose who use Emacs in connection with
+AUC-TeX, the best TeX-shell i can imagine.. Makes life with
+Young-Tableaux even easier (autocompletion, syntax help).
+
+
+-----------------------------------------------------------------------
+INSTALL:
+-----------------------------------------------------------------------
+1) `tex youngtab.ins' (alternatively: `latex youngtab.ins')
+2) `makeydoc'
+ * if you don't want any macrocode listings, uncomment the line
+ containing ``\OnlyDescription'' (remove the `#')
+3) put `youngtab.sty' to a path where LaTeX can find it.
+
+-----------------------------------------------------------------------
+For TeX-users:
+-----------------------------------------------------------------------
+follow the instructions in the documentation. (You must have
+LaTeX2e to produce a .dvi file from youngtab.dtx -- Try to read the
+.dtx file instead if you don't have!)
+However there is a file already prepared for use with TeX:
+`youngtab.tex' - try this and install in a directory where TeX will
+find it.
+
+-----------------------------------------------------------------------
+For AUC-TeX-users:
+-----------------------------------------------------------------------
+. to install it once and for all, copy `youngtab.el' to the AUC-TeX
+style-directory, e.g. /usr/lib/emacs/site-lisp/auctex/style/.
+. to install it locally: do `mkdir style; cp youngtab.el style' in the
+directory where your .tex files, using youngtab, reside (or in each if
+you have more).
+. Provides autocompletion and syntax checks for the switches and
+dimensions "Y.*" and \young and \yng if you type `C-c RET' in emacs.
+
+-----------------------------------------------------------------------
+Date:
+-----------------------------------------------------------------------
+05/05/98
+
+-----------------------------------------------------------------------
+Version:
+-----------------------------------------------------------------------
+1.1
diff --git a/Master/texmf-dist/source/latex/youngtab/makeydoc b/Master/texmf-dist/source/latex/youngtab/makeydoc
new file mode 100644
index 00000000000..d0fda75af83
--- /dev/null
+++ b/Master/texmf-dist/source/latex/youngtab/makeydoc
@@ -0,0 +1,59 @@
+#!/bin/sh
+#
+# Everything after a `#' is ignored (in this shell script)
+#
+# remove the string `> /dev/null' if you want more log-output
+# remove the line containing `batchmode' if you want even more
+# log-information while running LaTeX
+#
+#----------------- create a `ltxdoc.cfg': --------------------------
+
+# Put here a list of options to pass to the class:
+OPT=a4paper
+
+echo "Generating configuration file ltxdoc.cfg for youngtab.dtx"
+
+# Write the file in one pass:
+cat > ltxdoc.cfg <<EOF
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% ltxdoc.cfg for youngtab.dtx, generated by makeydoc %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\PassOptionsToClass{$OPT}{article}
+\batchmode
+
+%% Do not uncomment the next 2 lines
+%\AtBeginDocument{\RecordChanges}
+%\AtEndDocument{\PrintChanges}
+
+%% The next 3 lines produce full indexes and change logs
+%% - you may not want those (commented out by default).
+\AtBeginDocument{\CodelineIndex\EnableCrossrefs}
+\AtEndDocument{\PrintIndex}
+\AtEndDocument{\addcontentsline{toc}{section}{Index}}
+
+%% If you do not want any code listings, just documentation, then instead
+%% of the lines above, uncomment the following:
+%\AtBeginDocument{\OnlyDescription}
+EOF
+#---------- latex the documentation using `ltxdoc.cfg': --------------
+
+ThisDoc=youngtab.dtx
+Base=youngtab
+
+echo;echo "1st latex $ThisDoc"
+if (latex $ThisDoc > /dev/null)
+then
+ echo;echo "2nd latex $ThisDoc"
+ latex $ThisDoc > /dev/null
+
+ echo;echo "makeindex -s gind.ist $Base.idx"
+ makeindex -s gind.ist $Base.idx
+ echo;echo "3rd latex $ThisDoc"
+ latex $ThisDoc > /dev/null
+else
+ echo;cat <<EOF
+ !!! LaTeX ERROR: $ThisDoc. (See $Base.log.)
+ Perhaps a new version of youngtab.sty is missing?
+ (Then, generate it by "tex youngtab.ins")
+EOF
+fi
diff --git a/Master/texmf-dist/source/latex/youngtab/makeydoc.bat b/Master/texmf-dist/source/latex/youngtab/makeydoc.bat
new file mode 100644
index 00000000000..da46a730a8f
--- /dev/null
+++ b/Master/texmf-dist/source/latex/youngtab/makeydoc.bat
@@ -0,0 +1,45 @@
+@echo off
+rem MAKEYDOC.BAT (FOR MSDOS)
+
+rem Everything after a `rem' is ignored
+
+
+rem ----------------- create a `ltxdoc.cfg': --------------------------
+
+rem Edit the next line for options to pass to the class:
+echo \PassOptionsToClass{a4paper}{article} > ltxdoc.cfg
+echo \batchmode >> ltxdoc.cfg
+
+rem The next lines produce full indexes and change logs
+rem you may not want those:
+
+rem echo \AtBeginDocument{\RecordChanges} >> ltxdoc.cfg
+rem echo \AtEndDocument{\PrintChanges} >> ltxdoc.cfg
+echo \AtBeginDocument{\CodelineIndex\EnableCrossrefs} >> ltxdoc.cfg
+echo \AtEndDocument{\PrintIndex} >> ltxdoc.cfg
+echo \AtEndDocument{\addcontentsline{toc}{section}{Index}} >> ltxdoc.cfg
+
+rem If you do not want any code listings, just documentation, then instead
+rem of the lines above, uncomment the following:
+
+rem echo \AtBeginDocument{\OnlyDescription} >> ltxdoc.cfg
+
+rem ---------- latex the documentation using `ltxdoc.cfg': --------------
+
+echo 1st latex youngtab.dtx
+latex youngtab.dtx
+
+echo 2nd latex youngtab.dtx
+latex youngtab.dtx
+
+echo If you don't have Makeindex, exit now!
+echo makeindx -s gind.ist youngtab.idx
+makeindx -s gind.ist youngtab.idx
+rem or: echo makeidx -s gind.ist youngtab.idx
+rem or: makeidx -s gind.ist youngtab.idx
+
+echo 3rd latex youngtab.dtx
+latex youngtab.dtx
+
+echo +++++++++++++ all done! ++++++++++++
+
diff --git a/Master/texmf-dist/source/latex/youngtab/youngtab.dtx b/Master/texmf-dist/source/latex/youngtab/youngtab.dtx
new file mode 100644
index 00000000000..8db18c88c68
--- /dev/null
+++ b/Master/texmf-dist/source/latex/youngtab/youngtab.dtx
@@ -0,0 +1,842 @@
+% \iffalse
+%% File: youngtab.dtx
+%% Copyright (C) 1996,98,99 Volker B"orchers and Stefan Gieseke,
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN
+%% archives in directory macros/latex/base/lppl.txt; either
+%% version 1 of the License, or any later version.
+%
+%<package>\NeedsTeXFormat{LaTeX2e}
+%<package>\ProvidesPackage{youngtab}
+%<package>[1999/05/19 v1.1; Macros for Young-Tableaux]
+%
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage[enableskew]{youngtab}
+\GetFileInfo{youngtab.sty}
+\begin{document}
+\title{The \textsf{youngtab} package\thanks{This file has version number
+ \fileversion, dated \filedate.}}
+\author{Volker B\"orchers\thanks{email: boercher@physik.uni-bremen.de}
+ \\Stefan Gieseke\\
+ Universit\"at Bremen}
+\date{\filedate}
+ \maketitle
+ \DocInput{youngtab.dtx}
+\end{document}
+%</driver>
+% \fi
+%\iffalse
+%
+%% Package `youngtab' to use with TeX, LaTeX209 or LaTeX2e
+%% (You will need LaTeX2e to extract the documentation and a STY-file
+%% without comments from the .dtx file)
+%
+% Version: Date: Changes:
+%
+% 1.0 1996/03/25 First working version. (After much
+% frustrating tries to teach TeX accept
+% indefinite count of arguments - lerning TeX
+% in the meanwhile)
+% 1.1 1998/05/05 Added possibility to typeset ``skew''
+% tableaux (package option `enableskew')
+% suggested by Andrew Mathas
+% <mathas@maths.usyd.edu.au>. Added AUC-TeX
+% support for the youngtab macros (youngtab.el).
+% 1999/05/19 Only change: added licence informations
+%\fi
+%
+%
+% \DoNotIndex{\advance,\box,\CurrentOption,\DeclareOption,\def}
+% \DoNotIndex{\else,\fi,\hbox,\hfil,\hrule,\hspace,\ht,\ifcat}
+% \DoNotIndex{\ifmmode,\ifnum,\ifvoid,\loop,\MessageBreak,\newcount}
+% \DoNotIndex{\newdimen,\newif,\newskip,\offinterlineskip}
+% \DoNotIndex{\PackageWarning,\ProcessOptions,\relax,\repeat,\setbox}
+% \DoNotIndex{\space,\typeout,\unskip,\vbox,\vcenter,\vrule,\vspace}
+%
+% \CheckSum{322}
+%
+% \newcommand{\yt}{Young-Tableau}
+% \newcommand{\yts}{Young-Tableaux}
+% \newcommand{\newfeature}[1]{\leavevmode%
+% \marginpar{\small\sffamily\begin{center}
+% New feature\\#1\end{center}}}
+%
+% \begin{abstract}
+% This package provides two macros for typesetting
+% \yts\ with \TeX\ or \LaTeX. We use 2 macros, the first for empty
+% boxes (|\yng|), and the second for labelled boxes (|\young|). The
+% syntax of the macros is simple to avoid spelling-mistakes.
+% \end{abstract}
+%
+% \tableofcontents
+%
+% \section{Introduction}
+% The \yt-formalism is a strong algrebraic tool in group theory. Of course
+% we will deal here only with the problems of \emph{typesetting} \yts.
+% They are mathematical objects, so they usually occur in mathematical
+% environments. On the surface \yts\ consist of boxes like this:
+% \yng(1) --- or optionally labelled (usually with letters): \young(a).
+%
+% There is already one \LaTeX-package for typesetting \yts, the
+% \texttt{young.sty} by J\"org Knappen (based on |young.tex| by P. E. S.
+% Wormer). It provides a \texttt{Young}-environment with a syntax
+% similar to the \texttt{tabular}-environment.
+%
+% An Example for the usage of \texttt{Young}:
+%
+% \begin{minipage}[t]{5cm}
+% \begin{verbatim}
+% \begin{Young}
+% $a$&&\cr
+% &\cr
+% \cr
+% \end{Young}
+% \end{verbatim}
+% \end{minipage}
+% \parbox[t]{4cm}{ \young(a\hfil\hfil,\hfil\hfil,\hfil) }
+%
+% \iffalse
+% COMMENT: Maybe that's not the correct way to pretend the use of the
+% |Young|-environment, but otherwise we had to use |young.sty| only
+% for this tableau!
+% \fi
+%
+% This way of implementing \yts\ has one big advantage: It can deal with
+% an indefinite number of rows and columns (of course this is needed!).
+% A second argument for using a \texttt{tabular}-like environment might
+% be it's simple encoding.
+%
+% Nevertheless we wanted a simpler user-interface, for the use of |&| and
+% |\cr| is usually a very good source of typing mistakes (e.g. you
+% have to type \emph{three} |&|'s to get \emph{four} boxes in one
+% row). In addition the \TeX-code for mathematical relations with more
+% than two or three \yts\ becomes unreadable.
+%
+% The cure would be of course a \emph{macro} with a compact, intuitive
+% syntax. But there is the above mentioned problem: \TeX\ is not made to
+% handle an indefinite number of arguments. For \yts\ composed of empty
+% boxes we would like to have a macro with one argument for each row
+% (counting the number of boxes per row) for example this way:
+% |\thisdoesnotwork{5}{3}{1}|\dots. For \yts\ composed of labelled
+% boxes the problem is even worse since we have one letter
+% \emph{per box}!
+%
+% So we had to hide the fact of having an indefinite number of arguments
+% from \TeX. The macros in this package have --- as \TeX\ sees it ---
+% only one argument; this is parsed for the necessary information
+% by the macros themselves. Whereas, for the user, the number of rows and
+% number of boxes per row are plain to see.
+%
+% \section{Using the youngtab package}
+% Invoke the |youngtab| package by
+% requesting it in the preamble:\footnote{Of course this does not work
+% if you use the |youngtab|-package with \TeX\ instead of \LaTeX. For
+% compatibility-questions see section \ref{compat}}
+%
+% |\usepackage[...]{youngtab}|
+%
+% The package has four options (increasing)\DescribeMacro{Options}.
+% The \emph{first option}, |vcentermath|\DescribeMacro{vcentermath},
+% \emph{turns on} the vertical centering of the tableaux in math mode. The
+% \emph{second option}, |noautoscale|\DescribeMacro{noautoscale}, \emph{turns
+% off} the automatic scaling of the boxes according to the actual font.
+% The \emph{third one}, |stdtext|\DescribeMacro{stdtext}, switches
+% to text mode in the inside of labelled boxes. Choosing one of this
+% options does not mean that you have, for example, to stick to
+% |noautoscale| till the end of your days. You may change this
+% settings as often as you like.\\
+% The \emph{fourth option},
+% |enableskew|\DescribeMacro{enableskew}\newfeature{1998/05/05}
+% enables typesetting of skew \yts\ (tableaux that are not
+% left-aligned). This option is different from the other in the way
+% that there is no command to enable this feature after the package is
+% loaded.
+%
+% \yts\ usually have more than one row, so the vertical alignment is a
+% problem\DescribeMacro{vcentermath}. You can turn on vertical centering
+% (only) in mathmode either by choosing the option |vcentermath| with
+% |\usepackage| or later with the command
+% |\Yvcentermath|\meta{num}. Say |\Yvcentermath1| if you want
+% vertical centering and |\Yvcentermath0| to switch it off. Without
+% vcentering the tableaux are standing on the baseline.
+%
+% Since the boxes are quadratic (if you do not want want this,
+% complain!), there is only one dimension to determine: the length and
+% height of the boxes. Usually the macros determine this for
+% themselves,\footnote{So that a \yt\ e.g.\ \texttt{\bslash young(ab)}
+% \young(ab) appears smaller in a footnote than in normal text!} but
+% you can change this behavior by calling the macro
+% |\Yautoscale|\meta{num}\DescribeMacro{\Yautoscale}. Call it with
+% an argument of |1| if you want autoscaling after this, or with
+% the argument |0| if you want to adjust the box dimensions
+% yourself.
+%
+% \DescribeMacro{\Yboxdim}If you switch off autoscaling and
+% want to change the box dimensions, you have to call the macro
+% |\Yboxdim|\meta{dim} with a usual \TeX--dimension.
+% The argument has to be appended to the macro: |\Yboxdim13pt|. This
+% dimension is the \emph{total} height and width of the boxes --
+% \emph{including the lines.} (For small linethicknesses this
+% makes of course only a small difference.) Note that the use of |\Yboxdim|
+% \emph{implies} |noautoscale|! So to switch from |autoscale| to
+% |noautoscale| one call to |\Yboxdim| is sufficient.
+%
+% There is only one more parameter which determines the appearance of
+% the \yt\DescribeMacro{\Ylinethick}: the lines' thickness. This is
+% set by |\Ylinethick|\meta{dim}. (The default is $0.3pt$).
+%
+% You may add space between a tableau and surrounding stuff by
+% invoking the macro
+% |\Yinterspace|\meta{skip}\DescribeMacro{\Yinterspace}. The advantage
+% of using a \emph{skip} is that this helps \TeX\ to avoid |Over|-
+% or |Underful \hbox|es. The default value is |0ex plus 0.3ex|\,.
+% (Better take |ex| or |em| for the tableaux are scaleable.)
+%
+% \subsection{Empty boxes: \texttt{\protect\bslash yng}}
+% \DescribeMacro\yng
+% The most used variant of \yts\ are those consisting of empty boxes.
+% For the tableau \yng(2,1) you have to type
+% |\yng(2,1)|. If you want it to appear smaller, change the
+% fontsize: |{\tiny\yng(2,1)}| gives \Yautoscale1
+% {\tiny\yng(2,1)}; but remember, this only works if |autoscale|
+% is turned on (default). (If you are in |noautoscale|-mode, restore
+% autoscaling with |\Yautoscale1|.)
+%
+% Some notes on the usage of |\yng| and |\young| in math or
+% text mode\DescribeMacro{math or text?}: You can generate \yts\ in both
+% modes, but differences arise from \emph{vertical centering}.
+% This only works in math mode (if you have chosen it with
+% |\Yvcentermath1|) or |usepackage| option |vcentermath|.
+%
+% The difference is to be seen here:
+% {\tiny\Yvcentermath1 $\yng(1,1)\oplus\yng(1)=$
+% \yng(2,1)}$\oplus$ \dots, which has been generated by
+% \begin{verbatim}
+% {\tiny\Yvcentermath1 $\yng(1,1)\oplus\yng(1)=$
+% \yng(2,1)}$\oplus$ \dots
+% \end{verbatim}
+%
+% Here the tableau in math are centered with respect to the axis of
+% the formula while the one in text mode isn't. Note the
+% dimensions of the tableau on the one hand and the |\oplus| on the
+% other: The dimensions of the \yts\ are determined by the actual
+% text's fontsize (while autoscaling!)\DescribeMacro{sizing}. Try to
+% understand what happens in the following example. --- Do you
+% understand the sizes of the math symbols? (Compare to the example
+% above and have look up the \texttt{.log} file. Don't let \TeX\ fool
+% you by messages about invalid |\normalsize|!)
+% \begin{verbatim}
+% {\tiny\begin{equation}
+% \Yvcentermath1
+% \yng(1,1)\oplus\yng(1)= \Yboxdim{12pt}
+% \yng(2,1)\normalsize\oplus\dots
+% \end{equation}}
+% \end{verbatim}
+% {\tiny\begin{equation}
+% \Yvcentermath1 \yng(1,1)\oplus\yng(1)=
+% \Yboxdim{12pt}\yng(2,1)\normalsize\oplus\dots
+% \end{equation}}
+% \Yautoscale1
+%
+% \subsection{Labelled boxes: \texttt{\protect\bslash young}}
+% \DescribeMacro\young
+% While the sizing of the boxes and the behavior in math/text mode are
+% exactly the same as with |\yng|, we have of course a different syntax:\\
+% |{\scriptsize\young(aa,b)}| results in
+% {\scriptsize\young(aa,b)}. Each line of the tableau is represented
+% by a row of single letters (exactly: ``tokens''). The lines
+% are separated by commas.
+%
+% As you see from the example above the letters |a| and |b| come out in
+% math italics. This does \emph{not} depend on the \yt\ appearing in
+% math or text surround. \emph{The label within a tableau-box is math -- no
+% matter if the tableau is used in text or math mode!} But this is
+% only the default setting. Use either the option |stdtext| to the
+% |\usepackage| command to switch to roman letters or use the macro
+% |\Ystdtext| with an argument of |1|: |\Ystdtext1|. To switch to math
+% again use |\Ystdtext0|.
+%
+% What to do if you don't want to use single letters, but symbols or
+% perhaps some white boxes? There are no limits but it's a bit
+% complicated. The |\young| algorithm for parsing his argument depends
+% strongly on that every label of \emph{one} box,
+% \begin{enumerate}
+% \item consists of only \emph{one token}. Assume first you had
+% \emph{not} said |\Ystdtext1|. To get a single roman `a' then you
+% must not say |\mbox{a}|, because this makes \emph{four} tokens (1st
+% is |\mbox|, 2nd is |{|, 3rd is |a|, 4th is |}|). The cure is
+% simply making one token out of |\mbox{a}| by saying
+% |\newcommand{\rma}{\mbox{a}}| and everything is OK:\footnote{Note
+% that the space after \texttt{\bslash rma} belongs to the token itself.}
+% \newcommand{\rma}{\mbox{a}} |\young(\rma lright\bullet)| = \young(\rma
+% lright\bullet)\\
+% After |\Ystdtext1| it is an error to say |$\bullet$|, since the
+% two math delimiters are single tokens. Do it as described above:
+% \Ystdtext1\\ |\newcommand{\ybullet}{$\bullet$}|\\ and
+% everything is OK: \newcommand{\ybullet}{$\bullet$}
+% |\young(\ybullet works)| = \young(\ybullet works)\,.\Ystdtext0\\
+% To use a symbol or special letter in both modes (|\Ystdtext 0 or 1|)
+% put it in a box (here with an extra tuning):\\
+% |\renewcommand{\ybullet}{\raise1.5pt \hbox{$\bullet$}}|
+% \item Some characters and macros are not allowed: commas (guess why)
+% and the other punctuation marks, spaces, the macro |\space| and also
+% skips like |\,| and |\:|.\footnote{Write to us if you find more.} If
+% you want to have single empty boxes use (\TeX\ primitive) |\hfil|
+% (For understanding this limitations see also |\y@lastargtest| and
+% |\y@nelettertest| in macro section).
+% \end{enumerate}
+%
+%
+% \subsubsection{Skew \yts\ with \texttt{\protect\bslash young}}
+% \newfeature{1998/05/05}
+% As far as described above, the rows of a \yt\ are left-aligned. Since
+% some authors also assigned a meaning to \emph{``skew''} tableaux, this
+% package also supports such along with |\young|. If you want to typeset
+% skew tableaux, you have to enable this via the package option
+% |enableskew|\DescribeMacro{enableskew}. The default behavior of this
+% package is to \emph{dis\/}able skew boxes in order to save \TeX's
+% time, however, it's save to include this option even if you do not use
+% it.
+%
+% Here is an example:
+% |\young(abcd,:bc,::c)|: \raisebox{-1.9\baselineskip}{\young(abcd,:bc,::c)}
+%
+% As you see, the Option |enableskew| makes the colon a special
+% character (only inside the argument of |\young|). \footnote{If you
+% want a colon to appear as it is (do you??), you have to do the same
+% trick as above with an unpleasant extra: define a macro for the
+% colon using the \TeX-primitive \texttt{\bslash char} like this:
+% \texttt{\bslash newcommand{\bslash mycolon}{\bslash char58}}.} In
+% fact all other than the leading colons in a row will simply be
+% ignored, while the first will move the row to the right.
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \Yboxdim.4ex
+% \raisebox{-1pt}{\young(:\hfil,\hfil,\hfil,\hfil,\hfil,:\hfil)}
+% This is a\,
+% \young(\hfil,\hfil,\hfil,\hfil,\hfil\hfil\hfil)
+% \young(\hfil,\hfil,\hfil,\hfil,\hfil)
+% \young(\hfil\hfil\hfil,:\hfil,:\hfil,:\hfil,:\hfil)
+% \young(\hfil\hfil\hfil,:\hfil,:\hfil,:\hfil,:\hfil)
+% \young(\hfil,\hfil,\hfil,\hfil,\hfil\hfil\hfil)
+% \young(\hfil\hfil\hfil,\hfil,\hfil\hfil,\hfil,\hfil\hfil\hfil)
+% \hspace{.7ex}
+% \young(\hfil\hfil\hfil,:\hfil,:\hfil,:\hfil,:\hfil)
+% \young(\hfil\hfil\hfil,\hfil,\hfil\hfil,\hfil,\hfil\hfil\hfil)
+% \young(:\hfil\hfil\hfil,\hfil,:\hfil\hfil,:::\hfil,\hfil\hfil\hfil)
+% \young(\hfil\hfil\hfil,:\hfil,:\hfil,:\hfil,:\hfil)
+% of skew tableaux.
+% \raisebox{-1pt}{\young(\hfil,:\hfil,:\hfil,:\hfil,:\hfil,\hfil)}
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \Yautoscale1
+%
+%
+% \subsection{The \texttt{youngtab} package and \TeX}\label{compat}
+% \DescribeMacro{Compatibility}Because we do not use \PlainTeX, the
+% compatibility of this package and \TeX\ is not sufficiently tested.
+% However there are some changes necessary in |youngtab.sty| (see file
+% \texttt{youngtab.tex}, part of the distribution):
+% \begin{itemize}
+% \item The macros themselves only use two \LaTeX-commands,
+% |\vspace{|\meta{dim}|}| and |\hspace{|\meta{dim}|}|. One has to
+% replace them with `|\vskip |\meta{dim}' resp.\ `|\hskip|
+% \meta{dim}'\,. (The braces also have to get removed) The
+% \LaTeX-counterparts may be better but no problems should arise
+% from this replacement (we found none).
+% \item One has to remove all lines containing \LaTeXe-commands in the
+% preamble of the |.sty| file, e.g.\ comment out every line that
+% contains the following commands: |\DeclareOption|,
+% |\ProcessOptions|, |\NeedsTeXFormat| and |\ProvidesPackage|.
+% \item Since \TeX-input files must not contain a |@|,
+% |\catcode`\@11\relax| has to be added to the begin of the |.sty| file to
+% make |@| a |letter| and |\catcode`\@12\relax| at the end right
+% before the |\endinput|, to make it |other| again afterwards.
+% \item \textbf{Skew:}\hspace{1em} \TeX\ knows nothing about
+% style-options, we have to find a way to enable skew
+% \yts. (|enableskew| is the only package option that can \emph{not}
+% be accessed by a macro \emph{after loading} the package since
+% almost all according actions will be done at loading time).\\
+% Therefore, we will check if a macro |\enableskew| is defined at loading
+% time:\\[.3ex]
+% | \expandafter\ifx\csname enableskew\endcsname\relax|\\
+% | \y@enable@skewfalse \else \y@enable@skewtrue\fi|\\[.3ex]
+% (excerpt from |youngtab.tex|) Then this will enable printing of
+% skew tableaux: \hfil|\def\enableskew{1} \input youngtab|
+% \item The autoscaling doesn't work as nice as with \LaTeX\ since if
+% you lower the text's fontsize (which determines the boxsize), you
+% have to lower also the math fontsize. Otherwise the letters in
+% labelled boxes (math!) are too big for the box.
+% \end{itemize}
+%
+% \subsection{To do}
+% We have a \textbf{wish list}, things we think the package should be
+% capable of:
+% \begin{itemize}
+% \item A vertical alignment, in the way that the \emph{top}line of the
+% \yts\ and the mathsymbols are on the same height (perhaps using
+% |\vtop|?).
+% \item The macros should take notice of math fontsize changes e.g.\ with
+% \texttt{\bslash dis\-play\-style}. (This puts a focus on the autoscale
+% mechanism -- see |\y@setdim| in the macro section.)
+% \end{itemize}
+% \textbf{If You} have any problems, suggestions, critical remarks -- or
+% whatever according this package write to Volker B\"orchers
+% (email-adress see title).\\
+% {\tiny\yng(61)}
+%
+% \StopEventually{}
+%
+% \section{The Macros}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \begin{macro}{\Yautoscale}
+% \begin{macro}{\ify@autoscale}
+% If autoscaling is active, the size of the boxes (|\y@boxdim|) is
+% determined by the package itselve. The default setting is to
+% allow autoscale. |\Yautoscale|\meta{num} serves as the user
+% interface.\footnote{I know - it's against the \LaTeXe naming
+% conventions, but it is nicer\dots} We made an option to |\usepackage|
+% out of that (see below).
+% \begin{macrocode}
+\newif\ify@autoscale \y@autoscaletrue \def\Yautoscale#1{\ifnum #1=0
+ \y@autoscalefalse\else\y@autoscaletrue\fi}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\Yboxdim}
+% \begin{macro}{\y@b@xdim}
+% \begin{macro}{\y@boxdim}
+% The parameters determining the size of the single boxes and the macro
+% to set them. |\Yboxdim|\meta{dim} sets |\y@boxdim| (only used, when
+% autoscaling is turned off) and sets |y@autoscale| to
+% |false|. |\y@boxdim| is the \emph{total} size of the box (including
+% the delimiting lines) while |\y@b@xdim| (to be set in |\y@setdim|) is
+% the height and width of the inner of the box.
+% \begin{macrocode}
+\newdimen\y@b@xdim
+\newdimen\y@boxdim \y@boxdim=13pt
+\def\Yboxdim#1{\y@autoscalefalse\y@boxdim=#1}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\Ylinethick}
+% \begin{macro}{\y@linethick}
+% The line thickness and |\Ylinethick|\meta{dim} as user interface to it.
+% \begin{macrocode}
+\newdimen\y@linethick \y@linethick=.3pt
+\def\Ylinethick#1{\y@linethick=#1}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\Yinterspace}
+% \begin{macro}{\y@interspace}
+% To give the \yts\ extra-space (before and after) |\y@interspace| can
+% be set to more than |0pt| by calling |\Yinterspace|. (See |\yng| and
+% |\young|.) Note that this is a \emph{skip} and no \emph{dimemsion}.
+% \begin{macrocode}
+\newskip\y@interspace \y@interspace=0ex plus 0.3ex
+\def\Yinterspace#1{\y@interspace=#1}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\Yvcentermath}
+% \begin{macro}{\ify@vcenter}
+% The switch to turn vertical centering in math on or off. The default
+% is |\y@vcenterfalse|. The second option to |\usepackage|.
+% \begin{macrocode}
+\newif\ify@vcenter \y@vcenterfalse
+\def\Yvcentermath#1{\ifnum #1=0 \y@vcenterfalse\else\y@vcentertrue\fi}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\Ystdtext}
+% \begin{macro}{\ify@stdtext}
+% Normally the inside of the boxes (|\young|) is in math mode. This code
+% allows to switch to text mode.
+% \begin{macrocode}
+\newif\ify@stdtext \y@stdtextfalse
+\def\Ystdtext#1{\ifnum #1=0 \y@stdtextfalse\else\y@stdtexttrue\fi}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ify@enable@skew}
+% In contrast to the other this \texttt{if} may be set only via the
+% package option |enableskew|.
+% \begin{macrocode}
+\newif\ify@enable@skew \y@enable@skewfalse
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{noautoscale}
+% \begin{macro}{vcentermath}
+% \begin{macro}{stdtext}
+% \begin{macro}{enableskew}
+% Declaration and processing of the options for use with
+% \LaTeXe. (For \TeX-users: Comment the following 8 lines out).
+% \begin{macrocode}
+\DeclareOption{noautoscale}{\y@autoscalefalse}
+\DeclareOption{vcentermath}{\y@vcentertrue}
+\DeclareOption{stdtext}{\y@vcentertrue}
+\DeclareOption{enableskew}{\y@enable@skewtrue}
+\DeclareOption*{\PackageWarning{youngtab}{%
+ Unknown option `\CurrentOption' (Known:\MessageBreak
+ `vcentermath', `noautoscale', `stdtext', `enableskew'.)}}
+\ProcessOptions\relax
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\y@vr}
+% A single vertical line to build the boxes. The reason for the depht of
+% the line should be clear. (The values for the depth maybe something
+% you want to tune)
+% \begin{macrocode}
+\def\y@vr{\vrule height0.8\y@b@xdim width\y@linethick depth 0.2\y@b@xdim}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\y@emptybox}
+% This macro does less than its name pretend: It only makes one vertical
+% line followed by a empty box (width: |\y@boxdim| -- 2|\y@linethick|).
+% \begin{macrocode}
+\def\y@emptybox{\y@vr\hbox to \y@b@xdim{\hfil}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\y@abcbox}
+% \begin{macro}{\y@mathabcbox}
+% If |enableskew| is not choosen (the package options have been
+% parsed now), a |\y@abcbox| or a |\y@mathabcbox| is the simple
+% analogue to |\y@emptybox| but it has a \emph{text-font} letter
+% centered in it.\\
+% For |\y@mathabcbox| the inside is math. We rather want an
+% easier access to math italics and symbols than to normal text; so we
+% usually use |\y@mathabcbox| instead of |\y@abcbox|.
+%
+% Skew \yts\ can only be used with |\young|. Then a colon is used to
+% \emph{shift} the row to the \emph{right} -- instead of ``inserting
+% a box without border'' -- so the colon boxes must be ignored.
+% \begin{macrocode}
+\ify@enable@skew
+ \def\y@abcbox#1{\if :#1\else
+ \y@vr\hbox to \y@b@xdim{\hfil#1\hfil}\fi}
+ \def\y@mathabcbox#1{\if :#1\else
+ \y@vr\hbox to \y@b@xdim{\hfil$#1$\hfil}\fi}
+\else
+ \def\y@abcbox#1{\y@vr\hbox to \y@b@xdim{\hfil#1\hfil}}
+ \def\y@mathabcbox#1{\y@vr\hbox to \y@b@xdim{\hfil$#1$\hfil}}
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\y@setdim}
+% This macro is called at the beginning of the macros |\yng| and
+% |\young|. If |autoscale| is deactivated the box height and width is
+% |\y@boxdim| - 2|\y@linethick|. If not we save a box for temporary
+% usage, use the height of it to find a good size of the box, fill the
+% boxregister with a empty box, and clear the box again by using it.
+%
+% That's not elegant but I didn't know better\dots How can I determine
+% the height of the font in an other way? (I tried it with the \TeX-measure
+% |ex| -- but this did not seem to work in any case.) Or -- if I have
+% to use setbox -- which boxregister should I use? Is the |\ifvoid| test
+% obsolete? (First I used |\box0| -- till I found me competing with
+% \AmSTeX\ for this box.)
+% \begin{macrocode}
+\def\y@setdim{%
+ \ify@autoscale%
+ \ifvoid1\else\typeout{Package youngtab: box1 not free! Expect an
+ error!}\fi%
+ \setbox1=\hbox{A}\y@b@xdim=1.6\ht1 \setbox1=\hbox{}\box1%
+ \else\y@b@xdim=\y@boxdim \advance\y@b@xdim by -2\y@linethick
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\y@counter}
+% A counter for loops.
+% \begin{macrocode}
+\newcount\y@counter
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\y@lastargtest}
+% This macro is a hack to get \TeX\ to accept a indefinite number of
+% arguments (here: the number of \emph{lines} separated by commas). It
+% does nothing with its arguments but to see if the second is a space,
+% and, if it is to set |\y@islastargtrue|.\footnote{The
+% \texttt{islastarg} conditions are also used if the end of one line
+% of labelled boxes is reached.}
+% \begin{macrocode}
+\newif\ify@islastarg
+\def\y@lastargtest#1,#2 {\if\space #2 \y@islastargtrue
+ \else\y@islastargfalse\fi}
+% \end{macrocode}
+% How does it work? An Example:
+%
+% \verb*+\y@lastargtest first,second +\\
+% Here |#1| is |first| and |#2| is |second|. The |\if| construction
+% tests if the (expanded) \emph{first} token of |#2| and |\space|
+% (here: |s|) are equal. -- They are not. In the next example the
+% condition is |true|:
+%
+% \verb*+\y@lastargtest first, +\\
+% Here |#1| is again |first| but |\y@lastargtest| catches the blank
+% after the comma to be |#2|. The |\if| condition now is true and
+% |\y@islastargtrue| is set. Remember: the blank is essential!
+% \end{macro}
+%
+% \begin{macro}{\y@emptyboxes}
+% This macro draws |#1| (this is a number) empty boxes (|\y@emptybox|)
+% -- without a top or bottom line:
+%
+% |:\y@emptyboxes3:| \hspace{0.5em} is
+% :$\mid$\hspace{0.8em}$\mid$\hspace{0.8em}$\mid$\hspace{0.8em}:
+% \begin{macrocode}
+\def\y@emptyboxes#1{\y@counter=#1\loop\ifnum\y@counter>0
+ \advance\y@counter by -1 \y@emptybox\repeat}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\y@nelineemptyboxes}
+% This calls |\y@emptyboxes| and adds the top and bottom lines (I think
+% this is faster than draw single, complete boxes) and a right closing
+% vertical line. Because of the |\vspace| command the top line of the
+% eventually following next box-row will be drawn over the bottom line of
+% this box-row.
+% \begin{macrocode}
+\def\y@nelineemptyboxes#1{%
+ \vbox{%
+ \hrule height\y@linethick%
+ \hbox{\y@emptyboxes{#1}\y@vr}
+ \hrule height\y@linethick}\vspace{-\y@linethick}}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\yng}
+% The user-macro for empty \yts. As mentioned above it has only one
+% argument, enclosed in brackets. It first calls |\y@setdim| to
+% determine the size of the boxes and opens a |\vcenter| if in math mode
+% and |vcentermath| is set. Otherwise only a (then obsolet) |{| is
+% opened. |\y@lastargtest| determines if the tableau should have only
+% one line, setting |\y@islastargtrue| or -|false|. If there is only one
+% line, |\yng| does the whole job in calling
+% |\y@nelineemptyboxes| once. Otherwise it calls |\y@ungempty| to do the
+% real thing. Note the spacing before and after the tableau using
+% |\hspace|.
+% \begin{macrocode}
+\def\yng(#1){%
+ \y@setdim%
+ \hspace{\y@interspace}%
+ \ifmmode\ify@vcenter\vcenter\fi\fi{%
+ \y@lastargtest#1,
+ \vbox{\offinterlineskip
+ \ify@islastarg
+ \y@nelineemptyboxes{#1}
+ \else
+ \y@ungempty(#1)
+ \fi}}\hspace{\y@interspace}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\y@ungempty}
+% It is called with |\y@ungempty(#1)| from |\yng|. Now the parsing of
+% the arguments starts! As we know from |\y@lastargtest| in
+% |\yng|, there really are two arguments left. Explicitely: Let the
+% the initial command (given by the user) be |\yng(3,2,1)|; then
+% |\yng| calls |\y@ungempty(3,2,1)|. But |\y@ungempty| sees two
+% arguments: |#1| is |3| and |#2| is |2,1|! (Note the importance of the
+% brackets). |\y@ungempty| then processes the first argument immediately,
+% calling |\y@nelineemptyboxes|. (The braces protect numbers with more
+% than one digit.)
+%
+% The next step is to check if |#2| is the last line. If it is, it calls
+% \texttt{\bslash y@ne\-line\-empty\-boxes} again. Otherwise it calls
+% \emph{recursively itselve}, till all lines are processed.
+% \begin{macrocode}
+\def\y@ungempty(#1,#2){%
+ \y@nelineemptyboxes{#1}
+ \y@lastargtest#2,
+ \ify@islastarg
+ \y@nelineemptyboxes{#2}
+ \else
+ \y@ungempty(#2)
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\y@nelettertest}
+% The first macro especially for labelled boxes, that is, for
+% |\young|. Like \texttt{\bslash y@last\-arg\-test} it is used for
+% handling a indefinite number of arguments. (As mentioned before
+% \yts\ with labelled boxes have problem double.) |\y@nelettertest|
+% determines if the last box of the line has been reached.
+%
+% Again we will examine it's working method by examples:
+%
+% |\y@nelettertest ab.|\\
+% The period after the argument |ab| (and in the definition of
+% |\y@nelettertest|) is merely a mark for the end of the
+% arguments. (Otherwise \TeX\ would complain about missing arguments.)
+% Here |a| is |#1| and |#2| is |b| -- the |\if|-condition is |false|
+% and so |\y@islastargfalse| is set. Now a little miracle:
+%
+% |\y@nelettertest a.|\\
+% In the opposite to the case of |\y@lastargtest| it's not
+% understandable for me, why |#2| now is a space -- but it is! (Do
+% \emph{you} know the reason why?)
+% The rest is known from |\y@lastargtest|.
+% \begin{macrocode}
+\def\y@nelettertest#1#2. {\if\space #2 \y@islastargtrue
+ \else\y@islastargfalse\fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\y@abcboxes}
+% Again we use a period to mark the end of arguments. Compare to
+% |\y@emptyboxes| -- Now it is more strenuous! The |\y@nelettertest|
+% macro makes sure that |\y@abcboxes| is called with at least two boxes
+% to process. If there are only two boxes |\y@abcboxes| calls
+% |\y@abcbox| two times, otherwise it calls itselve recursively again.
+% (The argument-splitting works as in |\y@ungempty|.)
+% \begin{macrocode}
+\def\y@abcboxes#1#2.{%
+ \ify@stdtext\y@abcbox#1\else\y@mathabcbox#1\fi%
+ \y@nelettertest #2.
+% \end{macrocode}
+% There must be a space or (equivalently) a carriage return after this
+% line!
+% \begin{macrocode}
+ \ify@islastarg\unskip%
+ \ify@stdtext\y@abcbox{#2}\else\y@mathabcbox{#2}\fi%
+ \else\y@abcboxes#2.\fi}
+% \end{macrocode}
+% The |\unskip| is needed for the case that |#2| is only one token. Then
+% a space appears between two boxes. (I do not understand really what
+% happens -- see |\y@nelettertest|.) The |\unskip| resolves this problem.
+% \end{macro}
+%
+% \begin{macro}{\ify@enable@skew}
+% \begin{macro}{\y@full@b@xdim}
+% \begin{macro}{\y@m@veright@cnt}
+% Most of the skew boxes stuff can be found here along the definition
+% of \texttt{\bslash y@ne\-line\-abc\-boxes}. We need a further dimension,
+% for the effective lenght of one box in a row, |\y@full@b@xdim| =
+% |\y@b@xdim| + |1\y@linethick| and one counter for the number of
+% boxes to be left out on the left side of the tableau (determined by
+% the number of colons at the beginning of a row), |\y@m@veright@cnt|.
+% \begin{macrocode}
+\ify@enable@skew
+ \newdimen\y@full@b@xdim
+ \newcount\y@m@veright@cnt
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\y@get@m@veright@cnt}
+% To find out the number of leading colons in a row we have the macro
+% \texttt{\bslash y@get@\-m@ve\-right@\-cnt}. Here we use exactly the same
+% trick as in |\y@nelettertest|.
+% \begin{macrocode}
+ \def\y@get@m@veright@cnt#1#2.{%
+ \if :#1 \advance\y@m@veright@cnt by 1\y@get@m@veright@cnt#2.\fi}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\y@setdim}
+% Since we now have another dimension that depends on |\y@b@xdim|,
+% the dimension of the boxes, we have to extend |\y@setdim| to
+% calculate |\y@full@b@xdim| too. (The dummy |\y@setdim@| is used to
+% avoid a recursion.)
+% \begin{macrocode}
+ \let\y@setdim@=\y@setdim
+ \def\y@setdim{%
+ \y@setdim@ \y@full@b@xdim=\y@b@xdim
+ \advance\y@full@b@xdim by 1\y@linethick}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\y@m@veright@ifskew}
+% Now we put it all into the following macro that computes the offset
+% and moves the tableau to the right if necessary. If skew \yts\ are
+% not enabled, |\y@m@veright@ifskew| will be a null-command (but
+% catches the argument).
+% \begin{macrocode}
+ \def\y@m@veright@ifskew#1{
+ \y@m@veright@cnt=0 \y@get@m@veright@cnt#1.
+ \moveright \y@m@veright@cnt\y@full@b@xdim}
+\else
+ \def\y@m@veright@ifskew#1{}
+\fi
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\y@nelineabcboxes}
+% This is the counterpart of |\y@nelineemptyboxes|. The difference
+% is the treatment of the case of a row of only one box -- Then only
+% |\y@abcbox| is called and not |\y@abcboxes|. If this row must be
+% moved to the right, this is done by |\y@m@veright@ifskew|.
+% \begin{macrocode}
+\def\y@nelineabcboxes#1{%
+ \y@nelettertest #1.
+ \ify@islastarg
+ \y@m@veright@ifskew{#1}
+ \vbox{
+ \hrule height\y@linethick%
+ \hbox{\ify@stdtext\y@abcbox#1\else\y@mathabcbox#1\fi\y@vr}
+ \hrule height\y@linethick}\vspace{-\y@linethick}
+ \else
+ \y@m@veright@ifskew{#1}
+ \vbox{
+ \hrule height\y@linethick%
+ \hbox{\y@abcboxes #1.\y@vr}%
+ \hrule height\y@linethick}\vspace{-\y@linethick}
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\young}
+% The user-macro for labelled \yts. It has one argument as |\yng|,
+% enclosed in brackets. Everything is identical as in the emptybox case
+% (sizing, vcentering, treatment of multiple rows, \dots).
+% \begin{macrocode}
+\def\young(#1){%
+ \y@setdim%
+ \hspace{\y@interspace}%
+ \y@lastargtest#1,
+ \ifmmode\ify@vcenter\vcenter\fi\fi{%
+ \vbox{\offinterlineskip
+ \ify@islastarg\y@nelineabcboxes{#1}%
+ \else\y@ungabc(#1)%
+ \fi}}\hspace{\y@interspace}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\y@ungabc}
+% Again nothing new -- see |\y@ungempty|
+% \begin{macrocode}
+\def\y@ungabc(#1,#2){%
+ \y@nelineabcboxes{#1}%
+ \y@lastargtest#2,
+ \ify@islastarg\y@nelineabcboxes{#2}%
+ \else\y@ungabc(#2)%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%
+% \Finale
+\endinput
diff --git a/Master/texmf-dist/source/latex/youngtab/youngtab.el b/Master/texmf-dist/source/latex/youngtab/youngtab.el
new file mode 100644
index 00000000000..458049e8e2f
--- /dev/null
+++ b/Master/texmf-dist/source/latex/youngtab/youngtab.el
@@ -0,0 +1,42 @@
+;;; youngtab.el - Support for the user macros of the youngtab package
+;; by Volker B"orchers, <boercher@physik.uni-bremen.de>
+;; This program can be redistributed and/or modified under the terms
+;; of the LaTeX Project Public License Distributed from CTAN
+;; archives in directory macros/latex/base/lppl.txt; either
+;; version 1 of the License, or any later version.
+
+;;-((and (not( = elisp favorite-language)) (concat "lucky" "it" "works" (!))))
+
+(TeX-add-style-hook "youngtab"
+ (function
+ (lambda ()
+ (TeX-add-symbols
+ '("Yboxdim" "Box Dimension")
+ '("Ylinethick" "Line Thickness")
+ '("Yinterspace" "Space between 2 Tableaux")
+ '("Yvcentermath" TeX-arg-young-bool)
+ '("Ystdtext" TeX-arg-young-bool)
+ '("yng" (TeX-arg-young t))
+ '("young" TeX-arg-young)
+ ))))
+
+(defun TeX-arg-young (optional &optional isyng)
+ "Insert macros young and yng.
+Ask for the rows of a tableau.
+Do not accept non-numbers for yng."
+ (let ((num 0))
+ (insert "(")
+ (while (>= num 0)
+ (setq num (1+ num))
+ (setq row (read-input (concat (int-to-string num) ". Row: ")))
+ (if (zerop (length row))
+ (setq num -1)
+ (if (and isyng (<= (string-to-int row) 0))
+ (setq num (- num 1))
+ (insert (if (> num 1) "," "") row)))))
+ (insert ")"))
+
+(defun TeX-arg-young-bool (optional)
+ "To handle the switches Yvcentermath and Ystdtext"
+ (insert (if (y-or-n-p "true(y) or false(n)? ") "1" "0")))
+
diff --git a/Master/texmf-dist/source/latex/youngtab/youngtab.ins b/Master/texmf-dist/source/latex/youngtab/youngtab.ins
new file mode 100644
index 00000000000..a58ace3a9e0
--- /dev/null
+++ b/Master/texmf-dist/source/latex/youngtab/youngtab.ins
@@ -0,0 +1,36 @@
+%%
+%% --------------- start of docstrip commands ------------------
+%%
+\def\batchfile{youngtab.ins}
+\input docstrip.tex
+\preamble
+
+Copyright (C) 1996,98,99 Volker B"orchers and Stefan Gieseke,
+This program can be redistributed and/or modified under the terms
+of the LaTeX Project Public License Distributed from CTAN
+archives in directory macros/latex/base/lppl.txt; either
+version 1 of the License, or any later version.
+
+\endpreamble
+\def\filedate{1999/05/19}
+\input docstrip
+\keepsilent
+
+\generateFile{youngtab.sty}{t}{\from{youngtab.dtx}{package}}
+
+\ifToplevel{
+\Msg{***********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move}
+\Msg{* \space\space youngtab.sty}
+\Msg{* into a directory searched by TeX:}
+\Msg{*}
+\Msg{* To produce the documentation run}
+\Msg{* \space\space youngtab.dtx}
+\Msg{* through LaTeX.}
+\Msg{*}
+\Msg{***********************************************************}
+}
+
+
+
diff --git a/Master/texmf-dist/source/latex/youngtab/youngtab.tex b/Master/texmf-dist/source/latex/youngtab/youngtab.tex
new file mode 100644
index 00000000000..895a7c3267b
--- /dev/null
+++ b/Master/texmf-dist/source/latex/youngtab/youngtab.tex
@@ -0,0 +1,146 @@
+%%
+%% This is file `youngtab.tex',
+%% (manually) generated from `youngtab.sty'
+%% (For use with TeX)
+%%
+%% The original source files were:
+%%
+%% youngtab.dtx (with options: `package')
+%%
+%% Copyright (C) 1996,98,99 Volker B"orchers and Stefan Gieseke,
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN
+%% archives in directory macros/latex/base/lppl.txt; either
+%% version 1 of the License, or any later version.
+\catcode`\@11\relax
+\newif\ify@autoscale \y@autoscaletrue \def\Yautoscale#1{\ifnum #1=0
+ \y@autoscalefalse\else\y@autoscaletrue\fi}
+\newdimen\y@b@xdim
+\newdimen\y@boxdim \y@boxdim=13pt
+\def\Yboxdim#1{\y@autoscalefalse\y@boxdim=#1}
+\newdimen\y@linethick \y@linethick=.3pt
+\def\Ylinethick#1{\y@linethick=#1}
+\newskip\y@interspace \y@interspace=0ex plus 0.3ex
+\def\Yinterspace#1{\y@interspace=#1}
+\newif\ify@vcenter \y@vcenterfalse
+\def\Yvcentermath#1{\ifnum #1=0 \y@vcenterfalse\else\y@vcentertrue\fi}
+\newif\ify@stdtext \y@stdtextfalse
+\def\Ystdtext#1{\ifnum #1=0 \y@stdtextfalse\else\y@stdtexttrue\fi}
+\newif\ify@enable@skew \y@enable@skewfalse
+%% To use skew tableaux, define a macro \enableskew
+%% right before loading this file: \def\enableskew{1}
+\expandafter\ifx\csname enableskew\endcsname\relax
+ \y@enable@skewfalse \else \y@enable@skewtrue\fi
+%% \DeclareOption{noautoscale}{\y@autoscalefalse}
+%% \DeclareOption{vcentermath}{\y@vcentertrue}
+%% \DeclareOption{stdtext}{\y@vcentertrue}
+%% \DeclareOption{enableskew}{\y@enable@skewtrue}
+%% \DeclareOption*{\PackageWarning{youngtab}{%
+%% Unknown option `\CurrentOption' (Known:\MessageBreak
+%% `vcentermath', `noautoscale', `stdtext', `enableskew'.)}}
+%% \ProcessOptions\relax
+\def\y@vr{\vrule height0.8\y@b@xdim width\y@linethick depth 0.2\y@b@xdim}
+\def\y@emptybox{\y@vr\hbox to \y@b@xdim{\hfil}}
+\ify@enable@skew
+ \def\y@abcbox#1{\if :#1\else
+ \y@vr\hbox to \y@b@xdim{\hfil#1\hfil}\fi}
+ \def\y@mathabcbox#1{\if :#1\else
+ \y@vr\hbox to \y@b@xdim{\hfil$#1$\hfil}\fi}
+\else
+ \def\y@abcbox#1{\y@vr\hbox to \y@b@xdim{\hfil#1\hfil}}
+ \def\y@mathabcbox#1{\y@vr\hbox to \y@b@xdim{\hfil$#1$\hfil}}
+\fi
+\def\y@setdim{%
+ \ify@autoscale%
+ \ifvoid1\else\typeout{Package youngtab: box1 not free! Expect an
+ error!}\fi%
+ \setbox1=\hbox{A}\y@b@xdim=1.6\ht1 \setbox1=\hbox{}\box1%
+ \else\y@b@xdim=\y@boxdim \advance\y@b@xdim by -2\y@linethick
+ \fi}
+\newcount\y@counter
+\newif\ify@islastarg
+\def\y@lastargtest#1,#2 {\if\space #2 \y@islastargtrue
+ \else\y@islastargfalse\fi}
+\def\y@emptyboxes#1{\y@counter=#1\loop\ifnum\y@counter>0
+ \advance\y@counter by -1 \y@emptybox\repeat}
+\def\y@nelineemptyboxes#1{%
+ \vbox{%
+ \hrule height\y@linethick%
+ \hbox{\y@emptyboxes{#1}\y@vr}
+ \hrule height\y@linethick}\vskip-\y@linethick}
+\def\yng(#1){%
+ \y@setdim%
+ \hskip\y@interspace%
+ \ifmmode\ify@vcenter\vcenter\fi\fi{%
+ \y@lastargtest#1,
+ \vbox{\offinterlineskip
+ \ify@islastarg
+ \y@nelineemptyboxes{#1}
+ \else
+ \y@ungempty(#1)
+ \fi}}\hskip\y@interspace}
+\def\y@ungempty(#1,#2){%
+ \y@nelineemptyboxes{#1}
+ \y@lastargtest#2,
+ \ify@islastarg
+ \y@nelineemptyboxes{#2}
+ \else
+ \y@ungempty(#2)
+ \fi}
+\def\y@nelettertest#1#2. {\if\space #2 \y@islastargtrue
+ \else\y@islastargfalse\fi}
+\def\y@abcboxes#1#2.{%
+ \ify@stdtext\y@abcbox#1\else\y@mathabcbox#1\fi%
+ \y@nelettertest #2.
+ \ify@islastarg\unskip%
+ \ify@stdtext\y@abcbox{#2}\else\y@mathabcbox{#2}\fi%
+ \else\y@abcboxes#2.\fi}
+ \newdimen\y@full@b@xdim
+ \newcount\y@m@veright@cnt
+\ify@enable@skew
+ \def\y@get@m@veright@cnt#1#2.{%
+ \if :#1 \advance\y@m@veright@cnt by 1\y@get@m@veright@cnt#2.\fi}
+ \let\y@setdim@=\y@setdim
+ \def\y@setdim{%
+ \y@setdim@ \y@full@b@xdim=\y@b@xdim
+ \advance\y@full@b@xdim by 1\y@linethick}
+ \def\y@m@veright@ifskew#1{
+ \y@m@veright@cnt=0 \y@get@m@veright@cnt#1.
+ \moveright \y@m@veright@cnt\y@full@b@xdim}
+\else
+ \def\y@m@veright@ifskew#1{}
+\fi
+\def\y@nelineabcboxes#1{%
+ \y@nelettertest #1.
+ \ify@islastarg
+ \y@m@veright@ifskew{#1}
+ \vbox{
+ \hrule height\y@linethick%
+ \hbox{\ify@stdtext\y@abcbox#1\else\y@mathabcbox#1\fi\y@vr}
+ \hrule height\y@linethick}\vskip-\y@linethick
+ \else
+ \y@m@veright@ifskew{#1}
+ \vbox{
+ \hrule height\y@linethick%
+ \hbox{\y@abcboxes #1.\y@vr}%
+ \hrule height\y@linethick}\vskip-\y@linethick
+ \fi}
+\def\young(#1){%
+ \y@setdim%
+ \hskip\y@interspace%
+ \y@lastargtest#1,
+ \ifmmode\ify@vcenter\vcenter\fi\fi{%
+ \vbox{\offinterlineskip
+ \ify@islastarg\y@nelineabcboxes{#1}%
+ \else\y@ungabc(#1)%
+ \fi}}\hskip\y@interspace}
+\def\y@ungabc(#1,#2){%
+ \y@nelineabcboxes{#1}%
+ \y@lastargtest#2,
+ \ify@islastarg\y@nelineabcboxes{#2}%
+ \else\y@ungabc(#2)%
+ \fi}
+\catcode`\@12\relax
+\endinput
+%%
+%% End of file `youngtab.tex'.