% \CheckSum{649} % % \iffalse meta-comment % Files `tabvar.dtx', `tabvar.ins' and `tabvar.mp' % % Copyright (C) Daniel Flipo 2003-2013 % % 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-2013 %% \NeedsTeXFormat{LaTeX2e}[1997/06/01] \ProvidesFile{tabvar.sty} % %<*dtx> \ProvidesFile{tabvar.dtx} % %<*!cfg> [2013/01/21 v1.7 (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} \GlossaryPrologue{\section*{Historique des versions}} \newcommand*\file[1]{\textsf{#1}} \newcommand*\ctype[1]{\texttt{#1}} \newcommand*\env[1]{\texttt{#1}} \setlength{\parindent}{0pt} \setlength{\parskip}{.5\baselineskip plus .2\baselineskip minus .2\baselineskip} \begin{document} \begin{center} \textbf{\Large Tableaux de variations : `tabvar'}\\[3mm]^^A\] Daniel \textsc{Flipo}\\ \texttt{Daniel.Flipo\at free.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}. % Depuis la version~1.5, quatre variantes de fl\`eches sont % propos\'ees. % 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 (conserv\'ee uniquement pour pr\'eserver % la compatibilit\'e avec les premi\`eres versions de \file{tabvar}) % consiste \`a faire appel, pour le dessin des 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}, \`a n'employer qu'en % dernier recours. % % Lorsqu'on travaille avec XeLaTeX ou LuaLaTeX il convient de % placer l'appel \`a |\usepackage{tabvar}| \emph{avant} % |\usepackage{fontspec}|. % % \subsection{Installation} % % L'extension \file{tabvar} fait partie des distributions TeXLive, % MacTeX, ProTeXt, MikTeX, etc. Si elle n'est pas install\'ee chez % vous, assurez-vous d'abord que l'extension \file{varwidth.sty} est % pr\'esente sur votre syst\`eme, sinon r\'ecup\'erez-la 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 \env{tabvar} est une variante de l'environnement % |array|, adapt\'ee \`a la saisie de tableaux de variations. % % Trois nouveaux types de colonnes, \ctype{C}, \ctype{L} et % \ctype{R} remplacent les types classiques \ctype{c}, \ctype{l} % et \ctype{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 \ctype{U}% % \footnote{Il \'etait not\'e \ctype{N} jusqu'\`a la version~1.5, % le type \ctype{N} est conserv\'e pour assurer la % compatibilit\'e ascendante mais ne devrait plus \^etre utilis\'e % pour \'eviter un conflit avec l'extension \file{numprint.sty}.} % sert pour les plages o\`u la fonction n'est pas d\'efinie % (\ctype{U} pour \textit{Undefined}). 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}). % D\'esormais \file{tabvar} teste au |\begin{document}| si le type % \ctype{N} a \'et\'e d\'efini par une autre extension, si c'est le % cas un avertissement est affich\'e dans le fichier \file{.log} et % \file{tabvar} n'\'ecrase plus la d\'efinition du type \ctype{N}. % Sinon, le type \ctype{N} est d\'efini comme avant. % % 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 : |\niveau|, |\croit|, |\decroit|, |\constante|, % |\dbarre| et |\discont|. % % \begin{itemize} % % \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. % Le niveau le plus bas est num\'erot\'e 1. % % \item Les commandes |\croit|, |\decroit| et |\constante| ne % prennent pas d'argument, elles tracent les fl\`eches % montantes, descendantes ou horizontales. % % \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 \ctype{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. % % Depuis la version 1.5, quatre variantes sont propos\'ees pour le % dessin des fl\`eches PostScript type\,1, elles sont accessibles % par les commandes |\FlechesPS1| (fl\`eches \og\`a moustaches\fg{} % obtenues par d\'efaut), |\FlechesPS2| (assorties \`a la police % Fourier), |\FlechesPS3| et |\FlechesPS4|. % % La commande |\TVcenter| prend un argument, elle sert \`a % centrer verticalement le nom de la fonction, par exemple % |\TVcenter{f(x)}|. Elle a besoin de conna\^{\i}tre le nombre % total de niveaux, elle doit donc \^etre pr\'ec\'ed\'ee d'une % commande |\niveau{|\emph{d\'epart}|}{|\emph{total}|}|. % % La commande |\TVstretch| est \`a utiliser lorsqu'un \'el\'ement % du tableau colle \`a la ligne horizontale du dessus ou du % dessous% % \footnote{Noter que les extensions \file{cellspace} et % \file{tabls} qui r\`eglent ce probl\`eme n'ont pas d'effet % sur l'environnement \env{tabvar} et que \file{tabls} est % incompatible avec \file{array} charg\'e par \file{tabvar}.}. % |\TVstretch{|\emph{valeur}|}| ajoute un peu d'espace % param\'etrable (2pt par d\'efaut)% % \footnote{La valeur de l'espace ajout\'e au-dessus est d\'efinie % par \texttt{\boi setlength\{\boi TVextraheight\}\{2pt\}}, celle % de l'espace ajout\'e au-dessous est d\'efinie par % \texttt{\boi setlength\{\boi TVextradepth\}\{2pt\}}.} % au dessus et en dessous de \emph{valeur}. % % La commande |\TVstretch| accepte un argument optionnel de type % \emph{dimension} qui s'utilise lorsqu'on souhaite n'ajouter % d'espace vertical que d'un c\^ot\'e (au-dessus ou au-dessous). % Si l'argument optionnel est une dimension positive, sa valeur % sera ajout\'ee uniquement au-dessus et si c'est une dimension % n\'egative sa valeur absolue sera ajout\'ee uniquement en % dessous. % % Le fichier \file{demo.pdf} (joint) propose plusieurs exemples, % accompagn\'es de leur code source, illustrant les utilisations % possibles de l'environnement \env{tabvar}. % % Plusieurs commandes ou param\`etres permettent de personnaliser % l'aspect du tableau (augmentation de la largeur ou de la hauteur % des cellules, etc.), voir le fichier \file{tabvar.cfg}. % % \subsection{Incompatibilit\'es} % % \file{tabvar} est incompatible avec les extensions qui % d\'efinissent les m\^emes types de colonnes (\ctype{C}, % \ctype{L}, \ctype{R}, \ctype{U}) pour d'autres usages, en % particulier \file{tabulary}. % % L'utilisation simultan\'ee de \file{tabvar}, \file{cellspace}, et % \file{siunitx} est pour l'instant impossible : \file{cellspace} % et \file{siuntix} utilisent tous les deux le param\`etre \ctype{S}, % pour \'eviter le conflit, \file{siuntix} red\'efinit le \ctype{S} % de \file{cellspace} en \ctype{C} ce qui provoque un autre conflit % avec \file{tabvar} ! Le probl\`eme a \'et\'e signal\'e \`a % l'auteur de \file{siuntix}. % % \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. Cette solution est \`a % proscrire lorsqu'on travaille avec XeLaTeX ou LuaLaTeX. % % \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} % % Le fichier \file{tabvar.mp} (joint) contient le dessin des % trois fl\`eches en MetaPost. % % 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. % % \changes{tabvar-1.61}{2012/03/14}{Charger supp-pdf.tex est inutile : % en mode PDF, graphics.sty appelle pdftex.def qui charge % supp-pdf.mkii.} % % \begin{macrocode} \RequirePackage{graphicx} \RequirePackage{ifpdf} \ifpdf \DeclareGraphicsRule{*}{mps}{*}{} \fi % \end{macrocode} % %\changes{tabvar-1.5}{2011/03/04}{La d\'efinition des fl\`eches en % MetaPost est d\'eplac\'ee (AtBeginDocument) pour \'eviter un % message d'erreur avec XeLaTeX. Bug signal\'e par Thierry Wybrecht.} % %\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} \`a 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\'efaut de |\TVarrowscale| est alors 1.0 % (\'echelle 1), l'utilisateur peut toujours red\'efinir lui-m\^eme % |\TVarrowscale| selon ses besoins. % \begin{macrocode} \providecommand{\f@size}{10} \newcommand{\TVarrowscale}{\strip@pt\dimexpr\f@size pt/10\relax} % \end{macrocode} % %\changes{tabvar-1.4}{2010/08/22}{Ajout d'une commande % \cs{TVarrowscolstretch} permettant d'augmenter la largeur des % colonnes contenant les fl\`eches.} % % La commande |\TVarrowscolstretch|, dont la valeur par d\'efaut % est~1, permet d'augmenter la largeur des colonnes contenant les % fl\`eches. % % \begin{macro}{\TVarrowscolstretch} % \begin{macrocode} \newcommand*{\TVarrowscolstretch}{1} \newcommand*{\TV@arrowcol@stretch}[1]{% \makebox[\TVarrowscolstretch\width][c]{#1}} % \end{macrocode} % \end{macro} % %\changes{tabvar-1.5}{2011/03/10}{Trois nouvelles formes de fl\`eches % d\'essin\'ees par Michel Bovani. % Ajout de la commande \cs{FlechesPS} pour y acc\'eder.} % % La commande |\FlechesPS| suivie d'un chiffre compris entre 1 et 4 % permet d'acc\'eder \`a quatre variantes pour les fl\`eches % PostScript. % % \begin{macro}{\FlechesPS} % \begin{macrocode} \newcommand*{\enearrow}{\enearrowi} \newcommand*{\esearrow}{\esearrowi} \newcommand*{\eastarrow}{\eastarrowi} \newcommand*{\FlechesPS}[1]{% \renewcommand*{\enearrow}{% \csname enearrow\romannumeral#1\endcsname}% \renewcommand*{\esearrow}{% \csname esearrow\romannumeral#1\endcsname}% \renewcommand*{\eastarrow}{% \csname eastarrow\romannumeral#1\endcsname}% } % \end{macrocode} % \end{macro} % % \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|. Le choix de la % variante (MetaPost ou type\,1) est fait au |\begin{document}|, % ce qui \'economise une fonte math\'ematique parmi les 16 % disponibles lorsqu'on choisit la variante MetaPost. % \begin{macrocode} \AtBeginDocument{% \ifFlechesMP \newsavebox{\arup}% \newsavebox{\ardown}% \newsavebox{\arhor}% \sbox{\arup}{\includegraphics[scale=\TVarrowscale]{tabvar.1}}% \sbox{\ardown}{\includegraphics[scale=\TVarrowscale]{tabvar.2}}% \sbox{\arhor}{\includegraphics[scale=\TVarrowscale]{tabvar.3}}% \newcommand*{\FlecheC}{% \TV@arrowcol@stretch{\raisebox{.5ex}{\usebox{\arup}}}}% \newcommand*{\FlecheD}{% \TV@arrowcol@stretch{\raisebox{.5ex}{\usebox{\ardown}}}}% \newcommand*{\FlecheH}{% \TV@arrowcol@stretch{\raisebox{.5ex}{\usebox{\arhor}}}}% \else \DeclareFontFamily{U}{tv}{}% \DeclareFontShape{U}{tv}{m}{n}{<->tabvar}{}% \DeclareSymbolFont{tvsymbols}{U}{tv}{m}{n}% \DeclareMathSymbol{\eastarrowi}{\mathrel}{tvsymbols}{"21}% \DeclareMathSymbol{\enearrowi}{\mathrel}{tvsymbols}{"25}% \DeclareMathSymbol{\esearrowi}{\mathrel}{tvsymbols}{"26}% \DeclareMathSymbol{\eastarrowii}{\mathrel}{tvsymbols}{"31}% \DeclareMathSymbol{\enearrowii}{\mathrel}{tvsymbols}{"35}% \DeclareMathSymbol{\esearrowii}{\mathrel}{tvsymbols}{"36}% \DeclareMathSymbol{\eastarrowiii}{\mathrel}{tvsymbols}{"3B}% \DeclareMathSymbol{\enearrowiii}{\mathrel}{tvsymbols}{"3F}% \DeclareMathSymbol{\esearrowiii}{\mathrel}{tvsymbols}{"40}% \DeclareMathSymbol{\eastarrowiv}{\mathrel}{tvsymbols}{"46}% \DeclareMathSymbol{\enearrowiv}{\mathrel}{tvsymbols}{"4A}% \DeclareMathSymbol{\esearrowiv}{\mathrel}{tvsymbols}{"4B}% \newcommand*{\FlecheC}{% \TV@arrowcol@stretch{\ensuremath{\enearrow}}}% \newcommand*{\FlecheD}{% \TV@arrowcol@stretch{\ensuremath{\esearrow}}}% \newcommand*{\FlecheH}{% \TV@arrowcol@stretch{\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 % \env{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.} % % \changes{tabvar-1.2b}{2009/10/03}{Augmenter la valeur de % \cs{TVmaxcolwidth} \`a \cs{linewidth}).} % % On d\'efinit des variantes \ctype{C}, \ctype{L} et \ctype{R}, % des colonnes \ctype{c}, \ctype{l} et \ctype{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 |\linewidth| par d\'efaut, (voir la documentation de % l'extension \file{varwidth.sty}). % % \begin{macrocode} \newdimen\TVmaxcolwidth \setlength{\TVmaxcolwidth}{\linewidth} \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} % %\changes{tabvar-1.6}{2011/07/07}{Ajout du type `U' synonyme de `N' % utilis\'e par numprint.sty. N.B.: c'est la derni\`ere % d\'efinition qui est prise en compte par \cs{newcolumntype}, % donc celle de numprint si tabvar est charg\'e apr\`es tabvar % et inversement (cf. array.dtx).} % % On d\'efinit \'egalement un type \ctype{U} 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. L'ancien nom \ctype{N}, conserv\'e pour % la compatibilit\'e ascendante, tant qu'il n'y a pas conflit, mais % ne devrait plus \^etre utilis\'e. % % \begin{macrocode} \definecolor{TVcolor}{gray}{0.7} \newdimen\TVarraycolsep \newdimen\TVcolorLeftSep \newdimen\TVcolorRightSep \setlength{\TVcolorLeftSep}{\TVarraycolsep} \setlength{\TVcolorRightSep}{\TVarraycolsep} \newcolumntype{U}{% >{\columncolor{TVcolor}[\TVcolorLeftSep][\TVcolorRightSep]} c} \AtBeginDocument{% \@ifundefined{NC@find@N}% {\newcolumntype{N}{U}}% {\PackageWarning{tabvar}{Le type de colonne N est d\'efini par ailleurs. \MessageBreak Remplacer N par U dans \protect\begin{tabvar}{...N...} \MessageBreak}}% } % \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 |\@tempdimb| 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} % %\changes{tabvar-1.3}{2010/04/03}{% % Valeur de la profondeur \cs{@tempdimb} corrig\'ee dans \cs{barre}. % Bug signal\'e par Frank Stengel.} % % \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=\@pos \advance\@tempcnta by -1 \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} % %\changes{tabvar-1.6}{2011/07/07}{Ajout de la commande \cs{TVcenter}.} % % \begin{macro}{\TVcenter} % La commande |\TVcenter{}| prend un argument, le nom de la % fonction \`a centrer verticalement dans sa colonne. % \begin{macrocode} \newcommand*{\TVcenter}[1]{% \@tempcnta=\@niveaux \advance\@tempcnta by -1 \divide\@tempcnta by 2 \@tempdimb=\@tempcnta\baselineskip \ifodd\@niveaux\else\advance\@tempdimb by .5\baselineskip\fi \@pos=1\raisebox{\@tempdimb}{\ensuremath{#1}}% } % \end{macrocode} % \end{macro} % %\changes{tabvar-1.7}{2012/12/23}{Ajout de la commande \cs{TVstretch}.} % % \begin{macro}{\TVstretch} % La commande |\TVstretch{}| prend un argument obligatoire, le nom % de la valeur \`a \'ecarter des lignes horizontales et un % argument optionnel de type \emph{dimension}. % Elle place son argument dans une bo\^{\i}te et en mesure la hauteur % et la profondeur. En l'absence d'argument optionnel, elle ajoute % respectivement |\TVextraheight| \`a la hauteur |\TV@tempa| et % |\TVextradepth| \`a la profondeur |\TV@tempb|. % % Si l'argument optionnel est une dimension positive, sa valeur % sera ajout\'ee uniquement \`a la hauteur et si c'est une % dimension n\'egative sa valeur absolue sera ajout\'ee uniquement % \`a la profondeur. La valeur par d\'efaut de l'argument optionnel % est |0pt|. % % \begin{macrocode} \newsavebox\TVbox \newdimen\TVextraheight \newdimen\TVextradepth \setlength{\TVextraheight}{2pt} \setlength{\TVextradepth}{2pt} \newdimen\TV@tempa \newdimen\TV@tempb \newcommand{\TVstretch}[2][0pt]{% \edef\tmp{#1}% \sbox{\TVbox}{\ensuremath{#2}}% \settoheight{\TV@tempa}{\usebox{\TVbox}}% \settodepth {\TV@tempb}{\usebox{\TVbox}}% \ifdim\tmp=0pt \addtolength{\TV@tempa}{\TVextraheight}% \addtolength{\TV@tempb}{\TVextradepth}% \else \ifdim\tmp>0pt \addtolength{\TV@tempa}{\tmp}% \else \addtolength{\TV@tempb}{-\tmp}% \fi \fi % \end{macrocode} % Il reste \`a afficher la bo\^{\i}te initiale et \`a lui adjoindre % une |\rule| invisible (de largeur nulle) de profondeur % |\TV@tempb| et de hauteur totale |\TV@tempa + \TV@tempb|. % \begin{macrocode} \usebox{\TVbox}% \addtolength{\TV@tempa}{\TV@tempb}% \rule[-\TV@tempb]{0pt}{\TV@tempa}% } % \end{macrocode} % \end{macro} % % \subsection{Environnement `tabvar'} % % L'environnement \env{tabvar} est un \env{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 %% (d\'econseill\'e en g\'en\'eral et *jamais* sous LuaLaTeX ou XeLaTeX). %% %%\FlechesMPtrue %% %% Choix d'une des 4 variantes pour les fl\`eches PostScript %% %%\FlechesPS1 % (d\'efaut) %%\FlechesPS2 % assorties \`a la police Fourier %%\FlechesPS3 %%\FlechesPS4 %% %% Ce param\`etre permet d'augmenter la largeur des colonnes contenant %% des fl\`eches (essayer 1.3, 1.5, etc.), sa valeur par d\'efaut est 1 : %% %%\renewcommand*{\TVarrowscolstretch}{1} %% %% 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}{\linewidth} %% %% Valeur des espaces verticaux ajout\'es par la commande %% |\TVstretch{}|. %% %%\setlength{\TVextraheight}{2pt} %%\setlength{\TVextradepth}{2pt} %% %% Exemples de d\'efinitions de couleurs pour les colonnes `U' %% 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 `U' 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 % % \PrintChanges \endinput %%% Local Variables: %%% fill-column: 70 %%% coding: us-ascii %%% End: