summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-01-11 23:58:14 +0000
committerKarl Berry <karl@freefriends.org>2006-01-11 23:58:14 +0000
commit090f8ec82714dc1647bdbca6daa9a10a7717d587 (patch)
tree0c5e6a195debfbca3495373a968482af69ef296f
parent685b12b130cc2244d8688e1fa5f458e7ae85dc92 (diff)
trunk/Master/texmf-dist/source/latex/tabvar
git-svn-id: svn://tug.org/texlive/trunk@541 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r--Master/texmf-dist/source/latex/tabvar/tabvar.dtx627
-rw-r--r--Master/texmf-dist/source/latex/tabvar/tabvar.ins66
2 files changed, 693 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/tabvar/tabvar.dtx b/Master/texmf-dist/source/latex/tabvar/tabvar.dtx
new file mode 100644
index 00000000000..3946e03aef0
--- /dev/null
+++ b/Master/texmf-dist/source/latex/tabvar/tabvar.dtx
@@ -0,0 +1,627 @@
+% \CheckSum{427}
+%
+% \iffalse
+% Files `tabvar.dtx', `tabvar.ins' and `tabvar.mp'
+%
+% All the files included in the `tabvar' distribution, including
+% the font, may be distributed and/or modified under the conditions
+% of the LaTeX Project Public License, either version 1.3 of this
+% license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2003/12/01 or later.
+%
+% This file has the LPPL maintenance status "maintained".
+%
+% NO PERMISSION is granted to produce or to distribute a
+% modified version of this file under its original name.
+%
+%<dtx>\ProvidesFile{tabvar.dtx}
+%<*sty>
+%%
+%% Copyright (C) Daniel Flipo 2003-2005 <daniel.flipo@univ-lille1.fr>.
+%%
+\NeedsTeXFormat{LaTeX2e}[1997/06/01]
+\ProvidesFile{tabvar.sty}
+ [2005/02/05 v0.9 (Daniel Flipo)]
+%</sty>
+%<*filedriver>
+\documentclass{ltxdoc}
+\usepackage{url}
+\usepackage[latin1]{inputenc}
+\usepackage[T1]{fontenc}
+\IfFileExists{lmodern.sty}{\usepackage{lmodern}}{}
+\usepackage[frenchb]{babel}
+\newcommand*\file[1]{\textsf{#1}}
+\begin{document}
+\parindent=0pt
+\begin{center}
+ \textbf{\Large Tableaux de variations : `tabvar'}\\[3mm]^^A\]
+ Daniel \textsc{Flipo}\\
+ \texttt{Daniel.Flipo@univ-lille1.fr}
+\end{center}
+ \DocInput{tabvar.dtx}
+\end{document}
+%</filedriver>
+% \fi
+% \GetFileInfo{tabvar.dtx}
+%
+% \section{Documentation}
+%
+% L'extension \file{tabvar.dtx}\footnote{La version pr\'esent\'ee
+% ici porte le num\'ero \fileversion, derni\`ere modification le
+% \filedate.}, a pour but de faciliter la saisie des tableaux de
+% variations.
+%
+% Elle s'appuie sur les extensions \file{array}, \file{colortbl},
+% et \file{varwidth}. Les fl\`eches sont prises dans une fonte
+% (type\,1) sp\'ecialement cr\'e\'ee par Michel~\bsc{Bovani}.
+% Un grand merci \`a Michel pour cette contribution et pour
+% ses remarques qui m'ont \'et\'e tr\`es utiles pour
+% am\'eliorer les versions pr\'eliminaires.
+%
+% Une autre possibilit\'e est de faire appel, pour les fl\`eches,
+% \`a MetaPost : le fichier \file{tabvar.mp} permet de cr\'eer les
+% trois fl\`eches \file{tabvar.1}, \file{tabvar.2}, \file{tabvar.3}.
+% Ceci est une solution de repli pour ceux qui auraient du mal
+% \`a installer la fonte \file{tabvar.pfb}.
+%
+% \subsection{Installation}
+%
+% Assurez-vous que l'extension \file{varwidth.sty} est pr\'esente
+% sur votre syst\`eme, sinon r\'ecup\'erez-les sur CTAN :
+% cherchez par exemple la cha\^{\i}ne |varwidth|
+% sur \url{http://www.tex.ac.uk/CTANfind.html}
+%
+% Les fichiers \file{tabvar.1}, \dots{} , \file{tabvar.3}
+% ainsi que \file{tabvar.sty} et \file{tabvar.cfg} doivent
+% \^etre plac\'es dans un r\'epertoire vu par \LaTeX.
+%
+% Les fl\`eches sont prises dans la fonte type\,1 \file{tabvar.pfb}
+% \`a condition que celle-ci soit correctement install\'ee :
+% il est n\'ecessaire de placer le fichier \file{tabvar.pfb} dans
+% un r\'epertoire o\`u il sera pris en compte, par exemple, pour
+% respecter l'architecture TDS : |texmf/fonts/type1/public/tabvar|.
+% De m\^eme, son fichier de m\'etriques \file{tabvar.tfm} devra
+% \^etre mis par exemple dans |texmf/fonts/tfm/public/tabvar|.
+%
+% Un ligne donnant acc\`es \`a cette fonte doit \^etre ajout\'ee
+% (voir \file{tabvar.map}) dans les fichiers |.map| utilis\'es
+% par le pilote PostScript (\file{psfonts.map}) et par pdf\TeX{}
+% (\file{pdftex.map}).
+% Ne pas oublier de mettre \`a jour les bases de donn\'ees ls-R
+% pour terminer (commande |mktexlsr| sous te\TeX{} ou \TeX{}Live).
+%
+% \subsection{Utilisation}
+%
+% L'environnement |tabvar| est une variante de l'environnement
+% |array|, adapt\'ee \`a la saisie de tableaux de variations.
+%
+% Trois nouveaux types de colonnes, |C|, |L| et |R| sont
+% utilis\'es \`a la place des types classiques (|c|, |l| et |r|) ;
+% ils permettent de disposer du mat\'eriel sur plusieurs niveaux
+% dans un m\^eme ligne du tableau (ce sont des colonnes de type
+% |\parbox|).
+%
+% Un quatri\`eme type de colonne, not\'e |N| sert pour les plages
+% o\`u la fonction est non d\'efinie. La colonne est enti\`erement
+% gris\'ee par d\'efaut, mais il est possible de choisir une autre
+% couleur (voir le fichier de configuration \file{tabvar.cfg}).
+%
+% La saisie des lignes contenant les valeurs de la variable et les
+% signes des d\'eriv\'ees se fait exactement comme celles d'un
+% tableau |array|. Seules les lignes contenant les variations de
+% la ou des fonctions font appel \`a six commandes
+% particuli\`eres : |\croit|, |\decroit|, |\constante|,
+% |\niveau|, |\dbarre| et |\discont|.
+%
+% \begin{itemize}
+%
+% \item Les commandes |\croit|, |\decroit| et |\constante| ne
+% prennent pas d'argument, elles tracent les fl\`eches
+% montantes, descendantes ou horizontales.
+%
+% \item |\niveau{|\emph{d\'epart}|}{|\emph{total}|}| prend
+% deux arguments : le niveau (hauteur) o\`u doit \^etre
+% positionn\'ee la premi\`ere valeur de la fonction et le
+% nombre total de niveaux qui seront utilis\'es dans la ligne.
+%
+% \item |\dbarre| trace un double trait vertical dont la hauteur
+% est celle de la ligne du tableau ; elle indique les
+% discontinuit\'es de la fonction.
+%
+% \item |\discont[|\emph{num}|]{|\emph{valeur\_gauche}|}{<|
+% ou |>}{|\emph{valeur\_droite}|}| peut
+% s'utiliser lorsque la fonction pr\'esente une
+% discontinuit\'e \`a la place de la double barre
+% traditionnelle ; elle prend trois arguments obligatoires :
+% les valeurs \`a gauche~$f_-$ et \`a droite~$f_+$ de la
+% fonction, s\'epar\'ees par un signe |<| ou |>| selon que
+% $f_-<f_+$ ou $f_->f_+$.
+% Enfin, l'argument optionnel, qui vaut~0 par d\'efaut,
+% permet d'intercaler \emph{num} niveaux suppl\'ementaires
+% entre les valeurs de~$f_-$ et~$f_+$ si n\'ecessaire.
+%
+% \end{itemize}
+%
+% Le fichier \file{demo.pdf} (joint) propose plusieurs exemples,
+% accompagn\'es de leur code source, illustrant les utilisations
+% possibles de l'environnement |tabvar|.
+%
+% \StopEventually{}
+%
+% \iffalse
+% \begin{macrocode}
+%<*sty>
+% \end{macrocode}
+% \fi
+%
+% \section{Le code}
+%
+% \subsection{Options}
+%
+% \changes{tabvar-0.9}{2004/12/29}{Par d\'efaut, les fl\`eches
+% sont prises maintenant dans la fonte type 1 de Michel Bovani.}
+%
+% \changes{tabvar-0.9}{2005/02/05}{Ajout de deux options pour
+% le choix du type de fl\`eches (suggestion de Frank Stengel).}
+%
+% Depuis la version~0.9, les fl\`eches utilis\'ees par d\'efaut
+% sont prises dans la fonte type\,1 de Michel Bovani.
+%
+% Si cette fonte sp\'ecifique n'a pas pu \^etre correctement
+% install\'ee, on pourra d\'eclarer |\FlechesMPtrue| dans le
+% fichier \file{tabvar.cfg} ou dans le pr\'eambule, ou encore
+% utiliser l'option |FlechesMP| pour que les fl\`eches
+% MetaPost utilis\'ees \`a la place.
+%
+% \begin{macrocode}
+\newif\ifFlechesMP \FlechesMPfalse
+\DeclareOption{FlechesMP}{\FlechesMPtrue}
+\DeclareOption{FlechesPS}{\FlechesMPfalse}
+\ProcessOptions
+% \end{macrocode}
+%
+% \subsection{Identification, extensions requises}
+%
+% Chargement des extensions utiles :
+%
+% \begin{macrocode}
+\RequirePackage{array}
+\RequirePackage{colortbl}
+\RequirePackage{varwidth}
+\RequirePackage{ifthen}
+% \end{macrocode}
+%
+% \subsection{Dessin des fl\`eches en MetaPost}
+%
+% Le fichier \file{tabvar.mp} (joint) contient le dessin des
+% trois fl\`eches.
+%
+% La commande |mpost -tex=latex tabvar| produit trois fichiers
+% \file{tabvar.1}\dots{} \file{tabvar.3} qui contiennent les
+% dessins des fl\`eches ; en PDF, il faut indiquer qu'il s'agit
+% de fichiers MetaPost.
+%
+% \begin{macrocode}
+\RequirePackage{graphicx}
+\RequirePackage{ifpdf}
+\ifpdf
+ \input{supp-pdf}
+ \DeclareGraphicsRule{*}{mps}{*}{}
+\fi
+% \end{macrocode}
+%
+% Les commandes |\FlecheCm|, |\FlecheDm| et |\FlecheHm| tracent
+% les trois types de fl\`eches MetaPost.
+%
+% \begin{macrocode}
+\newsavebox{\arup}
+\newsavebox{\ardown}
+\newsavebox{\arhor}
+% \end{macrocode}
+%
+% \changes{tabvar-0.9}{2004/12/29}{\cs{@ptsize} n'est malheureusement
+% pas définie par toutes les classes, d'où le \cs{providecommand}.}
+%
+% Certaines classes (beamer par exemple) ne d\'efinissent pas
+% |\@ptsize|, dans ce cas on renonce \`a la mise \`a l'\'echelle
+% des fl\`eches MetaPost.
+% \begin{macrocode}
+\providecommand{\@ptsize}{0}
+\sbox{\arup} {\includegraphics[scale=1.\@ptsize]{tabvar.1}}
+\sbox{\ardown}{\includegraphics[scale=1.\@ptsize]{tabvar.2}}
+\sbox{\arhor} {\includegraphics[scale=1.\@ptsize]{tabvar.3}}
+\newcommand{\FlecheCm}{\raisebox{.5ex}{\usebox{\arup}}}
+\newcommand{\FlecheDm}{\raisebox{.5ex}{\usebox{\ardown}}}
+\newcommand{\FlecheHm}{\raisebox{.5ex}{\usebox{\arhor}}}
+% \end{macrocode}
+%
+% \subsection{Fl\`eches comme caract\`eres d'une fonte type\,1}
+%
+% Les fl\`eches utilis\'ees par d\'efaut sont prises dans
+% la fonte type\,1 \og tvsymbols \fg{} de Michel Bovani.
+%
+% \begin{macro}{\FlecheC}
+% \begin{macro}{\FlecheD}
+% \begin{macro}{\FlecheH}
+% Le trac\'e des trois types de fl\`eches est fait par les
+% commandes |\FlecheC|, |\FlecheD| et |\FlecheH|.
+% Il pourrait sembler plus naturel de d\'efinir des commandes
+% |\FlecheCp|, |\FlecheDp| et |\FlecheHp| faisant appel \`a la
+% fonte \og tvsymbols \fg{} et de choisir au |\begin{document}|
+% entre la variante MetaPost et la variante type\,1 ; mais cette
+% solution consommerait syst\'ematiquement une fonte math\'ematique
+% parmi les 16 disponibles. Ici, la fonte \og tvsymbols \fg{} n'est
+% pas d\'eclar\'ee si on travaille avec les variantes MetaPost.
+%
+% \begin{macrocode}
+\AtBeginDocument{%
+ \ifFlechesMP
+ \newcommand{\FlecheC}{\FlecheCm}%
+ \newcommand{\FlecheD}{\FlecheDm}%
+ \newcommand{\FlecheH}{\FlecheHm}%
+ \else
+ \DeclareFontFamily{U}{tv}{}%
+ \DeclareFontShape{U}{tv}{m}{n}{<->tabvar}{}%
+ \DeclareSymbolFont{tvsymbols}{U}{tv}{m}{n}%
+ \DeclareMathSymbol{\enearrow}{\mathrel}{tvsymbols}{"25}%
+ \DeclareMathSymbol{\esearrow}{\mathrel}{tvsymbols}{"26}%
+ \DeclareMathSymbol{\eastarrow}{\mathrel}{tvsymbols}{"21}%
+ \newcommand{\FlecheC}{\ensuremath{\enearrow}}%
+ \newcommand{\FlecheD}{\ensuremath{\esearrow}}%
+ \newcommand{\FlecheH}{\ensuremath{\eastarrow}}%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Positionnement vertical de \'el\'ements}
+%
+% La variable |\TVextraheight|, dont la valeur par d\'efaut vaut
+% |.7\baselineskip| permet d'\'ecarter l\'eg\`erement les valeurs
+% maximales de la fonction, du filet horizontal sup\'erieur.
+%
+% \begin{macrocode}
+\newdimen\TVextraheight
+\setlength{\TVextraheight}{.7\baselineskip}
+% \end{macrocode}
+%
+% \begin{macro}{\niveau}
+% La commande |\niveau|, utilis\'ee uniquement dans les lignes
+% relatives aux valeurs des fonctions, permet d'initialiser les
+% valeurs des compteurs |\@niveaux| (nombre total de niveaux
+% utilis\'es dans la ligne) et |\@pos| (indicateur du niveau
+% courant). Elle active \'egalement le drapeau |\if@socle|
+% utilis\'e par la commande |\@socle|. Celle-ci place un filet
+% invisible de hauteur |\TVextraheight| et ajoute |\@pos - 1|
+% sauts de lignes (les colonnes sont align\'ees par le bas), ce
+% qui assure le positionnement vertical de l'\'el\'ement (valeur
+% de la fonction ou fl\`eche).
+% Le drapeau |\if@socle| devra \^etre mis localement \`a `faux'
+% dans certaines colonnes (cf. |\dbarre| et |discont|).
+% \begin{macrocode}
+\newcount\@niveaux
+\newcount\@pos
+\newif\if@socle
+\newcommand{\niveau}[2]{\global\@pos=#1 \global\@niveaux=#2
+ \global\@socletrue}
+\newcommand{\@socle}{%
+ \ifnum\@pos=1 \@soclefalse \fi
+ \if@socle
+ \rule{\z@}{\TVextraheight}%
+ \@tempcnta=\@pos
+ \advance\@tempcnta by -1
+ \whiledo{\@tempcnta>0}{\TVnl \null \advance\@tempcnta by -1}%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Nouveaux types de colonnes}
+%
+% Ces d\'efinitions n\'ecessitent les extensions |array| et
+% |varwidth|. L'environnement |varwidth|, comme |minipage|,
+% red\'efinit la commande |\\|. On la renomme \`a l'int\'erieur
+% des environnements |varwidth|, de fa\c{c}on \`a \'eviter la
+% confusion entre passage \`a la ligne \`a l'int\'erieur d'une
+% colonne et passage \`a la ligne suivante du tableau :
+% |\TVnl| (commande interne) provoque un changement de ligne \`a
+% l'int\'erieur d'une colonne, l'utilisateur peut continuer \`a
+% utiliser |\\| pour terminer une ligne du tableau.
+% La commande |\TVtabularnewline|, d\'efinie dans l'environnement
+% |tabvar|, provoque un changement de ligne dans le tableau
+% (|\tabularnewline|) et affecte la valeur `vrai' au drapeau
+% |\ifreset@niveaux|, ce qui commande la r\'einitialisation des
+% compteurs |\@pos| et |\@niveaux| \`a la valeur~1.
+% Cette r\'einitialisation aura lieu \emph{apr\`es} que la
+% commande |\@socle| ait plac\'e les valeurs de la fonction et
+% les fl\`eches \`a la bonne hauteur.
+%
+% \begin{macrocode}
+\newif\ifreset@niveaux
+\newcommand{\reset@niveaux}{%
+ \ifreset@niveaux
+ \global\@niveaux=1 \global\@pos=1 \global\@soclefalse
+ \fi}
+% \end{macrocode}
+%
+% On d\'efinit des variantes |C|, |L| et |R|, des colonnes |c|,
+% |l| et |r| : ce sont des \emph{minipage} align\'ees par le bas,
+% dont la largeur est celle de la ligne la plus longue, avec un
+% maximum de |5em|, (voir la documentation de l'extension
+% \file{varwidth.sty}).
+%
+% \begin{macrocode}
+\newcolumntype{C}{%
+ >{\begin{varwidth}[b]{5em}\let\TVnl=\\ \let\\=\TVtabularnewline $}%
+ c%
+ <{\@socle \reset@niveaux
+ $\@finalstrut\@arstrutbox\end{varwidth}}}
+\newcolumntype{L}{%
+ >{\begin{varwidth}[b]{5em}\let\TVnl=\\ \let\\=\TVtabularnewline $}%
+ l%
+ <{\@socle \reset@niveaux
+ $\@finalstrut\@arstrutbox\end{varwidth}}}
+\newcolumntype{R}{%
+ >{\begin{varwidth}[b]{5em}\let\TVnl=\\ \let\\=\TVtabularnewline $}%
+ r%
+ <{\@socle \reset@niveaux
+ $\@finalstrut\@arstrutbox\end{varwidth}}}
+% \end{macrocode}
+%
+% On d\'efinit \'egalement un type |N| pour les domaines o\`u la
+% fonction n'est pas d\'efinie : la colonne est colori\'ee en
+% faisant appel \`a l'extension \file{colortbl}. La couleur
+% peut \^etre choisie par l'utilisateur, par exemple :\\
+% |\definecolor{TVcolor}{rgb}{0.66, 0.8, 0}| \\
+% donne un vert, voir \file{color.sty} pour la fa\c{c}on de
+% d\'efinir des couleurs.
+% \begin{macrocode}
+\definecolor{TVcolor}{gray}{0.7}
+\newdimen\TVarraycolsep
+\newdimen\TVcolorLeftSep
+\newdimen\TVcolorRightSep
+\setlength{\TVcolorLeftSep}{\TVarraycolsep}
+\setlength{\TVcolorRightSep}{\TVarraycolsep}
+\newcolumntype{N}{%
+ >{\columncolor{TVcolor}[\TVcolorLeftSep][\TVcolorRightSep]}
+ c}
+% \end{macrocode}
+%
+% \subsection{Commandes de saisie}
+%
+% Les valeurs \`a afficher dans chaque ligne peuvent \^etre
+% saisies directement (|1.4|, |+|, |-|, etc.) comme dans un
+% tableau normal. Les lignes correspondant aux valeurs des
+% fonctions comportent plusieurs \'etages, nous disposons
+% deux compteurs, |\@niveaux| qui contient le nombre total
+% de niveaux (ou \'etages) utilis\'es dans la ligne, |\@pos|
+% qui indique le niveau courant.
+%
+% \begin{macro}{\croit}
+% \begin{macro}{\decroit}
+% \begin{macro}{\constante}
+% Les commandes |\croit|,|\decroit| et |\constante| tracent les
+% fl\`eches \`a la hauteur ad\'equate et mettent \`a jour le
+% compteur |\@pos|. Un message d'erreur est affich\'e lorsque
+% l'une de ces commandes fait sortir de la plage de niveaux
+% d\'eclar\'es par la commande |\niveau|.
+%
+% \begin{macrocode}
+\newcommand{\decroit}{\FlecheD
+ \global\advance\@pos by -1
+ \ifnum\@pos<1
+ \PackageError{tabvar.sty}%
+ {Les arguments la commande
+ \protect\niveau\space sont incorrects}%
+ \fi}
+\newcommand{\croit} {\raisebox{-\baselineskip}{\FlecheC}%
+ \global\advance\@pos by 1
+ \ifnum\@pos>\@niveaux
+ \PackageError{tabvar.sty}%
+ {Les arguments la commande
+ \protect\niveau\space sont incorrects}%
+ \fi}
+\newcommand{\constante}{\FlecheH}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\dbarre}
+% La commande |\dbarre| sert \`a tracer les doubles barres
+% La commande |\vline| ne peut pas \^etre utilis\'ee \`a cette fin
+% dans les environnements de type |\parbox|, car sa port\'ee
+% est limit\'ee \`a un interligne.
+%
+% On calcule la hauteur exacte de la rang\'ee, dans les deux cas
+% |\@niveaux=1| et |\@niveaux>1|, et on fait appel \`a |\rule|
+% pour le trac\'e.
+% \begin{macrocode}
+\newcommand{\dbarre}{\ifnum\@niveaux=1
+ \@tempdimc=\TVarraystretch\baselineskip
+ \else
+ \@tempcnta=\@niveaux
+ \advance\@tempcnta by -1
+ \@tempdimc=\@tempcnta\baselineskip
+ \@tempdimb=\TVextraheight
+ \ifdim\@tempdimb<.7\baselineskip
+ \@tempdimb=.7\baselineskip
+ \fi
+ \advance\@tempdimc by \@tempdimb
+ \advance\@tempdimc by \dp\@arstrutbox
+ \fi
+ \rule[-\dp\@arstrutbox]{.5\p@}{\@tempdimc}%
+ \kern 2\p@
+ \rule[-\dp\@arstrutbox]{.5\p@}{\@tempdimc}%
+ \@soclefalse}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\discont}
+% La commande |\discont| s'utilise lorsque la fonction pr\'esente
+% une discontinuit\'e, elle r\'eclame 3 arguments obligatoires :
+% le premier est la limite \`a gauche~$f_-$, le deuxi\`eme le signe
+% '<' ou '>', le troisi\`eme est la limite \`a droite~$f_+$.
+% \LaTeX{} ne peut pas toujours comparer facilement les valeurs
+% de $f_-$ et $f_+$ (penser \`a $f_-=\sqrt{e}$, $f_+=\pi/2$), le
+% deuxi\`eme argument pr\'ecise si $f_- < f_+$ ou si $f_- > f_+$.
+%
+% En plus de ces 3 arguments obligatoires, un argument optionnel
+% (entier positif) permet d'\'ecarter verticalement les valeurs
+% $f_-$ et~$f_+$ ; la valeur de cet entier donne le nombre de
+% niveaux suppl\'ementaires \`a intercaler (0 par d\'efaut).
+%
+% On commence par mesurer la largeur des deux arguments |#2| et
+% |#4| pour pouvoir les centrer ensuite dans une bo\^{\i}te de
+% largeur \'egale au maximum des deux largeurs.
+% Si cette disposition ne convient pas, on pourra toujours
+% ajouter un |\hfill| \`a droite o\`u \`a gauche de la valeur
+% \`a d\'eplacer.
+%
+% \begin{macrocode}
+\newcommand{\discont}[4][0]{%
+ \settowidth{\@tempdimc}{\ensuremath{#2}}%
+ \settowidth{\@tempdimb}{\ensuremath{#4}}%
+ \ifdim\@tempdimc<\@tempdimb \@tempdimc=\@tempdimb\fi
+ \rule{\z@}{\TVextraheight}%
+ \@soclefalse
+ \ifthenelse{\equal{#3}{<}}%
+% \end{macrocode}
+% Cas o\`u $f_- < f_+$ : on pose la valeur de~$f_+$ (|#4|), puis
+% on saute autant de lignes suppl\'ementaires qu'indiqu\'e dans
+% l'argument optionnel, ensuite on passe \`a la ligne et on pose
+% la valeur de~$f_-$ (|#2|), enfin on ajoute en dessous
+% |\@pos - 1| sauts de lignes pour positionner le tout en hauteur.
+% Il reste \`a ajuster le compteur~|\@pos| pour que la fl\`eche
+% suivante soit plac\'ee \`a la bonne hauteur.
+% \begin{macrocode}
+ {\makebox[\@tempdimc]{\ensuremath{#4}}%
+ \@tempcnta=#1
+ \whiledo{\@tempcnta>0}{\TVnl \null \advance\@tempcnta by -1}%
+ \TVnl
+ \makebox[\@tempdimc]{\ensuremath{#2}}%
+ \@tempcnta=\@pos
+ \advance\@tempcnta by -1
+ \whiledo{\@tempcnta>0}{\TVnl \null \advance\@tempcnta by -1}%
+ \global\advance\@pos by 1
+ \global\advance\@pos by #1
+ }%
+ {\ifthenelse{\equal{#3}{>}}%
+% \end{macrocode}
+% Cas o\`u $f_- > f_+$ : \textit{idem} en permutant $f_-$ et~$f_+$.
+% \begin{macrocode}
+ {\makebox[\@tempdimc]{\ensuremath{#2}}%
+ \@tempcnta=#1
+ \whiledo{\@tempcnta>0}{\TVnl \null \advance\@tempcnta by -1}%
+ \TVnl
+ \makebox[\@tempdimc]{\ensuremath{#4}}%
+ \@tempcnta=\@pos
+ \advance\@tempcnta by -2
+ \advance\@tempcnta by -#1
+ \whiledo{\@tempcnta>0}{\TVnl \null \advance\@tempcnta by -1}%
+ \global\advance\@pos by -1
+ \global\advance\@pos by -#1
+ }%
+% \end{macrocode}
+% Cas o\`u le deuxi\`eme argument n'est ni |<| ni |>| : erreur
+% \begin{macrocode}
+ {\PackageError{tabvar.sty}%
+ {Le second argument de \protect\discont\space doit \^etre
+ \MessageBreak soit '<' soit '>'}}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Environnement `tabvar'}
+%
+% L'environnement |tabvar| est un |array| o\`u sont red\'efinis
+% |\TVarraystretch|, |\TVarraycolsep| et |\tabularnewline|.
+%
+% \begin{environment}{tabvar}
+% \begin{macrocode}
+\newcommand{\TVarraystretch}{1.5}
+\setlength{\TVarraycolsep}{1pt}
+\newenvironment{tabvar}[1]
+ {\renewcommand{\arraystretch}{\TVarraystretch}%
+ \setlength{\arraycolsep}{\TVarraycolsep}%
+ \global\@niveaux=1 \global\@pos=1 \global\@soclefalse
+ \def\TVtabularnewline{\reset@niveauxtrue\tabularnewline}%
+ \begin{array}{#1}}
+ {\end{array}}
+% \end{macrocode}
+% \end{environment}
+%
+% Chargement du fichier de pr\'ef\'erences, si il en existe un.
+% \begin{macrocode}
+\InputIfFileExists{tabvar.cfg}
+ {\typeout{loading tabvar.cfg}}
+ {\typeout{tabvar.cfg not found, using default values}}
+% \end{macrocode}
+% \iffalse
+% \begin{macrocode}
+%</sty>
+% \end{macrocode}
+% \fi
+%
+% \section{Fichier de configuration}
+%
+% \iffalse
+% \begin{macrocode}
+%<*cfg>
+% \end{macrocode}
+% \fi
+% \begin{macrocode}
+%% Fichier de configuration de l'extension `tabvar.sty'.
+%%
+%% D\'ecommenter la ligne suivante pour que les variantes MetaPost
+%% des fl\`eches soient utilis\'ees \`a la place de la fonte tabvar.pfb.
+%%
+%%\FlechesMPtrue
+%%
+%% Ce param\`etre permet d'ajuster la hauteur des lignes
+%% de `tabvar' correspondant aux variations d'une fonction ;
+%% sa valeur par d\'efaut est :
+%%
+%%\setlength{\TVextraheight}{0.7\baselineskip}
+%%
+%% Valeur de \arraycolsep utilis\'ee dans `tabvar'.
+%%
+%%\setlength{\TVarraycolsep}{1pt}
+%%
+%% Valeur de \arraystretch utilis\'ee dans `tabvar'.
+%%
+%%\renewcommand{\TVarraystretch}{1.5}
+%%
+%% Exemples de d\'efinitions de couleurs pour les colonnes `N'
+%% o\`u la fonction est non d\'efinie.
+%%
+%%\definecolor{TVcolor}{gray}{0.5}
+%%\definecolor{TVcolor}{rgb}{0.33, 0.12, 0}
+%%\definecolor{TVcolor}{cmyk}{0.91,0,0.88,0.12}
+%%
+%% Les valeurs suivantes assurent que les colonnes `N' sont
+%% colori\'ees sur toute leur largeur.
+%%
+%%\setlength{\TVcolorLeftSep}{\TVarraycolsep}
+%%\setlength{\TVcolorRightSep}{\TVarraycolsep}
+% \end{macrocode}
+% \iffalse
+% \begin{macrocode}
+%</cfg>
+% \end{macrocode}
+% \fi
+%
+% \Finale
+%
+\endinput
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: t
+%%% fill-column: 70
+%%% coding: latin-1
+%%% End:
diff --git a/Master/texmf-dist/source/latex/tabvar/tabvar.ins b/Master/texmf-dist/source/latex/tabvar/tabvar.ins
new file mode 100644
index 00000000000..f48f48cb1df
--- /dev/null
+++ b/Master/texmf-dist/source/latex/tabvar/tabvar.ins
@@ -0,0 +1,66 @@
+%%
+%% This file will generate fast loadable files and documentation
+%% driver files from the doc files in this package when run through
+%% LaTeX or TeX.
+%%
+%% Copyright (C) Daniel Flipo 2003-2005 <daniel.flipo@univ-lille1.fr>.
+%%
+%% It may be distributed and/or modified under the conditions
+%% of the LaTeX Project Public License, either version 1.3 of
+%% this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2003/12/01 or later.
+%%
+%% --------------- start of docstrip commands ------------------
+%%
+\def\filedate{2004/12/30}
+\def\batchfile{tabvar.ins}
+\input docstrip.tex
+
+{\ifx\generate\undefined
+\Msg{**********************************************}
+\Msg{*}
+\Msg{* This installation requires docstrip}
+\Msg{* version 2.3c or later.}
+\Msg{*}
+\Msg{* An older version of docstrip has been input}
+\Msg{*}
+\Msg{**********************************************}
+\errhelp{Move or rename old docstrip.tex.}
+\errmessage{Old docstrip in input path}
+\batchmode
+\csname @@end\endcsname
+\fi}
+
+\keepsilent
+
+\usedir{tex/latex/tabvar}
+
+\generate{\file{tabvar.sty}{\from{tabvar.dtx}{sty}}
+ }
+
+\nopreamble
+\generate{\file{tabvar.cfg}{\from{tabvar.dtx}{cfg}}
+ }
+
+\ifToplevel{
+\Msg{***********************************************************}
+\Msg{*}
+\Msg{* Now, run 'mpost -tex=latex tabvar' to produce files}
+\Msg{* tabvar.1 tabvar.2 tabvar.3 from tabvar.mp}
+\Msg{*}
+\Msg{* To finish the installation you have to move the following}
+\Msg{* files into a directory searched by TeX:}
+\Msg{*}
+\Msg{* \space tabvar.sty tabvar.cfg tabvar.1 tabvar.2 tabvar.3}
+\Msg{*}
+\Msg{* To produce the documentation}
+\Msg{* run tabvar.dtx through LaTeX or pdfLaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing}
+\Msg{***********************************************************}
+}
+
+\endinput