From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/latex/contrib/youngtab/README | 94 ++++ macros/latex/contrib/youngtab/makeydoc | 59 ++ macros/latex/contrib/youngtab/makeydoc.bat | 45 ++ macros/latex/contrib/youngtab/youngtab.dtx | 842 +++++++++++++++++++++++++++++ macros/latex/contrib/youngtab/youngtab.el | 42 ++ macros/latex/contrib/youngtab/youngtab.ins | 36 ++ macros/latex/contrib/youngtab/youngtab.pdf | Bin 0 -> 166158 bytes macros/latex/contrib/youngtab/youngtab.tex | 146 +++++ 8 files changed, 1264 insertions(+) create mode 100644 macros/latex/contrib/youngtab/README create mode 100755 macros/latex/contrib/youngtab/makeydoc create mode 100644 macros/latex/contrib/youngtab/makeydoc.bat create mode 100644 macros/latex/contrib/youngtab/youngtab.dtx create mode 100644 macros/latex/contrib/youngtab/youngtab.el create mode 100644 macros/latex/contrib/youngtab/youngtab.ins create mode 100644 macros/latex/contrib/youngtab/youngtab.pdf create mode 100644 macros/latex/contrib/youngtab/youngtab.tex (limited to 'macros/latex/contrib/youngtab') diff --git a/macros/latex/contrib/youngtab/README b/macros/latex/contrib/youngtab/README new file mode 100644 index 0000000000..5facde72a0 --- /dev/null +++ b/macros/latex/contrib/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/macros/latex/contrib/youngtab/makeydoc b/macros/latex/contrib/youngtab/makeydoc new file mode 100755 index 0000000000..d0fda75af8 --- /dev/null +++ b/macros/latex/contrib/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 < /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 < 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/macros/latex/contrib/youngtab/youngtab.dtx b/macros/latex/contrib/youngtab/youngtab.dtx new file mode 100644 index 0000000000..8db18c88c6 --- /dev/null +++ b/macros/latex/contrib/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. +% +%\NeedsTeXFormat{LaTeX2e} +%\ProvidesPackage{youngtab} +%[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} +% +% \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 +% . 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} +% +% \end{macrocode} +% +% \Finale +\endinput diff --git a/macros/latex/contrib/youngtab/youngtab.el b/macros/latex/contrib/youngtab/youngtab.el new file mode 100644 index 0000000000..458049e8e2 --- /dev/null +++ b/macros/latex/contrib/youngtab/youngtab.el @@ -0,0 +1,42 @@ +;;; youngtab.el - Support for the user macros of the youngtab package +;; by Volker B"orchers, +;; 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/macros/latex/contrib/youngtab/youngtab.ins b/macros/latex/contrib/youngtab/youngtab.ins new file mode 100644 index 0000000000..a58ace3a9e --- /dev/null +++ b/macros/latex/contrib/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/macros/latex/contrib/youngtab/youngtab.pdf b/macros/latex/contrib/youngtab/youngtab.pdf new file mode 100644 index 0000000000..b91f4ae4e9 Binary files /dev/null and b/macros/latex/contrib/youngtab/youngtab.pdf differ diff --git a/macros/latex/contrib/youngtab/youngtab.tex b/macros/latex/contrib/youngtab/youngtab.tex new file mode 100644 index 0000000000..895a7c3267 --- /dev/null +++ b/macros/latex/contrib/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'. -- cgit v1.2.3