% \CheckSum{482} % % \iffalse meta-comment % Files `tabvar.dtx', `tabvar.ins' and `tabvar.mp' % % Copyright (C) Daniel Flipo 2003-2008 % % 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. % % \fi % % \iffalse % %<*sty> %% %% Copyright (C) Daniel Flipo 2003-2008 %% \NeedsTeXFormat{LaTeX2e}[1997/06/01] \ProvidesFile{tabvar.sty} % %<*dtx> \ProvidesFile{tabvar.dtx} % %<*!cfg> [2008/10/23 v1.2 (Daniel Flipo)] % % %<*driver> \documentclass[a4paper]{ltxdoc} \usepackage{tabvar} \GetFileInfo{tabvar.dtx} \RecordChanges %\OnlyDescription % \usepackage{url} \usepackage[latin1]{inputenc} \usepackage[T1]{fontenc} \IfFileExists{lmodern.sty}{\usepackage{lmodern}}{} \usepackage[frenchb]{babel} \newcommand*\file[1]{\textsf{#1}} \setlength{\parindent}{0pt} \begin{document} \begin{center} \textbf{\Large Tableaux de variations : `tabvar'}\\[3mm]^^A\] Daniel \textsc{Flipo}\\ \texttt{Daniel.Flipo\at univ-lille1.fr} \end{center} \DocInput{tabvar.dtx} \end{document} % % % \fi % % \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_+$. % 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} % % Il est possible d'ajouter des filets d'alignement vertical en % utilisant la commande |\barre{}| qui requiert un argument % obligatoire, \'eventuellement vide : |\barre{}| trace un filet % vertical dont la hauteur est celle de la ligne du tableau. % Lorsqu'une valeur doit figurer sous le filet, on la passe en % argument de la commande (|\barre{0}| par exemple), ainsi cette % valeur sera centr\'ee sur le filet. Ceci restreint \'evidemment % l'usage de la commande |\barre| aux colonnes de type \texttt{C}. % La couleur du filet (gris par d\'efaut) est param\'etrable, voir % le fichier de configuration \file{tabvar.cfg}. Cette solution a % \'et\'e pr\'ef\'er\'ee \`a des pointill\'es qui posent des % probl\`emes de raccordement d'une ligne \`a l'autre du tableau. % % Le fichier \file{demo.pdf} (joint) propose plusieurs exemples, % accompagn\'es de leur code source, illustrant les utilisations % possibles de l'environnement |tabvar|. % % \StopEventually{\PrintChanges} % % \iffalse %<*sty> % \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-1.2}{2008/10/23}{\cs{@ptsize} peut prendre des % valeurs n\'egatives (classes koma-script avec tailles inf\'erieures % \`a 10pt). Utiliser \cs{f@size} à la place (patch propos\'e par % Ulrike Fisher, merci Ulrike).} % % La mise \`a l'\'echelle des fl\`eches MetaPost se fait \`a partir % de la valeur de |\f@size| qui contient normalement la taille en % points de la police de base (10 en 10pt). Si la classe utilis\'ee % ne d\'efinit pas |\f@size|, on donne la valeur 10 \`a |\f@size|, % la valeur par défaut de |\TVarrowscale| est alors 1.0 (échelle 1), % l'utilisateur peut toujours redéfinir lui-même |\TVarrowscale| % selon ses besoins. % \begin{macrocode} \providecommand{\f@size}{10} \newcommand{\TVarrowscale}{\strip@pt\dimexpr\f@size pt/10\relax} \sbox{\arup}{\includegraphics[scale=\TVarrowscale]{tabvar.1}} \sbox{\ardown}{\includegraphics[scale=\TVarrowscale]{tabvar.2}} \sbox{\arhor}{\includegraphics[scale=\TVarrowscale]{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} % % \changes{tabvar-1.0}{2006/03/14}{Ajout d'un param\`etre % \cs{TVmaxcolwidth} pour choisir la largeur maximale des colonnes % de type C, L, R, au lieu d'une valeur fixe (5em).} % % 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 |\TVmaxcolwidth| fix\'e \`a 5em par d\'efaut, (voir la % documentation de l'extension \file{varwidth.sty}). % % \begin{macrocode} \newdimen\TVmaxcolwidth \setlength{\TVmaxcolwidth}{5em} \newcolumntype{C}{% >{\begin{varwidth}[b]{\TVmaxcolwidth}\let\TVnl=\\ \let\\=\TVtabularnewline $}% c% <{\@socle \reset@niveaux $\@finalstrut\@arstrutbox\end{varwidth}}} \newcolumntype{L}{% >{\begin{varwidth}[b]{\TVmaxcolwidth}\let\TVnl=\\ \let\\=\TVtabularnewline $}% l% <{\@socle \reset@niveaux $\@finalstrut\@arstrutbox\end{varwidth}}} \newcolumntype{R}{% >{\begin{varwidth}[b]{\TVmaxcolwidth}\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} % % \changes{tabvar-1.1}{2007/05/07}{Ajout de la commande \cs{barre}. % Ajout de \cs{barre@dth} pour le calcul de la hauteur d'une % rang\'ee (utilis\'ee par \cs{barre} et \cs{dbarre}).} % % \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|, |\@tempdimc| contient la hauteur % totale (\textit{totalheight}) et |\@tempdimc| la profondeur % (\textit{depth}). % \begin{macrocode} \newcommand{\barre@dth}{% \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 \@tempdimb=\dp\@arstrutbox} % \end{macrocode} % On fait appel \`a |\rule| pour le trac\'e de |\dbarre|. % \begin{macrocode} \newcommand{\dbarre}{% \barre@dth \rule[-\@tempdimb]{.5\p@}{\@tempdimc}% \kern 2\p@ \rule[-\@tempdimb]{.5\p@}{\@tempdimc}% \@soclefalse} % \end{macrocode} % \end{macro} % % \begin{macro}{\barre} % La commande |\barre| prend un argument obligatoire. % |\barre{}| trace un filet vertical centr\'e dans une colonne. % Lorsque l'argument est non vide, celui-ci est superpos\'e % (centr\'e) sur le filet. Le filet est trac\'e en gris % par d\'efaut (couleur param\'etrable). % \begin{macrocode} \newsavebox{\tab@box} \definecolor{TVbarrecolor}{gray}{0.7} \newcommand{\barre}[1]{% \sbox{\tab@box}{\ensuremath{#1}}% \barre@dth \@tempcnta=\@niveaux \advance\@tempcnta by -\@pos \advance\@tempdimb by \@tempcnta\baselineskip \raisebox{-\@tempdimb}[0pt][0pt]{% \makebox[\wd\tab@box][c]{\color{TVbarrecolor}% \rule{.5\p@}{\@tempdimc}}}% \kern-\wd\tab@box\usebox{\tab@box}% } % \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 % % \fi % % \section{Fichier de configuration} % % \iffalse %<*cfg> % \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} %% %% Largeur maximale des colonnes de type C, L ou R. %% %%\setlength{\TVmaxcolwidth}{5em} %% %% 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} %% %% On peut ajuster comme ci-dessus la couleur des filets %% tra\c{c}\'es par la commande \barre{}. %% %%\definecolor{TVbarrecolor}{gray}{0.7} % \end{macrocode} % \iffalse % % \fi % % \Finale % \endinput %%% Local Variables: %%% fill-column: 70 %%% coding: latin-1 %%% End: