diff options
-rw-r--r-- | Master/texmf-dist/doc/latex/tablvar/README.md | 43 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/tablvar/tablvar.pdf | bin | 0 -> 198509 bytes | |||
-rw-r--r-- | Master/texmf-dist/source/latex/tablvar/tablvar.dtx | 1810 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/tablvar/tablvar.ins | 55 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/tablvar/tablvar.sty | 315 | ||||
-rwxr-xr-x | Master/tlpkg/bin/tlpkg-ctan-check | 2 | ||||
-rw-r--r-- | Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc | 1 | ||||
-rw-r--r-- | Master/tlpkg/tlpsrc/tablvar.tlpsrc | 0 |
8 files changed, 2225 insertions, 1 deletions
diff --git a/Master/texmf-dist/doc/latex/tablvar/README.md b/Master/texmf-dist/doc/latex/tablvar/README.md new file mode 100644 index 00000000000..9816726aec9 --- /dev/null +++ b/Master/texmf-dist/doc/latex/tablvar/README.md @@ -0,0 +1,43 @@ + +PURPOSE + +A complete and easy to use package for typesetting pretty +tables of signs and variations according to french usage. + +The syntax is similar to that on array environment +and uses intuitive position commands to draw arrows +automatically (with pstricks by default or tikz in option). + +Many functionnalities are provided for drawing twin bars, +single bars crossing the zeros, areas where the function +is not defined, placing special values,... + +The design of tables can be customized. + +The documentation is in french. + + +EXAMPLE + +A simple example of a table with 4 intervals (and 4 arrows) : +\[ +\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} +\] + + +LICENSE + +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 + diff --git a/Master/texmf-dist/doc/latex/tablvar/tablvar.pdf b/Master/texmf-dist/doc/latex/tablvar/tablvar.pdf Binary files differnew file mode 100644 index 00000000000..4797e993fba --- /dev/null +++ b/Master/texmf-dist/doc/latex/tablvar/tablvar.pdf diff --git a/Master/texmf-dist/source/latex/tablvar/tablvar.dtx b/Master/texmf-dist/source/latex/tablvar/tablvar.dtx new file mode 100644 index 00000000000..9db531147bb --- /dev/null +++ b/Master/texmf-dist/source/latex/tablvar/tablvar.dtx @@ -0,0 +1,1810 @@ +% \iffalse meta-comment +% +% Copyright (C) 2018 by Antoine Missier <prenom.nom@ac-toulouse.fr> +% Version 0.1 : 05/01/2014 +% Version 0.2 : 11/11/2014 ajouté option tikz +% Version 0.3 : 07/12/2014 ajouté environnement tablvar* +% Version 1.0 : 11/11/2018 macro \bblim, modif macros \barre et \ZIh, +% création des fichiers dtx et ins +% +% 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. +% Pour produire correctement l'index compiler avec +% makeindex -s gind.ist -o tablvar.ind tablvar.idx +% \fi +% +% \iffalse +%<*driver> +\ProvidesFile{tablvar.dtx} +%</driver> +%<*package> +\NeedsTeXFormat{LaTeX2e}[2005/12/01] +\ProvidesPackage{tablvar} + [11/11/2018 v1.0 .dtx tablvar file] +%</package> +%<*driver> +\documentclass{ltxdoc} +\usepackage[utf8]{inputenc} +\usepackage[T1]{fontenc} +\usepackage[frenchb]{babel} +\usepackage{lmodern} +\usepackage{tablvar}[11/11/2018] +\newcommand{\dfrac}{\displaystyle\frac} +\DisableCrossrefs +%\CodelineIndex +%\RecordChanges +\usepackage{hyperref} +\hypersetup{% + colorlinks, + linkcolor=blue, + pdftitle={tablvar}, + pdfsubject={LaTeX package}, + pdfauthor={Antoine Missier} +} +\begin{document} + \DocInput{tablvar.dtx} + %\PrintChanges + %\PrintIndex +\end{document} +%</driver> +% \fi +% +% \CheckSum{2847} +% +% \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{v1.0}{11/11/2018}{Initial version} +% +% \GetFileInfo{tablvar.sty} +% +% \DoNotIndex{\begin,\end,\emph,\og,\fg,\vspace,\arraybackslash} +% \DoNotIndex{\RequirePackage,\DeclareOption,\ProcessOptions} +% \DoNotIndex{\@@pos,\@pos,\@tvlbox,\@tvrbox,\@arstrutbox,\@ZI,\@@ZI,\@ifstar} +% \DoNotIndex{\tikz,\usetikzlibrary,\fill,\draw,\psframe,\rnode,\node,\ncline} +% \DoNotIndex{\makebox,\raisebox,\smash,\hspace,\phantom} +% \DoNotIndex{\cmd,\oarg,\marg,\meta} +% \DoNotIndex{\hline,\\,\cellcolor,\[,\],\infty,\frac,\sqrt,\mathrm,\alpha} +% \DoNotIndex{\newcommand,\newenvironment,\renewcommand} +% \DoNotIndex{\newlength,\setlength,\newcounter,\setcounter,\stepcounter,\addtocounter} +% \DoNotIndex{\theligne,\thenoeud,\themaxdiscont,\thenumvr,\theZI,\theZIstar,\I,\Ix,\Iy} +% \DoNotIndex{\AtBeginDocument,\definecolor,\newsavebox,\sbox} +% \DoNotIndex{\ifthenelse,\boolean,\newboolean,\setboolean,\value,\or} +% \DoNotIndex{\ifdim,\global,\advance,\fi,\else,\relax,\kern,\vrule,\ht,\dp,\wd} +% +% \title{L'extension \textsf{tablvar}\thanks{Ce document +% correspond à \textsf{tablvar}~\fileversion, dernière modification le \filedate.}} +% \author{Antoine Missier \\ \texttt{prenom.nom@ac-toulouse.fr}} +% \date{11 novembre 2018} +% \maketitle +% \tableofcontents +% +% \section{Introduction} +% +% Cette extension permet de construire des tableaux de variation (et de signes) +% de manière simple et intuitive. +% Bien que plusieurs autres extensions soient déjà dédiées à cette tâche, +% nous avons voulu produire des tableaux de manière automatisée, +% y compris pour des tableaux complexes, +% mais avec de nombreuses possibilités de réglages et d'ajustements personnels +% et une haute qualité graphique, en particulier pour le dessin des flèches, +% en exploitant les fonctionnalités des extensions graphiques pstricks +% (plus exactement pst-node) ou tikz pour +% définir un \emph{graphe} de \emph{nœuds} reliés par des flèches, +% venant se \og superposer \fg{} au tableau lui-même. +% +% Le parti pris ici 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, à l'intérieur d'une commande |\variations|, +% ce qui est en haut et ce qui est en bas. +% +% Cette documentation donne une galerie d'exemples et décrit les commandes +% fournies. +% +% L'extension possède deux options utilisées pour le tracé automatique des flèches : +% |pstricks| (par défaut) ou |tikz| (|\usepackage[tikz]{tablvar}|). +% Pour l'option |pstricks|, il faut compiler avec latex + dvips + ps2pdf ; +% pour l'option |tikz|, il faut compiler DEUX fois avec pdflatex +% (la première fois les flèches ne sont pas correctement dessinées). +% Si on veut compiler avec l'option |pstricks| après avoir compilé avec |tikz|, +% il faut, entre les deux, supprimer le fichier |.aux|, sinon la compilation plante. +% +% \section{Utilisation} +% +% \subsection{Tableaux de variations simples} +% +% Un tableau de variation (ou de signes) se définit par un environnement |tablvar| +% qui \emph{doit être en mode mathématiques} (comme |array|). +% +% 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} +% +% \vspace{-3ex} +%% \DescribeEnv{tablvar} +% 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 1ère colonne de légendes, il y a deux types de colonnes : +% des colonnes de \emph{valeurs}, de largeur variable en fonction de leur contenu et centrées, +% et des colonnes \emph{intervalles} de largeur fixe (|2.5em| par défaut). +% +% \DescribeEnv{tablvar\oarg{largeur}} +% L'environnement |tablvar| possède un paramètre optionnel pour modifier la +% largeur des colonnes intervalles. +% Voici un exemple avec un seul intervalle utilisant l'argument optionnel |4em| +% pour allonger la largeur de l'intervalle qui sinon apparaîtrait très étroit. +% +% \noindent +% \begin{minipage}[t]{8cm} +% \begin{verbatim} +%\[ +%\begin{tablvar}[4em]{1} +% \hline +% x & -5 && +\infty \\ +% \hline +% \variations{\mil{f(x)} & \haut{2} && \bas{-1}} +% \hline +%\end{tablvar} +%\] +% \end{verbatim} +% \end{minipage} +% \begin{minipage}[t]{5cm} +%\[ +%\begin{tablvar}[4em]{1} +% \hline +% x & -5 && +\infty \\ +% \hline +% \variations{\mil{f(x)} & \haut{2} && \bas{-1}} +% \hline +%\end{tablvar} +%\] +% \end{minipage} +% +% \DescribeMacro{\pos} +% Les commandes |\haut| et |\bas| ne sont en fait que des alias d'une commande +% 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 +% ou tableau de signe ont pour indice 0. +% La partie variations contient par défaut 3 lignes 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 |tikz|.} +% permet d'ajuster le positionnement des flèches : +% |c| (centered, par défaut), |b| (bottom) ou |t| (top). +% Comparer le positionnement des flèches dans les deux exemples suivants. +% +% \DescribeMacro{\variations} +% C'est la commande |\variations| qui, une fois les nœuds définis, +% construit ensuite automatiquement les flèches. +% +% La commande |\mil|, utilisée pour la première colonne contenant $f(x)$, +% \DescribeMacro{\pos*} +% est un alias reposant 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.\\ +% \begin{minipage}[t]{7.4cm} +% \begin{verbatim} +%\begin{tablvar}{2} +% \hline +% x & 0 & & \frac12 & & 1 \\ +% \hline +% f'(x) & & + & 0 & - & \\ +% \hline +% \variations{\mil{f(x)} & \bas{2} && +% \haut{f(\frac12)} && \bas{0} +% } +% \hline +%\end{tablvar} +% \end{verbatim} +% \end{minipage} +% \begin{minipage}[t]{5.2cm} +%\[ +%\begin{tablvar}{2} +% \hline +% x & 0 & & \frac12 & & 1 \\ +% \hline +% f'(x) & & + & 0 & - & \\ +% \hline +% \variations{\mil{f(x)} & \bas{2} && +% \haut{f(\frac12)} && \bas{0} +% } +% \hline +%\end{tablvar} +%\] +% \end{minipage} +% \\[-1ex] Le même tableau avec les commandes |\pos| +% et |\pos*| et l'option |t| pour le max.\\[-1ex] +% \begin{minipage}[t]{7.4cm} +% \begin{verbatim} +%\begin{tablvar}{2} +% \hline +% x & 0 & & \frac12 & & 1 \\ +% \hline +% f'(x) & & + & 0 & - & \\ +% \hline +% \variations{\pos*{2}{f(x)} & \pos{3}{2} & +% &\pos[t]{1}{f(\frac12)} && \pos{3}{0} +% } +% \hline +%\end{tablvar} +% \end{verbatim} +% \end{minipage} +% \begin{minipage}[t]{5.2cm} +%\[ +%\begin{tablvar}{2} +% \hline +% x & 0 & & \frac12 & & 1 \\ +% \hline +% f'(x) & & + & 0 & - & \\ +% \hline +% \variations{\pos*{2}{f(x)} & \pos{3}{2} & +% &\pos[t]{1}{f(\frac12)} && \pos{3}{0} +% } +% \hline +%\end{tablvar} +%\] +% \end{minipage} +% +% \DescribeMacro{\fleche} +% On peut modifier l'aspect des flèches en redéfinissant la macro |\fleche| +% grâce aux nombreuses options offertes par pstricks ou tikz. +% Cette redéfinition sera locale si on la place dans l'environnement math du tableau. +% Ci-dessous des flèches plus fines, plus proches des nœuds et dont la pointe est +% plus effilée (codé ici pour pstricks uniquement). +%\[ +%\ifthenelse{\boolean{tikz}}{}{ +% \renewcommand{\fleche}{\ncline[linewidth=0.3pt,arrowsize=2pt 3, +% arrowinset=0.5,nodesep=1.5pt]{->}} +% } +%\begin{tablvar}{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} +%\] +% Pour placer des nœuds de flèche au milieu, on doit utiliser |\pos{2}| et non |\mil|. +% \begin{verbatim} +%\[ +% \renewcommand{\fleche}{\ncline[linewidth=0.3pt,arrowsize=2pt 3, +% arrowinset=0.5,nodesep=1.5pt]{->}} +%\begin{tablvar}{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 signe. Elle est bien sûr +% facultative de même que la partie variations. +% Ici $f(x)=-4x^3+3x^2+18x-3$ et $f'(x)=6(x+1)(-2x+3)$. +%\[ +%\begin{tablvar}{3} +% \hline +% x & -\infty && \makebox[2.5em]{$-1$} && +% \makebox[2.5em]{$\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{\mbox{Variations de }f} & \haut{+\infty} && +% \bas{-14} && \haut{\frac{69}{4}} && \bas{-\infty} +% } +% \hline +%\end{tablvar} +%\] +% Les bornes des intervalles ont été placées +% dans des |\makebox|\oarg{largeur}|{$ $}|, +% sur la ligne des $x$, pour que les colonnes +% soient plus équilibrées (ceci est affaire de goût). +% \begin{verbatim} +%\begin{tablvar}{3} +% \hline +% x & -\infty && \makebox[2.5em]{$-1$} && +% \makebox[2.5em]{$\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{\mbox{Variations de }f} & \haut{+\infty} && +% \bas{-14} && \haut{\frac{69}{4}} && \bas{-\infty} +% } +% \hline +%\end{tablvar} +%\end{verbatim} +% +% \subsection{Doubles barres et discontinuités} +% +% Une double barre s'obtient avec la commande |\bb|. \DescribeMacro{\bb} +% Pour ne pas tracer de flèche entre deux nœuds, on place la +% commande |\discont| entre les deux. \DescribeMacro{\discont} +%\[ +%\begin{tablvar}{2} +% \hline +% x & -\infty && 0 && +\infty \\ +% \hline +% -\frac{1}{x} & & + & \bb & - & \\ +% \hline +% \variations{ \mil{\dfrac{1}{x^2}} & \bas{0} && \haut{+\infty} \bb +% \discont \haut{+\infty} && \bas{0} +% } +% \hline +%\end{tablvar} +%\] +% La commande |\dfrac| provient de l'extension amsmath (ou sinon on l'obtient +% avec |\newcommand{\dfrac}{\displaystyle\frac}|). +% \begin{verbatim} +%\begin{tablvar}{2} +% \hline +% x & -\infty && 0 && +\infty \\ +% \hline +% -\frac{1}{x} & & + & \bb & - & \\ +% \hline +% \variations{ \mil{\dfrac{1}{x^2}} & \bas{0} && \haut{+\infty} \bb +% \discont \haut{+\infty} && \bas{0} +% } +% \hline +%\end{tablvar} +% \end{verbatim} +% +% \vspace{-2ex} +% La syntaxe ci-dessus pose problème lorsque les limites à gauche et à droite +% d'une valeur interdite se trouvent sur des lignes différentes, +% ou que leur contenu n'a pas la même largeur, +% car alors la double barre ne serait plus au centre de sa colonne +% et se trouverait décalée d'une ligne à l'autre. +% +% 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}[3em]{4} +% \hline +% x & -\infty && -1 && 0 && 1 && +\infty \\ +% \hline +% \variations{\mil{\dfrac{1}{1-x^2}} & \haut{0} && +% \bas{-\infty}\mil{\bb}\discont\haut{+\infty} && \bas{1} && +% \haut{+\infty}\mil{\bb}\discont\bas{-\infty} && \haut{0} +% } +% \hline +%\end{tablvar} +%\] +% \begin{verbatim} +%\begin{tablvar}[3em]{4} +% \hline +% x & -\infty && -1 && 0 && 1 && +\infty \\ +% \hline +% \variations{\mil{\dfrac{1}{1-x^2}} & \haut{0} && +% \bas{-\infty}\mil{\bb}\discont\haut{+\infty} && \bas{1} && +% \haut{+\infty}\mil{\bb}\discont\bas{-\infty} && \haut{0} +% } +% \hline +%\end{tablvar} +% \end{verbatim} +% +% \DescribeMacro{\bblim} +% La commande |\bblim| résout le problème en gardant, sur chaque ligne, la double barre +% centrée dans sa colonne, avec des limites à gauche et à droite quelconques +% et quelles que soient les lignes où celles-ci sont positionnées. +% Elle prend 4 paramètres qui sont respectivement \meta{ligne} et \meta{limite} +% à gauche puis à droite de la double barre. +% Elle trace la double barre, place les limites et gère la discontinuité. +%\[ +%\begin{tablvar}[2em]{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}[2em]{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} +% +% Un autre exemple avec des limites de largeur assez différentes (placées ici sur la même ligne). +%\[ +%\begin{tablvar}{3} +% \hline +% x & 0 & & \frac{\pi}{6} & & \frac{\pi}{2} & & \pi \\ +% \hline +% f'(x) & & + & 0 & \hspace{1em} - & \bb & \hspace{-1em} - & \\ +% \hline +% \variations{\mil{f(x)} & \pos[b]{3}{f(0)} && \pos[t]{1}{f(\frac{\pi}{6})} +% && \bblim{3}{-\infty}{3}{0} & & \pos[t]{1}{f(\pi)} +% } +% \hline +%\end{tablvar} +%\] +% La colonne de valeurs du $\frac{\pi}{2}$ étant très large, +% la position des signes \og $-$ \fg{} +% a été légèrement décalée avec la commande \LaTeX\ |\hspace| qui produit +% un espacement horizontal positif ou négatif. +% \begin{verbatim} +%\begin{tablvar}{3} +% \hline +% x & 0 & & \frac{\pi}{6} & & \frac{\pi}{2} & & \pi \\ +% \hline +% f'(x) & & + & 0 & \hspace{1em} - & \bb & \hspace{-1em} - & \\ +% \hline +% \variations{\mil{f(x)} & \pos{3}{f(0)} && \pos[t]{1}{f(\frac{\pi}{6})} +% && \bblim{3}{-\infty}{3}{0} & & \pos[t]{1}{f(\pi)} +% } +% \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 +% le 1ère et à droite pour la dernière. +% +%\[ +%\begin{tablvar*}{2} +% \hline +% x & 0 && 1 && +\infty \\ +% \hline +% \variations{ \mil{\ln x -x} & \bb \pos{3}{-\infty} && \pos{1}{-1} && +% \pos{3}{-\infty} } +% \hline +%\end{tablvar*} +%\qquad +%\begin{tablvar*}{2} +% \hline +% x & 0 && 1 && +\infty \\ +% \hline +% \variations{ \mil{\ln x -x} & \pos*{1}{\bb} \pos*{2}{\bb} +% \pos{3}{-\infty} && \pos{1}{-1} && \pos{3}{-\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 \pos{3}{-\infty} && \pos{1}{-1} && +% \pos{3}{-\infty} } +% \hline +%\end{tablvar*} +% +%\begin{tablvar*}{2} +% \hline +% x & 0 && 1 && +\infty \\ +% \hline +% \variations{ \mil{\ln x -x} & \pos*{1}{\bb} \pos*{2}{\bb} +% \pos{3}{-\infty} && \pos{1}{-1} && \pos{3}{-\infty} } +% \hline +%\end{tablvar*} +% \end{verbatim} +% +% Si par contre, à l'autre extrémité du tableau, les valeurs ont des largeurs +% assez différentes, leur alignement non centré peut être corrigé en utilisant +% |\hspace|. Ci-dessous, de l'espace a été ajouté à droite du 1.\\ +% \begin{minipage}[t]{7.7cm} +% \begin{verbatim} +%\begin{tablvar*}[3em]{1} +% \hline +% x & 0 && +\infty \\ +% \hline +% \variations{ \mil{1-\dfrac{1}{x}} & \bb +% \bas{-\infty} && \haut{1\hspace{0.5em}} +% } +% \hline +%\end{tablvar*} +% \end{verbatim} +% \end{minipage} +% \begin{minipage}[t]{5cm} +%\[ +%\begin{tablvar*}[3em]{1} +% \hline +% x & 0 && +\infty \\ +% \hline +% \variations{ \mil{1-\dfrac{1}{x}} & \bb +% \bas{-\infty} && \haut{1\hspace{0.5em}} +% } +% \hline +%\end{tablvar*} +%\] +% \end{minipage} +% +% \DescribeMacro{\tablvarinit} +% Enfin, pour personnaliser totalement la définition des colonnes, +% on peut revenir à l'environnement |array| plutôt que d'utiliser |tablvar| +% (il faut dans ce cas appeler |\tablvarinit| juste avant |\begin{array}|). +% Ce qui est essentiel dans cette extension est la macro |\variations| +% avec les commandes de positionnement +% et non l'environnement |tablvar| qui n'est qu'un |array| dans lequel +% on a fixé les définitions de colonnes (et initialisé des variables). +% +% \subsection{Valeurs remarquables} +% +% Nous appellerons \emph{valeur remarquable}, un valeur supplémentaire +% que l'on place dans un tableau de variation et qui ne correspond +% pas à un extremum. +% \medskip +% +% \DescribeMacro{\vr} +% Une première approche est de laisser les flèches de variations passer à travers +% ces valeurs remarquables. +% Pour chaque valeur remarquable, on place une commande |\vr| sur la ligne +% des $x$ et une commande |\vr| dans la partie variations. Les valeurs remarquables +% seront automatiquement reliées par des pointillés +% (tracés réalisés dans la commande |\variations|). +% +% Voici un exemple avec le logarithme népérien où la valeur remarquable +% est placée dans la colonne intervalle.\\ +% \begin{minipage}[t]{7.7cm} +% \begin{verbatim} +%\begin{tablvar*}[5em]{1} +% \hline +% x & 0 & \vr{1} & +\infty \\ +% \hline +% \variations{ \mil{\ln x} & +% \bb \pos{3}{-\infty} & +% \vr{0} & \pos{1}{+\infty} } +% \hline +%\end{tablvar*} +% \end{verbatim} +% \end{minipage} +% \begin{minipage}[t]{5cm} +%\[ +%\begin{tablvar*}[5em]{1} +% \hline +% x & 0 & \vr{1} & +\infty \\ +% \hline +% \variations{ \mil{\ln x} & +% \bb \pos{3}{-\infty} & +% \vr{0} & \pos{1}{+\infty} } +% \hline +%\end{tablvar*} +%\] +% \end{minipage} +% +% Un autre exemple avec deux valeurs remarquables, placées cette fois +% dans des colonnes valeurs. +%\[ +%\renewcommand{\tablvarstretch}{1} +%\begin{tablvar}[1.5em]{3} +% \hline +% x & -\infty && \vr{0} && \vr{1} && +\infty \\ +% \hline +% \variations[4]{ \pos*{2}{\vdecal{-1.5ex}{\exp x}} & \pos{4}{0} && +% \vr[3]{1} && \vr{\mathrm{e}} && \pos{1}{+\infty} +% } +% \hline +%\end{tablvar} +%\] +% \begin{verbatim} +%\[ +%\renewcommand{\tablvarstretch}{1} +%\begin{tablvar}[1.5em]{3} +% \hline +% x & -\infty && \vr{0} && \vr{1} && +\infty \\ +% \hline +% \variations[4]{ \pos*{2}{\vdecal{-1.5ex}{\exp x}} & \pos{4}{0} && +% \vr[3]{1} && \vr{\mathrm{e}} && \pos{1}{+\infty} +% } +% \hline +%\end{tablvar} +%\] +% \end{verbatim} +% \vspace{-4ex} +% \DescribeMacro{\variations\oarg{nblignes}} +% Ci-dessus, la partie variations a été composée sur 4 lignes grâce au paramètre +% optionnel de la commande |\variations|. Les lignes sont alors numérotées +% de 1 (haut) à 4 (bas).\\ +% \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 (2 par défaut).\\ +% \DescribeMacro{\tablvarstretch} +% À cause des 4 lignes de variations, la hauteur de lignes du tableau +% a été réduite en modifiant le facteur +% |\tablvarstretch| (fixé à 1.2 par défaut), modification locale car placée à l'intérieur de l'environnement math.\\ +% \DescribeMacro{\vdecal} +% Enfin la légende $\exp x$ a été placée en ligne 2 mais +% décalée vers le bas, pour qu'elle se trouve centrée verticalement +% sachant qu'il y a 4 lignes de variations. +% Ceci s'obtient grâce à la commande |\vdecal| dont la syntaxe est +% \cmd{\vdecal}\marg{decal}\marg{contenu} où la valeur du décalage +% peut être positive (vers le haut) ou négative (vers le bas). +% +% \medskip +% On peut préférer que les flèches de variations s'interrompent sur +% les valeurs remarquables qui sont alors des nœuds. +% Voici un tableau qui présente simultanément les deux manières de traiter +% les valeurs remarquables. +% La taille des flèches s'ajuste automatiquement. +% Bien entendu, on peut aussi ne pas tracer les pointillés mais placer +% quand même une valeur remarquable sur la flèche avec |\mil{0}|. +%\[ +%\begin{tablvar*}{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})} && \pos{2}{0} &&\pos[b]{3}{-\infty}\bb +% } +% \hline +%\end{tablvar*} +%\] +% Si on choisit l'option |[t]| pour le max en ligne 1, +% il est alors nécessaire de choisir l'option |[b]| en ligne 3 pour conserver +% un positionnement correct du 0 sur la flèche. +% \begin{verbatim} +%\begin{tablvar*}{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})} && \pos{2}{0} &&\pos[b]{3}{-\infty}\bb +% } +% \hline +%\end{tablvar*} +% \end{verbatim} +% +% La commande |\vr| peut également servir à représenter des discontinuités +% particulières, voir l'exemple ci-dessous 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]{7.5cm} +% \begin{verbatim} +%\begin{tablvar}{2} +% \hline +% x & -\pi && \vr{0} && \pi \\ +% \hline +% \variations{\mil{f(x)} & \bas{0} && +% \haut{ 1 \hspace{0.2em} } \discont +% \vr[3]{0} \haut{ \hspace{0.2em} 1 } +% && \bas{0} +% } +% \hline +%\end{tablvar} +% \end{verbatim} +% \end{minipage} +% \begin{minipage}[t]{5cm} +%\[ +%\begin{tablvar}{2} +% \hline +% x & -\pi && \vr{0} && \pi \\ +% \hline +% \variations{\mil{f(x)} & \bas{0} && +% \haut{ 1 \hspace{0.2em} } \discont +% \vr[3]{0} \haut{ \hspace{0.2em} 1 } +% && \bas{0} +% } +% \hline +%\end{tablvar} +%\] +% \end{minipage} +% +% \medskip +% Voici un dernier exemple, traité de deux manières différentes, +% avec des valeurs remarquables dans deux tableaux conjoints. +% Avec des nœuds c'est assez simple. +%\[ +%\begin{tablvar}{4} +% \hline +% x & 0 && \frac{\pi}{2} && \pi && \frac{3\pi}{2} && 2\pi \\ +% \hline +% \variations{ \mil{\cos x} & \haut{1} && \pos{2}{0} && \bas{-1} && +% \pos{2}{0} && \haut{1} } +% \hline +% \variations{ \mil{\sin x} & \bas{0} && \haut{1} && \pos{2}{0} && +% \bas{-1} && \haut{0} } +% \hline +%\end{tablvar} +%\] +% \begin{verbatim} +%\begin{tablvar}{4} +% \hline +% x & 0 && \frac{\pi}{2} && \pi && \frac{3\pi}{2} && 2\pi \\ +% \hline +% \variations{ \mil{\cos x} & \haut{1} && \pos{2}{0} && \bas{-1} && +% \pos{2}{0} && \haut{1} } +% \hline +% \variations{ \mil{\sin x} & \bas{0} && \haut{1} && \pos{2}{0} && +% \bas{-1} && \haut{0} } +% \hline +% \end{verbatim} +% +% \vspace{-2ex} +% \DescribeMacro{\noeud} \DescribeMacro{\vrconnect} +% Par contre, pour traiter ici les valeurs remarquables avec des pointillés, +% la commande |\vr| ne permet pas connecter les valeurs sur $x$ avec celles du sinus dans +% le 2ème tableau, mais on peut le faire \og à la main\fg{} +% en appelant les macros |\noeud| et |\vrconnect|. +%\[ +%\begin{tablvar}{4} +% \hline +% x & 0 && \noeud{X1}{\frac{\pi}{2}} && \noeud{X2}{\pi} && +% \noeud{X3}{\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} && \haut{\noeud{Y1}{1}} && +% \mil{\noeud{Y2}{0}} && \bas{\noeud{Y3}{-1}} && \haut{0} } +% \hline +%\end{tablvar} +%\vrconnect{X1}{Y1} +%\vrconnect{X2}{Y2} +%\vrconnect{X3}{Y3} +%\] +% \begin{verbatim} +%\begin{tablvar}{4} +% \hline +% x & 0 && \noeud{X1}{\frac{\pi}{2}} && \noeud{X2}{\pi} && +% \noeud{X3}{\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} && \haut{\noeud{Y1}{1}} && +% \mil{\noeud{Y2}{0}} && \bas{\noeud{Y3}{-1}} && \haut{0} } +% \hline +%\end{tablvar} +%\vrconnect{X1}{Y1} +%\vrconnect{X2}{Y2} +%\vrconnect{X3}{Y3} +% \end{verbatim} +% +% \subsection{Zones interdites} +% +% Nous abordons pour finir le tracé de zones interdites où la fonction +% n'est pas définie. On peut dessiner ces zones interdites en couleur ou en hachures. +% +% \medskip +% Pour une zone interdite en couleur, on place la commande |\ZIc| +% \DescribeMacro{\ZIc} +% dans les intervalles que l'on veut colorer (signes ou variations). +% Un exemple avec la fonction $f$ définie par $f(x)=\frac{1}{\sqrt{x^2-1}}$. +% La zone grisée arrive toujours au contact des doubles barres. +%\[ +%\begin{tablvar}[4em]{3} +% \hline +% x & -\infty && \zbox{-1} && \zbox{1} && +\infty \\ +% \hline +% -\frac{x}{\sqrt{x^2-1}^3} && \hspace{-1.5em} + & \bb & \ZIc & +% \bb & \hspace{1.5em} - & \\ +% \hline +% \variations{\mil{\dfrac{1}{\sqrt{x^2-1}}} & \bas{0} && +% \zbox[r]{\haut{+\infty}} \bb & \ZIc & +% \bb \zbox[l]{\haut{+\infty}} && \bas{0} +% } +% \hline +%\end{tablvar} +%\] +% \DescribeMacro{\zbox} +% Plusieurs \og interventions\fg{} manuelles sont nécessaires. +% D'abord sur la ligne des $x$, il faut permettre aux bornes +% de déborder sur la colonne de la zone interdite. +% Pour cela on les place dans une |\zbox|. +% La commande \cmd{\zbox}\oarg{pos}\marg{contenu} +% affiche son contenu mais considère la largeur comme nulle. +% Le 1er paramètre (optionnel) est le positionnement dans la boite : +% |c| (par défaut), |l| (left) ou |r| (right). +% Ici |zbox| est aussi nécessaire pour annuler la largeur des +% boites contenant les $+\infty$ sinon la double barre ne serait +% plus au centre de sa colonne, en ligne 1, ce qui produirait +% un décalage avec les autres lignes.\\ +% Enfin, les signes ont été décalés avec |\hspace|, pour améliorer +% leur centrage par rapport aux flèches. +% \begin{verbatim} +%\begin{tablvar}[4em]{3} +% \hline +% x & -\infty && \zbox{-1} && \zbox{1} && +\infty \\ +% \hline +% -\frac{x}{\sqrt{x^2-1}^3} && \hspace{-1.5em} + & \bb & \ZIc & +% \bb & \hspace{1.5em} - & \\ +% \hline +% \variations{\mil{\dfrac{1}{\sqrt{x^2-1}}} & \bas{0} && +% \zbox[r]{\haut{+\infty}} \bb & \ZIc & +% \bb \zbox[l]{\haut{+\infty}} && \bas{0} +% } +% \hline +%\end{tablvar} +% \end{verbatim} +% +% Un autre exemple avec $f(x)=\sqrt{2x^2-1}$ où +% les doubles barres n'apparaissent que sur la dérivée. +%\[ +%\begin{tablvar}[3em]{3} +% \hline +% x & -\infty && \zbox{-\frac{\sqrt{2}}{2}} && +% \zbox{\frac{\sqrt{2}}{2}} && +\infty \\ +% \hline +% \frac{2x}{\sqrt{2x^2-1}} && - & \bb & \ZIc & \bb & + & \\ +% \hline +% \variations{\mil{\sqrt{2x^2-1}} & \haut{+\infty} && \zbox[r]{\bas{0}} +% & \ZIc & \zbox[l]{\bas{0}} && \haut{+\infty} +% } +% \hline +%\end{tablvar} +%\] +% \begin{verbatim} +%\begin{tablvar}[3em]{3} +% \hline +% x & -\infty && \zbox{-\frac{\sqrt{2}}{2}} && +% \zbox{\frac{\sqrt{2}}{2}} && +\infty \\ +% \hline +% \frac{2x}{\sqrt{2x^2-1}} && - & \bb & \ZIc & \bb & + & \\ +% \hline +% \variations{\mil{\sqrt{2x^2-1}} & \haut{+\infty} && \zbox[r]{\bas{0}} +% & \ZIc & \zbox[l]{\bas{0}} && \haut{+\infty} +% } +% \hline +%\end{tablvar} +% \end{verbatim} +% +% \DescribeMacro{\ZIh}% +% Voyons à présent la réalisation de tableaux avec zones interdites hachurées. +% On place la commande |\ZIh| dans les intervalles que l'on veut hachurer. +%\[ +%\begin{tablvar}{3} +% \hline +% x & -\infty & & \zbox{-\frac{\sqrt{2}}{2}}& & +% \zbox{\frac{\sqrt{2}}{2}} & & +\infty \\ +% \hline +% f'(x) & & - & \bb & \ZIh & \bb & + & \\ +% \hline +% \variations{\mil{f(x)} & \haut{+\infty} && \bas{0} & +% \ZIh & \bas{0} && \haut{+\infty} +% } +% \hline +%\end{tablvar} +%\] +% Pour les mêmes raisons que précédemment, les |\zbox| sont toujours +% nécessaires sur la ligne des $x$, mais plus pour les 0. +% \begin{verbatim} +%\begin{tablvar}{3} +% \hline +% x & -\infty && \zbox{-\frac{\sqrt{2}}{2}} && +% \zbox{\frac{\sqrt{2}}{2}} & & +\infty \\ +% \hline +% f'(x) && - & \bb & \ZIh & \bb & + & \\ +% \hline +% \variations{\mil{f(x)} & \haut{+\infty} && \bas{0} & +% \ZIh & \bas{0} && \haut{+\infty} } +% \hline +%\end{tablvar} +% \end{verbatim} +% +% \DescribeMacro{\ZIh\oarg{hauteur}} +% Les hachures s'ajustent automatiquement lorsque toutes les lignes +% ont une hauteur standard. +% Si par contre des lignes sont plus hautes à cause de leur contenu, +% on doit ajouter de la hauteur avec \cmd{\ZIh}\oarg{hauteur} (réglage manuel). +%\[ +%\begin{tablvar}[3.5em]{3} +% \hline +% x & -\infty & &\zbox{-1} &&\zbox{1} & & +\infty \\ +% \hline +% f'(x) && \hspace{-1em} + & \bb & \ZIh & \bb & \hspace{1em} - & \\ +% \hline +% \variations{ \mil{\sqrt{\dfrac{x-1}{x+1}}} +% & \bas{1} && \zbox[r]{\haut{+\infty}} \bb & \ZIh[2.4ex] +% & \zbox{\bas{0}} \barre && \haut{1} +% } +% \hline +%\end{tablvar} +%\] +% On remarquera ici l'utilisation de |\barre| dans la partie variations qui +% oblige à placer le 0 dans une |\zbox| sans quoi la barre serait décalée après le 0. +% \begin{verbatim} +%\begin{tablvar}[3.5em]{3} +% \hline +% x & -\infty & &\zbox{-1} && \zbox{1} && +\infty \\ +% \hline +% f'(x) && \hspace{-1em} + & \bb & \ZIh & \bb & \hspace{1em} - & \\ +% \hline +% \variations{ \mil{\sqrt{\dfrac{x-1}{x+1}}} +% & \bas{1} && \zbox[r]{\haut{+\infty}} \bb & \ZIh[2.4ex] +% & \zbox{\bas{0}} \barre && \haut{1} +% } +% \hline +%\end{tablvar} +% \end{verbatim} +% +% Un exemple avec deux zones interdites, la fonction +% $f:x\longmapsto \sqrt{(x^2-1)(x^2-4)}$. +%{ \footnotesize +%\[ +%\begin{tablvar}{6} +% \hline +% x & -\infty && \zbox{-2} && \zbox{-1} && 0 && \zbox{1} && \zbox{2} +% && +\infty \\ +% \hline +% 2x & &-& \barre & \ZIh &\barre &-& \barre[0] &+& \barre && \barre &+&\\ +% \hline +% 2x^2-5 & &+& \barre & \ZIh & \barre &-& \barre &-& \barre && +% \barre &+& \\ +% \hline +% f'(x) & &-& \bb & \ZIh & \bb &+& \barre[0] &-& \bb && \bb &+& \\ +% \hline +% \variations{\mil{f(x)} & \haut{+\infty} && \zbox{\bas{0}} \barre +% & \ZIh[0.4ex] & \zbox{\bas{0}} \barre && \haut{2} && \zbox{\bas{0}} +% \barre & \ZIh[0.4ex] & \zbox{\bas{0}} \barre && \haut{+\infty} +% } +% \hline +%\end{tablvar} +%\] +%} +% La commande |\ZIh| \emph{ne doit pas être placée deux fois dans une même ligne de signe} +% car, sauf sur la dernière ligne des variations où elle trace les hachures, +% son effet est simplement de cumuler la hauteur de la ligne. +% Et comme toutes les lignes de signes ont le même numéro 0, la commande |\ZIh|, +% dans la partie signes, ne sait pas sur quelle ligne elle se trouve +% et cumule la hauteur de ligne à chaque appel. +% \begin{verbatim} +%\begin{tablvar}{6} +% \hline +% x & -\infty && \zbox{-2} && \zbox{-1} && 0 && \zbox{1} && \zbox{2} +% && +\infty \\ +% \hline +% 2x & &-& \barre & \ZIh &\barre &-& \barre[0] &+& \barre && \barre &+&\\ +% \hline +% 2x^2-5 & &+& \barre & \ZIh & \barre &-& \barre &-& \barre && +% \barre &+& \\ +% \hline +% f'(x) & &-& \bb & \ZIh & \bb &+& \barre[0] &-& \bb && \bb &+& \\ +% \hline +% \variations{\mil{f(x)} & \haut{+\infty} && \zbox{\bas{0}} \barre +% & \ZIh[0.4ex] & \zbox{\bas{0}} \barre && \haut{2} && \zbox{\bas{0}} +% \barre & \ZIh[0.4ex] & \zbox{\bas{0}} \barre && \haut{+\infty} +% } +% \hline +%\end{tablvar} +% \end{verbatim} +% +% \DescribeMacro{\ZIh*} +% Lorsqu'on ne fait qu'un tableau de signes (sans variations), +% il faut utiliser la commande |\ZIh*| pour déclencher le tracé des hachures. +% Celle-ci doit être placée sur la dernière ligne de chaque bloc de hachures. +% Sur les lignes précédentes, le |\ZIh| peut être placé n'importe où +% (une seule fois par ligne). +% +%{ \footnotesize +%\[ +%\begin{tablvar}{6} +% \hline +% x & -\infty && \zbox{-2} && \zbox{-1} && 0 && \zbox{1} && \zbox{2} +% && +\infty \\ +% \hline +% 2x & &-& \barre && \barre &-& \barre[0] &+& \barre && +% \barre{} &+& \ZIh \\ +% \hline +% 2x^2-5 & &+& \barre & & \barre &-& \barre &-& \barre && +% \barre{} &+& \ZIh \\ +% \hline +% f'(x) & &-& \bb & \ZIh* & \bb &+& \barre[0] &-& \bb & \ZIh* & \bb &+&\\ +% \hline +%\end{tablvar} +%\] +%} +% \begin{verbatim} +%\begin{tablvar}{6} +% \hline +% x & -\infty && \zbox{-2} && \zbox{-1} && 0 && \zbox{1} && \zbox{2} +% && +\infty \\ +% \hline +% 2x & &-& \barre & & \barre &-& \barre[0] &+& \barre && +% \barre{} &+& \ZIh \\ +% \hline +% 2x^2-5 & &+& \barre & & \barre &-& \barre &-& \barre && +% \barre{} &+& \ZIh \\ +% \hline +% f'(x) & &-& \bb & \ZIh* & \bb &+& \barre[0] &-& \bb & \ZIh* & \bb &+&\\ +% \hline +%\end{tablvar} +% \end{verbatim} +% +% Si on veut tracer des rectangles de hachures sur des lignes non contiguës, +% il faut un appel à |\ZIh*| pour chaque rectangle. +%\[ +%\begin{tablvar}{4} +% \hline +% x & -\infty && \zbox{-1}\phantom{0} && \zbox[l]{1}\phantom{0} && 2 && +% +\infty \\ +% \hline +% \sqrt{x^2-1} && + & \barre[0] & \ZIh* & \barre[0] & + & \barre & + &\\ +% \hline +% x-2 && - & \barre & - & \barre & - & \barre[0] & + & \\ +% \hline +% (x-2)\sqrt{x^2-1} && - & \barre[0] & \ZIinit\ZIh* & \barre[0] & - & +% \barre[0] & + & \\ +% \hline +%\end{tablvar} +%\] +% \begin{verbatim} +%\begin{tablvar}{4} +% \hline +% x & -\infty && \zbox{-1}\phantom{0} && \zbox[l]{1}\phantom{0} && 2 && +% +\infty \\ +% \hline +% \sqrt{x^2-1} && + & \barre[0] & \ZIh* & \barre[0] & + & \barre & + &\\ +% \hline +% x-2 && - & \barre & - & \barre & - & \barre[0] & + & \\ +% \hline +% (x-2)\sqrt{x^2-1} && - & \barre[0] & \ZIinit\ZIh* & \barre[0] & - & +% \barre[0] & + & \\ +% \hline +%\end{tablvar} +% \end{verbatim} +% \vspace{-3ex} +% Ci-dessus, la commande \LaTeX\ |\phantom{0}| sur la ligne des $x$ permet de créer une +% boite fantôme de la largeur du 0, pour éviter que la largeur de la colonne +% valeur ne soit complètement nulle produisant un chevauchement inélégant +% des 0 sur les hachures.\\ +% \DescribeMacro{\ZIinit} +% L'appel à |\ZIinit| sur la dernière ligne permet de ne pas +% conserver la hauteur cumulée lors du précédent appel à |\ZIh*| +% (en fait inutile ici car la 1ère zone hachurée ne fait qu'une seule ligne de haut). +% +% \medskip +% \DescribeMacro{\hachure} +% On ne peut pas dessiner des zones interdites hachurées +% sur plusieurs colonnes contiguës avec |\ZIh|, +% mais on peut alors utiliser la primitive graphique |\hachure| +% pour définir manuellement le rectangle à hachurer. +% +%{ \footnotesize +%\[ +%\begin{tablvar}{8} +% \hline +% x & -\infty && \zbox{-2} && \zbox{-\sqrt{\frac{5}{2}}} && \zbox{-1} +% && 0 && 1 && \zbox{\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 & & \hachure{-4em,-11.2ex}{4em,2.4ex} & & \bb &+& +% \barre[0] &-& \bb & & & & \bb & + & \\ +% \hline +% \variations{\mil{f(x)} & \haut{+\infty} && \bas{0} \discont && && +% \bas{0} && \haut{2} && \bas{0} \discont && +% \pos*{3}{\hachure{-4em,12.5ex}{4em,-1.1ex}} && \bas{0} && +% \haut{+\infty} +% } +% \hline +%\end{tablvar} +%\] +%} +% Si l'on ne dispose pas de ligne de signe pour placer la commande |\hachure|, +% on peut la placer sur la ligne des $x$ ou dans la partie variations mais +% il faut alors mettre celle-ci dans un |\pos*| sinon elle sera répétée pour chaque +% ligne des variations. +% \begin{verbatim} +%\begin{tablvar}{8} +% \hline +% x & -\infty && \zbox{-2} && \zbox{-\sqrt{\frac{5}{2}}} && \zbox{-1} +% && 0 && 1 && \zbox{\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 & & \hachure{-4em,-11.2ex}{4em,2.4ex} & & \bb &+& +% \barre[0] &-& \bb & & & & \bb & + & \\ +% \hline +% \variations{\mil{f(x)} & \haut{+\infty} && \bas{0} \discont && && +% \bas{0} && \haut{2} && \bas{0} \discont && +% \pos*{3}{\hachure{-4em,12.5ex}{4em,-1.1ex}} && \bas{0} && +% \haut{+\infty} +% } +% \hline +%\end{tablvar} +% \end{verbatim} + +% \section{Le code} + +% \subsection{Extensions requises et options} + +% \begin{macrocode} +\RequirePackage{array} +\RequirePackage{ifthen} +\RequirePackage{multido} +\RequirePackage{colortbl} + +\newboolean{tikz} +\DeclareOption{tikz}{\setboolean{tikz}{true}} +\DeclareOption{pstricks}{\setboolean{tikz}{false}} % valeur par défaut +\ProcessOptions \relax + +\ifthenelse{\boolean{tikz}}{ + \RequirePackage{tikz} + \usetikzlibrary{patterns} + \newlength{\tikznode@below} + }{ + \RequirePackage{pst-node} +} +% \end{macrocode} + +% \subsection{Les paramètres généraux} + +% Dans cette section sont présentés tous les paramètres +% que l'on peut redéfinir pour modifier l'aspect des tableaux, +% mais qui n'ont en principe pas besoin d'être touchés. +% +% \begin{macro}{\intervalwidth} +% Définit la largeur par défaut des colonnes \og intervalles \fg, +% valeur prédéfinie à 2.5~em. +% \begin{macrocode} +\newlength{\intervalwidth} +\setlength{\intervalwidth}{2.5em} % largeur des "intervalles" +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\bordercolsep} +% Définit la largeur de l'espace extérieur des première et dernière colonnes de valeurs. +% 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 lignes verticales de début et de fin. +% \begin{macrocode} +\newlength{\bordercolsep} % largeur de l'espace inter-colonne +\setlength{\bordercolsep}{2pt} +% \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é ajustée pour que les zones interdites grisées avec |\cellcolor| +% arrivent au contact de la double barre. +% \begin{macrocode} +\newlength{\innercolsep} +\setlength{\innercolsep}{4pt} +% \end{macrocode} +% \end{macro} + +%\begin{macro}{maxdiscount} +% La gestion de discontinuités permettant de ne pas relier les flèches l'une à l'autre +% se fait grâce à la commande |\discont|. +% Le compteur |maxdiscont| est fixé à 3 par défaut ; il faut l'augmenter si l'on veut +% produire un tableau de variation avec plus de 3 discontinuités. +% \begin{macrocode} +\newcounter{maxdiscont} +\setcounter{maxdiscont}{3} % nb max de discontinuités +% \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 1.2 (1 correspondant +% à la valeur standard d'un environnement |array|). +% Placée dans un environnement math, elle sera locale à cet environnement. +% \begin{macrocode} +\newcommand{\tablvarstretch}{1.2} +% \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 : 0.5~pt 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. +% \begin{macrocode} +\definecolor{tvbarrecolor}{gray}{0.7} +% \end{macrocode} +% \end{macro} + +% \subsection{Les commandes graphiques pstricks/tikz} + +% 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 pst-node). +% +% \begin{macro}{\fleche} +% La commande \cmd{\fleche}\marg{noeud1}\marg{noeud2} 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 réalisé automatiquement par la commande |\variations|. +% Pour modifier l'aspect des flèches on peut redéfinir la commande. +% \begin{macrocode} +\newcommand*{\fleche}[2]{ + \ifthenelse{\boolean{tikz}}{ + \tikz[remember picture,overlay]{\draw[->,>=stealth, + line width=0.6pt] (#1) -- (#2);} + }{ + \ncline[arrowsize=2pt 2,arrowinset=0.4,nodesep=3pt, + linewidth=0.6pt]{->}{#1}{#2} + } +} +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\vrconnect} +% La commande \cmd{\vrconnect}\marg{noeud1}\marg{noeud2} +% relie les nœuds définis par |\vr| (valeurs remarquables) +% et le tracé est réalisé automatiquement par la commande |\variations|. +% Par défaut : lignes en pointillés d'épaisseur 1~pt. +% \begin{macrocode} +\newcommand*{\vrconnect}[2]{ + \ifthenelse{\boolean{tikz}}{ + \tikz[remember picture,overlay]{\draw[dotted,line width=1pt] + (#1) -- (#2);} + }{ + \ncline[nodesep=5pt,linestyle=dotted,linewidth=1pt]{-}{#1}{#2} + } +} +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\noeud} +% \cmd{\noeud}\oarg{pos}\marg{noeud}\marg{valeur} +% définit les nœuds des flèches et valeurs remarquables ; +% le 1er 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 (sans effet pour |tikz|) ; +% le 2ème paramètre est le nom du nœud (qui est donné automatiquement +% par les commandes de positionnement) ; +% le 3ème paramètre est la valeur affichée dans le tableau. +% \begin{macrocode} +\newcommand*{\noeud}[3][c]{ + \ifthenelse{\boolean{tikz}}{ + \tikz[remember picture,baseline]{ + \node[anchor=base,inner sep=0,outer sep=4] (#2) {$#3$}; + } % l'option de placement (#1) n'est pas implémentée pour tikz + }{ + \rnode[#1]{#2}{#3} + } +} +% \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. +% \begin{macrocode} +\newcommand{\hachure}[2]{ + \ifthenelse{\boolean{tikz}}{ + \tikz[remember picture,overlay]{\fill[pattern=north east lines] + (#1) rectangle (#2);} + }{ + \psframe[linestyle=none,fillstyle=vlines,hatchwidth=0.2pt, + hatchsep=3pt](#1)(#2) + } +} +% \end{macrocode} +% \end{macro} + +% \subsection{Longueurs et compteurs internes} + +% \begin{macrocode} +\newcounter{ligne} % numéro de ligne +\newcounter{noeud} % numéro du nœud +\newcounter{numvr} % numéro de la valeur remarquable +\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} + +% Longueurs et compteurs pour la commande |\ZIh|. +% \begin{macrocode} +\newlength{\ZIheight} +\newlength{\ZIdepth} +\newlength{\ZIwidth} +\newcounter{ZI} % numéro de la ZI +\newcounter{ZIstar} % numéro de ZI pour la commande \ZI* +\newcounter{ZIvarlignes} % dernière ligne des variations +% \end{macrocode} + +% \bigskip +% \subsection{Les environnements \texttt{tablvar} et \texttt{tablvar*}} + +% Grâce à l'extension |array| nous pouvons définir un nouveau type de colonnes +% pour les intervalles : |i|. +% \begin{macrocode} +\newcolumntype{i}[1]{>{\centering\arraybackslash $}p{#1}<{$}} + % nouveau type de colonne i pour les intervalles +% \end{macrocode} + +% \begin{macro}{\tablvarinit} +% Cette commande d'initialisation des compteurs est appelée +% au début de chaque environnement |tablvar| ou |tablvar*|. +% \begin{macrocode} +\newcommand{\tablvarinit}{ + \renewcommand{\arraystretch}{\tablvarstretch} + % la redéfinition de \arraystretch sera locale dans tablvar + \setcounter{ligne}{0} + \setcounter{numvr}{0} +} +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\ZIinit} +% Initialisation des longueurs et compteurs pour la commande |\ZIh|. +% Prend un argument (optionnel) qui est la largeur des colonnes intervalles +% (car il faut la sauvegarder dans |\ZIwidth|) +% et qui est passé automatiquement par |tablvar|. +% \begin{macrocode} +\newcommand{\ZIinit}[1][\intervalwidth]{ + \setlength{\ZIheight}{0pt} + \setlength{\ZIdepth}{0pt} + \setlength{\ZIwidth}{#1} + \setcounter{ZI}{0} + \setcounter{ZIstar}{0} + \setcounter{ZIvarlignes}{3} + % doit être non nul pour \ZIh si tableau de signe seul +} +% \end{macrocode} +% \end{macro} + +% \begin{environment}{tablvar} +% L'environnement |tablvar| : |\begin{tablvar}|\oarg{width}\marg{nbintervals}. +% Le 1er paramètre (optionnel) permet de régler la largeur des colonnes +% intervalles (définie par |\intervalwidth| +% par défaut), le 2ème paramètre (obligatoire) est le nombre d'intervalles. +% Cet environnement n'est rien d'autre qu'un |array| dans lequel on a réglé +% les options de colonages. +% Les colonnes de valeurs sont de type |c| et les colonnes d'intervalles de type |i|. +% \begin{macrocode} +\newenvironment{tablvar}[2][\intervalwidth]{ + \tablvarinit + \ZIinit[#1] + \begin{array}{% + |c|@{\hspace{\bordercolsep}}% + *{#2}{c@{\hspace{\innercolsep}}% + i{#1}@{\hspace{\innercolsep}}% + }% + c@{\hspace{\bordercolsep}}|% + } +}{\end{array}} +% \end{macrocode} +% \end{environment} + +% \begin{environment}{tablvar*} +% L'environnement |tablvar*| est une variante de |tablvar| (même syntaxe) +% où la première et la dernière colonnes de valeurs sont alignées respectivement +% à gauche (|l|) et à droite (|r|). +% Ceci est utile lorsqu'il y a une double barre à l'une des extrémités. +% \begin{macrocode} +\newcounter{nb@intervals} +\newenvironment{tablvar*}[2][\intervalwidth]{ + % environnement tablvar* , type l et r pour les extrémités + \tablvarinit + \ZIinit[#1] + \setcounter{nb@intervals}{#2} + \addtocounter{nb@intervals}{-1} + \begin{array}{% + |c|@{\hspace{\bordercolsep}}% + l@{\hspace{\innercolsep}}% + i{#1}@{\hspace{\innercolsep}}% + *{\value{nb@intervals}}{ + c@{\hspace{\innercolsep}}% + i{#1}@{\hspace{\innercolsep}}% + }% + r@{\hspace{\bordercolsep}}|% + } +}{\end{array}} +% \end{macrocode} +% \end{environment} + +% \subsection{La commande \texttt{\textbackslash variations}} + +% C'est ici qu'est la magie ! +% +% \begin{macro}{\tvloop} +% La commande \cmd{\tvloop}\marg{iter}\marg{code} répète \meta{code} (\meta{iter}$- 1$) fois +% (car la dernière ligne de variations doit subir un traitement particulier). +% C'est une variante de |\multido| (du package |multido|) car +% |\multido|, |\Multido| ou |\whiledo| plantent sur |\\| ou |\@arraycr| +% et la commande |\variations| a besoin d'utiliser une boucle dans un tableau. +% |\tvloop| n'est autre qu'un |\ifthenelse| récursif. +% \begin{macrocode} +\newcounter{loop@counter} +\newcommand{\tvloop}[2]{% + \setcounter{loop@counter}{#1} + \addtocounter{loop@counter}{-1}% on boucle 1 fois de moins que #1 + \ifthenelse{\value{loop@counter}=0}{}{% + #2 \tvloop{\value{loop@counter}}{#2}% + } +} +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\variations} +% \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 séparateurs de colonnes et la composition des variations +% grâce aux commandes de positionnement.\\ +% Le principe est que l'on parcourt 3 fois (par défaut) le contenu de |\variations| ; +% à chaque itération, le compteur |ligne| est incrémenté, +% le compteur |noeud| est remis à 0 puis incrémenté à chaque commande |\pos|, +% mais le contenu de |\pos| n'est affiché et le nœud n'est créé +% que si la valeur du compteur |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 !? +% \begin{macrocode} +\newcommand*{\variations}[2][3]{% #1=nblignes (3 par défaut) + % (ré)initialisation des compteurs + \setcounter{ligne}{0} % nécessaire pour 2 parties variations + \setcounter{numdiscont}{0} + \multido{\I=1+1}{\themaxdiscont}{\setcounter{discont\I}{0}} + \setcounter{ZIvarlignes}{#1} % nécessaire pour \ZIh + % boucle : on exécute le code #2 un nb de fois égal à (#1)-1 + \tvloop{#1}{% + \setcounter{noeud}{0}\setcounter{numvr}{0}\setcounter{ZI}{0} + % à chaque boucle on réinitialise certains compteurs + \stepcounter{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{noeud}{0}\setcounter{numvr}{0}\setcounter{ZI}{0} + \stepcounter{ligne} #2 + % tracé des flèches + \addtocounter{noeud}{-1} % 1 flèche de moins que le nb de nœuds + \setcounter{numdiscont}{1} + \multido{\Ix=1+1,\Iy=2+1}{\thenoeud}{ + \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} + +% \begin{macro}{\pos} +% \cmd{\pos}\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 |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 1er argument optionnel, |c| (centered, par défaut), |t| (top) ou |b| (bottom), +% est utilisé pour le positionnement des flèches.\\ +% \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 colonne de base, +% contenant les légendes. +% \begin{macrocode} +\newcommand*{\@pos}[3][c]{ + \stepcounter{noeud} + \ifthenelse{\theligne=#2}{ + \noeud[#1]{N\thenoeud}{#3} + }{} % si ligne != #2, on ne fait rien +} +\newcommand*{\@@pos}[2]{\ifthenelse{\theligne=#1}{#2}{}} +\newcommand*{\pos}{\@ifstar{\@@pos}{\@pos}} +% \end{macrocode} +% \end{macro} + +% Voici quelques alias utiles qui peuvent être utilisés +% à la place des commandes |\pos| et |\pos*|. +% \begin{macro}{\haut} +% \cmd{\haut}\marg{valeur} = \cmd{\pos}|{1}|\marg{valeur}. +% \begin{macrocode} +\newcommand*{\haut}{\pos{1}} +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\bas} +% \cmd{\bas}\marg{valeur} = \cmd{\pos}|{3}|\marg{valeur}. +% \begin{macrocode} +\newcommand*{\bas}{\pos{3}} +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\mil} +% \cmd{\mil}\marg{valeur} = \cmd{\pos*}|{2}|\marg{valeur}. +% \begin{macrocode} +\newcommand*{\mil}{\pos*{2}} +% \end{macrocode} +% \end{macro} + +% Voici enfin deux macros qui permettent si besoin d'ajuster le positionnement +% (en plus des commandes \LaTeX\ |\hspace| ou |\makebox|). +% \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 le calcul des largeurs 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} + +% \begin{macro}{\vdecal} +% Décalage vertical : \cmd{\vdecal}\marg{decal}\marg{contenu}, le 1er paramètre est le décalage +% (positif = vers le haut ou négatif = vers le bas), le second est le contenu à placer. +% \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. +% \end{macro} + +% \subsection{Barres, discontinuités et valeurs remarquables} + +% \begin{macro}{\bb} +% La macro |\bb|, qui produit une double barre, +% provient de l'extension |variations| de Christian Obrecht +% |\def\bb{\vrule\kern1pt\vrule}|. +% Nous avons ajouté 1~pt d'espace avant et après, afin d'éviter le contact +% entre la double barre et les limites à gauche ou à droite. +% \begin{macrocode} +\newcommand*{\bb}{\kern1pt\vrule\kern1pt\vrule\kern1pt} +% \end{macrocode} +% \end{macro} + +% \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 général, on met 0 comme argument optionnel. +% \begin{macrocode} +\newcommand*{\barre}[1][]{\makebox[0pt]{$#1$} + \color{tvbarrecolor} + \vrule width \tvbarrewidth +} +% \end{macrocode} +% \end{macro} + +% \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{\theligne=1}{ + % on ne compte les discontinuités qu'une seule fois, sur ligne 1 + \stepcounter{numdiscont} + \setcounter{discont\thenumdiscont}{\thenoeud} + }{} + } +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\bblim} +% Sert à positionner correctement des limites à gauche et à droite +% d'une double barre en conservant le centrage de la double barre. +% Cette macro trace la double barre, place les limites et appelle |\discont|. +% Le principe est que lorsqu'on place la plus large des deux valeurs +% d'un côté de la double barre, on place une boite fantôme de même largeur +% de l'autre côté ; quant à la plus étroite des deux valeurs, +% elle est placée dans une |\zbox| qui annule sa largeur. +% Sa syntaxe est : \\ +% |\bblim|\marg{ligne gauche}\marg{limite gauche}\marg{ligne droite}\marg{limite droite} +% \begin{macrocode} +\newsavebox{\@tvlbox} +\newsavebox{\@tvrbox} +\newcommand{\bblim}[4]{ + \sbox{\@tvlbox}{$#2$} + \sbox{\@tvrbox}{$#4$} + \ifdim \wd\@tvlbox > \wd\@tvrbox + \pos{#1}{#2} \bb\discont + \zbox[l]{\pos{#3}{#4}} \pos*{#1}{\phantom{#2}} + \else + \pos*{#3}{\phantom{#4}} \zbox[r]{\pos{#1}{#2}} + \bb\discont \pos{#3}{#4} + \fi +} +% \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 sur ligne 0 + \stepcounter{numvr} + \ifthenelse{\theligne=0}{ + \noeud{X\thenumvr}{#2} + }{ + \ifthenelse{\theligne=#1}{ + \noeud{Y\thenumvr}{#2} + }{} + } +} +% \end{macrocode} +% \end{macro} + +% \subsection{Zones interdites} + +% \begin{macro}{\ZIc} +% Commande sans argument qui produit une zone interdite colorée. +% À placer dans les intervalles voulus. La densité de gris ou la couleur +% peuvent être modifiées en redéfinissant la macro. +% \begin{macrocode} +\newcommand{\ZIc}{\discont \cellcolor[gray]{0.7}} +% \end{macrocode} +% \end{macro} + +% La macro |\ZIh| \DescribeMacro{\ZIh} sert à produire une zone interdite hachurée. +% Le tracé des hachures n'est déclenché +% que sur la dernière ligne des variations, les appels à |\ZIh| sur les lignes +% précédentes ne font que cumuler hauteur (|\ht|) et profondeur (|\dp|) de la ligne. +% Dans une ligne de signe, il ne faut qu'\emph{un seul appel} à |\ZIh|, +% qui peut être placé n'importe où. +% En effet, pour les lignes d'indice 0, la macro ne sait pas +% s'il y a eu un changement de ligne, donc elle cumule systématiquement la hauteur +% à chaque appel. +% Par contre, dans la partie variations, les |\ZIh| doivent être placés +% autant de fois que nécessaire, dans les intervalles voulus.\\ +% La macro possède un paramètre optionnel qui est un supplément de hauteur global, +% permettant de faire un ajustement fin si des lignes ont été agrandies +% à cause de leur contenu (grandes fractions par exemple).\\ +% Limitation : fonctionne moins bien avec tikz (sensible à la taille de police). +% +% La macro |ZIh*| \DescribeMacro{\ZIh*} +% (appelée par |\ZIh| sur la dernière ligne des variations) +% déclenche le tracé d'un rectangle de hachures en appelant la commande |\hachure|. +% Elle utilise les dimensions précédemment enregistrées dans les variables de dimension +% (par |\ZIh|). Dans un tableau de signes sans partie variations +% elle doit être placée sur la dernière ligne à la place de |\ZIh| +% (pour les lignes précédentes). +% \begin{macrocode} +\newcommand*{\@ZI}[1][0pt]{% + \discont + \ifthenelse{\theligne=\value{ZIvarlignes}}{\@@ZI[#1]}{% + \ifthenelse{\theligne=0 \or \theZI=0}{% + % on ne doit cumuler la hauteur qu'une fois par ligne + % => une seule occurrence de la macro sur une ligne 0 + \global\advance\ZIheight by \ht\@arstrutbox + \global\advance\ZIheight by \dp\@arstrutbox + }{} + } + \stepcounter{ZI} % RAZ par \variations à chaque ligne +} + +\newcommand*{\@@ZI}[1][0pt]{% \discont inutile ici + \ifthenelse{\theZIstar=0}{% cumul des longueurs 1 seule fois + \global\advance\ZIheight by \ht\@arstrutbox + \global\advance\ZIheight by #1 + \global\advance\ZIdepth by \dp\@arstrutbox + \global\advance\ZIwidth by \innercolsep + \global\advance\ZIwidth by \innercolsep + \global\advance\ZIwidth by 2pt % espace autour doubles barres + }{} + \hachure{-0.5\ZIwidth,-\ZIdepth}{0.5\ZIwidth,\ZIheight} + \stepcounter{ZIstar} +} + +\newcommand{\ZIh}{\@ifstar{\@@ZI}{\@ZI}} +% \end{macrocode} + +% \Finale +\endinput diff --git a/Master/texmf-dist/source/latex/tablvar/tablvar.ins b/Master/texmf-dist/source/latex/tablvar/tablvar.ins new file mode 100644 index 00000000000..5ed9d653153 --- /dev/null +++ b/Master/texmf-dist/source/latex/tablvar/tablvar.ins @@ -0,0 +1,55 @@ +%% +%% Copyright (C) 2018 by Antoine Missier <prenom.nom@ac-toulouse.fr> +%% +%% 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. +%% + +\input docstrip.tex +\keepsilent + +\usedir{tex/latex/tablvar} + +\preamble + +This is a generated file. + +Copyright (C) 2018 by Antoine Missier <prenom.nom@ac-toulouse.fr> + +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. + +\endpreamble + +\generate{\file{tablvar.sty}{\from{tablvar.dtx}{package}}} + +\obeyspaces +\Msg{*************************************************************} +\Msg{* *} +\Msg{* To finish the installation you have to move the following *} +\Msg{* file into a directory searched by TeX: *} +\Msg{* *} +\Msg{* tablvar.sty *} +\Msg{* *} +\Msg{* To produce the documentation run the file tablvar.dtx *} +\Msg{* through LaTeX. *} +\Msg{* *} +\Msg{* Happy TeXing! *} +\Msg{* *} +\Msg{*************************************************************} + +\endbatchfile diff --git a/Master/texmf-dist/tex/latex/tablvar/tablvar.sty b/Master/texmf-dist/tex/latex/tablvar/tablvar.sty new file mode 100644 index 00000000000..94abb8cdccd --- /dev/null +++ b/Master/texmf-dist/tex/latex/tablvar/tablvar.sty @@ -0,0 +1,315 @@ +%% +%% This is file `tablvar.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% tablvar.dtx (with options: `package') +%% +%% This is a generated file. +%% +%% Copyright (C) 2018 by Antoine Missier <prenom.nom@ac-toulouse.fr> +%% +%% 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. +%% +\NeedsTeXFormat{LaTeX2e}[2005/12/01] +\ProvidesPackage{tablvar} + [11/11/2018 v1.0 .dtx tablvar file] +%% \DescribeEnv{tablvar} + + + +\RequirePackage{array} +\RequirePackage{ifthen} +\RequirePackage{multido} +\RequirePackage{colortbl} + +\newboolean{tikz} +\DeclareOption{tikz}{\setboolean{tikz}{true}} +\DeclareOption{pstricks}{\setboolean{tikz}{false}} % valeur par défaut +\ProcessOptions \relax + +\ifthenelse{\boolean{tikz}}{ + \RequirePackage{tikz} + \usetikzlibrary{patterns} + \newlength{\tikznode@below} + }{ + \RequirePackage{pst-node} +} + + +\newlength{\intervalwidth} +\setlength{\intervalwidth}{2.5em} % largeur des "intervalles" + +\newlength{\bordercolsep} % largeur de l'espace inter-colonne +\setlength{\bordercolsep}{2pt} + +\newlength{\innercolsep} +\setlength{\innercolsep}{4pt} + +\newcounter{maxdiscont} +\setcounter{maxdiscont}{3} % nb max de discontinuités + +\newcommand{\tablvarstretch}{1.2} + +\newlength{\tvbarrewidth} +\setlength{\tvbarrewidth}{0.5pt} + +\definecolor{tvbarrecolor}{gray}{0.7} + + +\newcommand*{\fleche}[2]{ + \ifthenelse{\boolean{tikz}}{ + \tikz[remember picture,overlay]{\draw[->,>=stealth, + line width=0.6pt] (#1) -- (#2);} + }{ + \ncline[arrowsize=2pt 2,arrowinset=0.4,nodesep=3pt, + linewidth=0.6pt]{->}{#1}{#2} + } +} + +\newcommand*{\vrconnect}[2]{ + \ifthenelse{\boolean{tikz}}{ + \tikz[remember picture,overlay]{\draw[dotted,line width=1pt] + (#1) -- (#2);} + }{ + \ncline[nodesep=5pt,linestyle=dotted,linewidth=1pt]{-}{#1}{#2} + } +} + +\newcommand*{\noeud}[3][c]{ + \ifthenelse{\boolean{tikz}}{ + \tikz[remember picture,baseline]{ + \node[anchor=base,inner sep=0,outer sep=4] (#2) {$#3$}; + } % l'option de placement (#1) n'est pas implémentée pour tikz + }{ + \rnode[#1]{#2}{#3} + } +} + +\newcommand{\hachure}[2]{ + \ifthenelse{\boolean{tikz}}{ + \tikz[remember picture,overlay]{\fill[pattern=north east lines] + (#1) rectangle (#2);} + }{ + \psframe[linestyle=none,fillstyle=vlines,hatchwidth=0.2pt, + hatchsep=3pt](#1)(#2) + } +} + + +\newcounter{ligne} % numéro de ligne +\newcounter{noeud} % numéro du nœud +\newcounter{numvr} % numéro de la valeur remarquable +\newcounter{numdiscont} % numéro de la discontinuité +\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}} +} + +\newlength{\ZIheight} +\newlength{\ZIdepth} +\newlength{\ZIwidth} +\newcounter{ZI} % numéro de la ZI +\newcounter{ZIstar} % numéro de ZI pour la commande \ZI* +\newcounter{ZIvarlignes} % dernière ligne des variations + + +\newcolumntype{i}[1]{>{\centering\arraybackslash $}p{#1}<{$}} + % nouveau type de colonne i pour les intervalles + +\newcommand{\tablvarinit}{ + \renewcommand{\arraystretch}{\tablvarstretch} + % la redéfinition de \arraystretch sera locale dans tablvar + \setcounter{ligne}{0} + \setcounter{numvr}{0} +} + +\newcommand{\ZIinit}[1][\intervalwidth]{ + \setlength{\ZIheight}{0pt} + \setlength{\ZIdepth}{0pt} + \setlength{\ZIwidth}{#1} + \setcounter{ZI}{0} + \setcounter{ZIstar}{0} + \setcounter{ZIvarlignes}{3} + % doit être non nul pour \ZIh si tableau de signe seul +} + +\newenvironment{tablvar}[2][\intervalwidth]{ + \tablvarinit + \ZIinit[#1] + \begin{array}{% + |c|@{\hspace{\bordercolsep}}% + *{#2}{c@{\hspace{\innercolsep}}% + i{#1}@{\hspace{\innercolsep}}% + }% + c@{\hspace{\bordercolsep}}|% + } +}{\end{array}} + +\newcounter{nb@intervals} +\newenvironment{tablvar*}[2][\intervalwidth]{ + % environnement tablvar* , type l et r pour les extrémités + \tablvarinit + \ZIinit[#1] + \setcounter{nb@intervals}{#2} + \addtocounter{nb@intervals}{-1} + \begin{array}{% + |c|@{\hspace{\bordercolsep}}% + l@{\hspace{\innercolsep}}% + i{#1}@{\hspace{\innercolsep}}% + *{\value{nb@intervals}}{ + c@{\hspace{\innercolsep}}% + i{#1}@{\hspace{\innercolsep}}% + }% + r@{\hspace{\bordercolsep}}|% + } +}{\end{array}} + + +\newcounter{loop@counter} +\newcommand{\tvloop}[2]{% + \setcounter{loop@counter}{#1} + \addtocounter{loop@counter}{-1}% on boucle 1 fois de moins que #1 + \ifthenelse{\value{loop@counter}=0}{}{% + #2 \tvloop{\value{loop@counter}}{#2}% + } +} + +\newcommand*{\variations}[2][3]{% #1=nblignes (3 par défaut) + % (ré)initialisation des compteurs + \setcounter{ligne}{0} % nécessaire pour 2 parties variations + \setcounter{numdiscont}{0} + \multido{\I=1+1}{\themaxdiscont}{\setcounter{discont\I}{0}} + \setcounter{ZIvarlignes}{#1} % nécessaire pour \ZIh + % boucle : on exécute le code #2 un nb de fois égal à (#1)-1 + \tvloop{#1}{% + \setcounter{noeud}{0}\setcounter{numvr}{0}\setcounter{ZI}{0} + % à chaque boucle on réinitialise certains compteurs + \stepcounter{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{noeud}{0}\setcounter{numvr}{0}\setcounter{ZI}{0} + \stepcounter{ligne} #2 + % tracé des flèches + \addtocounter{noeud}{-1} % 1 flèche de moins que le nb de nœuds + \setcounter{numdiscont}{1} + \multido{\Ix=1+1,\Iy=2+1}{\thenoeud}{ + \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 +} + + +\newcommand*{\@pos}[3][c]{ + \stepcounter{noeud} + \ifthenelse{\theligne=#2}{ + \noeud[#1]{N\thenoeud}{#3} + }{} % si ligne != #2, on ne fait rien +} +\newcommand*{\@@pos}[2]{\ifthenelse{\theligne=#1}{#2}{}} +\newcommand*{\pos}{\@ifstar{\@@pos}{\@pos}} + +\newcommand*{\haut}{\pos{1}} + +\newcommand*{\bas}{\pos{3}} + +\newcommand*{\mil}{\pos*{2}} + +\newcommand*{\zbox}[2][c]{\makebox[0pt][#1]{$#2$}} + +\newcommand*{\vdecal}[2]{\smash{\raisebox{#1}{$#2$}}} + + +\newcommand*{\bb}{\kern1pt\vrule\kern1pt\vrule\kern1pt} + +\newcommand*{\barre}[1][]{\makebox[0pt]{$#1$} + \color{tvbarrecolor} + \vrule width \tvbarrewidth +} + +\newcommand*{\discont}{ + \ifthenelse{\theligne=1}{ + % on ne compte les discontinuités qu'une seule fois, sur ligne 1 + \stepcounter{numdiscont} + \setcounter{discont\thenumdiscont}{\thenoeud} + }{} + } + +\newsavebox{\@tvlbox} +\newsavebox{\@tvrbox} +\newcommand{\bblim}[4]{ + \sbox{\@tvlbox}{$#2$} + \sbox{\@tvrbox}{$#4$} + \ifdim \wd\@tvlbox > \wd\@tvrbox + \pos{#1}{#2} \bb\discont + \zbox[l]{\pos{#3}{#4}} \pos*{#1}{\phantom{#2}} + \else + \pos*{#3}{\phantom{#4}} \zbox[r]{\pos{#1}{#2}} + \bb\discont \pos{#3}{#4} + \fi +} + +\newcommand*{\vr}[2][2]{% ligne 2 par défaut sauf sur ligne 0 + \stepcounter{numvr} + \ifthenelse{\theligne=0}{ + \noeud{X\thenumvr}{#2} + }{ + \ifthenelse{\theligne=#1}{ + \noeud{Y\thenumvr}{#2} + }{} + } +} + + +\newcommand{\ZIc}{\discont \cellcolor[gray]{0.7}} + +\newcommand*{\@ZI}[1][0pt]{% + \discont + \ifthenelse{\theligne=\value{ZIvarlignes}}{\@@ZI[#1]}{% + \ifthenelse{\theligne=0 \or \theZI=0}{% + % on ne doit cumuler la hauteur qu'une fois par ligne + % => une seule occurrence de la macro sur une ligne 0 + \global\advance\ZIheight by \ht\@arstrutbox + \global\advance\ZIheight by \dp\@arstrutbox + }{} + } + \stepcounter{ZI} % RAZ par \variations à chaque ligne +} + +\newcommand*{\@@ZI}[1][0pt]{% \discont inutile ici + \ifthenelse{\theZIstar=0}{% cumul des longueurs 1 seule fois + \global\advance\ZIheight by \ht\@arstrutbox + \global\advance\ZIheight by #1 + \global\advance\ZIdepth by \dp\@arstrutbox + \global\advance\ZIwidth by \innercolsep + \global\advance\ZIwidth by \innercolsep + \global\advance\ZIwidth by 2pt % espace autour doubles barres + }{} + \hachure{-0.5\ZIwidth,-\ZIdepth}{0.5\ZIwidth,\ZIheight} + \stepcounter{ZIstar} +} + +\newcommand{\ZIh}{\@ifstar{\@@ZI}{\@ZI}} + +\endinput +%% +%% End of file `tablvar.sty'. diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check index 8f87dbb97f4..3731a852b20 100755 --- a/Master/tlpkg/bin/tlpkg-ctan-check +++ b/Master/tlpkg/bin/tlpkg-ctan-check @@ -624,7 +624,7 @@ my @TLP_working = qw( systeme t-angles t2 tabfigures table-fct tableaux tablefootnote tableof tablestyles - tablists tablor tabls + tablists tablor tabls tablvar tabriz-thesis tabstackengine tabto-generic tabto-ltx tabu tabularborder tabularcalc tabularew tabulars-e tabulary tabvar tagging tagpair tagpdf talk tamefloats diff --git a/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc b/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc index a678e8db56a..f83b75dd62f 100644 --- a/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc +++ b/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc @@ -1052,6 +1052,7 @@ depend tableof depend tablestyles depend tablists depend tabls +depend tablvar depend tabstackengine depend tabto-ltx depend tabu diff --git a/Master/tlpkg/tlpsrc/tablvar.tlpsrc b/Master/tlpkg/tlpsrc/tablvar.tlpsrc new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/Master/tlpkg/tlpsrc/tablvar.tlpsrc |