% \iffalse meta-comment % % Copyright (C) 2018-2023 by Antoine Missier % % This file 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 % 2005/12/01 or later. % To get the index compile with % makeindex -s gind.ist -o tablvar.ind tablvar.idx % \fi % % \iffalse %<*driver> \ProvidesFile{tablvar.dtx} % %<*package> \NeedsTeXFormat{LaTeX2e}[2005/12/01] \ProvidesPackage{tablvar} [2023/12/23 v2.0 .dtx tablvar file] % %<*driver> \documentclass{ltxdoc} \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage[french]{babel} \usepackage{lmodern} \usepackage{geometry} % pour éviter certains changements avec XeLaTeX \usepackage{tabvar} \let\barreFlipo\barre \let\barre\relax \let\discont\relax \usepackage{variations} \def\bbObrecht{\vrule\kern1pt\vrule} \let\bb\relax \let\variations\relax \usepackage{tkz-tab} \usepackage[pstricks]{tablvar} \usepackage[style=french,font=fcm]{lgrmath} % pour un joli pi droit \usepackage{hyperref} \usepackage{sectsty} \usepackage{makecell} \usepackage{spacingtricks} \usepackage{metalogo} % pour \LuaLaTeX et \XeLaTeX \usepackage{mflogo} % pour metapost \usepackage{colortbl} \frenchsetup{StandardListSpacing=true} \geometry{textwidth=355pt,vmarginratio=1:1,hmarginratio=3:2} % voisin de ltxdoc \newcommand*\dfrac[2]{{\displaystyle\frac{#1}{#2}}} \newcommand\e{\mathrm{e}} \newcommand\TikZ{\textnormal{Ti}\emph{k}\textnormal{Z}} \newcommand\chline{\arrayrulecolor{cyan}\hline\arrayrulecolor{black}} \definecolor{darkbrown}{rgb}{0.5,0.1,0.1} \allsectionsfont{\color{darkbrown}} \hypersetup{% colorlinks, linkcolor=blue, citecolor=red, pdftitle={tablvar}, pdfsubject={LaTeX package}, pdfauthor={Antoine Missier} } \DisableCrossrefs %\CodelineIndex %\RecordChanges \begin{document} \DocInput{tablvar.dtx} %\PrintChanges %\PrintIndex \end{document} % % \fi % % \CheckSum{752} % % \CharacterTable % {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z % Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z % Digits \0\1\2\3\4\5\6\7\8\9 % Exclamation \! Double quote \" Hash (number) \# % Dollar \$ Percent \% Ampersand \& % Acute accent \' Left paren \( Right paren \) % Asterisk \* Plus \+ Comma \, % Minus \- Point \. Solidus \/ % Colon \: Semicolon \; Less than \< % Equals \= Greater than \> Question mark \? % Commercial at \@ Left bracket \[ Backslash \\ % Right bracket \] Circumflex \^ Underscore \_ % Grave accent \` Left brace \{ Vertical bar \| % Right brace \} Tilde \~} % % \changes{v0.1}{05/01/2014}{Version initiale personnelle} % \changes{v0.2}{11/11/2014}{Ajout de l'option tikz} % \changes{v0.3}{07/12/2014}{Ajout de l'environnement tablvar*} % \changes{v1.0}{11/11/2018}{Première version publiée, création de fichiers dtx et ins} % \changes{v1.0}{11/11/2018}{Nouvelle marcro bblim, changements dans les macros barre et ZIh} % \changes{v1.1}{12/04/2019}{Reprise README.md, tvloop -> varloop} % \changes{v1.2}{05/05/2019}{Modifications mineures dans la documentation} % \changes{v1.2}{02/06/2019}{Augmentation du facteur arraystretch par défaut de 1.2 à 1.4} % \changes{v2.0}{03/09/2023}{ % - Options gérées par xkeyval, % - tablvarstretch passé de 1.4 à 1.6} % \changes{v2.0}{30/10/2023}{Calcul de la colonne pour la gestion des ZI} % \changes{v2.0}{05/11/2023}{ % - Nouvelles macros limg, limd, posvr, % - nouveaux types de colonnes pour les valeurs} % \changes{v2.0}{20/11/2023}{Comparatif avec les autres extensions} % \changes{v2.0}{25/11/2023}{Calcul de hauteur de la 1ère colonne pour l'ajustement des ZI} % \changes{v2.0}{02/12/2023}{ % - Nouveaux paramètres firstcolsep, extleft, extright, % - mise à 0 du paramètre innercolsep} % \changes{v2.0}{14/12/2023}{Reprise de la doc} % \changes{v2.0}{15/12/2023}{Option tikz ou pstricks en fonction du compilateur} % \changes{v2.0}{16/12/2023}{Nouveau paramètre limsep} % \changes{v2.0}{20/12/2023}{Macro bas et mil valables pour un nb quelconque de lignes} % \changes{v2.0}{22/12/2023}{Macros @pos -> tv@pos, @@pos -> tv@@pos} % % \GetFileInfo{tablvar.sty} % % \DoNotIndex{\@@ZI,\tv@@pos,\tv@pos,\@ZI,\@arstrutbox,\@ifstar,\\} % \DoNotIndex{\addtocounter,\advance,\arraybackslash} % \DoNotIndex{\begin,\boolean,\centering,\color,\DeclareOption,\def} % \DoNotIndex{\define@boolkey,\defin@key,\dp,\draw,\else,\empty,\end} % \DoNotIndex{\fi,\fill,\global,\hspace,\ht} % \DoNotIndex{\I,\if,\ifdim,\ifnum,\ifthenelse,\Ix,\Iy,\kern} % \DoNotIndex{\makebox,\MessageBreak,\multido,\ncline,\newboolean,} % \DoNotIndex{\newcommand,\newcounter,\newenvironment,\newlength,\newsavebox} % \DoNotIndex{\node,\PackageWarningNoLine,\ProcessOptions,\psframe} % \DoNotIndex{\raisebox,\relax,\renewcommand,\RequirePackage,\rnode} % \DoNotIndex{\sbox,\setboolean,\setcounter,\setlength,\stepcounter} % \DoNotIndex{\TikZ,\tvanchor,\usetikzlibrary,\value,\wd} % \DoNotIndex{\ZIheight,\ZIheighti,\ZIheightii,\ZIheightiii,\ZIheightiv,\ZIdepth,\ZIwidth} % % \title{L'extension \textsf{tablvar}\thanks{Ce document % correspond à \textsf{tablvar}~\fileversion, dernière modification le 23/12/2023.}} % \author{Antoine Missier \\ \texttt{antoine.missier@ac-toulouse.fr}} % \date{23 décembre 2023} % \maketitle % \tableofcontents % % \section{Introduction} % % Cette extension permet de construire des tableaux de variations et de signes % de manière simple et intuitive. % Bien que plusieurs autres extensions soient déjà dédiées à cette tâche % \footnote{Mentionnons \textsf{tabvar}~\cite{TABV} de Daniel Flipo et % \textsf{variations}~\cite{VARI} de Christian Obrecht ou, plus élaborés, % \textsf{tablor}~\cite{TABLOR} de Guillaume Connan et \textsf{tkz-tab}~\cite{TKZ} % de Alain Matthes. % Nous présentons un comparatif à la section \ref{comparatif}}, % nous pensons que \textsf{tablvar} possède quelques avantages : % une syntaxe simple, une haute qualité graphique, une variété de positionnements % et de réglages, une documentation soignée. % Les dessins, pour les flèches ou les zones interdites, sont obtenus % en exploitant les fonctionnalités des extensions graphiques PSTricks % (plus exactement \textsf{pst-node}) ou \TikZ. % Les flèches sont réalisées à partir d'un \emph{graphe} de \emph{nœuds} % venant se \og superposer \fg{} au tableau lui-même. % % Le parti pris est d'utiliser la même syntaxe que les environnements % |array| (ou |tabular|) en laissant à \LaTeX\ le soin de faire % la composition du tableau et à l'extension graphique % (PSTricks ou \TikZ) celui % de réaliser le dessin des flèches, automatisé et sans intervention de l'utilisateur. % On a simplement besoin de préciser, dans une commande |\variations|, % ce qui est en haut et ce qui est en bas. % % \medskip % L'extension possède deux options, utilisées pour le tracé automatique des flèches : % |pstricks| ou |tikz|, que l'on invoque dans le préambule à l'appel de l'extension : % |\usepackage[tikz]{tablvar}|. % Lorsque l'option n'est pas précisée, l'extension choisira \texttt{tikz} % pour un compilateur PDF (comme pdf\LaTeX\ ou \LuaLaTeX), \texttt{pstricks} sinon % (typiquement \LaTeX\ + dvips + ps2pdf ou \XeLaTeX). % Pour l'option |tikz|, il faut compiler \emph{deux fois}, % la première fois les flèches ne sont pas correctement dessinées % (un message de compilation le rappelle). % % \medskip % Cette documentation donne une galerie d'exemples, décrit les commandes % fournies ainsi que différentes possibilités de réglages et d'ajustements personnels. % % \section{Utilisation} % % \subsection{Tableaux de variations simples} % % % \DescribeEnv{tablvar} % Un tableau de variations (ou de signes) se définit par un environnement |tablvar| % qui \emph{doit être en mode mathématiques} (comme |array|). % % \medskip % Voici un premier tableau tout simple avec les commandes % \DescribeMacro{\haut} \DescribeMacro{\bas} \DescribeMacro{\mil} % de positionnement naïves |\haut|, |\bas| et |\mil| (milieu). % %\[ %\begin{tablvar}{4} % \hline % x & -5 && -1 && 2 && 3 && 5 \\ % \hline % f'(x) & & + & 0 & - & 0 & + & 0 & - & \\ % \hline % \variations{ \mil{f(x)} & \bas{0} && \haut{2} && \bas{1} && % \haut{4} && \bas{-3} } % \hline %\end{tablvar} %\] % \begin{verbatim} %\[\begin{tablvar}{4} % \hline % x & -5 && -1 && 2 && 3 && 5 \\ % \hline % f'(x) & & + & 0 & - & 0 & + & 0 & - & \\ % \hline % \variations{ \mil{f(x)} & \bas{0} && \haut{2} && \bas{1} && % \haut{4} && \bas{-3} } % \hline %\end{tablvar}\] % \end{verbatim} % % L'argument obligatoire de l'environnement |tablvar| correspond au nombre % d'intervalles du tableau c'est-à-dire aussi au nombre de flèches (ici 4). % Les délimiteurs |&| correspondent aux changements de colonnes % comme pour l'environnement |array|. % Outre la première colonne de \emph{légendes}, il y a deux types de colonnes : % des colonnes de \emph{valeurs}, de largeur fixe (\texttt{2em} par défaut) et centrées, % et des colonnes \emph{intervalles} de largeur fixe (\texttt{3em} par défaut) % \footnote{Une dimension peut être exprimée cm, pt, etc. % Le \texttt{em} correspond à la largeur du \og m \fg dans la fonte utilisée. % Cette unité à l'avantage de s'ajuster lorsqu'on change de fonte % sans avoir besoin de modifier le code. L'unité de même type utilisée pour les hauteurs % est le \texttt{ex}, hauteur du \og x \fg.}. % Les flèches ne sont pas contraintes à rester à l'intérieur des colonnes intervalles % mais s'ajustent par rapport à la taille effective des valeurs qu'elles relient. % Lorsqu'une valeur est trop large, elle déborde automatiquement % dans les colonnes intervalles sans altérer % les largeurs de colonne. % % \medskip % \DescribeMacro{\pos} % Les commandes |\haut| et |\bas| reposent sur une macro % plus générale qui est \cmd{\pos}\oarg{opt}\marg{ligne}\marg{valeur}. Celle-ci place % la \meta{valeur} sur la \meta{ligne} indiquée en créant un nœud pour les flèches. % La ligne des $x$ et les lignes contenant dérivée % et tableau de signes ont pour indice 0. % Les lignes de la partie variations sont numérotées 1, 2, 3, % \emph{du haut vers le bas}, dans le sens de l'écriture % et de la construction du tableau. % Le paramètre optionnel \meta{opt} % \footnote{Ce paramètre optionnel n'est pas implémenté % et est sans effet pour l'option \texttt{tikz}.} % permet d'ajuster le positionnement des flèches : % |c| (centered, par défaut), |b| (bottom) ou |t| (top). % % \medskip % \DescribeMacro{\pos*} % La commande |\mil|, utilisée pour le $f(x)$ dans la première colonne, % repose, elle, sur la commande plus générale \cmd{\pos*}\marg{ligne}\marg{valeur} % qui se comporte comme |\pos| mais ne crée pas de nœud pour les flèches. % % Le second tableau de l'exemple ci-dessous est obtenu avec le code suivant % qui utilise les commandes |\pos| % à la place de |\haut| et |\bas| (avec l'option |t| pour le max) % et |\pos*| à la place de |\mil|. Comparer le positionnement des flèches. %\[ %\begin{tablvar}{2} % \hline % x & 0 & & \frac{1}{2} & & +\infty \\ % \hline % f'(x) & & + & 0 & - & \\ % \hline % \variations{\mil{f(x)} & \bas{2} && % \haut{f(\frac{1}{2})} && \bas{0}} % \hline %\end{tablvar} % \hspace{3.8em} %\begin{tablvar}{2} % \hline % x & 0 & & \frac{1}{2} & & +\infty \\ % \hline % f'(x) & & + & 0 & - & \\ % \hline % \variations{\pos*{2}{f(x)} & \pos{3}{2} && % \pos[t]{1}{f(\frac{1}{2})} && \pos{3}{0}} % \hline %\end{tablvar} %\] % \begin{verbatim} %\[\begin{tablvar}{2} % \hline % x & 0 & & \frac{1}{2} & & +\infty \\ % \hline % f'(x) & & + & 0 & - & \\ % \hline % \variations{ \pos*{2}{f(x)} & \pos{3}{2} && % \pos[t]{1}{f(\frac{1}{2}} && \pos{3}{0} } % \hline %\end{tablvar}\] % \end{verbatim} % \hypertarget{intervalwidth}{} % % \medskip % \DescribeEnv{tablvar\oarg{largeur}}\DescribeMacro{intervalwidth} % L'environnement |tablvar| accepte un argument optionnel qui règle % la largeur des colonnes intervalles. % L'on peut aussi passer diverses options avec la syntaxe \emph{clé=valeur}, % par exemple la largeur des colonnes intervalles peut également se régler avec % \texttt{intervalwidth=}\meta{largeur} % (voir section \ref{options} pour la liste détaillée des options). % % \DescribeMacro{\variations\oarg{nblignes}} % C'est la commande |\variations| qui, se charge de la construction des flèches % en fonction du positionnement des valeurs. % Un paramètre optionnel permet de définir % un nombre arbitraire de lignes pour les variations (3 par défaut). % % Voici un exemple avec un seul intervalle, utilisant l'argument optionnel \texttt{4em} % de \texttt{tablvar}, afin d'allonger un peu la largeur de l'intervalle, % et une partie variations construite uniquement sur 2 lignes. % La commande |\mil| positionne automatiquement son contenu % avec un décalage vertical adéquat. % % \noindent % \begin{minipage}[t]{8cm} % \begin{verbatim} %\[\begin{tablvar}[4em]{1} % \hline % x & -5 && +\infty \\ % \hline % \variations[2]{ \mil{f(x)} & \haut{2} && % \bas{-1} } % \hline %\end{tablvar} \] % \end{verbatim} % \end{minipage} % \begin{minipage}[t]{4.2cm} %\[\begin{tablvar}[4em]{1} % \hline % x & -5 && +\infty \\ % \hline % \variations[2]{\mil{f(x)} & \haut{2} && \bas{-1}} % \hline %\end{tablvar}\] % \end{minipage} % \hypertarget{colvalwidth}{} % % \DescribeMacro{colvalwidth} % La largeur des colonnes de valeurs est fixée par défaut à \texttt{2em}, % ce qui est légèrement plus large qu'un infini avec un signe. % Lorsque toutes les valeurs sont étroites, on peut éventuellement % diminuer la largeur des colonnes intervalles pour éviter des espaces larges sur les % bords du tableau. % Il est cependant rarement utile de modifier cette valeur. %\[\begin{tablvar}[colvalwidth=1em,intervalwidth=3.5em]{4} % \hline % x & 0 && 1 && 2 && 3 && 5 \\ % \hline % \variations{ \pos*{2}{f(x)} & \pos{3}{0} && \pos{2}{1} && \pos{2}{1} % && \pos{1}{4} && \pos{3}{0} % } % \hline %\end{tablvar}\] % Pour placer des nœuds de flèches au milieu (sur la ligne 2), % on doit utiliser |\pos{2}| et non |\mil|. % Lorsqu'il y a une autre option dans l'environnement \texttt{tablvar}, % il faut utiliser la syntaxe complète % \texttt{intervalwidth=...} pour modifier la largeur des colonnes intervalles. % \begin{verbatim} %\[\begin{tablvar}[colvalwidth=1em,intervalwidth=3.5em]{4} % \hline % x & -5 && 0 && 2 && 3 && 5 \\ % \hline % \variations{ \pos*{2}{f(x)} & \pos{3}{-4} && \pos{2}{1} && \pos{2}{1} % && \pos{1}{4} && \pos{3}{0} } % \hline %\end{tablvar}\] % \end{verbatim} % % \subsection{Tableaux de signes avec barres de séparation} % % \DescribeMacro{\barre} % La macro |\barre|, présentée dans l'exemple ci-dessous, sert de séparateur % de colonne dans les tableaux de signes. Elle est bien sûr % facultative et possède un paramètre optionnel pour placer un 0 sur la barre. % Voici un exemple avec % \[ f(x)=-4x^3+3x^2+18x-3 \quad\mbox{et}\quad f'(x)=6(x+1)(-2x+3).\] %\[\begin{tablvar}[3.5em]{3} % \hline % x & -\infty && -1 && \frac{3}{2} && +\infty \\ % \hline % x+1 & & - & \barre[0] & + & \barre & + & \\ % \hline % -2x+3 & & + & \barre & + & \barre[0] & - & \\ % \hline % \mbox{Signe de }f'(x) & & - & \barre[0] & + & \barre[0] & - & \\ % \hline % \variations{ \mil{\makecell{\mbox{Variations} \\ \mbox{de }f}} & % \haut{+\infty} && \bas{-14} && \haut{\frac{69}{4}} && \bas{-\infty} } % \hline %\end{tablvar}\] % % La légende \og Variations de $f$ \fg est composée avec une coupure de ligne grâce à % la commande |\makecell| de l'extension \textsf{makecell}~\cite{MKCELL} d'Olga Lapko. % \begin{verbatim} %\[\begin{tablvar}{3} % \hline % x & -\infty && -1 && \frac{3}{2} && +\infty \\ % \hline % x+1 & & - & \barre[0] & + & \barre & + & \\ % \hline % -2x+3 & & + & \barre & + & \barre[0] & - & \\ % \hline % \mbox{Signe de }f'(x) & & - & \barre[0] & + & \barre[0] & - & \\ % \hline % \variations{ \mil{\makecell{\mbox{Variations} \\ \mbox{de }f}} & % \haut{+\infty} && \bas{-14} && \haut{\frac{69}{4}} && \bas{-\infty} } % \hline %\end{tablvar}\] % \end{verbatim} % % \subsection{Doubles barres, discontinuités et limites} % % \DescribeMacro{\bb} % Une double barre s'obtient avec la commande |\bb|. % % \DescribeMacro{\discont} % La commande |\discont| empêche le dessin d'une flèche entre deux nœuds, % en particulier pour éviter de traverser une double barre. % On peut en placer jusqu'à 4. % % \medskip % Une première solution est d'interrompre la double barre pour placer % les limites qui resteront alors centrées au milieu de la colonne (mais il faut aimer). %\[\begin{tablvar}{2} % \hline % x & -\infty && 0 && +\infty \\ % \hline % \variations{\mil{\e^{\frac{1}{x}}} & \haut{1} && % \bas{0} \pos*{2}{\bb} \discont \haut{+\infty} && \bas{1} } % \hline %\end{tablvar}\] % La macro |\e| compose le nombre d'Euler $\e$ en romain (forme droite), % comme c'est la règle pour les constantes mathématiques % (cf. \textsf{mismath}~\cite{MIS} ou \textsf{frenchmath}~\cite{FR}). % \begin{verbatim} %\[\begin{tablvar}{2} % \hline % x & -\infty && 0 && +\infty \\ % \hline % \variations{\mil{\e^{\frac{1}{x}}} & \haut{1} && % \bas{0} \pos*{2}{\bb} \discont \haut{+\infty} && \bas{1} } % \hline %\end{tablvar}\] % \end{verbatim} % % \hypertarget{firstcolsep}{} % \DescribeMacro{\limg} \DescribeMacro{\limd} % Les macros |\limg|\oarg{pos}\marg{ligne}\marg{valeur} % et |\limd|\oarg{pos}\marg{ligne}\marg{valeur} % offrent une solution plus élégante pour placer des limites à gauche ou à droite. % L'option de positionnement \meta{pos} correspond à celle de la macro |\pos| % (\texttt{c}, \texttt{t} ou \texttt{b}). %\[\begin{tablvar}[firstcolsep=10pt,intervalwidth=4em]{2} % \hline % x & -\infty && 0 && +\infty \\ % \hline % -\frac{1}{x} & & + & \bb & - & \\ % \hline % \variations{ \mil{\dfrac{1}{x^2}} & \bas{0} && \limg{1}{+\infty} \bb % \discont \limd{1}{+\infty} && \bas{0} } % \hline %\end{tablvar}\] % % \DescribeMacro{firstcolsep} % Ci-dessus la colonne de légende a été élargie en ajoutant de l'espace à ses extrémités % avec l'option \texttt{firstcolsep} (dont la valeur par défaut est \texttt{5pt}). % \begin{verbatim} %\[\begin{tablvar}[firstcolsep=10pt,intervalwidth=4em]{2} % \hline % x & -\infty && 0 && +\infty \\ % \hline % -\frac{1}{x} & & + & \bb & - & \\ % \hline % \variations{ \mil{\dfrac{1}{x^2}} & \bas{0} && \limg{1}{+\infty} \bb % \discont \limd{1}{+\infty} && \bas{0} } % \hline %\end{tablvar}\] % \end{verbatim} % % \DescribeMacro{\bblim} % Sauf sur les bords du tableau ou lorsqu'il y a une zone interdite, % les doubles barres sont en général accompagnées à la fois d'une limite à gauche % et d'une limite à droite. La commande |\bblim| permet alors d'alléger la syntaxe. % Elle prend 4 arguments qui sont dans l'ordre \meta{ligne} et \meta{limite} % à gauche puis à droite de la double barre. % Cette macro trace la double barre, place les limites et crée une discontinuité. % C'est un alias de % |\limg|\marg{ligne}\marg{valeur}|\bb\discont\limd|\marg{ligne}\marg{valeur}. % La seule différence est que |\bblim| ne possède pas d'option de positionnement % des nœuds comme |\limg| et |\limd|. %\[\begin{tablvar}{4} % \hline % x & -\infty && -1 && 0 && 1 && +\infty \\ % \hline % \variations{\mil{\dfrac{1}{1-x^2}} & \haut{0} && % \bblim{3}{-\infty}{1}{+\infty} && \bas{1} && % \bblim{1}{+\infty}{3}{-\infty} && \haut{0} } % \hline %\end{tablvar}\] % \begin{verbatim} %\[\begin{tablvar}{4} % \hline % x & -\infty && -1 && 0 && 1 && +\infty \\ % \hline % \variations{\mil{\dfrac{1}{1-x^2}} & \haut{0} && % \bblim{3}{-\infty}{1}{+\infty} && \bas{1} && % \bblim{1}{+\infty}{3}{-\infty} && \haut{0} } % \hline %\end{tablvar}\] % \end{verbatim} % \hypertarget{bordercolsep}{}\hypertarget{limsep}{} % % \DescribeMacro{bordercolsep}\DescribeMacro{limsep} % Le paramètre \texttt{bordercolsep} gère l'espace à gauche de la première colonne % de valeurs et à droite de la dernière (\texttt{2pt} par défaut), % \texttt{limsep} permet d'ajouter de l'espace entre une double barre et une limite % (\texttt{1pt} par défaut). Il est rarement utile de les modifier, % sauf si on préfère plus de blanc. % On peut y compris leur donner des valeurs négatives si l'on veut s'approcher % davantage des filets verticaux, par exemple \texttt{limsep=-1.5pt} % amène au contact de la double barre). %\[\begin{tablvar}[bordercolsep=4pt,limsep=3pt]{3} % \hline % x & -\infty && 0 && 1 && +\infty \\ % \hline % f'(x) & & + & \bb & - & 0 & + & \\ % \hline % \variations{ \mil{x\e^{\frac{1}{x}}} & \bas{-\infty} && % \bblim{1}{0}{1}{+\infty} && \bas{\e} & & \haut{+\infty} } % \hline %\end{tablvar}\] % \begin{verbatim} %\[\begin{tablvar}[bordercolsep=4pt,limsep=3pt]{3} % \hline % x & -\infty && 0 && 1 && +\infty \\ % \hline % f'(x) & & + & \bb & - & 0 & + & \\ % \hline % \variations{ \mil{x\e^{\frac{1}{x}}} & \bas{-\infty} && % \bblim{1}{0}{1}{+\infty} && \bas{\e} & & \haut{+\infty} } % \hline %\end{tablvar}\] % \end{verbatim} % % L'environnement |tablvar*| \DescribeEnv{tablvar*} % sert à gérer correctement le positionnement % des doubles barres lorsqu'elles se trouvent aux extrémités. % La différence avec |tablvar| est que les colonnes % de valeurs des extrémités ne sont plus centrées mais alignées à gauche pour % la première et à droite pour la dernière. % %\[\begin{tablvar*}{2} % \hline % x & 0 && 1 && +\infty \\ % \hline % \variations{ \mil{\ln x -x} & \bb\limd{3}{-\infty} && \haut{-1} && % \bas{-\infty} } % \hline %\end{tablvar*} %\quad %\begin{tablvar*}{2} % \hline % x & 0 && 1 && +\infty \\ % \hline % \variations{ \mil{\ln x -x} & \pos*{1}{\bb} \pos*{2}{\bb} % \bas{-\infty} && \haut{-1} && \bas{-\infty} } % \hline %\end{tablvar*}\] % % On observera l'utilisation de |\pos*| dans le second tableau, % pour tracer une double barre, sauf sur la ligne 3 où on place $-\infty$. % \begin{verbatim} %\[\begin{tablvar*}{2} % \hline % x & 0 && 1 && +\infty \\ % \hline % \variations{ \mil{\ln x -x} & \bb\limd{3}{-\infty} && \haut{-1} && % \bas{-\infty} } % \hline %\end{tablvar*} %\quad %\begin{tablvar*}{2} % \hline % x & 0 && 1 && +\infty \\ % \hline % \variations{ \mil{\ln x -x} & \pos*{1}{\bb} \pos*{2}{\bb} % \bas{-\infty} && \haut{-1} && \bas{-\infty} } % \hline %\end{tablvar*}\] % \end{verbatim} % \hypertarget{ext}{} % % \DescribeMacro{extleft}\DescribeMacro{extright} % Dans \texttt{tablvar*}, si, à une extrémité sans double barre, % les valeurs ont des largeurs vraiment différentes % leur alignement vers le bord peut être inélégant. % L'environnement \texttt{tablvar} possède des options qui permettent % de choisir un alignement à gauche ou à droite de manière séparée pour % chaque extrémité. % Il s'agit des options \texttt{extleft} pour aligner la première colonne à gauche % et \texttt{extright} % pour aligner la dernière colonne à droite % (alors que \texttt{tablvar*} impose les deux). % Ci-dessous, on n'a utilisé que l'option \texttt{extleft} % \footnote{En fait \texttt{extleft} et \texttt{extright} sont des clés booléennes, % la valeur \texttt{=true} étant facultative.} % pour éviter que le 1 ne soit collé au bord droit % et qu'il garde un bon centrage par rapport à $+\infty$. % % \noindent\begin{minipage}[t]{7.7cm} % \begin{verbatim} %\[\begin{tablvar}[extleft,intervalwidth=4em]{1} % \hline % x & 0 && +\infty \\ % \hline % \variations{ \mil{1-\dfrac{1}{x}} & \bb % \limd{3}{-\infty} && \haut{1} } % \hline %\end{tablvar}\] % \end{verbatim} % \end{minipage} % \begin{minipage}[t]{5cm} %\[\begin{tablvar}[extleft,intervalwidth=4em]{1} % \hline % x & 0 && +\infty \\ % \hline % \variations{ \mil{1-\dfrac{1}{x}} & \bb % \limd{3}{-\infty} && \haut{1} } % \hline %\end{tablvar}\] % \end{minipage} % % \subsection{Valeurs remarquables} % % Nous appellerons \emph{valeur remarquable}, un valeur particulière % que l'on place dans un tableau de variations et qui sera reliée par des pointillés % à son antécédent. % \medskip % % \DescribeMacro{\vr} % Une première approche est placer ces valeurs remarquables par dessus % les flèches de variations. % Pour relier ces valeurs remarquables à leurs antécédents par des pointillés % (tracés réalisés dans la commande |\variations|), on place une commande |\vr| % sur la ligne des $x$ et une commande |\vr| dans la partie variations. % % Voici un exemple où la valeur remarquable % est placée dans la colonne intervalle.\\ % \begin{minipage}[t]{7.7cm} % \begin{verbatim} %\[\begin{tablvar*}[6em]{1} % \hline % x & 0 & \vr{1} & +\infty \\ % \hline % \variations{ \mil{\ln x} & % \bb \limd{3}{-\infty} & \vr{0} & % \pos[t]{1}{+\infty} } % \hline %\end{tablvar*}\] % \end{verbatim} % \end{minipage} % \begin{minipage}[t]{5cm} %\[\begin{tablvar*}[6em]{1} % \hline % x & 0 & \vr{1} & +\infty \\ % \hline % \variations{ \mil{\ln x} & % \bb \limd{3}{-\infty} & \vr{0} & % \pos[t]{1}{+\infty} } % \hline %\end{tablvar*}\] % \end{minipage} % % Un autre exemple avec deux valeurs remarquables, placées cette fois % dans des colonnes valeurs. Il y a alors 3 colonnes intervalles et % la partie variations est composée sur 4 lignes. %\[\begin{tablvar}[stretch=1.2,intervalwidth=1em]{3} % \hline % x & -\infty && \vr{0} && \vr{1} && +\infty \\ % \hline % \variations[4]{ \mil{\exp x} & \bas{0} && % \vr[3]{1} && \vr{\e} && \haut{+\infty} } % \hline %\end{tablvar}\] % \begin{verbatim} %\[\begin{tablvar}[stretch=1.2,intervalwidth=1em]{3} % \hline % x & -\infty && \vr{0} && \vr{1} && +\infty \\ % \hline % \variations[4]{ \mil{\exp x} & \haut{0} && % \vr[3]{1} && \vr{\e} && \bas{+\infty} } % \hline %\end{tablvar}\] % \end{verbatim} % % \hypertarget{stretch}{} % \vspace{-\baselineskip} % Comme la partie |\variations| est composée sur 4 lignes, % les lignes sont numérotées de 1 (haut) à 4 (bas). % La commande |\mil| opère automatiquement un décalage vertical approprié. % % \DescribeMacro{\vr\oarg{ligne}} % La commande |\vr| possède elle aussi un argument optionnel % qui est la ligne sur laquelle placer la valeur remarquable, % lorsqu'il s'agit de la partie variations (ligne 2 par défaut). % % \DescribeMacro{stretch} % À cause des 4 lignes de variations, nous avons utilisé l'option % \texttt{stretch} \label{stretch} % qui est un facteur d'élasticité verticale, afin de diminuer la hauteur des lignes % du tableau % \footnote{On peut aussi utiliser ce paramètre pour agrandir la hauteur des lignes % mais l'effet sera global pour tout le tableau. % Malheureusement un ajustement automatique des hauteurs, % comme proposé dans l'extension \textsf{cellspace}~\cite{CELLSP} % de Josselin Noirel, ne fonctionne pas pour les barres et doubles barres, % mais, si l'on souhaite agrandir spécifiquement une ligne, % on peut utiliser les commandes \texttt{\bslash cstrut} ou \texttt{\bslash vstrut} % de l'extension \textsf{spacingtricks} (voir exemples page \pageref{vstrut}).}. % Sa valeur par défaut est de \texttt{1.6}, nous l'avons ramenée dans cet exemple % à \texttt{1.2}, la valeur standard des environnements \texttt{array} étant de \texttt{1}. % % \medskip % On peut préférer que les flèches de variations ne passent pas à travers % les valeurs remarquables (qui doivent alors être aussi des nœuds pour les flèches). % L'exemple suivant présente un tableau utilisant simultanément % les deux manières de traiter les valeurs remarquables. % La taille des flèches s'ajuste automatiquement. % Le second zéro correspond à la fois à un nœud pour les flèches % et à une valeur remarquable (nœud pour les pointillés). % % \DescribeMacro{\posvr} % La commande |\vr| est inopérante % lorsqu'elle est imbriquée avec une commande |\pos| (qui produit les nœuds). % Nous fournissons pour cet usage la commande |\posvr|\oarg{opt}\marg{ligne}\marg{valeur}, % où les 3 paramètres sont exactement les mêmes que ceux de |\pos| % (le premier étant le paramètre optionnel \texttt{c}, \texttt{t} % ou \texttt{b} pour le positionnement des flèches). % %\[\begin{tablvar}[extright,intervalwidth=2em]{4} % \hline % x & 0 && \vr{\alpha_1} && \frac{\pi}{6} && \vr{\alpha_2} && \frac{\pi}{2} \\ % \hline % f'(x) && + && + & 0 & - && - & \bb \\ % \hline % \variations{\mil{f(x)} & \pos[b]{3}{f(0)} && \vr{0} && % \pos[t]{1}{f(\frac{\pi}{6})} && \posvr{2}{0} && % \pos[b]{3}{-\infty}\bb } % \hline %\end{tablvar}\] % % L'option |[t]| pour le max en ligne 1 % est ici combinée avec l'option |[b]| en ligne 3 et permet de conserver % un positionnement correct du 0 sur la flèche. % \begin{verbatim} %\[\begin{tablvar}[extright,intervalwidth=2em]{4} % \hline % x & 0 && \vr{\alpha_1} && \frac{\pi}{6} && \alpha_2 && % \frac{\pi}{2} \\ % \hline % f'(x) && + && + & 0 & - && - & \bb \\ % \hline % \variations{\mil{f(x)} & \pos[b]{3}{f(0)} && \vr{0} && % \pos[t]{1}{f(\frac{\pi}{6})} && \posvr{2}{0} && % \pos[b]{3}{-\infty}\bb } % \hline %\end{tablvar}\] % \end{verbatim} % % \vspace{-\baselineskip} % \DescribeMacro{\vrconnect} % C'est la macro graphique |\vrconnect| qui gère le tracé de ces traits pointillés. % Elle peut être redéfinie pour changer leur aspect % (voir le code section \ref{graph}). % % On peut aussi placer les zéros sur les flèches, sans pointillés, % auquel cas, on n'a pas besoin de |\vr| ou |\posvr|, il suffit % d'utiliser |\pos*{2}{0}| (ou |\mil{0}|) pour le premier zéro de l'exemple précédent % et |\pos{2}{0}| pour le second. % % \medskip % La commande |\vr| peut également servir à représenter des discontinuités % particulières, comme dans l'exemple suivant avec la fonction définie par %\[f(x)=\left\{ %\begin{array}{@{}cl} % \frac{\sin x}{x} &\mbox{si } x \neq 0 \\[1ex] % 0 &\mbox{si } x= 0 %\end{array} %\right. .\] % \begin{minipage}[t]{6.5cm} % \begin{verbatim} %\[\begin{tablvar}{2} % \hline % x & -\pi && \vr{0} && \pi \\ % \hline % \variations{\mil{f(x)} & \bas{0} && % \limg{1}{1}\hspace{2pt}\discont % \vr[3]{0}\hspace{2pt}\limd{1}{1} % && \bas{0} } % \hline %\end{tablvar}\] % \end{verbatim} % \end{minipage} % \hfill % \begin{minipage}[t]{5.5cm} %\[\begin{tablvar}{2} % \hline % x & -\pi && \vr{0} && \pi \\ % \hline % \variations{\mil{f(x)} & \bas{0} && % \limg{1}{1}\hspace{2pt}\discont % \vr[3]{0}\hspace{2pt}\limd{1}{1} % && \bas{0} } % \hline %\end{tablvar}\] % \end{minipage} % % \medskip % Voici un dernier exemple, avec deux tableaux conjoints. % %\[\begin{tablvar}{4} % \hline % x & 0 && \vr{\frac{\pi}{2}} && \vr{\pi} && % \vr{\frac{3\pi}{2}} && 2\pi \\ % \hline % \variations{ \mil{\cos x} & \haut{1} && \mil{0} && \bas{-1} && % \mil{0} && \haut{1} } % \hline % \variations{ \mil{\sin x} & \bas{0} && \posvr{1}{1} && % \vr{0} && \posvr{3}{-1} && \haut{0} } % \hline %\end{tablvar}\] % \begin{verbatim} %\[\begin{tablvar}{4} % \hline % x & 0 && \vr{\frac{\pi}{2}} && \vr{\pi} && % \vr{\frac{3\pi}{2}} && 2\pi \\ % \hline % \variations{ \mil{\cos x} & \haut{1} && \mil{0} && \bas{-1} && % \mil{0} && \haut{1} } % \hline % \variations{ \mil{\sin x} & \bas{0} && \posvr{1}{1} && % \vr{0} && \posvr{3}{-1} && \haut{0} } % \hline %\end{tablvar}\] % \end{verbatim} % % \subsection{Zones interdites} % % Nous abordons pour finir le tracé de zones interdites, c'est-à-dire % d'intervalles où la fonction n'est pas définie. % On peut dessiner ces zones interdites en hachures ou en couleur. % % \medskip % \DescribeMacro{\ZI} % Lorsque l'on veut définir une zone interdite, on place la commande |\ZI| % dans les cellules correspondantes. La discontinuité des flèches est automatique. % %\[\begin{tablvar}{3} % \hline % x & -\infty & & -1 & & 1 & & +\infty \\ % \hline % f'(x) && \hspace{-0.5em} + & \bb & \ZI & \bb & - & \\ % \hline % \variations{ \pos*{2}{\sqrt{\dfrac{x-1}{x+1}}} % & \bas{1} && \limg{1}{+\infty} \bb & \ZI % & \bas{0} \barre && \haut{1} } % \hline %\end{tablvar}\] % % \begin{verbatim} %\[\begin{tablvar}{3} % \hline % x & -\infty & & -1 & & 1 & & +\infty \\ % \hline % f'(x) && \hspace{-0.5em} + & \bb & \ZI & \bb & - & \\ % \hline % \variations{ \pos*{2}{\sqrt{\dfrac{x-1}{x+1}}} % & \bas{1} && \limg{1}{+\infty} \bb & \ZI % & \bas{0} \barre && \haut{1} } % \hline %\end{tablvar}\] % \end{verbatim} % % \vspace{-\baselineskip} % Le |\hspace{-0.5em}| devant \texttt{+} a pour effet de décaler le $+$ affiché % vers la gauche afin de le recentrer. % En effet, les macros |\limg| et |limd| placent les valeurs dans des boîtes de largeur % nulle (grâce à la commande |\zbox|, voir section \ref{cmd-pos}). % De ce fait, le contenu d'une colonne valeur (qui a une largeur fixe) % peut déborder en largeur % et empiéter sur la colonne intervalle contiguë. % C'est le cas ici avec le $+\infty$. % % Pour la légende de la fonction, nous aurions pu utiliser |\mil| à la place de |\pos*{2}|. % La différence est que |\mil| affiche son contenu dans une boîte de hauteur nulle % et n'agrandit donc pas la ligne correspondante du tableau. Avec |\pos*{2}|, % la seconde ligne des variations est légèrement plus haute. % \hypertarget{ZItype}{} % % \medskip % \DescribeMacro{ZItype} % Le type de rendu est défini par l'option \texttt{ZItype} qui peut prendre % deux valeurs : \texttt{c}, pour une zone interdite colorée, ou \texttt{h} (par défaut), % pour une zone interdite hachurée. % %\[\begin{tablvar}[ZItype=c,intervalwidth=3.5em]{3} % \hline % x & -\infty && -1 && 1 && +\infty \\ % \hline % -\frac{x}{\strut\sqrt{x^2-1}^3} && + & \bb & \ZI & \bb & - & \\ % \hline % \variations{\pos*{2}{\dfrac{1}{\sqrt{x^2-1}}} & \bas{0} && % \limg{1}{+\infty} \bb & \ZI & % \bb \limd{1}{+\infty} && \bas{0} } % \hline %\end{tablvar}\] % % Dans la légende de la deuxième ligne, le dénominateur a été légèrement % agrandi en hauteur, grâce à la commande \LaTeX\ |\strut|, afin d'éviter que % l'exposant 3 de la racine carrée n'arrive au contact de la % barre de fraction (mais ceci n'a rien à voir en fait avec les tableaux de variations). % \begin{verbatim} %\[\begin{tablvar}[ZItype=c,intervalwidth=3.5em]{3} % \hline % x & -\infty && -1 && 1 && +\infty \\ % \hline % -\frac{x}{\strut\sqrt{x^2-1}^3} && + & \bb & \ZI & \bb & - & \\ % \hline % \variations{\pos*{2}{\dfrac{1}{\sqrt{x^2-1}}} & \bas{0} && % \limg{1}{+\infty} \bb & \ZI & % \bb \limd{1}{+\infty} && \bas{0} } % \hline %\end{tablvar}\] % \end{verbatim} % \hypertarget{ZIcolor}{} % % \vspace{-\baselineskip} % \DescribeMacro{ZIcolor} % Pour une zone interdite colorée, la couleur peut être modifiée avec l'option % \texttt{ZIcolor}. On peut utiliser les noms de couleur prédéfinis % ou créer son propre nom de couleur, % par exemple |\definecolor{redblue}{rgb}{0.1,0.3,0.7}| % \footnote{Le rectangle coloré est affiché en transparence % afin de laisser voir les traits sous-jacents. % Il arrive que la compilation \LaTeX\ + dvips + ps2pdf % n'affiche pas cette transparence, % ce qui semble être dû à un bug dans certaines versions de Ghostscript. % Dans ce cas la solution est de compiler avec \XeLaTeX. % La compilation pdf\LaTeX\ avec l'option \texttt{tikz} ne pose pas ce problème.} % %\[\begin{tablvar}[ZItype=c,ZIcolor=green,ZIaddwidth=1pt]{3} % \hline % x & -\infty && -\frac{\sqrt{2}}{2} && \frac{\sqrt{2}}{2} && +\infty \\ % \hline % \frac{2x}{\sqrt{2x^2-1}} \cstrut{2.5ex} && - & \bb & \ZI & \bb & + & \\ % \hline % \variations{ \mil{\sqrt{2x^2-1}} & \haut{+\infty} && \bas{0} \barre % & \ZI & \bas{0} \barre && \haut{+\infty} } % \hline %\end{tablvar}\] % % Ici nous avons agrandi spécifiquement la seconde ligne, contenant la fraction % avec radical, grâce à la commande |\cstrut| % de l'extension \textsf{spacingtricks}~\cite{SPA}. % Cette commande permet de garantir une \emph{profondeur} et une \emph{hauteur} données, % symétriques de part et d'autre de la ligne de centrage mathématique. % \label{vstrut}\hypertarget{ZIaddwidth}{} % % \DescribeMacro{ZIaddwidth} % L'option \texttt{ZIaddwidth} permet d'ajuster finement la largeur % des zones interdites. On a ajouté \texttt{1pt} ce qui donne un rendu un peu meilleur % lorsque la zone interdite est encadrée de barres simples et non de double barres. % \begin{verbatim} %\[\begin{tablvar}[ZItype=c,ZIcolor=green,ZIaddwidth=1pt]{3} % \hline % x & -\infty && -\frac{\sqrt{2}}{2} && \frac{\sqrt{2}}{2} && +\infty \\ % \hline % \frac{2x}{\sqrt{2x^2-1}} \cstrut{2.5ex} && - & \bb & \ZI & \bb % & + & \\ % \hline % \variations{ \mil{\sqrt{2x^2-1}} & \haut{+\infty} && \bas{0} \barre % & \ZI & \bas{0} \barre && \haut{+\infty} } % \hline %\end{tablvar}\] % \end{verbatim} % % Si des extrema de grande taille sont placés dans la partie variations, % il est nécessaire de modifier la hauteur des lignes, % pour éviter de toucher le filet horizontal (au-dessus ou en-dessous) % \footnote{L'extension \textsf{tabularray}~\cite{TABUL} de Jianrui Lyu permettra % éventuellement une gestion automatisée des hauteurs de ligne dans une version future.}. % Cette modification peut se faire % avec \texttt{stretch} ou avec |\vstrut|\oarg{depth}\marg{height} % \emph{qu'il faut placer dans la toute 1\iere colonne} pour % que |\ZI| prenne en compte sa hauteur. % Dans l'exemple suivant, \texttt{stretch=2.2} aurait donné le même résultat pour % les variations mais une ligne des $x$ plus haute. % %\[\begin{tablvar}[4em]{4} % \hline % x & -\infty && -1 && 0 && 1 && +\infty \\ % \hline % \variations{ \mil{f(x)} \vstrut[2ex]{4.5ex} & \haut{+\infty} && % \limg{3}{-\infty} \bb & \ZI & \bb \limd{3}{-\infty} && % \haut{\dfrac{\e^{-1}}{2}} && \bas{0} } % \hline %\end{tablvar}\] % \begin{verbatim} %\[\begin{tablvar}[4em]{4} % \hline % x & -\infty && -1 && 0 && 1 && +\infty \\ % \hline % \variations{ \mil{f(x)} \vstrut[2ex]{4.5ex} & \haut{+\infty} && % \limg{3}{-\infty} \bb & \ZI & \bb \limd{3}{-\infty} && % \haut{\dfrac{\e^{-1}}{2}} && \bas{0} } % \hline %\end{tablvar}\] % \end{verbatim} % % On peut créer jusqu'à 4 zones interdites sur des colonnes différentes, % comme pour les discontinuités. % Voici un tableau contenant deux zones interdites, avec % \[ f(x)= \sqrt{(x^2-1)(x^2-4)} % \quad\mbox{et}\quad % f'(x) = \frac{x(2x^2-5)}{f(x)}.\] %{ \small %\[\begin{tablvar}[2.5em]{6} % \hline % x & -\infty && -2 && -1 && 0 && 1 && 2 && +\infty \\ % \hline % x & &-& \barre & \ZI & \barre &-& \barre[0] &+& \barre & \ZI & \barre &+& \\ % \hline % 2x^2-5 & &+& \barre & \ZI & \barre &-& \barre &-& \barre & \ZI & % \barre &+& \\ % \hline % f'(x) & &-& \bb & \ZI & \bb &+& \barre[0] &-& \bb & \ZI & \bb &+& \\ % \hline % \variations{ \mil{f(x)} & \haut{+\infty} && \bas{0} \barre % & \ZI & \bas{0} \barre && \haut{2} && \bas{0} % \barre & \ZI & \bas{0} \barre && \haut{+\infty} } % \hline %\end{tablvar}\] %} % \begin{verbatim} %{ \small \[\begin{tablvar}[2em]{6} % \hline % x & -\infty && -2 && -1 && 0 && 1 && 2 && +\infty \\ % \hline % x & &-& \barre & \ZI & \barre &-& \barre[0] &+& \barre & \ZI & % \barre &+& \\ % \hline % 2x^2-5 & &+& \barre & \ZI & \barre &-& \barre &-& \barre & \ZI & % \barre &+& \\ % \hline % f'(x) & &-& \bb & \ZI & \bb &+& \barre[0] &-& \bb & \ZI & \bb &+& \\ % \hline % \variations{ \mil{f(x)} & \haut{+\infty} && \bas{0} \barre % & \ZI & \bas{0} \barre && \haut{2} && \bas{0} % \barre & \ZI & \bas{0} \barre && \haut{+\infty} } % \hline %\end{tablvar}\] } % \end{verbatim} % % \DescribeMacro{\hachure} % Lorsque l'on dessine des zones interdites hachurées % sur plusieurs colonnes contiguës, % les hachures seront en général discontinues. % Pour pallier cela, on peut % utiliser la primitive graphique |\hachure| % qui permet de définir manuellement le rectangle à hachurer. % L'exemple suivant montre les deux solutions. % %{ \footnotesize %\[ \begin{tablvar}[intervalwidth=1.8em,ZIaddwidth=1pt]{8} % \hline % x & -\infty && -2 && -\sqrt{\frac{5}{2}} && -1 % && 0 && 1 && \sqrt{\frac{5}{2}} && 2 && +\infty \\ % \hline % 2x & &-& \barre &-& \barre &-& \barre &-& \barre[0] &+& % \barre &+& \barre &+& \barre &+& \\ % \hline % 2x^2-5 & &+& \barre &+& \barre[0] &-& \barre &-& \barre &-& % \barre &-& \barre[0] &+& \barre &+& \\ % \hline % f'(x) & &-& \bb & \ZI & \barre & \ZI & \bb &+& % \barre[0] &-& \bb & & & & \bb & + & \\ % \hline % \variations{\mil{f(x)} & \haut{+\infty} && \bas{0}\barre & \ZI & % \barre & \ZI & \bas{0}\barre && \haut{2} && \bas{0}\barre \discont % && \pos*{3}{\hachure{-4.3em,16.4ex}{4.3em,-1.4ex}} && % \bas{0}\barre && \haut{+\infty} } % \hline %\end{tablvar} \] } % % Pour hachurer une zone donnée, la commande |\hachure| peut être placée où l'on veut % dans le tableau, il suffit de donner les coordonnées du rectangle visé à % partir de la position courante (réglage manuel). % Dans la partie variations, il faut mettre la commande |\hachure| dans un |\pos*|, % sinon elle sera répétée pour chaque ligne des variations. % Ce problème de discontinuité des lignes ne se pose pas avec des zones interdites colorées. % \begin{verbatim} %{ \footnotesize %\[ \begin{tablvar}[intervalwidth=1.8em,ZIaddwidth=1pt]{8} % \hline % x & -\infty && -2 && -\sqrt{\frac{5}{2}} && -1 % && 0 && 1 && \sqrt{\frac{5}{2}} && 2 && +\infty \\ % \hline % 2x & &-& \barre &-& \barre &-& \barre &-& \barre[0] &+& % \barre &+& \barre &+& \barre &+& \\ % \hline % 2x^2-5 & &+& \barre &+& \barre[0] &-& \barre &-& \barre &-& % \barre &-& \barre[0] &+& \barre &+& \\ % \hline % f'(x) & &-& \bb & \ZI & \barre & \ZI & \bb &+& % \barre[0] &-& \bb & & & & \bb & + & \\ % \hline % \variations{\mil{f(x)} & \haut{+\infty} && \bas{0}\barre & \ZI & % \barre & \ZI & \bas{0}\barre && \haut{2} && \bas{0}\barre \discont % && \pos*{3}{\hachure{-4.3em,16.4ex}{4.3em,-1.4ex}} && % \bas{0}\barre && \haut{+\infty} } % \hline %\end{tablvar} \] } % \end{verbatim} % % \medskip % \DescribeMacro{\ZI*} % Dans un tableau de signes sans partie variations, % il faut utiliser la commande |\ZI*| pour déclencher le tracé des hachures % (ou de la zone colorée) % \footnote{La commande \texttt{\bslash ZI} ne déclenche le tracé que sur % la dernière ligne des variations et pas dans les lignes de signes ; % les occurrences de \texttt{\bslash ZI} qui précèdent ne font que cumuler la hauteur.}. % Celle-ci doit être placée sur la dernière ligne de chaque bloc de hachures % \footnote{Un appel à \texttt{\bslash ZI*} dans chaque cellule ne permettrait pas % de garantir la continuité des hachures.}. % %\[\begin{tablvar}{4} % \hline % x & -\infty && -1 && 1 && 2 && +\infty \\ % \hline % x-2 && - & \barre & - & \barre & - & \barre[0] & + & \\ % \hline % \sqrt{x^2-1} && + & \barre[0] & \ZI & \barre[0] & + & \barre & + & \\ % \hline % (x-2)\sqrt{x^2-1} && - & \barre[0] & \ZI* & \barre[0] & - & % \barre[0] & + & \\ % \hline %\end{tablvar}\] % \begin{verbatim} %\[\begin{tablvar}{4} % \hline % x & -\infty && -1 && 1 && 2 && +\infty \\ % \hline % x-2 && - & \barre & - & \barre & - & \barre[0] & + & \\ % \hline % \sqrt{x^2-1} && + & \barre[0] & \ZI & \barre[0] & + & \barre & + & \\ % \hline % (x-2)\sqrt{x^2-1} && - & \barre[0] & \ZI* & \barre[0] & - & % \barre[0] & + & \\ % \hline %\end{tablvar}\] % \end{verbatim} % % Pour tracer des rectangles de hachures ou des zones colorées % sur des lignes non contiguës, dans un tableau de signes, % il faut un appel à |\ZI*| pour déclencher le tracé de chaque rectangle. % %\[\begin{tablvar}{4} % \hline % x & -\infty && -1 && 1 && % 2 && +\infty \\ % \hline % \sqrt{x^2-1} && + & \barre[0] & \ZI* & \barre[0] & + & \barre & + & \\ % \hline % x-2 && - & \barre & - & \barre & - & \barre[0] & + & \\ % \hline % (x-2)\sqrt{x^2-1} && - & \barre[0] & \ZI* & \barre[0] & - & % \barre[0] & + & \\ % \hline %\end{tablvar}\] % % \begin{verbatim} %\[\begin{tablvar}{4} % \hline % x & -\infty && -1 && 1 && 2 && +\infty \\ % \hline % \sqrt{x^2-1} && + & \barre[0] & \ZI* & \barre[0] & + & \barre & + & \\ % \hline % x-2 && - & \barre & - & \barre & - & \barre[0] & + & \\ % \hline % (x-2)\sqrt{x^2-1} && - & \barre[0] & \ZI* & \barre[0] & - & % \barre[0] & + & \\ % \hline %\end{tablvar}\] % \end{verbatim} % % \subsection{Options et réglages}\label{options} % % Comme indiqué dans l'introduction, l'extension \textsf{tablvar} possède deux options, % \texttt{pstricks} ou \texttt{tikz}, pour choisir la méthode graphique % utilisée. Ce sont les seules options reconnues à l'appel |\usepackage|. % % \medskip % \DescribeMacro{\tablvarset\marg{keyval}} % Mais les environnements \texttt{tablvar} et \texttt{tablvar*} possèdent également % un jeu de paramètres qui peuvent être définis de manière globale % (ou locale dans un environnement ou un groupe |{...}|), % avec des variables spécifiques % ou (depuis la version 2.0) avec la commande |\tablvarset|\marg{keyval}, % utilisant le mécanisme \emph{clé=valeur}. % % \DescribeEnv{tablvar\oarg{keyval}}\DescribeEnv{tablvar*\oarg{keyval}} % Ces paramètres peuvent aussi être réglés localement, % indépendamment des valeurs globales, % en tant qu'options d'un environnement % \texttt{tablvar}\oarg{keyval}\marg{num} % (ou \texttt{tablvar*}), avec la même syntaxe \emph{clé=valeur}. % % \medskip % Le tableau suivant résume les options disponibles, précise leur valeur par défaut % et les variables de réglage spécifiques (longueurs, booléens, etc.) % auxquelles elles sont associées et qui peuvent aussi être modifiées directement. % Les liens hypertextes (en bleu) renvoient vers un exemple dans la documentation. % % \begin{center}\ttfamily % \setlength{\extrarowheight}{1pt} % \begin{tabular}{lcl} % \hline % \textsf{Option} & \textsf{Valeur par défaut} & % \textsf{Variable associée} \\ % \hline % \hyperlink{intervalwidth}{intervalwidth} & 3em & |\intervalwidth| \\ % \hyperlink{colvalwidth}{colvalwidth} & 2em & |\colvalwidth| \\ % \hyperlink{firstcolsep}{firstcolsep} & 5pt & |\firstcolsep| \\ % \hyperlink{bordercolsep}{bordercolsep} & 2pt & |\bordercolsep| \\ % \hyperlink{limsep}{limsep} & 1pt & |\limsep| \\ % \chline % \hyperlink{stretch}{stretch} & 1.6 & |\tablvarstretch| \\ % \chline % \hyperlink{ext}{extleft} & false & extleft \\ % \hyperlink{ext}{extright} & false & extright \\ % \chline % \hyperlink{ZItype}{ZItype} & h & |\ZItype| \\ % \hyperlink{ZIcolor}{ZIcolor} & gray & ZIcolor \\ % \hyperlink{ZIaddwidth}{ZIaddwidth} & 0pt & |\ZIaddwidth| \\ % \hline % \end{tabular} % \end{center} % Le premier groupe de paramètres ci-dessus gère les largeurs de colonnes % et les espacements horizontaux : % \begin{description} % \item[\texttt{intervalwidth}] règle la largeur des colonnes \og intervalles\fg. % \item[\texttt{colvalwidth}] définit la largeur des colonnes de valeurs ; % il est rarement utile de modifier ce paramètre car lorsqu'une valeur est trop % large, elle peut déborder dans les colonnes intervalles adjacentes ; % la valeur par défaut est légèrement plus grande qu'un infini avec un signe. % \item[firstcolsep] définit l'espace de séparation par rapport aux filets verticaux % autour de la première colonne (légendes). % \item[bordercolsep] définit l'espace de séparation à gauche de la première % et à droite de la dernière colonne de valeurs, par rapport aux filets verticaux. % \item[limsep] règle l'espace de séparation à gauche ou à droite d'une limite. % \end{description} % La hauteur des lignes se règle avec : % \begin{description} % \item[stretch] qui est un facteur d'élasticité verticale agissant sur toutes % les lignes du tableau % \footnote{Pour ajuster la hauteur d'une ligne particulière, on dispose de la % macro \texttt{\textbackslash vstrut}\oarg{depth}\marg{height} % (du package \textsf{spacingtricks}~\cite{SPA}), % où \meta{depth} désigne la \emph{profondeur} et \meta{height} la \emph{hauteur} % minimales à atteindre par rapport à la ligne de \emph{base}, % ou encore de \texttt{\bslash cstrut}\marg{height} qui garantit une hauteur minimale % en-dessous et au-dessus de la ligne de centrage mathématique.} ; % une valeur de 1 correspond à la valeur standard % d'un environnement \texttt{array}. % \end{description} % Les deux paramètres suivants règlent l'alignement des valeurs dans les colonnes % aux extrémités du tableau : % \begin{description} % \item[extleft] aligne les valeurs à gauche dans la première colonne ; % l'effet est adéquat lorsqu'il y a une double barre à l'extrémité gauche. % \item[extright] aligne les valeurs à droite dans la dernière colonne, % adéquat pour une double barre à l'extrémité droite ; % l'environnement \texttt{tablvar*} fixe \texttt{extleft} % et \texttt{extright} à \texttt{true}. % \end{description} % Enfin le dernier groupe de paramètres gère l'aspect des zones interdites : % \begin{description} % \item[ZYtype] peut prendre deux valeurs : \texttt{h} pour une zone interdite hachurée % ou \texttt{c} pour une zone interdite colorée. % \item[ZIcolor] définit la couleur des zones interdites colorées qui doit être % un nom de couleur déjà définie ; ce paramètre % est sans effet si \texttt{ZItype=h}. % \item[ZIaddwidth] permet de jouer sur un réglage fin de la largeur des zones interdites ; % la manière dont les zones interdites arrivent au contact des barres ou double barres % peut s'ajuster en faisant varier cette valeur (de $\pm$\texttt{1pt}). % \end{description} % % \medskip % \DescribeEnv{\texttt{tablvar}\oarg{largeur}} % L'argument optionnel des % environnements \texttt{tablvar} et \texttt{tablvar*} peut également être % une simple dimension (à condition qu'il n'y ait aucune autre option), % qui sera alors interprétée % comme la largeur donnée à \texttt{intervalwidth}. % % \medskip % Le rendu des commandes graphiques peut également être modifié, % en redéfinissant ces commandes, en particulier |\fleche|, |vrconnect| et |\hachure| % grâce aux nombreuses options offertes par PSTricks ou \TikZ. % C'est le cas aussi de l'aspect des filets et barres du tableau qui sont définis % par les commandes |\tvrulewidth| (\texttt{0.4pt} par défaut), % |\tvbarrewidth| (\texttt{0.5pt} par défaut), % \texttt{tvbarrecolor} (|{gray}{0.7}| par défaut) % et |\bbrulewidth| (\texttt{0.4pt} par défaut). % Cette redéfinition sera locale si on la place dans l'environnement math du tableau. % % Ci-dessous des flèches plus grasses, plus proches des nœuds et dont la pointe est % plus effilée, codé ici pour PSTricks % (voir le code section \ref{graph} pour les commandes \TikZ). % L'épaisseur des filets du tableau et des barres a été doublée, la % couleur de la barre traversant 0 a été modifiée % et les infinis ont été \og collés\fg aux bords avec \texttt{bordercolsep=-1pt}. % \[ \renewcommand{\fleche}{\ncline[linewidth=0.8pt,arrowsize=2pt 3, % arrowinset=0.5,nodesep=2pt]{->}} % \setlength{\tvrulewidth}{0.8pt} % \setlength{\bbrulewidth}{0.8pt} % \setlength{\tvbarrewidth}{1pt} % \definecolor{tvbarrecolor}{named}{cyan} %\begin{tablvar}[intervalwidth=4em,bordercolsep=-1pt]{3} % \hline % x & -\infty && -2 && 0 && +\infty \\ % \hline % -\frac{x+2}{x^4} && - & \barre[0] & + & \bb & - & \\ % \hline % \variations{\mil{\e^{\frac{x+1}{x^2}}} & \haut{1} && \bas{\e^{-\frac{1}{4}}} % && \bblim{1}{+\infty}{1}{+\infty} && \bas{1} } % \hline %\end{tablvar} \] % \begin{verbatim} %\[ \renewcommand{\fleche}{\ncline[linewidth=0.8pt,arrowsize=2pt 3, % arrowinset=0.5,nodesep=1.5pt]{->}} %\setlength{\tvrulewidth}{0.8pt} %\setlength{\bbrulewidth}{0.8pt} %\setlength{\tvbarrewidth}{1pt} %\definecolor{tvbarrecolor}{named}{cyan} %\begin{tablvar}[intervalwidth=4em,bordercolsep=-1pt]{3} % \hline % x & -\infty && -2 && 0 && +\infty \\ % \hline % -\frac{x+2}{x^4} && - & \barre[0] & + & \bb & - & \\ % \hline % \variations{\mil{\e^{\frac{x+1}{x^2}}} & \haut{1} && % \bas{\e^{-\frac{1}{4}}} && \bblim{1}{+\infty}{1}{+\infty} && % \bas{1} } % \hline %\end{tablvar} \] % \end{verbatim} % % \subsection{Nouveautés de la version 2.0} % % Cette version présente de nombreuses nouveautés : % \begin{itemize} % \item \emph{Il n'y a plus d'option par défaut} à l'appel de l'extension. % C'était \texttt{pstricks} dans les versions précédentes. % Dorénavant, si aucune option n'est précisée, l'extension choisira elle-même % en fonction du compilateur utilisé, donc \texttt{tikz} pour le moteur pdf\LaTeX\ % qui ne supporte pas le code PSTricks. % % \item \emph{Les colonnes de valeurs ont des largeurs fixes (\texttt{2em} par défaut)} % et non plus variables en fonction du contenu, comme c'était le cas jusqu'à la version % 1.2. L'avantage est d'améliorer le centrage pour les signes, % lorsque les colonnes de valeurs ont des largeurs très différentes, % et surtout d'éviter le recours à des |\zbox| pour les colonnes de valeurs % bordant les zones interdites. % % \item Le paramètre |\innercolsep| qui gère l'espacement entre les colonnes valeurs % et les colonnes intervalles, valait \texttt{4pt} % et a été fixé à \texttt{0pt} car, en l'absence de filets verticaux, % il ne sert plus à rien avec les colonnes à largeur fixe. % Mais, en contrepartie, \emph{la valeur par défaut de} |\intervalwidth| % \emph{a été augmentée de \texttt{2.5em} à \texttt{3em}}. % % \item Les réglages peuvent désormais être effectués, % avec la syntaxe \emph{clé = valeur} et la commande |\tablvarset|, % ou comme options des environnements \texttt{tablvar} et \texttt{tablvar*}. % % \item Un nouveau paramètre |\firstcolsep| (ou l'option \texttt{firstcolsep}) % permet d'élargir la colonne des légendes. % % \item Deux options permettent d'aligner de manière différenciée % la première colonne de valeurs à gauche (\texttt{extleft}) % \emph{ou} la dernière à droite (\texttt{extright}) contrairement % à l'environnement \texttt{tablvar*} qui fait obligatoirement les deux. % % \item Le paramètre |\tablvarstetch| (géré par l'option \texttt{stretch}) % a été augmenté de \texttt{1.4} à \texttt{1.6}. % % \item Une nouvelle macro |\posvr| permet de définir conjointement % un nœud pour les flèches \emph{et} pour les valeurs remarquables. % % \item Deux nouvelles macros |\limg| et |\limd| gèrent désormais le bon positionnement % des limites à gauche et à droite, en particulier au bord des doubles barres % (en plus de |\bblim|) et surtout au bord des zones interdites. % Le recours explicite à |\zbox| n'est plus nécessaire. % % \item Un nouveau paramètre |\limsep| permet d'ajuster la proximité des % limites avec les doubles barres. % % \item Les zones interdites sont, à présent, définies par une unique commande |\ZI|, % avec une option \texttt{ZItype}. Les anciennes commandes |\ZIh|, pour les zones % interdites hachurées, ou |\ZIc|, pour les zones interdites colorées, ne sont plus utiles, % mais elles ont été conservées et permettraient, par exemple, de dessiner % dans un même tableau une zone interdite hachurée et une autre colorée, % même si cela ne viendrait à l'esprit de personne. % % \item Il n'y a, en principe, plus besoin d'ajustement de hauteur des zones interdites % avec un paramètre optionnel |\ZI|\oarg{height}, lorsque des contenus de grande hauteur % sont placés dans la colonne des légendes. % Néanmoins ce paramètre a (pour l'instant) été conservé, % pour faire éventuellement de micro-ajustements. % % \item On peut désormais régler l'épaisseur des filets verticaux et double barres % avec |\tvrulewidth| et |\bbrulewidth|. % % \item Le type de colonne \texttt{i}, utilisé pour les colonnes intervalles, % est maintenant interne à l'environnement \texttt{tablvar} % et il n'y a donc plus de risque d'incompatibilité avec une autre extension % qui utiliserait ce même identifiant comme type de colonne. % De nouveaux types de colonnes ont été définis pour les valeurs et légendes, % mais sont également internes à l'environnement \texttt{tablvar}. % % \item Les macros |\haut|, |\bas| et |\mil| peuvent à présent être utilisées % même lorsque le nombre de lignes de variations est différent de 3. % Dans ce cas, commande |\mil| calcule automatiquement le décalage vertical ; % l'utilisateur n'a plus besoin d'un appel explicite à |\vdecal|. % \end{itemize} % % \medskip % Des problèmes de composition peuvent apparaître avec des tableaux % réalisés antérieurement à la version 2.0, en particulier % pour les limites au bord des doubles barres, % lorsque l'on n'utilise ni |\bblim|, ni \texttt{tablvar*}. % S'il apparaît une limite positionnée par dessus une double barre, % il suffit de remplacer les |\zbox| utilisées antérieurement par |\limg| ou |\limd|. % D'autre part, les ajouts de hauteur qui peuvent avoir été utilisés comme argument % optionnel de |\ZIh| ou |\ZIh*| sont à éliminer. % % \subsection{Comparatif avec les autres extensions}\label{comparatif} % % Le dépôt d'archives CTAN (Comprehensive \TeX\ Archive Network) contient % quelques autres extensions dédiées à la réalisation de tableaux de variations, % dans la rubrique \og Maths tabvar \fg. % Nous les décrivons ici brièvement. % \begin{description} % \item[tableaux] de Nicolas Kisselhoff~\cite{TABL}. % Propose un pseudo-code PSTricks, % certainement plus commode que d'écrire toutes les commandes PSTricks. % \item[tabvar] de Daniel Flipo~\cite{TABV}, % l'auteur, entre-autres de \textsf{babel-french}, % extension bien connue de tous les utilisateurs francophones de \LaTeX. % Permet de réaliser des tableaux plutôt symboliques. % Voici un tableau simple et son code \textsf{tabvar}. \\ % \begin{minipage}[t]{7cm} % \begin{verbatim} %\[\begin{tabvar}{|C|CCCCR|} % \hline % x & 0 & & \frac{1}{2} & & 1 \\ % \hline % f’(x) && + & \barre{0} & - & \\ % \hline % \niveau{1}{2}\TVcenter{f(x)} & 0 & \croit % & \frac{1}{4} & \decroit & 0 \\ % \hline %\end{tabvar}\] % \end{verbatim} % \end{minipage} % \begin{minipage}[t]{5cm} %\[\begin{tabvar}{|C|CCCCR|} % \hline % x & 0 & & \frac{1}{2} & & 1 \\ % \hline % f'(x) && + & \barreFlipo{0} & - & \\ % \hline % \niveau{1}{2}\TVcenter{f(x)} & 0 & \croit % & \frac{1}{4} & \decroit & 0 \\ % \hline %\end{tabvar}\] % \end{minipage} % % \item[variations] de Christian Obrecht~\cite{VARI}. Extension vraiment simple d'usage, % qui a l'avantage d'avoir une documentation très courte. % Voici un exemple repris de la doc de \textsf{variations} % (|\mI| et |\pI| désignent $-\infty$ et $+\infty$). %\[\bvariations % x & \mI &&& 0 &&& \pI \\ % \filet % -\frac{1}{x^2} && - && \bbObrecht && - & \\ % \filet % \m{\dfrac{1}{x}} & \h0 & \d & \mI & \bbObrecht & \h\pI & \d & 0 \\ %\evariations\] % \begin{verbatim} %\[\begin{variations} % x & \mI &&& 0 &&& \pI \\ % \filet % -\frac{1}{x^2} && - && \bb && - & \\ % \m{\dfrac{1}{x}} & \h{0} & \d & \mI & \bb & \h{\pI} & \d & 0 \\ %\end{variations}\] % \end{verbatim} % \item[tablor] de Guillaume Connan~\cite{TABLOR}. % Permet d'automatiser de manière poussée la composition \emph{et la conception} du tableau % grâce à la librairie de calcul formel \textsf{Giac/Xcas} (qui doit être installée). % Il suffit de renseigner l'expression de la fonction, l'intervalle souhaité, % les éventuelles valeurs interdites. Voici par exemple le code % pour le tableau de la fonction $g: t \mapsto \frac{t^2}{t^2-1}$ sur $[-10, +\infty[$, % avec variations et signe de la dérivée, très synthétique ! % \begin{verbatim} %\begin{TV} %TV([-10,+infinity],[-1,1],"g","t",x^2/(x^2-1),1,n,\tv) %\end{TV} % \end{verbatim} % \vspace{-\baselineskip} % On peut aussi définir un tableau avec simplement deux listes, les antécédents % et les images, et \textsf{tablor} prend en charge les zones interdites % (mais pas la continuité des hachures de cellules contiguës). % On pourra consulter la documentation pour de jolis exemples. % % Pour fonctionner, \textsf{tablor} utilise \textsf{tableauVariations.mp} % de Frédéric Mazoit~\cite{VARMP} qui compose le tableau en \textlogo{METAPOST}. % \textsf{Xcas} oblige à compiler en mode \texttt{shell-escape} % pour autoriser les sorties de la compilation \TeX. % % \item[tkz-tab] d'Alain Matthes~\cite{TKZ}. % Une très belle extension qui fait a peu près tout ce que fait \textsf{tablvar} % et même un peu plus : par exemple tangentes horizontales sur les extrema, % cellules en couleur. % Un de ses principaux avantages par rapport à \textsf{tablvar} est de ne pas nécessiter % de double compilation % \footnote{La double compilation avec \textsf{tablvar} n'est cependant nécessaire % qu'avec l'option \texttt{tikz}.}. % Signalons quelques différences avec \textsf{tablvar} : % \begin{itemize} % \item un tableau n'est pas globalement en mode mathématique, il faut donc mettre les % \$ du mode math autour de chaque valeur, % \item les hauteurs de ligne doivent être précisées de manière explicite et % ne peuvent être données qu'en cm (unité fixe qui ne s'ajuste pas à la fonte), % \item \textsf{tablvar} offre la possibilité de mettre des 0 par dessus les flèches, % \item les double barres aux extrémités du tableau sont assez éloignées des filets, % ce qui peut donc laisser un certain blanc sur les bords. % \end{itemize} % Voici un exemple illustrant ce dernier point, avec son code. % Pour comparer, le tableau obtenu avec \textsf{tablvar} % a été placé dessous avec son code en suivant. % \begin{verbatim} %\begin{center}\begin{tikzpicture} % \tkzTabInit[lgt=1.5,espcl=1.8,deltacl=0.4]% % {$x$/0.75, $\ln x - x$/2.2}{0, 1, $+\infty$} % \tkzTabVar{D-/$-\infty$ , +/$-1$ , -/$-\infty$} %\end{tikzpicture}\end{center} % \end{verbatim} % %\begin{center}\begin{tikzpicture} % \tkzTabInit[lgt=1.5,espcl=1.8,deltacl=0.4]% % {$x$/0.75, $\ln x - x$/2.2}{0, 1, $+\infty$} % \tkzTabVar{D-/$-\infty$ , +/$-1$ , -/$-\infty$} %\end{tikzpicture}\end{center} %\[\begin{tablvar*}{2} % \hline % x & 0 & & 1 & & +\infty \\ % \hline % \variations{ \mil{\ln x -x} & \bb\bas{-\infty} && \haut{-1} && \bas{-\infty} } % \hline %\end{tablvar*}\] % \begin{verbatim} %\[\begin{tablvar*}{2} % \hline % x & 0 & & 1 & & +\infty \\ % \hline % \variations{ \mil{\ln x -x} & \bb\bas{-\infty} && \haut{-1} && % \bas{-\infty} } % \hline %\end{tablvar*}\] % \end{verbatim} % % \vspace{-\baselineskip} % On remarquera que les réglages \textsf{tablvar} sont automatiques et ne nécessitent % aucune option (si ce n'est l'appel à la version étoilée \texttt{tablvar*}). % \end{description} % % \StopEventually{} % % \section{Le code} % % \subsection{Extensions requises et options du package} % % \begin{macrocode} \RequirePackage{array} \RequirePackage{ifthen} \RequirePackage{multido} \RequirePackage{xkeyval} \RequirePackage{ifpdf} \newif\iftv@tikz % false par défaut \DeclareOption{tikz}{\tv@tikztrue} \newif\iftv@pstricks \DeclareOption{pstricks}{\tv@pstrickstrue} \ProcessOptions \relax \iftv@pstricks \ifpdf \PackageError{tablvar}{Don't use the pstricks option with PDF engines}{} \else \PackageInfo{tablvar}{PSTricks option is used} \fi \else\iftv@tikz \PackageInfo{tablvar}{tikz option is used. \MessageBreak Run twice to draw the arrows correctly} \else\ifpdf \PackageWarningNoLine{tablvar}{PDF engine is used, I'm using the tikz option. \MessageBreak Run twice to draw the arrows correctly} \tv@tikztrue \else \PackageWarningNoLine{tablvar}{PDF engines not used, I'm using the pstricks option} \tv@pstrickstrue \fi\fi\fi \iftv@tikz \RequirePackage{tikz} \usetikzlibrary{patterns} \usetikzlibrary{patterns.meta}% pour le paramétrage des hachures \else % pstricks=true \RequirePackage{pst-node} \fi % \end{macrocode} % \subsection{Les paramètres généraux}\label{param} % % Dans cette section sont présentés tous les paramètres % que l'on peut redéfinir pour modifier l'aspect des tableaux. % % \begin{macro}{\intervalwidth} % Définit la largeur par défaut des colonnes \og intervalles \fg, % valeur prédéfinie à \texttt{3em}. % \begin{macrocode} \newlength{\intervalwidth} \setlength{\intervalwidth}{3em} % largeur des "intervalles" % \end{macrocode} % \end{macro} % \begin{macro}{\colvalwidth} % Définit la largeur des colonnes de valeurs, % valeur prédéfinie à \texttt{2em}. % \begin{macrocode} \newlength{\colvalwidth} \setlength{\colvalwidth}{2em} % largeur des colonnes de valeurs % \end{macrocode} % \end{macro} % \begin{macro}{\firstcolsep} % Définit l'espace de séparation autour de la première colonne (légendes), % valeur prédéfinie à \texttt{5pt}, qui est la valeur par défaut dans les tableaux \LaTeX. % \begin{macrocode} \newlength{\firstcolsep} \setlength{\firstcolsep}{5pt} % valeur LaTeX par défaut % \end{macrocode} % \end{macro} % \begin{macro}{\bordercolsep} % Définit l'espace de séparation aux extrémités du tableau, pour les première % et dernière colonnes de valeurs, prédéfinie à \texttt{2pt}. % Sa valeur par défaut a été réduite par rapport à la longueur \LaTeX\ standard %|\arraycolsep|, afin que les valeurs des extrémités (souvent des $\infty$) % soient plus proches des filets verticaux bordant le tableau. % \begin{macrocode} \newlength{\bordercolsep} \setlength{\bordercolsep}{2pt} % \end{macrocode} % \end{macro} % \begin{macro}{\limsep} % Règle l'espace avant une limite à droite et après une limite à gauche, % utilisé dans les macros |\limg|, |\limd| et |\bblim|. % La macro |\bb| composant la double barre comprend % déjà \texttt{1.5pt} d'espace autour des traits verticaux. % La macro |\limsep| ajoute \texttt{1pt} par défaut. % Si on règle ce paramètre à \texttt{-1.5pt}, on élimine l'espace % créé par |\bb| et on arrive au contact du filet de la double barre. % \begin{macrocode} \newlength{\limsep} \setlength{\limsep}{1pt} % \end{macrocode} % \end{macro} % \begin{macro}{\tablvarstretch} % Permet de régler la valeur relative de l'espacement vertical % des lignes du tableau. La valeur par défaut est \texttt{1.6} (1 correspondant % à la valeur standard d'un environnement |array|). % \begin{macrocode} \newcommand{\tablvarstretch}{1.6} % \end{macrocode} % \end{macro} % \begin{macro}{\ZItype} % Définit le type de zone interdite, \texttt{h} pour \og hachurée \fg ou % \texttt{c} pour \og colorée \fg (\texttt{h} par défaut). % \begin{macrocode} \newcommand{\ZItype}{h} % \end{macrocode} % \end{macro} % \begin{macro}{ZIcolor} % Définit la couleur des zones interdites, \og colorées \fg (gris par défaut). % \begin{macrocode} \definecolor{ZIcolor}{named}{gray} % \end{macrocode} % \end{macro} % \begin{macro}{\ZIaddwidth} % Définit une largeur supplémentaire (positive ou négative) % à ajouter à la largeur des zones interdites, par exemple \texttt{1pt} % pour arriver au contact du trait de |\barre|. % \begin{macrocode} \newlength{\ZIaddwidth} \setlength{\ZIaddwidth}{0pt} % \end{macrocode} % \end{macro} % \begin{macro}{\tablvarset} % Les paramètres précédents peuvent être modifiés avec |\setlength|, |\setboolean|, % |\renewcommand| ou |\definecolor|, mais ils peuvent également être gérées % avec le mécanisme \emph{clé=valeur}, % grâce à l'extension \textsf{xkeyval}~\cite{XKEY} de Hendri Adriaens. % Nous avons fait le choix de ne pas en faire % des options de l'extension \textsf{tablvar} elle-même, mais de fournir % une commande spéciale, |\tablvarset|, pour régler ces options. % La couleur définie par l'option \texttt{ZIcolor} doit être une couleur \og nommée \fg. % \begin{macrocode} \define@key{tablvar}{intervalwidth}{\setlength{\intervalwidth}{#1}} \define@key{tablvar}{colvalwidth}{\setlength{\colvalwidth}{#1}} \define@key{tablvar}{firstcolsep}{\setlength{\firstcolsep}{#1}} \define@key{tablvar}{bordercolsep}{\setlength{\bordercolsep}{#1}} \define@key{tablvar}{limsep}{\setlength{\limsep}{#1}} \define@key{tablvar}{stretch}{\renewcommand{\tablvarstretch}{#1}} \define@boolkey{tablvar}[]{extleft}[true]{} % false si non appelé \define@boolkey{tablvar}[]{extright}[true]{} \define@choicekey{tablvar}{ZItype}{h,c}{\renewcommand{\ZItype}{#1}} \define@key{tablvar}{ZIcolor}{\definecolor{ZIcolor}{named}{#1}} \define@key{tablvar}{ZIaddwidth}{\setlength{\ZIaddwidth}{#1}} \newcommand\tablvarset[1]{\setkeys{tablvar}{#1}} % \end{macrocode} % D'autres paramètres, présentés ci-dessous, qui n'ont, en principe, % pas vocation à être modifiés, ne sont pas gérés par |\tablvarset|. % \end{macro} % \begin{macro}{\tvrulewidth} % Définit l'épaisseur des filets du tableau (\texttt{0.4pt} par défaut). % \begin{macrocode} \newlength{\tvrulewidth} \setlength{\tvrulewidth}{0.4pt} % \end{macrocode} % \end{macro} % \begin{macro}{\tvbarrewidth} % Définit l'épaisseur des barres de séparation verticales coupant les 0 % d'un tableau de signe : \texttt{0.5pt} par défaut. % \begin{macrocode} \newlength{\tvbarrewidth} \setlength{\tvbarrewidth}{0.5pt} % \end{macrocode} % \end{macro} % \begin{macro}{tvbarrecolor} % Définit la couleur des mêmes barres de séparation verticales. % La valeur par défaut |{gray}{0.7}| correspond à un niveau de gris. % On peut redéfinir la couleur par une couleur nommée % |\definecolor{named}|\marg{couleur} % ou selon un modèle comme rgb, cmyk ou gray : |\definecolor{tvbarrecolor}{rgb}|\marg{x, x, x}. % \begin{macrocode} \definecolor{tvbarrecolor}{gray}{0.7} % \end{macrocode} % \end{macro} % \begin{macro}{\bbrulewidth} % Définit l'épaisseur des traits verticaux d'une double barre. % \begin{macrocode} \newlength{\bbrulewidth} \setlength{\bbrulewidth}{0.4pt} % \end{macrocode} % \end{macro} % \begin{macro}{\innercolsep} % Définit la largeur entre les colonnes valeurs et les colonnes intervalles du tableau. % Cette largeur a été fixée à \texttt{0pt}, % car l'augmenter est équivalent à augmenter |\intervalwidth| % de la même longueur, vu qu'il n'y a pas de filet de séparation entre les colonnes % de valeurs et les colonnes intervalles. % \begin{macrocode} \newlength{\innercolsep} \setlength{\innercolsep}{0pt} % \end{macrocode} % \end{macro} %\begin{macro}{maxdiscount} % La gestion de discontinuités permettant de ne pas relier certains nœuds consécutifs % se fait grâce à la commande |\discont|. % Le compteur |maxdiscont| est fixé à 4 par défaut ; on peut l'augmenter (dans le préambule) % si l'on veut produire un tableau de variations avec plus de 4 discontinuités. % \begin{macrocode} \newcounter{maxdiscont} \setcounter{maxdiscont}{4} % nb max de discontinuités % \end{macrocode} % \end{macro} % \subsection{Les commandes graphiques PSTricks/\TikZ} \label{graph} % % Nous présentons ici les commandes graphiques permettant le dessin % des flèches, % les pointillés des valeurs remarquables, les hachures des zones interdites. % Celles-ci sont définies différemment s'il s'agit de l'option |tikz| ou |pstricks| % (plus précisément liées à l'extension \textsf{pst-node}). % % \begin{macro}{\fleche} % La commande \cmd{\fleche}\marg{nœud1}\marg{nœud2} possède deux paramètres % qui sont les noms des nœuds à relier. % La création des nœuds est obtenue avec la commande |\noeud| appelée par |\pos| % et le tracé des flèches est réalisé automatiquement par la commande |\variations|. % Pour modifier l'aspect des flèches on peut redéfinir la commande |\fleche|. % \begin{macrocode} \newcommand*{\fleche}[2]{ \iftv@tikz \tikz[remember picture,overlay]{\draw[->,>=stealth, line width=0.6pt] (#1) -- (#2);} \else \ncline[arrowsize=2pt 2,arrowinset=0.4,nodesep=3pt, linewidth=0.6pt]{->}{#1}{#2} \fi } % \end{macrocode} % \end{macro} % \begin{macro}{\vrconnect} % La commande \cmd{\vrconnect}\marg{nœud1}\marg{nœud2} % relie les nœuds définis par |\vr| (valeurs remarquables) % et le tracé est réalisé automatiquement par la commande |\variations|. % Par défaut, les lignes sont en pointillés d'épaisseur \texttt{1pt}. % \begin{macrocode} \newcommand*{\vrconnect}[2]{ \iftv@tikz \tikz[remember picture,overlay]{\draw[dotted,line width=1pt] (#1) -- (#2);} \else \ncline[nodesep=5pt,linestyle=dotted,linewidth=1pt]{-}{#1}{#2} \fi } % \end{macrocode} % \end{macro} % \begin{macro}{\noeud} % \cmd{\noeud}\oarg{pos}\marg{nœud}\marg{valeur} % définit les nœuds des flèches et valeurs remarquables ; % le 1\ier\ paramètre, optionnel, correspond à l'option |t| (top), % |b| (bottom) ou |c| (centered, par défaut) permettant d'ajuster % la manière dont la flèche arrive sur le nœud % (pas implémenté avec l'option |tikz|) ; % le 2\ieme\ paramètre est le nom du nœud (qui est donné automatiquement % par les commandes de positionnement) ; % le 3\ieme\ paramètre est la valeur affichée dans le tableau. % \begin{macrocode} \newcommand*{\noeud}[3][c]{ \iftv@tikz % fonctionne mal avec autre chose que 'anchor=base' \tikz[remember picture,baseline]{% surtout pas de overlay ici \node[anchor=base,inner sep=0pt,outer sep=4pt] at (0,0) (#2) {$#3$};} \else \rnode[#1]{#2}{#3} \fi } % \end{macrocode} % \end{macro} % \begin{macro}{\hachure} % Définition des hachures pour les zones interdites. % La macro prend deux arguments qui sont des paires de longueurs, % par exemple |\hachure{-3em,12ex}{3em,-1ex}|, % représentant les extrémités du rectangle à hachurer % par rapport à la position courante où la macro est appelée. % Pour l'option \texttt{tikz}, on aurait pu simplifier la macro % en utilisant |\fill[pattern=north east lines]| mais, en utilisant % la bibliothèque \texttt{patterns.meta}, on peut obtenir des hachures % plus élégantes, correspondant à celles de l'option \texttt{pstricks}. % \begin{macrocode} \newcommand*{\hachure}[2]{ \iftv@tikz \tikz[remember picture,overlay]{% \fill[pattern={Lines[distance=3pt,angle=135,line width=0.2pt]}] (#1) rectangle (#2);} \else \psframe[linestyle=none,fillstyle=vlines,hatchwidth=0.2pt, hatchsep=3pt](#1)(#2) \fi } % \end{macrocode} % \end{macro} % \begin{macro}{\ZIcouleur} % Trace une zone interdite en couleur, mêmes arguments que |\hachure|. % \begin{macrocode} \newcommand*{\ZIcouleur}[2]{ \iftv@tikz \tikz[remember picture,overlay]{\fill[color=ZIcolor,opacity=0.3] (#1) rectangle (#2);} \else \psframe[linestyle=none,fillstyle=solid,opacity=0.3, fillcolor=ZIcolor](#1)(#2) \fi } % \end{macrocode} % \end{macro} % \subsection{Longueurs et compteurs internes} % % \begin{macrocode} \newcounter{var@ligne} % numéro de ligne des variations \newcounter{var@noeud} % numéro du nœud des variations \newcounter{numvr} % numéro de la valeur remarquable \newcounter{nb@intervals} % nombre de colonnes "intervalles" \newcounter{numdiscont} % numéro de la discontinuité % \end{macrocode} % % Un compteur est créé pour chaque discontinuité : |discont1|, |discont2|, etc. % Le compteur |discont|\meta{i} contient le numéro du nœud précédant % la $i$-ème discontinuité. % La flèche partant de ce nœud ne sera pas tracée. % Il faut un compteur de plus que le nombre de discontinuités. % \begin{macrocode} \AtBeginDocument{% car maxdiscont a pu être modifié dans le préambule \stepcounter{maxdiscont} % il faut un compteur de plus que le nb de discontinuités \multido{\I=1+1}{\themaxdiscont}{\newcounter{discont\I}} } % \end{macrocode} % La commande |\mil| positionne son contenu sur la colonne 2, % mais réalise un décalage vertical si le nombre de lignes de variations diffère de 3. % Pour cela nous avons besoin d'une variable de dimension et d'un compteur. % \begin{macrocode} \newlength\mil@heightshift \newcounter{mil@rowshift} % \end{macrocode} % Pour gérer correctement les zones interdites, avec la commande |\ZI|, % de nombreuses variables, longueurs et compteurs, sont nécessaires. % On peut créé des zones interdites sur 4 colonnes différentes maximum % (on ne peut pas augmenter cette valeur sans revoir le code). % Pour chacune, la hauteur des lignes est cumulée dans les variables % |\ZIheighti|, \ldots, |\Ziheightiv|, % et le numéro de colonne \og intervalle \fg correspondant est enregistré % dans un compteur |ZI1|, \ldots, |ZI4|. La variable |\ZIheight| permet de renvoyer % la hauteur de la ZI courante pour le calcul final avant tracé des hachures. % Les paramètres qui suivent sont également dédiés à la gestion des dimensions % et au tracé des zones interdites, % à l'exception de |\tv@cellbox| qui sert aussi à la gestion des colonnes de valeurs. % \begin{macrocode} \newcounter{maxZI} % nb max de ZI \setcounter{maxZI}{4} \newlength{\ZIheight} \newlength{\ZIheighti} \newlength{\ZIheightii} \newlength{\ZIheightiii} \newlength{\ZIheightiv} \newlength{\ZIdepth} \newlength{\ZIwidth} \newcounter{nbZI} % nombre de ZI utilisées \newcounter{numZI} % numéro de ZI courant \newcounter{nbvarlignes} % nombre de lignes des variations \multido{\I=1+1}{\themaxZI}{\newcounter{ZI\I}} \newcounter{tv@icol} % numéro de colonne "intervalle" \newcounter{tv@row} % numéro de ligne du tableau \newsavebox{\tv@cellbox} \newlength{\tv@cellheight} \newlength{\tv@celldepth} % \end{macrocode} % \bigskip % \subsection{Les environnements \texttt{tablvar} et \texttt{tablvar*}} % % \begin{macro}{\tablvarinit} % \changes{v1.1}{13/04/2019}{ajouté \bslash extrarowheight} % Cette commande d'initialisation des compteurs est appelée % au début de chaque environnement |tablvar|. % On retire 1 à |nb@intervals| à cause de la manière dont on appelle les colonnes % dans \texttt{tablvar} (voir plus bas). % Les redéfinitions de |\extrarowheight| et |\arraystretch| seront locales % à l'environnement |tablvar|. % L'instruction |\setcounter{var@ligne}{0}| est nécessaire ici et pas seulement % dans la partie variations car le compteur est utilisé par |\ZI| dans les lignes de signes. % \begin{macrocode} \newcommand*{\tablvarinit}[1]{ \setlength{\extrarowheight}{0pt} % paramètre de l'extension array \renewcommand{\arraystretch}{\tablvarstretch} \setlength{\arrayrulewidth}{\tvrulewidth} \setcounter{var@ligne}{0} \setcounter{numvr}{0} \setcounter{tv@row}{0} \setcounter{nb@intervals}{#1} \addtocounter{nb@intervals}{-1} } % \end{macrocode} % \end{macro} % \begin{macro}{\ZIinit} % Initialisation des longueurs et compteurs qui peuvent être utilisés par |\ZI|. % Le compteur \texttt{nbvarlignes} doit être non nul pour un tableau de signe seul. % \begin{macrocode} \newcommand{\ZIinit}{ \global\ZIheighti=0pt \global\ZIheightii=0pt \global\ZIheightiii=0pt \global\ZIheightiv=0pt \setcounter{nbZI}{0} \multido{\I=1+1}{\themaxZI}{\setcounter{ZI\I}{0}} \setcounter{nbvarlignes}{3} } % \end{macrocode} % \end{macro} % \begin{macro}{\tv@saveheight} % Cette macro sert à calculer la hauteur et la profondeur d'une cellule, % qui seront enregistrées dans des variables globales afin que la commande |\ZI| % puisse les récupérer. % Elle est appelée à chaque \og sortie \fg de cellule de la colonne de légendes % grâce à la définition d'un nouveau type de colonne \texttt{A} (voir macro |\tvcoltypes|). % La hauteur de la boîte de cellule |\@arstrutbox| ne donne pas % la hauteur réelle de la ligne, car celle-ci peut être calibrée % par d'autres cellules de la même ligne % \footnote{L'utilisation d'un type de colonne permettant un ajustement automatique % de la hauteur tel que fourni par l'extension % \textsf{cellspace}~\cite{CELLSP} de Josselin Noirel % ne fonctionne pas ici : les barres et double barres ne sont pas correctement dessinées ; % mais l'on pourra peut-être envisager une évolution grâce à l'extension % \textsf{tabularray}~\cite{TABUL} de Jianrui Lyu.}. % % L'idée ici est de comparer la hauteur de |\@arstrutbox| % avec la hauteur dans la 1\iere colonne de légendes, sur la même ligne, % car c'est en général elle qui contient des éléments de grande hauteur. % Évidemment si l'on place un contenu de grande hauteur ailleurs, dans une colonne de valeurs % et non dans la colonne de légendes, le calcul ne fonctionnera pas. % Mais dans ce cas, l'extension \textsf{array} gère de toute façon mal les hauteurs de ligne % et le contenu de la cellule agrandie va toucher le filet horizontal. % La solution est alors de placer un |\vstrut| ou |\cstrut| dans la colonne % de légendes pour augmenter sa hauteur qui, de ce fait, sera bien enregistrée % par |\tv@saveheight|. % \begin{macrocode} \newcommand\tv@saveheight{% \tv@cellheight=0pt \tv@celldepth=0pt \ifdim \ht\tv@cellbox > \ht\@arstrutbox \global\advance\tv@cellheight by \ht\tv@cellbox \else \global\advance\tv@cellheight by \ht\@arstrutbox \fi \ifdim \dp\tv@cellbox > \dp\@arstrutbox \global\advance\tv@celldepth by \dp\tv@cellbox \else \global\advance\tv@celldepth by \dp\@arstrutbox \fi } % \end{macrocode} % \end{macro} % \begin{macro}{\tvcoltypes} % % Grâce à l'extension \textsf{array}, nous pouvons définir 3 nouveaux types de colonnes : % \texttt{A} pour la colonne des légendes % (1\iere colonne), \texttt{i} pour les colonnes intervalles et |v|\marg{pos} % pour les colonnes de valeurs. L'argument \meta{pos} peut prendre les valeurs % \texttt{c} (centré), \texttt{l} (aligné au fer à gauche) ou \texttt{r} % (aligné au fer à droite). En faire un paramètre optionnel ne fonctionne pas ici. % Les colonnes d'intervalles sont en fait du type \texttt{p}, % paragraphe centré, avec une largeur |\intervalwidth| % et incrémentent le compteur interne \texttt{tv@icol}. % La première colonne de légende, % remet à zéro le compteur \texttt{tv@col} et incrémente le compteur de ligne % \texttt{tv@row}. % % La commande |\tvcoltypes| est appelée au début de chaque environnement % \texttt{tablvar} et, de ce fait, ces types de colonnes ne sont reconnus % qu'à l'intérieur d'un \texttt{tablvar} et ne créent pas d'incompatibilités % avec d'autres extensions qui utiliseraient les mêmes lettres comme type de colonne. % \begin{macrocode} \newcommand{\tvcoltypes}{ % type de colonne A pour les légendes à gauche du tableau \newcolumntype{A}{% >{\setcounter{tv@icol}{0}\stepcounter{tv@row}\begin{lrbox}% \tv@cellbox $}% c% <{$\end{lrbox}\usebox{\tv@cellbox}\tv@saveheight}} % type de colonne i pour les intervalles \newcolumntype{i}{>{\stepcounter{tv@icol} \centering\arraybackslash$}p{\intervalwidth}<{$}} % type de colonne v pour les valeurs \newcolumntype{v}[1]{% un argument optionnel ne fonctionne pas ici >{\ifthenelse{\value{tv@row}=1}{\begin{lrbox}\tv@cellbox $}{}}% ##1% <{\ifthenelse{\value{tv@row}=1}{$\end{lrbox}% \makebox[\colvalwidth][##1]{\usebox\tv@cellbox}}{}}} } % \end{macrocode} % \end{macro} % \begin{environment}{tablvar} % La syntaxe de |tablvar| est : |\begin{tablvar}|\oarg{options}\marg{nbintervals}. % Le 1\ier\ paramètre optionnel permet de régler les options sous la forme \emph{clé=valeur} % ou bien on peut y placer un unique argument dimensionnel qui représente alors % la largeur des colonnes intervalles. % Le 2\ieme\ paramètre (obligatoire) est le nombre d'intervalles. % Fondamentalement, cet environnement n'est rien d'autre qu'un |array| % dans lequel, après avoir effectué les initialisations, % on a choisi les bons types de colonnes. % % On commence par prendre en compte les options grâce à |\setkeys*| fourni par l'extension % \textsf{xkeyval}. La version étoilée de |\setkeys| % a l'avantage de ne pas produire d'erreur lorsqu'une clé n'est pas reconnue % (celle-ci est passée à |XKV@rm|). On l'interprète % \footnote{Un message d'erreur de dimension erronée % peut donc signifier que l'on s'est trompé dans l'orthographe d'une clé.} % alors comme une dimension pour le paramètre |\intervalwidth|. % % Les colonnes de valeurs sont de type |c| (centré) par défaut mais % les booléens \texttt{extleft} et \texttt{extright} permettent de différencier % l'alignement dans la première colonne de valeur (type \texttt{B} comme begin) % ou la dernière (type \texttt{E} comme end). % \begin{macrocode} \newenvironment{tablvar}[2][]{% \setkeys*{tablvar}{#1} % fourni par xkeyval \if\XKV@rm\empty \else \setlength{\intervalwidth}{#1} \fi \tvcoltypes \ifextleft \newcolumntype{B}{v{l}} \else \newcolumntype{B}{v{c}} \fi \ifextright \newcolumntype{E}{v{r}} \else \newcolumntype{E}{v{c}} \fi \tablvarinit{#2} \ZIinit \begin{array}{% |@{\hspace{\firstcolsep}}% A@{\hspace{\firstcolsep}}% |@{\hspace{\bordercolsep}}% B@{\hspace{\innercolsep}}% i@{\hspace{\innercolsep}}% *{\value{nb@intervals}}{ v{c}@{\hspace{\innercolsep}}% i@{\hspace{\innercolsep}}% }% E@{\hspace{\bordercolsep}}|% } }{\end{array}} % \end{macrocode} % \end{environment} % % \begin{environment}{tablvar*} % L'environnement |tablvar*| est une variante de |tablvar| (même syntaxe) % où les première et dernière colonnes de valeurs sont alignées respectivement % au fer à gauche (|l|) et à droite (|r|). % L'appel à |\setkeys*| enregistre les paramètres optionnels % dans les variables correspondantes qui seront donc utilisés par \texttt{tablvar}, % mais \texttt{extleft} et \texttt{extright} seront fixés. % \begin{macrocode} \newenvironment{tablvar*}[2][]{% \setkeys*{tablvar}{#1} % fourni par xkeyval \if\XKV@rm\empty \else \setlength{\intervalwidth}{#1} \fi \begin{tablvar}[extleft,extright]{#2} }{\end{tablvar}} % \end{macrocode} % \end{environment} % % \subsection{La commande \texttt{\textbackslash variations}} % % \begin{macro}{\varloop} % \changes{v1.1}{12/04/2019}{tvloop -> varloop} % La commande \cmd{\varloop}\marg{iter}\marg{code} répète \meta{code} (\meta{iter}$- 1$) fois % (car la dernière ligne des variations doit subir un traitement particulier). % Nous avons créé notre propre commande de boucle car les usuelles % |\multido|, |\Multido| ou |\whiledo| plantent sur |\\| ou |\@arraycr| % et la commande |\variations| a besoin d'utiliser une boucle dans un tableau. % |\varloop| n'est autre qu'un |\ifthenelse| récursif. % \begin{macrocode} \newcounter{loop@counter} \newcommand{\varloop}[2]{% \setcounter{loop@counter}{#1} \addtocounter{loop@counter}{-1}% on boucle 1 fois de moins que #1 \ifthenelse{\value{loop@counter}=0}{}{% #2 \varloop{\value{loop@counter}}{#2}% } } % \end{macrocode} % \end{macro} % \begin{macro}{\variations} % La syntaxe est \cmd{\variations}\oarg{nblignes}\marg{code} où \meta{nblignes} % est le nombre de lignes pour les variations (3 par défaut) ; % \meta{code} contient les commandes de positionnement % et les séparateurs de colonnes |&|. \\ % Le principe est que l'on parcourt \meta{nblignes} fois % le contenu de |\variations| ; % à chaque itération, le compteur |var@ligne| est incrémenté, % le compteur |var@noeud| est remis à 0 puis incrémenté à chaque commande |\pos|, % mais le contenu de |\pos| n'est affiché et le nœud n'est effectivement créé % que si la valeur du compteur |var@ligne| correspond à l'argument de ligne de |\pos|.\\ % Les flèches et pointillés sont dessinés à la fin, quand tous les nœuds sont créés, % mais il faut les tracer avant le |\\| final, sinon la compilation plante ! % Le compteur |var@ligne| doit être remis à 0 au cas où il y a plusieurs parties variations. % \begin{macrocode} \newcommand*{\variations}[2][3]{% #1=nblignes (3 par défaut) % (ré)initialisation des compteurs \setcounter{nbvarlignes}{#1} \setcounter{var@ligne}{0} \setcounter{numdiscont}{0} \multido{\I=1+1}{\themaxdiscont}{\setcounter{discont\I}{0}} % boucle : on exécute le code #2 un nb de fois égal à (#1)-1 \varloop{#1}{% \setcounter{var@noeud}{0}\setcounter{numvr}{0} % à chaque tour de boucle on réinitialise les compteurs de nœuds \stepcounter{var@ligne} % le numéro de ligne est incrémenté #2 % les nœuds sont fabriqués par le code #2 (avec \pos et \vr) \\ % retour ligne } % dernière itération -> flèches tracées AVANT \\ sinon bug !? \setcounter{var@noeud}{0}\setcounter{numvr}{0} \stepcounter{var@ligne} #2 % tracé des flèches \addtocounter{var@noeud}{-1} % 1 flèche de moins que le nb de nœuds \setcounter{numdiscont}{1} \multido{\Ix=1+1,\Iy=2+1}{\thevar@noeud}{ \ifthenelse{\value{discont\thenumdiscont}=\Ix}{ % on saute les discontinuités \stepcounter{numdiscont}}{ % sinon on trace la flèche N1->N2 puis N2->N3, etc. \fleche{N\Ix}{N\Iy} } } % tracé des pointillés pour les valeurs remarquables \multido{\Ix=1+1}{\thenumvr}{\vrconnect{X\Ix}{Y\Ix}} \\ % dernier retour ligne du tableau } % \end{macrocode} % \end{macro} % \subsection{Les commandes de positionnement} % % \label{cmd-pos} % \begin{macro}{\valpos} % \cmd{\valpos}\oarg{opt}\marg{ligne}\marg{valeur} % sert à positionner les valeurs dans la partie variations ; % \meta{ligne} désigne la ligne où il faut placer \meta{valeur} et produire le nœud, % numéroté avec le compteur |var@noeud| et défini en appelant la commande |\noeud|. % Les lignes de variations sont numérotées \emph{du haut vers le bas} % (et les lignes de signes portent toutes le numéro 0). % Le 1\ier\ argument optionnel, |c| (centered, par défaut), |t| (top) ou |b| (bottom), % est utilisé pour le positionnement des flèches. % La macro |\valpos| sert de macro sous-jacente à la macro |\pos|. % \begin{macrocode} \newcommand*{\valpos}[3][c]{ \stepcounter{var@noeud} \ifthenelse{\thevar@ligne=#2}{ \noeud[#1]{N\thevar@noeud}{#3} }{} % si ligne != #2, on ne fait rien } % \end{macrocode} % \end{macro} % \begin{macro}{\zbox} % Place son contenu dans une boite de largeur nulle : affiche le contenu % mais considère que l'espace occupé est nul pour ne pas altérer le calcul de la % largeur de colonne. % Sa syntaxe est : % |\zbox|\oarg{pos}\marg{contenu} où \meta{opt} = |c| (par défaut), |l| (left) ou |r| (right). % \begin{macrocode} \newcommand*{\zbox}[2][c]{\makebox[0pt][#1]{$#2$}} % \end{macrocode} % \end{macro} % \DescribeMacro{\pos} % Dans |\pos|, si l'option \texttt{extleft} est activée, la première colonne % de valeurs, celle où le compteur des colonnes intervalles, |\tv@icol|, est encore à 0, % est alignée au fer à gauche : l'option de positionnement \texttt{l} (left) % est enregistrée dans |\val@@pos|. % Si c'est \texttt{extright} qui est activée, la dernière colonne de valeurs % est alignée au fer à droite (option de positionnement |\val@@pos=r|). % On se trouve dans cette dernière colonne, lorsque le compteur des colonnes intervalles % a dépassé \texttt{nb@intervals} qui contient le nombres d'intervalles $-1$. % % \DescribeMacro{\pos*} % Dans la version étoilée, \cmd{\pos*}\marg{ligne}\marg{valeur}, la différence % est qu'aucun nœud n'est créé. Ceci est utile en particulier pour la toute première colonne % contenant la légende ou pour positionner une valeur par dessus une flèche. % Il n'y a pas lieu de se préoccuper de l'alignement, sauf si on voulait positionner % une valeur aux extrémités sans la relier par des flèches, auquel cas on pourrait % utiliser |\zbox|\oarg{pos} dans |\pos*|. % Les anciennes commandes internes |\@pos| et |@@pos| ont été remplacées par |\tv@pos| % et |\tv@@pos|, pour éviter un conflit avec la macro |\@pos| déjà utilisée % par Daniel Flipo dans \textsf{tabvar}. % \begin{macrocode} \newcommand*{\tv@pos}[3][c]{ \def\val@@pos{c} \ifextleft \ifthenelse{\thetv@icol=0}{\def\val@@pos{l}}{} \fi \ifextright \ifthenelse{\thetv@icol>\thenb@intervals}{\def\val@@pos{r}}{} \fi \zbox[\val@@pos]{\valpos[#1]{#2}{#3}} } \newcommand*{\tv@@pos}[2]{\ifthenelse{\thevar@ligne=#1}{#2}{}} \newcommand*{\pos}{\@ifstar{\tv@@pos}{\tv@pos}} % \end{macrocode} % Voici les commandes de positionnement plus abstraites qui peuvent être utilisés % à la place des commandes |\pos| et |\pos*|. % % \begin{macro}{\haut} % \cmd{\haut}\marg{valeur} place \meta{valeur} sur la première ligne des variations. % L'option de |\pos| n'est pas prise en charge. % \begin{macrocode} \newcommand*{\haut}{\pos{1}} % \end{macrocode} % \end{macro} % \begin{macro}{\bas} % \cmd{\bas}\marg{valeur} place \meta{valeur} sur la dernière ligne des variations. % L'option de |\pos| n'est pas prise en charge. % \begin{macrocode} \newcommand*{\bas}{\pos{\value{nbvarlignes}}} % \end{macrocode} % \end{macro} % \begin{macro}{\vdecal} % La macro \cmd{\vdecal}\marg{decal}\marg{contenu} permet de réaliser un décalage % vertical : % le 1\ier\ paramètre est le décalage % (positif = vers le haut ou négatif = vers le bas), le second est le contenu à placer. % Elle est utilisée en particulier par |\mil|. % \begin{macrocode} \newcommand*{\vdecal}[2]{\smash{\raisebox{#1}{$#2$}}} % \end{macrocode} % |\smash| a pour effet d'annuler la hauteur de la boite afin de ne pas agrandir % la ligne courante ainsi quelque soit le décalage, le tableau ne bouge pas % (on pourrait même faire sortir le contenu à afficher du tableau). % \end{macro} % \begin{macro}{\mil} % La commande |\mil|\marg{valeur} positionne \meta{valeur} sur la ligne 2 % de la partie variations. Lorsqu'il y a 3 lignes de variations cela correspond bien % au milieu, mais sinon on réalise un décalage vertical grâce à |\vdecal|. % La formule de ce décalage est % $(3- \mbox{nblignes}) \times (\mbox{hauteur de ligne})/2$. % Le résultat de ce calcul est stocké dans la variable de dimension |\mil@heightshift|. % Au cas où |\mil| ne donnerait pas un résultat parfait, on pourrait alors régler % le décalage manuellement avec %|\pos*|\marg{ligne}|{\vdecal|\marg{decal}\marg{contenu}|}|. % \begin{macrocode} \newcommand*{\mil}[1]{% \mil@heightshift = \ht\@arstrutbox \advance\mil@heightshift by \dp\@arstrutbox \divide\mil@heightshift by 2 \setcounter{mil@rowshift}{3} \addtocounter{mil@rowshift}{-\value{nbvarlignes}} \multiply\mil@heightshift by \value{mil@rowshift} \pos*{2}{\vdecal{\mil@heightshift}{#1}} } % \end{macrocode} % \end{macro} % \subsection{Barres, discontinuités, limites et valeurs remarquables} % % \begin{macro}{\barre} % La macro |\barre| permet de tracer une barre verticale % pour marquer les séparations de colonne dans un tableau de signe, en passant % à travers les 0. % Son aspect est contrôlé par les paramètres |\tvbarrewidth| et |\tvbarrecolor|. % Sa syntaxe est : % |\barre|\oarg{valeur} où, en principe, on met 0 comme argument optionnel ou rien. % Le |\hspace{-0.5\tvbarrewidth}| sert à obtenir un centrage parfait du |\vrule| % en particulier si on souhaite un trait épais. % \begin{macrocode} \newcommand*{\barre}[1][]{\makebox[0pt]{$#1$}% \color{tvbarrecolor}% \hspace{-0.5\tvbarrewidth}\vrule width \tvbarrewidth} % \end{macrocode} % \end{macro} % \begin{macro}{\bb} % La macro |\bb|, qui produit une double barre, % reprend celle de l'extension \textsf{variations} de Christian Obrecht % |\def\bb{\vrule\kern1pt\vrule}|. % Nous avons ajouté \texttt{1.5pt} d'espace avant et après, afin d'aligner au mieux % la double barre avec un 0 sur la ligne des $x$, lorsque la double barre % se trouve à une extrémité. % L'épaisseur de la double barre a été paramétrée par |\bbrulewidth|. % \begin{macrocode} \newcommand*{\bb}{% \kern1.5pt\vrule width \bbrulewidth\kern1pt \vrule width \bbrulewidth\kern1.5pt} % \end{macrocode} % \end{macro} % \DescribeMacro{\limg}\DescribeMacro{\limd} % Les macros |\limg| et |limd| servent à positionner des limites à gauche \emph{ou} à droite, % en particulier aux bords des double barres. % Le premier paramètre, optionnel, précise l'option de positionnement (\texttt{c}, % \texttt{l} ou \texttt{r}) et le second \emph{obligatoire} et le numéro de ligne, % enfin le troisième est la valeur à placer. % \begin{macrocode} \newcommand*{\limg}[3][c]{\zbox[r]{\valpos[#1]{#2}{#3\hspace{\limsep}}}} \newcommand*{\limd}[3][c]{\zbox[l]{\valpos[#1]{#2}{\hspace{\limsep}#3}}} % \end{macrocode} % \begin{macro}{\discont} % Associe un numéro de nœud à un compteur de discontinuité % (chaque discontinuité a son propre compteur). % La flèche entre le nœud précédent |\discont| (enregistré dans le compteur) % et le nœud suivant ne sera pas tracée. % \begin{macrocode} \newcommand*{\discont}{ \ifthenelse{\thevar@ligne=1}{ % on ne compte les discontinuités qu'une seule fois, sur ligne 1 \ifthenelse{\thenumdiscont=0}{ \ifthenelse{\thevar@noeud > 0}{% pas avant le 1er nœud \stepcounter{numdiscont} \setcounter{discont\thenumdiscont}{\thevar@noeud} }{} }{% on ne compte pas 2 fois la même discontinuité \ifthenelse{\thevar@noeud > \value{discont\thenumdiscont}}{ \stepcounter{numdiscont} \setcounter{discont\thenumdiscont}{\thevar@noeud} }{} } }{} } % \end{macrocode} % \end{macro} % \begin{macro}{\bblim} % Sert à positionner des limites à gauche \emph{et} à droite % d'une double barre. % Cette macro trace la double barre, place les limites et appelle |\discont|. % Sa syntaxe est : % |\bblim|\marg{ligne gauche}\marg{limite gauche}\marg{ligne droite}\marg{limite droite}. % \begin{macrocode} \newcommand*{\bblim}[4]{\limg{#1}{#2}\bb\discont\limd{#3}{#4}} % \end{macrocode} % \end{macro} % \begin{macro}{\vr} % La commande |\vr| fabrique un nœud pour chaque valeur remarquable. % Les nœuds sont désignés par X1, X2\ldots\ sur la ligne des $x$ % et Y1, Y2\ldots\ sur les lignes de variations. % Sa syntaxe est : \cmd{\vr}\oarg{ligne}\marg{valeur}. % Le paramètre optionnel \meta{ligne} vaut 2 par défaut pour Y, % et n'est pas pris en compte pour X (ligne 0), % le second paramètre est la valeur à afficher. % Les nœuds seront ensuite reliés par la commande |\vrconnect| % (appelée par |\variations|) en fonction de leur numéro. % \begin{macrocode} \newcommand*{\vr}[2][2]{% ligne 2 par défaut sauf si tv@row=1 \stepcounter{numvr} \ifthenelse{\thetv@row=1}{\noeud{X\thenumvr}{#2}}{ \ifthenelse{\thevar@ligne=#1}{\noeud{Y\thenumvr}{#2}}{} } } % \end{macrocode} % \end{macro} % \begin{macro}{\posvr} % Malheureusement, on ne peut pas imbriquer une commande |\vr| et une commande |\pos| % l'une dans l'autre. Mais on peut en fait imbriquer une commande |\noeud| dans une autre. % Ici ce ne sont pas les |\ifthenelse| contenues dans les commandes |\vr| ou |\pos| % qui posent problème, mais les |\stepcounter| qui ne sont pas supportés à l'intérieur % d'une commande |\noeud|. Nous avons donc créé la commande |\posvr| pour placer une % valeur dans la partie variations qui soit à la fois un nœud pour les flèches % et pour les pointillés de valeur remarquable. % Sa syntaxe est la même que celle de la commande |\pos|. % \begin{macrocode} \newcommand*{\posvr}[3][c]{% \stepcounter{numvr} \tv@pos[#1]{#2}{\noeud{Y\thenumvr}{#3}}} % \end{macrocode} % \end{macro} % \subsection{Zones interdites} % % La gestion des zones interdites nécessite quelques sophistications algorithmiques car % il faut ne dessiner un rectangle de hachures qu'une seule fois % pour un ensemble de cellules superposées, sinon les hachures ne seront pas jointives. % Pour les zones interdites colorées, on utilisera les mêmes macros qui donnent % un ajustement idéal. % % Une zone interdite possède un numéro et chaque appel de |\ZI| va cumuler la hauteur % de cellule jusqu'au tracé, déclenché par |\ZI*|. % On doit vérifier si une zone interdite non tracée existe déjà dans la même colonne, % sinon on en crée une nouvelle. % % \begin{macro}{\ZIfind} % On cherche s'il existe déjà une zone interdite (non tracée) pour la même % colonne, auquel cas on renvoie son numéro (dans \texttt{numZI}), sinon on renvoie 0. % Les ZI sont indicées par un compteur |ZI1|, |ZI2|, |ZI3| ou |ZI4| % qui contient le numéro de la colonne intervalle à laquelle cette ZI appartient. % Le compteur \texttt{nbZI} contient le nombre de ZI actives déjà créées. % On repère l'indice de ZI % en comparant la valeur du compteur |ZI\I| avec le numéro % de la colonne intervalle courante. % \begin{macrocode} \newcommand\ZIfind{% calcule numZI \setcounter{numZI}{0} \multido{\I=1+1}{\thenbZI}{% il existe déjà des ZI à la même colonne \ifthenelse{\value{ZI\I}=\value{tv@icol}}{ \setcounter{numZI}{\I} }{} } } % \end{macrocode} % \end{macro} % \begin{macro}{\ZInew} % Créé une nouvelle zone interdite en lui affectant un numéro (indice) % et mémorise le numéro de % la colonne intervalle où cette ZI est créée. % Si le numéro de colonne (intervalle) courante ne correspond % à aucune ZI enregistrée dans les compteurs |ZI\I| % alors on incrémente le compteur \texttt{nbZI} et on enregistre ce numéro % de colonne dans le compteur de |ZI\thenbZI| correspondant. % Si jamais on dépasse 4, le nombre max de ZI possibles, % |\ZInew| va générer une erreur en appelant |ZI\thenumZI| qui n'existe pas. % Par contre, si une ZI de la même colonne a déjà été tracée précédemment % (cela ne peut arriver que dans les tableaux de signes), % le numéro de ZI de cette colonne sera remis à 0 % par |\ZIreset| (voir macro suivante) auquel cas on récupère son indice % pour créer cette nouvelle ZI. % \begin{macrocode} \newcommand\ZInew{ \multido{\I=1+1}{\thenbZI}{% on cherche s'il y a des ZI\I=0 \ifthenelse{\value{ZI\I}=0}{\setcounter{numZI}{\I}}{} } \ifthenelse{\value{numZI}>0}{}{ % si pas de ZI disponible il faut augmenter nbZI \stepcounter{nbZI} \setcounter{numZI}{\value{nbZI}} } \setcounter{ZI\thenumZI}{\value{tv@icol}} } % \end{macrocode} % \end{macro} % \begin{macro}{\ZIreset} % |\ZIreset| est appelée lors du tracé d'une zone interdite dans la partie signe, % afin de libérer l'indice de ZI correspondant qui pourra être réaffecté plus bas % dans la même colonne. Son argument obligatoire est l'indice de ZI à remettre à 0. % Son rôle est aussi de remettre à 0, la hauteur de cette ZI nouvellement créée. % \begin{macrocode} \newcommand*\ZIreset[1]{ \ifnum #1 > 0 \setcounter{ZI#1}{0} \fi \ifnum #1 = 1 \global\ZIheighti=0pt \else \ifnum #1 = 2 \global\ZIheightii=0pt \else \ifnum #1 = 3 \global\ZIheightiii=0pt \else \ifnum #1 = 4 \global\ZIheightiv=0pt \fi\fi\fi\fi } % \end{macrocode} % \end{macro} % \begin{macro}{\ZIaddheight} % La macro |\ZI@addheight| sert à cumuler la hauteur et la profondeur de la ligne % courante dans une des 4 variables de dimension |\ZIheighti|, \ldots, |\ZIheightiv| % correspondant à la zone interdite appelante. % On récupère hauteur et profondeur qui ont été enregistrés dans % les variables globales |\tv@cellheight| et |\tv@cellheight|, % par la colonne de légendes de la même ligne. % Le numéro de la ZI (son indice) est passé en argument. % \begin{macrocode} \newcommand*\ZIaddheight[1]{ \ZIheight=0pt \advance\ZIheight by \tv@cellheight \advance\ZIheight by \tv@celldepth \advance\ZIheight by 0.5\arrayrulewidth \ifnum #1 = 1 \global\advance\ZIheighti by \ZIheight \else \ifnum #1 = 2 \global\advance\ZIheightii by \ZIheight \else \ifnum #1 = 3 \global\advance\ZIheightiii by \ZIheight \else \ifnum #1 = 4 \global\advance\ZIheightiv by \ZIheight \fi\fi\fi\fi } % \end{macrocode} % \end{macro} % \begin{macro}{\ZIgetheight} % On récupère, avant le tracé, la hauteur globale de la ZI % (dont le numéro est donné en argument) dans la variable |\ZIheight|. % \begin{macrocode} \newcommand*\ZIgetheight[1]{% \ifnum #1=1 \global\ZIheight=\ZIheighti \else \ifnum #1 = 2 \global\ZIheight=\ZIheightii \else \ifnum #1 = 3 \global\ZIheight=\ZIheightiii \else \ifnum #1 = 4 \global\ZIheight=\ZIheightiv \fi\fi\fi\fi } % \end{macrocode} % \end{macro} % \DescribeMacro{\ZI} % La macro |\ZI| est à placer dans les cellules où l'on souhaite produire une zone interdite. % Elle ne déclenche le tracé des hachures que sur la dernière ligne des variations % (par un appel à |\ZI*|). % % On crée une discontinuité puis on récupère l'indice de ZI (\texttt{numZI}) % grâce à |\ZIfind|. Si |\ZIfind| renvoie 0, aucune ZI active n'existe % pour la colonne intervalle courante, auquel cas on crée un nouvelle ZI avec |\ZInew|. % Et enfin on cumule la hauteur de la ligne de cette ZI grâce à |\ZIaddheight|. % % La macro possède un paramètre optionnel |\ZI|\oarg{hauteur} % qui est un supplément de hauteur global. % Celui-ci n'est, en principe, plus nécessaire, mais nous l'avons conservé pour % des raisons de compatibilité avec les versions antérieures à \textsf{tablvar} 2.0. % Ce paramètre permettrait éventuellement de faire un ajustement fin de la hauteur. % % \medskip % \DescribeMacro{\ZI*} % C'est en fait la macro |ZI*| qui déclenche le tracé de la zone interdite % en appelant la commande |\hachure| ou la commande |\ZIcouleur| % en fonction de l'option \texttt{ZItype}. % Elle utilise la hauteur cumulée, précédemment enregistrée dans la variable de dimension % correspondant à la ZI (par les commandes |\ZI| placés dans la même colonne). % Dans la macro |\variations|, |\ZI*| est en fait appelée par |ZI| % sur la dernière ligne des variations, sans que l'utilisateur n'ait à intervenir. % % Par contre, dans un tableau de signes sans partie variations % il faut placer explicitement des |\ZI*| à la place des |\ZI|, au moment % où l'on souhaite déclencher le tracé des hachures, sur la dernière ligne % d'un bloc de hachures. % La commande |\ZI*| possède le même argument optionnel |ZI*|\oarg{hauteur}. % \begin{macrocode} \newcommand*{\@ZI}[1][0pt]{% \discont \ifthenelse{\thevar@ligne=\value{nbvarlignes}}{\@@ZI[#1]}{% \ZIfind \ifnum \thenumZI = 0 \ZInew \fi \ZIaddheight{\thenumZI} } } \newcommand*{\@@ZI}[1][0pt]{ \discont \ZIfind \ifnum \thenumZI > 0 \ZIgetheight{\thenumZI} \else \ZIheight=0pt \fi \advance\ZIheight by \tv@cellheight \advance\ZIheight by 0.5\arrayrulewidth \advance\ZIheight by #1 \ZIdepth = \tv@celldepth \ZIwidth = \intervalwidth \advance\ZIwidth by 2\innercolsep \advance\ZIwidth by \colvalwidth \advance\ZIwidth by -1pt % au bord des double barres \advance\ZIwidth by \ZIaddwidth \ifthenelse{\equal{\ZItype}{h}}{ \hachure{-0.5\ZIwidth,-\ZIdepth}{0.5\ZIwidth,\ZIheight} }{ \ZIcouleur{-0.5\ZIwidth,-\ZIdepth}{0.5\ZIwidth,\ZIheight} } \ZIreset{\thenumZI} } \newcommand*{\ZI}{\@ifstar{\@@ZI}{\@ZI}} % \end{macrocode} % \DescribeMacro{\ZIh}\DescribeMacro{\ZIc} % Nous avons conservé les noms des anciennes macros |\ZIh| et |ZIc| % pour les zones interdites hachurées ou colorées pour des raisons de compatibilité, % mais elles sont désormais basées sur |\ZI| ou |\ZI*| (en fait sur |\@ZI| ou |\@@ZI|). % La macro |\ZIh| possède toujours une version étoilée |\ZIh*| pour le tracé des hachures % dans les lignes de signe, |\ZIc| n'en possédait pas. % \begin{macrocode} \newcommand*{\ZIc}[1][0pt]{\renewcommand{\ZItype}{c}\@@ZI[#1]} \newcommand{\ZIh}{\renewcommand{\ZItype}{h}\ZI} % \end{macrocode} % % \bigskip % \begin{thebibliography}{14} % \begin{raggedright} % \bibitem{TABL} \emph{Tableaux}. Nicolas Kisselhoff, CTAN. % \bibitem{TABV} \emph{Tableaux de variations : \textsf{‘tabvar’}}. Daniel Flipo, % CTAN, v1.8 16/07/2022. % \bibitem{VARI} \emph{L'extension \textsf{variations}}. Christian Obrecht, % CTAN, v0.3 13/09/2006. % \bibitem{TABLOR} \emph{\textsf{tablor.sty} La machine à créer des tableaux % de signes et de variations}. Guillaume Connan, CTAN, v4.07 09/05/2010. % \bibitem{VARMP} \emph{\textsf{tableauVariations} -- Variation tables in % \textlogo{METAPOST}}. Frédéric Mazoit, CTAN, 2005. % \bibitem{TKZ} \emph{\textsf{Tkz-Tab}}. Alain Matthes, CTAN, % v2.12c 29/04/2020. % \bibitem{ARRAY} \emph{A new implementation of LATEX’s \textsf{tabular} and \textsf{array} % environment}, Frank Mittelbach, David Carlisle, CTAN, v2.5g revised 16/10/2023. % \bibitem{MKCELL} \emph{The \textsf{makecell} package}, Olga Lapko, CTAN, v0.1e 03/08/2009. % \bibitem{CELLSP} \emph{The \textsf{cellspace} package}, Josselin Noirel, CTAN, % v1.9.0 04/01/2022. % \bibitem{TABUL} \emph{\textsf{Tabularray} Typeset Tabulars and Arrays with \LaTeX3}, % Jianrui Lyu, CTAN, v2023A, 01/03/2023. % v1.9.0 04/01/2022. % \bibitem{SPA} \emph{The \textsf{spacingtricks} package}, Antoine Missier, % CTAN, v1.7 28/07/2023. % \bibitem{XKEY} \emph{The \textsf{xkeyval} package}. Hendri Adriaens, % CTAN, v2.9, 16/06/2022. % \bibitem{MIS} \emph{\textsf{mismath} -- Miscellaneous mathematical macros}, % Antoine Missier, CTAN, v2.9 19/12/2023. % \bibitem{FR} \emph{L'extension \textsf{frenchmath}}. Antoine Missier, % CTAN, v2.7, 23/12/2023. % \end{raggedright} % \end{thebibliography} % \Finale \endinput