<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窶册xtension \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窶兮vec
%    LuaLaTeX ou XeLaTeX.
%
%    Elle s窶兮ppuie 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窶冩nt ﾃｩ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窶册mployer qu窶册n
%    dernier recours.
%
%  \subsection{Installation}
%
%    L窶册xtension \file{tabvar} fait partie des distributions TeXLive,
%    MacTeX, ProTeXt, MikTeX, etc. Si elle n窶册st pas installﾃｩe chez
%    vous, assurez-vous d窶兮bord que l窶册xtension \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窶兮rchitecture 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窶册nvironnement \env{tabvar} est une variante de l窶册nvironnement
%    |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窶册xtension \file{numprint.sty}.}
%    sert pour les plages oﾃｹ la fonction n窶册st 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窶册st 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窶冰n
%    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窶兮rgument, 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窶冰tiliser 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 |&lt;| ou |&gt;| selon que
%        $f_-&lt;f_+$ ou $f_-&gt;f_+$.
%        Enfin, l窶兮rgument optionnel, qui vaut~0 par dﾃｩfaut,
%        permet d窶冓ntercaler \emph{num} niveaux supplﾃｩmentaires
%        entre les valeurs de~$f_-$ et~$f_+$ si nﾃｩcessaire.
%
%    \end{itemize}
%
%    Il est possible d窶兮jouter des filets d窶兮lignement 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窶冰ne 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窶冰sage 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窶冰ne ligne ﾃ� l窶兮utre 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窶冰ne
%    commande |\niveau{|\emph{dﾃｩpart}|}{|\emph{total}|}|.
%
%    La commande |\TVstretch| est ﾃ� utiliser lorsqu窶冰n ﾃｩ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窶冩nt pas d窶册ffet
%    sur l窶册nvironnement \env{tabvar} et que \file{tabls} est
%    incompatible avec \file{array} chargﾃｩ par \file{tabvar}.}.
%    |\TVstretch{|\emph{valeur}|}| ajoute un peu d窶册space
%    paramﾃｩtrable (2pt par dﾃｩfaut)%
%    \footnote{La valeur de l窶册space ajoutﾃｩ au-dessus est dﾃｩfinie
%    par \texttt{\boi setlength\{\boi TVextraheight\}\{2pt\}}, celle
%    de l窶册space 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窶冰tilise lorsqu窶冩n souhaite n窶兮jouter
%    d窶册space vertical que d窶冰n cﾃｴtﾃｩ (au-dessus ou au-dessous).
%    Si l窶兮rgument optionnel est une dimension positive, sa valeur
%    sera ajoutﾃｩe uniquement au-dessus et si c窶册st 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窶册nvironnement \env{tabvar}.
%
%    Plusieurs commandes ou paramﾃｨtres permettent de personnaliser
%    l窶兮spect 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窶兮utres usages, en
%    particulier \file{tabulary}.
%
%    Lorsqu窶冩n utilise l窶册xtension \file{xcolor}, placer l窶兮ppel
%    ﾃ� |\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窶兮 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窶冩ption |FlechesMP| pour que les flﾃｨches
%    MetaPost utilisﾃｩes ﾃ� la place. Cette solution est ﾃ�
%    proscrire lorsqu窶冩n 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窶冓l s窶兮git
%    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窶册rreur 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窶冰tilisateur 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窶冰ne commande
%    \cs{TVarrowscolstretch} permettant d窶兮ugmenter la largeur des
%    colonnes contenant les flﾃｨches.}
%
%    La commande |\TVarrowscolstretch|, dont la valeur par dﾃｩfaut
%    est~1, permet d窶兮ugmenter 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窶冰n chiffre compris entre 1 et 4
%  permet d窶兮ccﾃｩ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窶冩n 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窶冓nitialiser 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&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窶册nvironnement |varwidth|, comme |minipage|,
%    redﾃｩfinit la commande |\\|.  On la renomme ﾃ� l窶冓ntﾃｩrieur
%    des environnements |varwidth|, de faﾃｧon ﾃ� ﾃｩviter la
%    confusion entre passage ﾃ� la ligne ﾃ� l窶冓ntﾃｩrieur d窶冰ne
%    colonne et passage ﾃ� la ligne suivante du tableau :
%    |\TVnl| (commande interne) provoque un changement de ligne ﾃ�
%    l窶冓ntﾃｩrieur d窶冰ne colonne, l窶冰tilisateur peut continuer ﾃ�
%    utiliser |\\| pour terminer une ligne du tableau.
%    La commande |\TVtabularnewline|, dﾃｩfinie dans l窶册nvironnement
%    \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窶冰n paramﾃｨtre
%    \cs{TVmaxcolwidth} pour choisir la largeur maximale des colonnes
%    de type C, L, R, au lieu d窶冰ne 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窶册xtension \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窶册st 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窶册st pas dﾃｩfinie : la colonne est coloriﾃｩe en
%    faisant appel ﾃ� l窶册xtension \file{colortbl}. La couleur
%    peut ﾃｪtre choisie par l窶冰tilisateur, 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窶兮ncien nom \ctype{N}, conservﾃｩ pour
%    la compatibilitﾃｩ ascendante, tant qu窶冓l n窶凉 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 ﾃ� 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窶册rreur est affichﾃｩ lorsque
%    l窶冰ne 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窶冰ne
%   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&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 ﾃ� |\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窶兮rgument 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窶冰tilise 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
%    `&lt;窶� ou `&gt;窶�, 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_- &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 ﾃ� 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&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窶冓ndiquﾃｩ dans
%    l窶兮rgument 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&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窶册st 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 ﾃ� 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窶兮bsence d窶兮rgument optionnel, elle ajoute
%    respectivement |\TVextraheight| ﾃ� la hauteur |\TV@tempa| et
%    |\TVextradepth| ﾃ� la profondeur |\TV@tempb|.
%
%    Si l窶兮rgument optionnel est une dimension positive, sa valeur
%    sera ajoutﾃｩe uniquement ﾃ� la hauteur et si c窶册st une
%    dimension nﾃｩgative sa valeur absolue sera ajoutﾃｩe uniquement
%    ﾃ� la profondeur. La valeur par dﾃｩfaut de l窶兮rgument 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 ﾃ� 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窶册nvironnement \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窶册xtension `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窶冰ne des 4 variantes pour les flﾃｨches PostScript
%%
%%\FlechesPS1   % (dﾃｩfaut)
%%\FlechesPS2   % assorties ﾃ� la police Fourier
%%\FlechesPS3
%%\FlechesPS4
%%
%% Ce paramﾃｨtre permet d窶兮ugmenter 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窶兮juster la hauteur des lignes
%% de `tabvar窶� correspondant aux variations d窶冰ne 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>