texlive[56494] Master/texmf-dist: youngtab now generic (30sep20)

commits+karl at tug.org commits+karl at tug.org
Wed Sep 30 23:30:06 CEST 2020


Revision: 56494
          http://tug.org/svn/texlive?view=revision&revision=56494
Author:   karl
Date:     2020-09-30 23:30:06 +0200 (Wed, 30 Sep 2020)
Log Message:
-----------
youngtab now generic (30sep20)

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/generic/youngtab/
    trunk/Master/texmf-dist/doc/generic/youngtab/README
    trunk/Master/texmf-dist/doc/generic/youngtab/makeydoc
    trunk/Master/texmf-dist/doc/generic/youngtab/youngtab.el
    trunk/Master/texmf-dist/doc/generic/youngtab/youngtab.pdf
    trunk/Master/texmf-dist/doc/generic/youngtab/youngtab.tex
    trunk/Master/texmf-dist/source/generic/youngtab/
    trunk/Master/texmf-dist/source/generic/youngtab/makeydoc.bat
    trunk/Master/texmf-dist/source/generic/youngtab/youngtab.dtx
    trunk/Master/texmf-dist/source/generic/youngtab/youngtab.ins
    trunk/Master/texmf-dist/tex/generic/youngtab/
    trunk/Master/texmf-dist/tex/generic/youngtab/youngtab.sty

Removed Paths:
-------------
    trunk/Master/texmf-dist/doc/latex/youngtab/
    trunk/Master/texmf-dist/source/latex/youngtab/
    trunk/Master/texmf-dist/tex/latex/youngtab/

Added: trunk/Master/texmf-dist/doc/generic/youngtab/README
===================================================================
--- trunk/Master/texmf-dist/doc/generic/youngtab/README	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/generic/youngtab/README	2020-09-30 21:30:06 UTC (rev 56494)
@@ -0,0 +1,94 @@
+YOUNGTAB-Package
+================
+-----------------------------------------------------------------------
+Authors: 
+-----------------------------------------------------------------------
+
+Volker B"orchers (email: boercher at physik.uni-bremen.de)
+and Stefan Gieseke (email: gieseke at 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


Property changes on: trunk/Master/texmf-dist/doc/generic/youngtab/README
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/generic/youngtab/makeydoc
===================================================================
--- trunk/Master/texmf-dist/doc/generic/youngtab/makeydoc	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/generic/youngtab/makeydoc	2020-09-30 21:30:06 UTC (rev 56494)
@@ -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


Property changes on: trunk/Master/texmf-dist/doc/generic/youngtab/makeydoc
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/generic/youngtab/youngtab.el
===================================================================
--- trunk/Master/texmf-dist/doc/generic/youngtab/youngtab.el	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/generic/youngtab/youngtab.el	2020-09-30 21:30:06 UTC (rev 56494)
@@ -0,0 +1,42 @@
+;;; youngtab.el - Support for the user macros of the youngtab package
+;; by Volker B"orchers, <boercher at 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")))
+


Property changes on: trunk/Master/texmf-dist/doc/generic/youngtab/youngtab.el
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/generic/youngtab/youngtab.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/generic/youngtab/youngtab.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/generic/youngtab/youngtab.pdf	2020-09-30 21:29:19 UTC (rev 56493)
+++ trunk/Master/texmf-dist/doc/generic/youngtab/youngtab.pdf	2020-09-30 21:30:06 UTC (rev 56494)

Property changes on: trunk/Master/texmf-dist/doc/generic/youngtab/youngtab.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/generic/youngtab/youngtab.tex
===================================================================
--- trunk/Master/texmf-dist/doc/generic/youngtab/youngtab.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/generic/youngtab/youngtab.tex	2020-09-30 21:30:06 UTC (rev 56494)
@@ -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 at autoscale \y at autoscaletrue \def\Yautoscale#1{\ifnum #1=0
+  \y at autoscalefalse\else\y at autoscaletrue\fi}
+\newdimen\y at b@xdim
+\newdimen\y at boxdim \y at boxdim=13pt
+\def\Yboxdim#1{\y at autoscalefalse\y at boxdim=#1}
+\newdimen\y at linethick    \y at linethick=.3pt
+\def\Ylinethick#1{\y at linethick=#1}
+\newskip\y at interspace \y at interspace=0ex plus 0.3ex
+\def\Yinterspace#1{\y at interspace=#1}
+\newif\ify at vcenter   \y at vcenterfalse
+\def\Yvcentermath#1{\ifnum #1=0 \y at vcenterfalse\else\y at vcentertrue\fi}
+\newif\ify at stdtext   \y at stdtextfalse
+\def\Ystdtext#1{\ifnum #1=0 \y at stdtextfalse\else\y at stdtexttrue\fi}
+\newif\ify at enable@skew   \y at 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 at enable@skewfalse \else \y at enable@skewtrue\fi
+%% \DeclareOption{noautoscale}{\y at autoscalefalse}
+%% \DeclareOption{vcentermath}{\y at vcentertrue}
+%% \DeclareOption{stdtext}{\y at vcentertrue}
+%% \DeclareOption{enableskew}{\y at enable@skewtrue}
+%% \DeclareOption*{\PackageWarning{youngtab}{%
+%%     Unknown option `\CurrentOption' (Known:\MessageBreak
+%%     `vcentermath', `noautoscale', `stdtext', `enableskew'.)}}
+%% \ProcessOptions\relax
+\def\y at vr{\vrule height0.8\y at b@xdim width\y at linethick depth 0.2\y at b@xdim}
+\def\y at emptybox{\y at vr\hbox to \y at b@xdim{\hfil}}
+\ify at enable@skew
+ \def\y at abcbox#1{\if :#1\else
+   \y at vr\hbox to \y at b@xdim{\hfil#1\hfil}\fi}
+ \def\y at mathabcbox#1{\if :#1\else
+   \y at vr\hbox to \y at b@xdim{\hfil$#1$\hfil}\fi}
+\else
+ \def\y at abcbox#1{\y at vr\hbox to \y at b@xdim{\hfil#1\hfil}}
+ \def\y at mathabcbox#1{\y at vr\hbox to \y at b@xdim{\hfil$#1$\hfil}}
+\fi
+\def\y at setdim{%
+  \ify at autoscale%
+   \ifvoid1\else\typeout{Package youngtab: box1 not free! Expect an
+     error!}\fi%
+   \setbox1=\hbox{A}\y at b@xdim=1.6\ht1 \setbox1=\hbox{}\box1%
+  \else\y at b@xdim=\y at boxdim \advance\y at b@xdim by -2\y at linethick
+  \fi}
+\newcount\y at counter
+\newif\ify at islastarg
+\def\y at lastargtest#1,#2 {\if\space #2 \y at islastargtrue
+  \else\y at islastargfalse\fi}
+\def\y at emptyboxes#1{\y at counter=#1\loop\ifnum\y at counter>0
+  \advance\y at counter by -1 \y at emptybox\repeat}
+\def\y at nelineemptyboxes#1{%
+  \vbox{%
+    \hrule height\y at linethick%
+    \hbox{\y at emptyboxes{#1}\y at vr}
+    \hrule height\y at linethick}\vskip-\y at linethick}
+\def\yng(#1){%
+  \y at setdim%
+  \hskip\y at interspace%
+  \ifmmode\ify at vcenter\vcenter\fi\fi{%
+  \y at lastargtest#1,
+  \vbox{\offinterlineskip
+    \ify at islastarg
+     \y at nelineemptyboxes{#1}
+    \else
+     \y at ungempty(#1)
+    \fi}}\hskip\y at interspace}
+\def\y at ungempty(#1,#2){%
+  \y at nelineemptyboxes{#1}
+  \y at lastargtest#2,
+  \ify at islastarg
+   \y at nelineemptyboxes{#2}
+  \else
+   \y at ungempty(#2)
+  \fi}
+\def\y at nelettertest#1#2. {\if\space #2 \y at islastargtrue
+  \else\y at islastargfalse\fi}
+\def\y at abcboxes#1#2.{%
+  \ify at stdtext\y at abcbox#1\else\y at mathabcbox#1\fi%
+  \y at nelettertest #2.
+  \ify at islastarg\unskip%
+   \ify at stdtext\y at abcbox{#2}\else\y at mathabcbox{#2}\fi%
+  \else\y at abcboxes#2.\fi}
+ \newdimen\y at full@b at xdim
+ \newcount\y at m@veright at cnt
+\ify at enable@skew
+ \def\y at get@m at veright@cnt#1#2.{%
+   \if :#1 \advance\y at m@veright at cnt by 1\y at get@m at veright@cnt#2.\fi}
+ \let\y at setdim@=\y at setdim
+ \def\y at setdim{%
+   \y at setdim@ \y at full@b at xdim=\y at b@xdim
+   \advance\y at full@b at xdim by 1\y at linethick}
+ \def\y at m@veright at ifskew#1{
+   \y at m@veright at cnt=0 \y at get@m at veright@cnt#1.
+   \moveright \y at m@veright at cnt\y at full@b at xdim}
+\else
+ \def\y at m@veright at ifskew#1{}
+\fi
+\def\y at nelineabcboxes#1{%
+  \y at nelettertest #1.
+  \ify at islastarg
+   \y at m@veright at ifskew{#1}
+    \vbox{
+      \hrule height\y at linethick%
+      \hbox{\ify at stdtext\y at abcbox#1\else\y at mathabcbox#1\fi\y at vr}
+      \hrule height\y at linethick}\vskip-\y at linethick
+  \else
+   \y at m@veright at ifskew{#1}
+    \vbox{
+      \hrule height\y at linethick%
+      \hbox{\y at abcboxes #1.\y at vr}%
+      \hrule height\y at linethick}\vskip-\y at linethick
+  \fi}
+\def\young(#1){%
+  \y at setdim%
+  \hskip\y at interspace%
+  \y at lastargtest#1,
+  \ifmmode\ify at vcenter\vcenter\fi\fi{%
+  \vbox{\offinterlineskip
+    \ify at islastarg\y at nelineabcboxes{#1}%
+    \else\y at ungabc(#1)%
+    \fi}}\hskip\y at interspace}
+\def\y at ungabc(#1,#2){%
+  \y at nelineabcboxes{#1}%
+  \y at lastargtest#2,
+  \ify at islastarg\y at nelineabcboxes{#2}%
+  \else\y at ungabc(#2)%
+  \fi}
+\catcode`\@12\relax
+\endinput
+%%
+%% End of file `youngtab.tex'.


Property changes on: trunk/Master/texmf-dist/doc/generic/youngtab/youngtab.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/generic/youngtab/makeydoc.bat
===================================================================
--- trunk/Master/texmf-dist/source/generic/youngtab/makeydoc.bat	                        (rev 0)
+++ trunk/Master/texmf-dist/source/generic/youngtab/makeydoc.bat	2020-09-30 21:30:06 UTC (rev 56494)
@@ -0,0 +1,45 @@
+ at 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! ++++++++++++
+


Property changes on: trunk/Master/texmf-dist/source/generic/youngtab/makeydoc.bat
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/generic/youngtab/youngtab.dtx
===================================================================
--- trunk/Master/texmf-dist/source/generic/youngtab/youngtab.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/generic/youngtab/youngtab.dtx	2020-09-30 21:30:06 UTC (rev 56494)
@@ -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 at 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 at 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 at lastargtest| and
+%   |\y at 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 at enable@skewfalse \else \y at 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 at 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 at autoscale}
+% If autoscaling is active, the size of the boxes (|\y at 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 at autoscale \y at autoscaletrue \def\Yautoscale#1{\ifnum #1=0
+  \y at autoscalefalse\else\y at autoscaletrue\fi}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\Yboxdim}
+% \begin{macro}{\y at b@xdim}
+% \begin{macro}{\y at boxdim}
+% The parameters determining the size of the single boxes and the macro
+% to set them. |\Yboxdim|\meta{dim} sets |\y at boxdim| (only used, when
+% autoscaling is turned off) and sets |y at autoscale| to
+% |false|. |\y at boxdim| is the \emph{total} size of the box (including
+% the delimiting lines) while |\y at b@xdim| (to be set in |\y at setdim|) is
+% the height and width of the inner of the box.
+%    \begin{macrocode}
+\newdimen\y at b@xdim
+\newdimen\y at boxdim \y at boxdim=13pt
+\def\Yboxdim#1{\y at autoscalefalse\y at boxdim=#1}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\Ylinethick}
+% \begin{macro}{\y at linethick}
+% The line thickness and |\Ylinethick|\meta{dim} as user interface to it.
+%    \begin{macrocode}
+\newdimen\y at linethick    \y at linethick=.3pt
+\def\Ylinethick#1{\y at linethick=#1}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\Yinterspace}
+% \begin{macro}{\y at interspace}
+% To give the \yts\ extra-space (before and after) |\y at 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 at interspace \y at interspace=0ex plus 0.3ex
+\def\Yinterspace#1{\y at interspace=#1}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\Yvcentermath}
+% \begin{macro}{\ify at vcenter}
+% The switch to turn vertical centering in math on or off. The default
+% is |\y at vcenterfalse|. The second option to |\usepackage|.
+%    \begin{macrocode}
+\newif\ify at vcenter   \y at vcenterfalse
+\def\Yvcentermath#1{\ifnum #1=0 \y at vcenterfalse\else\y at vcentertrue\fi}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\Ystdtext}
+% \begin{macro}{\ify at stdtext}
+% Normally the inside of the boxes (|\young|) is in math mode. This code
+% allows to switch to text mode.
+%    \begin{macrocode}
+\newif\ify at stdtext   \y at stdtextfalse
+\def\Ystdtext#1{\ifnum #1=0 \y at stdtextfalse\else\y at stdtexttrue\fi}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ify at enable@skew}
+% In contrast to the other this \texttt{if} may be set only via the
+% package option |enableskew|.
+%    \begin{macrocode}
+\newif\ify at enable@skew   \y at 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 at autoscalefalse}
+\DeclareOption{vcentermath}{\y at vcentertrue}
+\DeclareOption{stdtext}{\y at vcentertrue}
+\DeclareOption{enableskew}{\y at 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 at 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 at vr{\vrule height0.8\y at b@xdim width\y at linethick depth 0.2\y at b@xdim}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\y at emptybox}
+% This macro does less than its name pretend: It only makes one vertical
+% line followed by a empty box (width: |\y at boxdim| -- 2|\y at linethick|).
+%    \begin{macrocode}
+\def\y at emptybox{\y at vr\hbox to \y at b@xdim{\hfil}}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\y at abcbox}
+% \begin{macro}{\y at mathabcbox}
+% If |enableskew| is not choosen (the package options have been
+% parsed now), a |\y at abcbox| or a |\y at mathabcbox| is the simple
+% analogue to |\y at emptybox| but it has a \emph{text-font} letter
+% centered in it.\\
+% For |\y at 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 at mathabcbox| instead of |\y at 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 at enable@skew
+ \def\y at abcbox#1{\if :#1\else
+   \y at vr\hbox to \y at b@xdim{\hfil#1\hfil}\fi}
+ \def\y at mathabcbox#1{\if :#1\else
+   \y at vr\hbox to \y at b@xdim{\hfil$#1$\hfil}\fi}
+\else
+ \def\y at abcbox#1{\y at vr\hbox to \y at b@xdim{\hfil#1\hfil}}
+ \def\y at mathabcbox#1{\y at vr\hbox to \y at b@xdim{\hfil$#1$\hfil}}
+\fi
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\y at 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 at boxdim| - 2|\y at 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 at setdim{%
+  \ify at autoscale%
+   \ifvoid1\else\typeout{Package youngtab: box1 not free! Expect an
+     error!}\fi%
+   \setbox1=\hbox{A}\y at b@xdim=1.6\ht1 \setbox1=\hbox{}\box1%
+  \else\y at b@xdim=\y at boxdim \advance\y at b@xdim by -2\y at linethick
+  \fi}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\y at counter}
+% A counter for loops.
+%    \begin{macrocode}
+\newcount\y at counter
+%    \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\y at 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 at islastargtrue|.\footnote{The
+%   \texttt{islastarg} conditions are also used if the end of one line
+%   of labelled boxes is reached.}
+%    \begin{macrocode}
+\newif\ify at islastarg
+\def\y at lastargtest#1,#2 {\if\space #2 \y at islastargtrue
+  \else\y at islastargfalse\fi}
+%    \end{macrocode}
+% How does it work? An Example:
+%
+% \verb*+\y at 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 at lastargtest first, +\\
+% Here |#1| is again |first| but |\y at lastargtest| catches the blank
+% after the comma to be |#2|. The |\if| condition now is true and
+% |\y at islastargtrue| is set. Remember: the blank is essential!
+% \end{macro}
+%
+% \begin{macro}{\y at emptyboxes}
+% This macro draws |#1| (this is a number) empty boxes (|\y at emptybox|)
+% -- without a top or bottom line:
+%
+% |:\y at emptyboxes3:| \hspace{0.5em} is
+% :$\mid$\hspace{0.8em}$\mid$\hspace{0.8em}$\mid$\hspace{0.8em}:
+%    \begin{macrocode}
+\def\y at emptyboxes#1{\y at counter=#1\loop\ifnum\y at counter>0
+  \advance\y at counter by -1 \y at emptybox\repeat}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\y at nelineemptyboxes}
+% This calls |\y at 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 at nelineemptyboxes#1{%
+  \vbox{%
+    \hrule height\y at linethick%
+    \hbox{\y at emptyboxes{#1}\y at vr}
+    \hrule height\y at linethick}\vspace{-\y at 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 at 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 at lastargtest| determines if the tableau should have only
+% one line, setting |\y at islastargtrue| or -|false|. If there is only one
+% line, |\yng| does the whole job in calling
+% |\y at nelineemptyboxes| once. Otherwise it calls |\y at ungempty| to do the
+% real thing. Note the spacing before and after the tableau using
+% |\hspace|.
+%    \begin{macrocode}
+\def\yng(#1){%
+  \y at setdim%
+  \hspace{\y at interspace}%
+  \ifmmode\ify at vcenter\vcenter\fi\fi{%
+  \y at lastargtest#1,
+  \vbox{\offinterlineskip
+    \ify at islastarg
+     \y at nelineemptyboxes{#1}
+    \else
+     \y at ungempty(#1)
+    \fi}}\hspace{\y at interspace}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\y at ungempty}
+% It is called with |\y at ungempty(#1)| from |\yng|. Now the parsing of
+% the arguments starts! As we know from |\y at 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 at ungempty(3,2,1)|. But |\y at ungempty| sees two
+% arguments: |#1| is |3| and |#2| is |2,1|! (Note the importance of the
+% brackets). |\y at ungempty| then processes the first argument immediately,
+% calling |\y at 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 at ne\-line\-empty\-boxes} again. Otherwise it calls
+% \emph{recursively itselve}, till all lines are processed.
+%    \begin{macrocode}
+\def\y at ungempty(#1,#2){%
+  \y at nelineemptyboxes{#1}
+  \y at lastargtest#2,
+  \ify at islastarg
+   \y at nelineemptyboxes{#2}
+  \else
+   \y at ungempty(#2)
+  \fi}
+%    \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\y at nelettertest}
+% The first macro especially for labelled boxes, that is, for
+% |\young|. Like \texttt{\bslash y at last\-arg\-test} it is used for
+% handling a indefinite number of arguments. (As mentioned before
+% \yts\ with labelled boxes have problem double.) |\y at nelettertest|
+% determines if the last box of the line has been reached.
+%
+% Again we will examine it's working method by examples:
+%
+% |\y at nelettertest ab.|\\
+% The period after the argument |ab| (and in the definition of
+% |\y at 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 at islastargfalse| is set. Now a little miracle:
+%
+% |\y at nelettertest a.|\\
+% In the opposite to the case of |\y at 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 at lastargtest|.
+%    \begin{macrocode}
+\def\y at nelettertest#1#2. {\if\space #2 \y at islastargtrue
+  \else\y at islastargfalse\fi}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\y at abcboxes}
+% Again we use a period to mark the end of arguments. Compare to
+% |\y at emptyboxes| -- Now it is more strenuous! The |\y at nelettertest|
+% macro makes sure that |\y at abcboxes| is called with at least two boxes
+% to process. If there are only two boxes |\y at abcboxes| calls
+% |\y at abcbox| two times, otherwise it calls itselve recursively again.
+% (The argument-splitting works as in |\y at ungempty|.)
+%    \begin{macrocode}
+\def\y at abcboxes#1#2.{%
+  \ify at stdtext\y at abcbox#1\else\y at mathabcbox#1\fi%
+  \y at nelettertest #2.
+%    \end{macrocode}
+% There must be a space or (equivalently) a carriage return after this
+% line!
+%    \begin{macrocode}
+  \ify at islastarg\unskip%
+   \ify at stdtext\y at abcbox{#2}\else\y at mathabcbox{#2}\fi%
+  \else\y at 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 at nelettertest|.) The |\unskip| resolves this problem.
+% \end{macro}
+%
+% \begin{macro}{\ify at enable@skew}
+% \begin{macro}{\y at full@b at xdim}
+% \begin{macro}{\y at m@veright at cnt}
+% Most of the skew boxes stuff can be found here along the definition
+% of \texttt{\bslash y at ne\-line\-abc\-boxes}. We need a further dimension,
+% for the effective lenght of one box in a row, |\y at full@b at xdim| =
+% |\y at b@xdim| + |1\y at 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 at m@veright at cnt|.
+%    \begin{macrocode}
+\ify at enable@skew
+ \newdimen\y at full@b at xdim
+ \newcount\y at m@veright at cnt
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\y at get@m at veright@cnt}
+% To find out the number of leading colons in a row we have the macro
+% \texttt{\bslash y at get@\-m at ve\-right@\-cnt}. Here we use exactly the same
+% trick as in |\y at nelettertest|.
+%    \begin{macrocode}
+ \def\y at get@m at veright@cnt#1#2.{%
+   \if :#1 \advance\y at m@veright at cnt by 1\y at get@m at veright@cnt#2.\fi}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\y at setdim}
+% Since we now have another dimension that depends on |\y at b@xdim|,
+% the dimension of the boxes, we have to extend |\y at setdim| to
+% calculate |\y at full@b at xdim| too. (The dummy |\y at setdim@| is used to
+% avoid a recursion.)
+%    \begin{macrocode}
+ \let\y at setdim@=\y at setdim
+ \def\y at setdim{%
+   \y at setdim@ \y at full@b at xdim=\y at b@xdim
+   \advance\y at full@b at xdim by 1\y at linethick}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\y at m@veright at 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 at m@veright at ifskew| will be a null-command (but
+% catches the argument).
+%    \begin{macrocode}
+ \def\y at m@veright at ifskew#1{
+   \y at m@veright at cnt=0 \y at get@m at veright@cnt#1.
+   \moveright \y at m@veright at cnt\y at full@b at xdim}
+\else
+ \def\y at m@veright at ifskew#1{}
+\fi  
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\y at nelineabcboxes}
+% This is the counterpart of |\y at nelineemptyboxes|. The difference
+% is the treatment of the case of a row of only one box -- Then only
+% |\y at abcbox| is called and not |\y at abcboxes|. If this row must be
+% moved to the right, this is done by |\y at m@veright at ifskew|.
+%    \begin{macrocode}
+\def\y at nelineabcboxes#1{%
+  \y at nelettertest #1.
+  \ify at islastarg
+   \y at m@veright at ifskew{#1}
+    \vbox{
+      \hrule height\y at linethick%
+      \hbox{\ify at stdtext\y at abcbox#1\else\y at mathabcbox#1\fi\y at vr}
+      \hrule height\y at linethick}\vspace{-\y at linethick}
+  \else
+   \y at m@veright at ifskew{#1}
+    \vbox{
+      \hrule height\y at linethick%
+      \hbox{\y at abcboxes #1.\y at vr}%
+      \hrule height\y at linethick}\vspace{-\y at 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 at setdim%
+  \hspace{\y at interspace}%
+  \y at lastargtest#1,
+  \ifmmode\ify at vcenter\vcenter\fi\fi{%
+  \vbox{\offinterlineskip
+    \ify at islastarg\y at nelineabcboxes{#1}%
+    \else\y at ungabc(#1)%
+    \fi}}\hspace{\y at interspace}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\y at ungabc}
+% Again nothing new -- see |\y at ungempty|
+%    \begin{macrocode}
+\def\y at ungabc(#1,#2){%
+  \y at nelineabcboxes{#1}%
+  \y at lastargtest#2,
+  \ify at islastarg\y at nelineabcboxes{#2}%
+  \else\y at ungabc(#2)%
+  \fi}
+%    \end{macrocode}
+% \end{macro}
+%    \begin{macrocode}
+%</package>
+%    \end{macrocode}
+%
+% \Finale
+\endinput


Property changes on: trunk/Master/texmf-dist/source/generic/youngtab/youngtab.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/generic/youngtab/youngtab.ins
===================================================================
--- trunk/Master/texmf-dist/source/generic/youngtab/youngtab.ins	                        (rev 0)
+++ trunk/Master/texmf-dist/source/generic/youngtab/youngtab.ins	2020-09-30 21:30:06 UTC (rev 56494)
@@ -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{***********************************************************}
+}
+
+
+

Added: trunk/Master/texmf-dist/tex/generic/youngtab/youngtab.sty
===================================================================
--- trunk/Master/texmf-dist/tex/generic/youngtab/youngtab.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/generic/youngtab/youngtab.sty	2020-09-30 21:30:06 UTC (rev 56494)
@@ -0,0 +1,152 @@
+%%
+%% This is file `youngtab.sty',
+%% generated with the docstrip utility.
+%%
+%% 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.
+%% 
+%% 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.
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{youngtab}
+[1999/05/19 v1.1; Macros for Young-Tableaux]
+%% 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)
+\newif\ify at autoscale \y at autoscaletrue \def\Yautoscale#1{\ifnum #1=0
+  \y at autoscalefalse\else\y at autoscaletrue\fi}
+\newdimen\y at b@xdim
+\newdimen\y at boxdim \y at boxdim=13pt
+\def\Yboxdim#1{\y at autoscalefalse\y at boxdim=#1}
+\newdimen\y at linethick    \y at linethick=.3pt
+\def\Ylinethick#1{\y at linethick=#1}
+\newskip\y at interspace \y at interspace=0ex plus 0.3ex
+\def\Yinterspace#1{\y at interspace=#1}
+\newif\ify at vcenter   \y at vcenterfalse
+\def\Yvcentermath#1{\ifnum #1=0 \y at vcenterfalse\else\y at vcentertrue\fi}
+\newif\ify at stdtext   \y at stdtextfalse
+\def\Ystdtext#1{\ifnum #1=0 \y at stdtextfalse\else\y at stdtexttrue\fi}
+\newif\ify at enable@skew   \y at enable@skewfalse
+\DeclareOption{noautoscale}{\y at autoscalefalse}
+\DeclareOption{vcentermath}{\y at vcentertrue}
+\DeclareOption{stdtext}{\y at vcentertrue}
+\DeclareOption{enableskew}{\y at enable@skewtrue}
+\DeclareOption*{\PackageWarning{youngtab}{%
+    Unknown option `\CurrentOption' (Known:\MessageBreak
+    `vcentermath', `noautoscale', `stdtext', `enableskew'.)}}
+\ProcessOptions\relax
+\def\y at vr{\vrule height0.8\y at b@xdim width\y at linethick depth 0.2\y at b@xdim}
+\def\y at emptybox{\y at vr\hbox to \y at b@xdim{\hfil}}
+\ify at enable@skew
+ \def\y at abcbox#1{\if :#1\else
+   \y at vr\hbox to \y at b@xdim{\hfil#1\hfil}\fi}
+ \def\y at mathabcbox#1{\if :#1\else
+   \y at vr\hbox to \y at b@xdim{\hfil$#1$\hfil}\fi}
+\else
+ \def\y at abcbox#1{\y at vr\hbox to \y at b@xdim{\hfil#1\hfil}}
+ \def\y at mathabcbox#1{\y at vr\hbox to \y at b@xdim{\hfil$#1$\hfil}}
+\fi
+\def\y at setdim{%
+  \ify at autoscale%
+   \ifvoid1\else\typeout{Package youngtab: box1 not free! Expect an
+     error!}\fi%
+   \setbox1=\hbox{A}\y at b@xdim=1.6\ht1 \setbox1=\hbox{}\box1%
+  \else\y at b@xdim=\y at boxdim \advance\y at b@xdim by -2\y at linethick
+  \fi}
+\newcount\y at counter
+\newif\ify at islastarg
+\def\y at lastargtest#1,#2 {\if\space #2 \y at islastargtrue
+  \else\y at islastargfalse\fi}
+\def\y at emptyboxes#1{\y at counter=#1\loop\ifnum\y at counter>0
+  \advance\y at counter by -1 \y at emptybox\repeat}
+\def\y at nelineemptyboxes#1{%
+  \vbox{%
+    \hrule height\y at linethick%
+    \hbox{\y at emptyboxes{#1}\y at vr}
+    \hrule height\y at linethick}\vspace{-\y at linethick}}
+\def\yng(#1){%
+  \y at setdim%
+  \hspace{\y at interspace}%
+  \ifmmode\ify at vcenter\vcenter\fi\fi{%
+  \y at lastargtest#1,
+  \vbox{\offinterlineskip
+    \ify at islastarg
+     \y at nelineemptyboxes{#1}
+    \else
+     \y at ungempty(#1)
+    \fi}}\hspace{\y at interspace}}
+\def\y at ungempty(#1,#2){%
+  \y at nelineemptyboxes{#1}
+  \y at lastargtest#2,
+  \ify at islastarg
+   \y at nelineemptyboxes{#2}
+  \else
+   \y at ungempty(#2)
+  \fi}
+\def\y at nelettertest#1#2. {\if\space #2 \y at islastargtrue
+  \else\y at islastargfalse\fi}
+\def\y at abcboxes#1#2.{%
+  \ify at stdtext\y at abcbox#1\else\y at mathabcbox#1\fi%
+  \y at nelettertest #2.
+  \ify at islastarg\unskip%
+   \ify at stdtext\y at abcbox{#2}\else\y at mathabcbox{#2}\fi%
+  \else\y at abcboxes#2.\fi}
+\ify at enable@skew
+ \newdimen\y at full@b at xdim
+ \newcount\y at m@veright at cnt
+ \def\y at get@m at veright@cnt#1#2.{%
+   \if :#1 \advance\y at m@veright at cnt by 1\y at get@m at veright@cnt#2.\fi}
+ \let\y at setdim@=\y at setdim
+ \def\y at setdim{%
+   \y at setdim@ \y at full@b at xdim=\y at b@xdim
+   \advance\y at full@b at xdim by 1\y at linethick}
+ \def\y at m@veright at ifskew#1{
+   \y at m@veright at cnt=0 \y at get@m at veright@cnt#1.
+   \moveright \y at m@veright at cnt\y at full@b at xdim}
+\else
+ \def\y at m@veright at ifskew#1{}
+\fi
+\def\y at nelineabcboxes#1{%
+  \y at nelettertest #1.
+  \ify at islastarg
+   \y at m@veright at ifskew{#1}
+    \vbox{
+      \hrule height\y at linethick%
+      \hbox{\ify at stdtext\y at abcbox#1\else\y at mathabcbox#1\fi\y at vr}
+      \hrule height\y at linethick}\vspace{-\y at linethick}
+  \else
+   \y at m@veright at ifskew{#1}
+    \vbox{
+      \hrule height\y at linethick%
+      \hbox{\y at abcboxes #1.\y at vr}%
+      \hrule height\y at linethick}\vspace{-\y at linethick}
+  \fi}
+\def\young(#1){%
+  \y at setdim%
+  \hspace{\y at interspace}%
+  \y at lastargtest#1,
+  \ifmmode\ify at vcenter\vcenter\fi\fi{%
+  \vbox{\offinterlineskip
+    \ify at islastarg\y at nelineabcboxes{#1}%
+    \else\y at ungabc(#1)%
+    \fi}}\hspace{\y at interspace}}
+\def\y at ungabc(#1,#2){%
+  \y at nelineabcboxes{#1}%
+  \y at lastargtest#2,
+  \ify at islastarg\y at nelineabcboxes{#2}%
+  \else\y at ungabc(#2)%
+  \fi}
+\endinput
+%%
+%% End of file `youngtab.sty'.


Property changes on: trunk/Master/texmf-dist/tex/generic/youngtab/youngtab.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property


More information about the tex-live-commits mailing list.