% \CheckSum{622} % % \iffalse meta-comment % Files `tabvar.dtx’, `tabvar.ins’ and `tabvar.mp’ % % Copyright (C) Daniel Flipo 2003-2022 % % 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’. % % \fi % % \iffalse % %<*sty> %% %% Copyright (C) Daniel Flipo 2003-2022 %% \NeedsTeXFormat{LaTeX2e}[1997/06/01] \ProvidesFile{tabvar.sty} % %<*dtx> \ProvidesFile{tabvar.dtx} % %<*!cfg> [2022/07/16 v1.8 (Daniel Flipo)] % % %<*driver> \documentclass[a4paper]{ltxdoc} \usepackage{tabvar} \GetFileInfo{tabvar.dtx} \RecordChanges %\OnlyDescription % \usepackage{iftex,url} \iftutex \usepackage{fontspec} \else \usepackage[T1]{fontenc} \usepackage{lmodern} \fi \usepackage[french]{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ésentée % ici porte le numéro \fileversion, dernière modification le % \filedate.}, a pour but de faciliter la saisie des tableaux de % variations. Elle fonctionne aussi bien avec pdfLaTeX qu’avec % LuaLaTeX ou XeLaTeX. % % Elle s’appuie sur les extensions \file{array}, \file{colortbl}, % et \file{varwidth}. Les flèches sont prises dans une fonte % (type\,1) spécialement créée par Michel~\bsc{Bovani}. % Depuis la version~1.5, quatre variantes de flèches sont % proposées. % Un grand merci à Michel pour cette contribution et pour % ses remarques qui m’ont été très utiles pour % améliorer les versions préliminaires. % % Une autre possibilité (conservée uniquement pour préserver % la compatibilité avec les premières versions de \file{tabvar}) % consiste à faire appel, pour le dessin des flèches, % à MetaPost : le fichier \file{tabvar.mp} permet de créer les % trois flèches \file{tabvar.1}, \file{tabvar.2}, \file{tabvar.3}. % Ceci est une solution de repli pour ceux qui auraient du mal % à installer la fonte \file{tabvar.pfb}, à n’employer qu’en % dernier recours. % % \subsection{Installation} % % L’extension \file{tabvar} fait partie des distributions TeXLive, % MacTeX, ProTeXt, MikTeX, etc. Si elle n’est pas installée chez % vous, assurez-vous d’abord que l’extension \file{varwidth.sty} est % présente sur votre système, sinon récupérez-la sur CTAN : % cherchez par exemple la chaî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 % être placés dans un répertoire vu par \LaTeX. % % Les flèches sont prises dans la fonte type\,1 \file{tabvar.pfb} % à condition que celle-ci soit correctement installée : % il est nécessaire de placer le fichier \file{tabvar.pfb} dans % un répertoire où il sera pris en compte, par exemple, pour % respecter l’architecture TDS : |texmf/fonts/type1/public/tabvar|. % De même, son fichier de métriques \file{tabvar.tfm} devra % être mis par exemple dans |texmf/fonts/tfm/public/tabvar|. % % Un ligne donnant accès à cette fonte doit être ajoutée % (voir \file{tabvar.map}) dans les fichiers |.map| utilisés % par le pilote PostScript (\file{psfonts.map}) et par pdf\TeX{} % (\file{pdftex.map}). % Ne pas oublier de mettre à jour les bases de données 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ée à 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ériel sur % plusieurs niveaux dans un même ligne du tableau (ce sont des % colonnes de type |\parbox|). % % Un quatrième type de colonne, noté \ctype{U}% % \footnote{Il était noté \ctype{N} jusqu’à la version~1.5, % le type \ctype{N} est conservé pour assurer la % compatibilité ascendante mais ne devrait plus être utilisé % pour éviter un conflit avec l’extension \file{numprint.sty}.} % sert pour les plages où la fonction n’est pas définie % (\ctype{U} pour \textit{Undefined}). La colonne est entièrement % grisée par défaut, mais il est possible de choisir une autre % couleur (voir le fichier de configuration \file{tabvar.cfg}). % Désormais \file{tabvar} teste au |\begin{document}| si le type % \ctype{N} a été défini par une autre extension, si c’est le % cas un avertissement est affiché dans le fichier \file{.log} et % \file{tabvar} n’écrase plus la définition du type \ctype{N}. % Sinon, le type \ctype{N} est défini comme avant. % % La saisie des lignes contenant les valeurs de la variable et les % signes des dérivées se fait exactement comme celles d’un % tableau |array|. Seules les lignes contenant les variations de % la ou des fonctions font appel à six commandes % particulières : |\niveau|, |\croit|, |\decroit|, |\constante|, % |\dbarre| et |\discont|. % % \begin{itemize} % % \item |\niveau{|\emph{départ}|}{|\emph{total}|}| prend % deux arguments : le niveau (hauteur) où doit être % positionnée la première valeur de la fonction et le % nombre total de niveaux qui seront utilisés dans la ligne. % Le niveau le plus bas est numéroté 1. % % \item Les commandes |\croit|, |\decroit| et |\constante| ne % prennent pas d’argument, elles tracent les flèches % 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és de la fonction. % % \item |\discont[|\emph{num}|]{|\emph{valeur\_gauche}|}{<| % ou |>}{|\emph{valeur\_droite}|}| peut % s’utiliser lorsque la fonction présente une % discontinuité à la place de la double barre % traditionnelle ; elle prend trois arguments obligatoires : % les valeurs à gauche~$f_-$ et à droite~$f_+$ de la % fonction, séparées par un signe |<| ou |>| selon que % $f_-f_+$. % Enfin, l’argument optionnel, qui vaut~0 par défaut, % permet d’intercaler \emph{num} niveaux supplémentaires % entre les valeurs de~$f_-$ et~$f_+$ si nécessaire. % % \end{itemize} % % Il est possible d’ajouter des filets d’alignement vertical en % utilisant la commande |\barre{}| qui requiert un argument % obligatoire, éventuellement 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ée sur le filet. Ceci restreint évidemment % l’usage de la commande |\barre| aux colonnes de type \ctype{C}. % La couleur du filet (gris par défaut) est paramétrable, voir % le fichier de configuration \file{tabvar.cfg}. Cette solution a % été préférée à des pointillés qui posent des % problèmes de raccordement d’une ligne à l’autre du tableau. % % Depuis la version 1.5, quatre variantes sont proposées pour le % dessin des flèches PostScript type\,1, elles sont accessibles % par les commandes |\FlechesPS1| (flèches «à moustaches» % obtenues par défaut), |\FlechesPS2| (assorties à la police % Fourier), |\FlechesPS3| et |\FlechesPS4|. % % La commande |\TVcenter| prend un argument, elle sert à % centrer verticalement le nom de la fonction, par exemple % |\TVcenter{f(x)}|. Elle a besoin de connaître le nombre % total de niveaux, elle doit donc être précédée d’une % commande |\niveau{|\emph{départ}|}{|\emph{total}|}|. % % La commande |\TVstretch| est à utiliser lorsqu’un élément % du tableau colle à la ligne horizontale du dessus ou du % dessous% % \footnote{Noter que les extensions \file{cellspace} et % \file{tabls} qui règlent ce problème n’ont pas d’effet % sur l’environnement \env{tabvar} et que \file{tabls} est % incompatible avec \file{array} chargé par \file{tabvar}.}. % |\TVstretch{|\emph{valeur}|}| ajoute un peu d’espace % paramétrable (2pt par défaut)% % \footnote{La valeur de l’espace ajouté au-dessus est définie % par \texttt{\boi setlength\{\boi TVextraheight\}\{2pt\}}, celle % de l’espace ajouté au-dessous est définie 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ôté (au-dessus ou au-dessous). % Si l’argument optionnel est une dimension positive, sa valeur % sera ajoutée uniquement au-dessus et si c’est une dimension % négative sa valeur absolue sera ajoutée uniquement en % dessous. % % Le fichier \file{demo.pdf} (joint) propose plusieurs exemples, % accompagnés de leur code source, illustrant les utilisations % possibles de l’environnement \env{tabvar}. % % Plusieurs commandes ou paramètres 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és} % % \file{tabvar} est incompatible avec les extensions qui % définissent les mêmes types de colonnes (\ctype{C}, % \ctype{L}, \ctype{R}, \ctype{U}) pour d’autres usages, en % particulier \file{tabulary}. % % Lorsqu’on utilise l’extension \file{xcolor}, placer l’appel % à |\usepackage{xcolor}| \emph{avant} |\usepackage{tabvar}|, % afin d’éviter un certain nombre de \textit{Warnings}. % % \StopEventually{\PrintChanges} % % \iffalse %<*sty> % \fi % % \section{Le code} % % \subsection{Options} % % \changes{tabvar-0.9}{2004/12/29}{Par défaut, les flèches % 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èches (suggestion de Frank Stengel).} % % Depuis la version~0.9, les flèches utilisées par défaut % sont prises dans la fonte type\,1 de Michel Bovani. % % Si cette fonte spécifique n’a pas pu être correctement % installée, on pourra déclarer |\FlechesMPtrue| dans le % fichier \file{tabvar.cfg} ou dans le préambule, ou encore % utiliser l’option |FlechesMP| pour que les flèches % MetaPost utilisées à la place. Cette solution est à % 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èches} % % Le fichier \file{tabvar.mp} (joint) contient le dessin des % trois flèches en MetaPost. % % La commande |mpost -tex=latex tabvar| produit trois fichiers % \file{tabvar.1}\dots{} \file{tabvar.3} qui contiennent les % dessins des flèches ; 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éfinition des flèches en % MetaPost est déplacée (AtBeginDocument) pour éviter un % message d’erreur avec XeLaTeX. Bug signalé par Thierry Wybrecht.} % %\changes{tabvar-1.2}{2008/10/23}{\cs{@ptsize} peut prendre des % valeurs négatives (classes koma-script avec tailles inférieures % à 10pt). Utiliser \cs{f@size} à la place (patch proposé par % Ulrike Fisher, merci Ulrike).} % % La mise à l’échelle des flèches MetaPost se fait à 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ée % ne définit pas |\f@size|, on donne la valeur 10 à |\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} % \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èches.} % % La commande |\TVarrowscolstretch|, dont la valeur par défaut % est~1, permet d’augmenter la largeur des colonnes contenant les % flèches. % % \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èches % déssinées par Michel Bovani. % Ajout de la commande \cs{FlechesPS} pour y accéder.} % % La commande |\FlechesPS| suivie d’un chiffre compris entre 1 et 4 % permet d’accéder à quatre variantes pour les flèches % 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é des trois types de flèches 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 économise une fonte mathématique 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 éléments} % % La variable |\TVextraheight|, dont la valeur par défaut vaut % |.7\baselineskip| permet d’écarter légèrement les valeurs % maximales de la fonction, du filet horizontal supérieur. % % \begin{macrocode} \newdimen\TVextraheight \setlength{\TVextraheight}{.7\baselineskip} % \end{macrocode} % % \begin{macro}{\niveau} % La commande |\niveau|, utilisée uniquement dans les lignes % relatives aux valeurs des fonctions, permet d’initialiser les % valeurs des compteurs |\@niveaux| (nombre total de niveaux % utilisés dans la ligne) et |\@pos| (indicateur du niveau % courant). Elle active également le drapeau |\if@socle| % utilisé par la commande |\@socle|. Celle-ci place un filet % invisible de hauteur |\TVextraheight| et ajoute |\@pos - 1| % sauts de lignes (les colonnes sont alignées par le bas), ce % qui assure le positionnement vertical de l’élément (valeur % de la fonction ou flèche). % Le drapeau |\if@socle| devra être mis localement à `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éfinitions nécessitent les extensions |array| et % |varwidth|. L’environnement |varwidth|, comme |minipage|, % redéfinit la commande |\\|. On la renomme à l’intérieur % des environnements |varwidth|, de façon à éviter la % confusion entre passage à la ligne à l’intérieur d’une % colonne et passage à la ligne suivante du tableau : % |\TVnl| (commande interne) provoque un changement de ligne à % l’intérieur d’une colonne, l’utilisateur peut continuer à % utiliser |\\| pour terminer une ligne du tableau. % La commande |\TVtabularnewline|, définie 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éinitialisation des % compteurs |\@pos| et |\@niveaux| à la valeur~1. % Cette réinitialisation aura lieu \emph{après} que la % commande |\@socle| ait placé les valeurs de la fonction et % les flèches à 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ètre % \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} à \cs{linewidth}).} % % On définit des variantes \ctype{C}, \ctype{L} et \ctype{R}, % des colonnes \ctype{c}, \ctype{l} et \ctype{r} : ce sont des % \emph{minipage} alignées par le bas, dont la largeur est celle % de la ligne la plus longue, avec un maximum de |\TVmaxcolwidth| % fixé à |\linewidth| par défaut, (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é par numprint.sty. N.B.: c’est la dernière % définition qui est prise en compte par \cs{newcolumntype}, % donc celle de numprint si tabvar est chargé après tabvar % et inversement (cf. array.dtx).} % % On définit également un type \ctype{U} pour les domaines où % la fonction n’est pas définie : la colonne est coloriée en % faisant appel à l’extension \file{colortbl}. La couleur % peut être choisie par l’utilisateur, par exemple :\\ % |\definecolor{TVcolor}{rgb}{0.66, 0.8, 0}| \\ % donne un vert, voir \file{color.sty} pour la façon de % définir des couleurs. L’ancien nom \ctype{N}, conservé pour % la compatibilité ascendante, tant qu’il n’y a pas conflit, mais % ne devrait plus être utilisé. % % \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éfini par ailleurs. \MessageBreak Remplacer N par U dans \protect\begin{tabvar}{...N...} \MessageBreak}}% } % \end{macrocode} % % \subsection{Commandes de saisie} % % Les valeurs à afficher dans chaque ligne peuvent être % saisies directement (|1.4|, |+|, |-|, etc.) comme dans un % tableau normal. Les lignes correspondant aux valeurs des % fonctions comportent plusieurs étages, nous disposons % deux compteurs, |\@niveaux| qui contient le nombre total % de niveaux (ou étages) utilisés 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èches à la hauteur adéquate et mettent à jour le % compteur |\@pos|. Un message d’erreur est affiché lorsque % l’une de ces commandes fait sortir de la plage de niveaux % déclarés 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ée (utilisée par \cs{barre} et \cs{dbarre}).} % % \begin{macro}{\dbarre} % La commande |\dbarre| sert à tracer les doubles barres % La commande |\vline| ne peut pas être utilisée à cette fin % dans les environnements de type |\parbox|, car sa portée % est limitée à un interligne. % % On calcule la hauteur exacte de la rangée, 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 à |\rule| pour le tracé 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ée dans \cs{barre}. % Bug signalé par Frank Stengel.} % % \begin{macro}{\barre} % La commande |\barre| prend un argument obligatoire. % |\barre{}| trace un filet vertical centré dans une colonne. % Lorsque l’argument est non vide, celui-ci est superposé % (centré) sur le filet. Le filet est tracé en gris % par défaut (couleur paramétrable). % \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ésente % une discontinuité, elle réclame 3 arguments obligatoires : % le premier est la limite à gauche~$f_-$, le deuxième le signe % `<’ ou `>’, le troisième est la limite à droite~$f_+$. % \LaTeX{} ne peut pas toujours comparer facilement les valeurs % de $f_-$ et $f_+$ (penser à $f_-=\sqrt{e}$, $f_+=\pi/2$), le % deuxième argument précise si $f_- < f_+$ ou si $f_- > f_+$. % % En plus de ces 3 arguments obligatoires, un argument optionnel % (entier positif) permet d’écarter verticalement les valeurs % $f_-$ et~$f_+$ ; la valeur de cet entier donne le nombre de % niveaux supplémentaires à intercaler (0 par défaut). % % On commence par mesurer la largeur des deux arguments |#2| et % |#4| pour pouvoir les centrer ensuite dans une boîte de % largeur égale au maximum des deux largeurs. % Si cette disposition ne convient pas, on pourra toujours % ajouter un |\hfill| à droite où à gauche de la valeur % à déplacer. % % \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ù $f_- < f_+$ : on pose la valeur de~$f_+$ (|#4|), puis % on saute autant de lignes supplémentaires qu’indiqué dans % l’argument optionnel, ensuite on passe à 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 à ajuster le compteur~|\@pos| pour que la flèche % suivante soit placée à 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ù $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ù le deuxième argument n’est ni |<| ni |>| : erreur % \begin{macrocode} {\PackageError{tabvar.sty}% {Le second argument de \protect\discont\space doit être \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 à 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 à écarter des lignes horizontales et un % argument optionnel de type \emph{dimension}. % Elle place son argument dans une boîte et en mesure la hauteur % et la profondeur. En l’absence d’argument optionnel, elle ajoute % respectivement |\TVextraheight| à la hauteur |\TV@tempa| et % |\TVextradepth| à la profondeur |\TV@tempb|. % % Si l’argument optionnel est une dimension positive, sa valeur % sera ajoutée uniquement à la hauteur et si c’est une % dimension négative sa valeur absolue sera ajoutée uniquement % à la profondeur. La valeur par défaut 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 à afficher la boîte initiale et à 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ù sont % redéfinis |\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éférences, 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écommenter la ligne suivante pour que les variantes MetaPost %% des flèches soient utilisées à la place de la fonte tabvar.pfb %% (déconseillé en général et *jamais* sous LuaLaTeX ou XeLaTeX). %% %%\FlechesMPtrue %% %% Choix d’une des 4 variantes pour les flèches PostScript %% %%\FlechesPS1 % (défaut) %%\FlechesPS2 % assorties à la police Fourier %%\FlechesPS3 %%\FlechesPS4 %% %% Ce paramètre permet d’augmenter la largeur des colonnes contenant %% des flèches (essayer 1.3, 1.5, etc.), sa valeur par défaut est 1 : %% %%\renewcommand*{\TVarrowscolstretch}{1} %% %% Ce paramètre permet d’ajuster la hauteur des lignes %% de `tabvar’ correspondant aux variations d’une fonction ; %% sa valeur par défaut est : %% %%\setlength{\TVextraheight}{0.7\baselineskip} %% %% Valeur de \arraycolsep utilisée dans `tabvar’. %% %%\setlength{\TVarraycolsep}{1pt} %% %% Valeur de \arraystretch utilisée dans `tabvar’. %% %%\renewcommand{\TVarraystretch}{1.5} %% %% Largeur maximale des colonnes de type C, L ou R. %% %%\setlength{\TVmaxcolwidth}{\linewidth} %% %% Valeur des espaces verticaux ajoutés par la commande %% |\TVstretch{}|. %% %%\setlength{\TVextraheight}{2pt} %%\setlength{\TVextradepth}{2pt} %% %% Exemples de définitions de couleurs pour les colonnes `U’ %% où la fonction est non définie. %% %%\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ées sur toute leur largeur. %% %%\setlength{\TVcolorLeftSep}{\TVarraycolsep} %%\setlength{\TVcolorRightSep}{\TVarraycolsep} %% %% On peut ajuster comme ci-dessus la couleur des filets %% traçés par la commande \barre{}. %% %%\definecolor{TVbarrecolor}{gray}{0.7} % \end{macrocode} % \iffalse % % \fi % % \Finale % % \PrintChanges \endinput %%% Local Variables: %%% fill-column: 70 %%% coding: utf-8 %%% End: