<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">% \CheckSum{622}
%
% \iffalse meta-comment
% Files `tabvar.dtxâ€™, `tabvar.insâ€™ and `tabvar.mpâ€™
%
% Copyright (C) Daniel Flipo 2003-2022 &lt;daniel.flipo at free.fr&gt;
%
% 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
%
%&lt;*sty&gt;
%%
%% Copyright (C) Daniel Flipo 2003-2022 &lt;daniel.flipo at free.fr&gt;
%%
\NeedsTeXFormat{LaTeX2e}[1997/06/01]
\ProvidesFile{tabvar.sty}
%&lt;/sty&gt;
%&lt;*dtx&gt;
\ProvidesFile{tabvar.dtx}
%&lt;/dtx&gt;
%&lt;*!cfg&gt;
             [2022/07/16 v1.8 (Daniel Flipo)]
%&lt;/!cfg&gt;
%
%&lt;*driver&gt;
\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}
%&lt;/driver&gt;
%
% \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 Ã&nbsp; 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 Ã&nbsp; faire appel, pour le dessin des flÃ¨ches,
%    Ã&nbsp; 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
%    Ã&nbsp; installer la fonte \file{tabvar.pfb}, Ã&nbsp; 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}
%    Ã&nbsp; 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 Ã&nbsp; 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 Ã&nbsp; 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 Ã&nbsp; 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â€™Ã&nbsp; 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 Ã&nbsp; 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}|}{&lt;|
%        ou |&gt;}{|\emph{valeur\_droite}|}| peut
%        sâ€™utiliser lorsque la fonction prÃ©sente une
%        discontinuitÃ© Ã&nbsp; la place de la double barre
%        traditionnelle ; elle prend trois arguments obligatoires :
%        les valeurs Ã&nbsp; gauche~$f_-$ et Ã&nbsp; droite~$f_+$ de la
%        fonction, sÃ©parÃ©es par un signe |&lt;| ou |&gt;| selon que
%        $f_-&lt;f_+$ ou $f_-&gt;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 Ã&nbsp; des pointillÃ©s qui posent des
%    problÃ¨mes de raccordement dâ€™une ligne Ã&nbsp; 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 Â«Ã&nbsp; moustachesÂ»
%    obtenues par dÃ©faut), |\FlechesPS2| (assorties Ã&nbsp; la police
%    Fourier), |\FlechesPS3| et |\FlechesPS4|.
%
%    La commande |\TVcenter| prend un argument, elle sert Ã&nbsp;
%    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 Ã&nbsp; utiliser lorsquâ€™un Ã©lÃ©ment
%    du tableau colle Ã&nbsp; 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
%    Ã&nbsp; |\usepackage{xcolor}| \emph{avant} |\usepackage{tabvar}|,
%    afin dâ€™Ã©viter un certain nombre de \textit{Warnings}.
%
% \StopEventually{\PrintChanges}
%
% \iffalse
%&lt;*sty&gt;
% \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 Ã&nbsp; la place. Cette solution est Ã&nbsp;
%    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
%  Ã&nbsp; 10pt).  Utiliser \cs{f@size} Ã&nbsp; la place (patch proposÃ© par
%  Ulrike Fisher, merci Ulrike).}
%
%    La mise Ã&nbsp; lâ€™Ã©chelle des flÃ¨ches MetaPost se fait Ã&nbsp; 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 Ã&nbsp; |\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 Ã&nbsp; 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}{&lt;-&gt;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 Ã&nbsp; `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&gt;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 Ã&nbsp; lâ€™intÃ©rieur
%    des environnements |varwidth|, de faÃ§on Ã&nbsp; Ã©viter la
%    confusion entre passage Ã&nbsp; la ligne Ã&nbsp; lâ€™intÃ©rieur dâ€™une
%    colonne et passage Ã&nbsp; la ligne suivante du tableau :
%    |\TVnl| (commande interne) provoque un changement de ligne Ã&nbsp;
%    lâ€™intÃ©rieur dâ€™une colonne, lâ€™utilisateur peut continuer Ã&nbsp;
%    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| Ã&nbsp; 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 Ã&nbsp; 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} Ã&nbsp; \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Ã© Ã&nbsp; |\linewidth| par dÃ©faut, (voir la documentation de
%    lâ€™extension \file{varwidth.sty}).
%
%    \begin{macrocode}
\newdimen\TVmaxcolwidth
\setlength{\TVmaxcolwidth}{\linewidth}
\newcolumntype{C}{%
   &gt;{\begin{varwidth}[b]{\TVmaxcolwidth}\let\TVnl=\\
     \let\\=\TVtabularnewline $}%
   c%
   &lt;{\@socle \reset@niveaux
     $\@finalstrut\@arstrutbox\end{varwidth}}}
\newcolumntype{L}{%
   &gt;{\begin{varwidth}[b]{\TVmaxcolwidth}\let\TVnl=\\
     \let\\=\TVtabularnewline $}%
   l%
   &lt;{\@socle \reset@niveaux
     $\@finalstrut\@arstrutbox\end{varwidth}}}
\newcolumntype{R}{%
   &gt;{\begin{varwidth}[b]{\TVmaxcolwidth}\let\TVnl=\\
     \let\\=\TVtabularnewline $}%
   r%
   &lt;{\@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 Ã&nbsp; 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}{%
   &gt;{\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 Ã&nbsp; 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 Ã&nbsp; la hauteur adÃ©quate et mettent Ã&nbsp; 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&lt;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&gt;\@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 Ã&nbsp; tracer les doubles barres
%    La commande |\vline| ne peut pas Ãªtre utilisÃ©e Ã&nbsp; cette fin
%    dans les environnements de type |\parbox|, car sa portÃ©e
%    est limitÃ©e Ã&nbsp; un interligne.
%
%    On calcule la hauteur exacte de la rangÃ©e, dans les deux cas
%    |\@niveaux=1| et |\@niveaux&gt;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&lt;.7\baselineskip
       \@tempdimb=.7\baselineskip
     \fi
     \advance\@tempdimc by \@tempdimb
     \advance\@tempdimc by \dp\@arstrutbox
   \fi
   \@tempdimb=\dp\@arstrutbox}
%    \end{macrocode}
%    On fait appel Ã&nbsp; |\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 Ã&nbsp; gauche~$f_-$, le deuxiÃ¨me le signe
%    `&lt;â€™ ou `&gt;â€™, le troisiÃ¨me est la limite Ã&nbsp; droite~$f_+$.
%    \LaTeX{} ne peut pas toujours comparer facilement les valeurs
%    de $f_-$ et $f_+$ (penser Ã&nbsp; $f_-=\sqrt{e}$, $f_+=\pi/2$), le
%    deuxiÃ¨me argument prÃ©cise si $f_- &lt; f_+$ ou si $f_- &gt; 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 Ã&nbsp; 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| Ã&nbsp; droite oÃ¹ Ã&nbsp; gauche de la valeur
%    Ã&nbsp; dÃ©placer.
%
%    \begin{macrocode}
\newcommand{\discont}[4][0]{%
     \settowidth{\@tempdimc}{\ensuremath{#2}}%
     \settowidth{\@tempdimb}{\ensuremath{#4}}%
     \ifdim\@tempdimc&lt;\@tempdimb \@tempdimc=\@tempdimb\fi
     \rule{\z@}{\TVextraheight}%
     \@soclefalse
     \ifthenelse{\equal{#3}{&lt;}}%
%    \end{macrocode}
%    Cas oÃ¹ $f_- &lt; 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 Ã&nbsp; 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 Ã&nbsp; ajuster le compteur~|\@pos| pour que la flÃ¨che
%    suivante soit placÃ©e Ã&nbsp; la bonne hauteur.
%    \begin{macrocode}
     {\makebox[\@tempdimc]{\ensuremath{#4}}%
      \@tempcnta=#1
      \whiledo{\@tempcnta&gt;0}{\TVnl \null \advance\@tempcnta by -1}%
      \TVnl
      \makebox[\@tempdimc]{\ensuremath{#2}}%
      \@tempcnta=\@pos
      \advance\@tempcnta by -1
      \whiledo{\@tempcnta&gt;0}{\TVnl \null \advance\@tempcnta by -1}%
      \global\advance\@pos by 1
      \global\advance\@pos by #1
     }%
     {\ifthenelse{\equal{#3}{&gt;}}%
%    \end{macrocode}
%    Cas oÃ¹ $f_- &gt; f_+$ : \textit{idem} en permutant $f_-$ et~$f_+$.
%    \begin{macrocode}
     {\makebox[\@tempdimc]{\ensuremath{#2}}%
      \@tempcnta=#1
      \whiledo{\@tempcnta&gt;0}{\TVnl \null \advance\@tempcnta by -1}%
      \TVnl
      \makebox[\@tempdimc]{\ensuremath{#4}}%
      \@tempcnta=\@pos
      \advance\@tempcnta by -2
      \advance\@tempcnta by -#1
      \whiledo{\@tempcnta&gt;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 |&lt;| ni |&gt;| : erreur
%    \begin{macrocode}
     {\PackageError{tabvar.sty}%
        {Le second argument de \protect\discont\space doit Ãªtre
         \MessageBreak soit '&lt;' soit '&gt;'}}%
     }%
}
%    \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 Ã&nbsp; 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 Ã&nbsp; Ã©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| Ã&nbsp; la hauteur |\TV@tempa| et
%    |\TVextradepth| Ã&nbsp; la profondeur |\TV@tempb|.
%
%    Si lâ€™argument optionnel est une dimension positive, sa valeur
%    sera ajoutÃ©e uniquement Ã&nbsp; la hauteur et si câ€™est une
%    dimension nÃ©gative sa valeur absolue sera ajoutÃ©e uniquement
%    Ã&nbsp; 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&gt;0pt
      \addtolength{\TV@tempa}{\tmp}%
    \else
      \addtolength{\TV@tempb}{-\tmp}%
    \fi
  \fi
%    \end{macrocode}
%    Il reste Ã&nbsp; afficher la boÃ®te initiale et Ã&nbsp; 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
%&lt;/sty&gt;
% \fi
%
%  \section{Fichier de configuration}
%
% \iffalse
%&lt;*cfg&gt;
% \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 Ã&nbsp; 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 Ã&nbsp; 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
%&lt;/cfg&gt;
% \fi
%
% \Finale
%
% \PrintChanges
\endinput

%%% Local Variables:
%%% fill-column: 70
%%% coding: utf-8
%%% End:
</pre></body></html>