diff options
Diffstat (limited to 'macros/latex')
-rw-r--r-- | macros/latex/contrib/babel-contrib/french/README.md | 3 | ||||
-rw-r--r-- | macros/latex/contrib/babel-contrib/french/frenchb-doc.pdf | bin | 187963 -> 190030 bytes | |||
-rw-r--r-- | macros/latex/contrib/babel-contrib/french/frenchb-doc.tex | 110 | ||||
-rw-r--r-- | macros/latex/contrib/babel-contrib/french/frenchb.dtx | 668 | ||||
-rw-r--r-- | macros/latex/contrib/babel-contrib/french/frenchb.ins | 98 | ||||
-rw-r--r-- | macros/latex/contrib/babel-contrib/french/frenchb.pdf | bin | 367390 -> 369496 bytes | |||
-rw-r--r-- | macros/latex/contrib/tablvar/README.md | 8 | ||||
-rw-r--r-- | macros/latex/contrib/tablvar/tablvar.dtx | 2942 | ||||
-rw-r--r-- | macros/latex/contrib/tablvar/tablvar.ins | 6 | ||||
-rw-r--r-- | macros/latex/contrib/tablvar/tablvar.pdf | bin | 217215 -> 271901 bytes |
10 files changed, 2379 insertions, 1456 deletions
diff --git a/macros/latex/contrib/babel-contrib/french/README.md b/macros/latex/contrib/babel-contrib/french/README.md index 2ef0d0b281..5f6d25139a 100644 --- a/macros/latex/contrib/babel-contrib/french/README.md +++ b/macros/latex/contrib/babel-contrib/french/README.md @@ -14,7 +14,6 @@ Plain and LaTeX formats are supported. The bundle consists of the following files: -* frenchb.ins: installation file to unpack the language definition files, * frenchb.dtx: packed language definition files and documentation, * frenchb.pdf: unpacked documentation for babel-french, * frenchb-doc.pdf: comprehensive documentation in French, @@ -32,7 +31,7 @@ See http://www.latex-project.org/lppl.txt If the latest version of this package is not included in your LaTeX distribution, do the following: -* issue "luatex frenchb.ins" to unpack the language definition files; +* issue "luatex frenchb.dtx" to unpack the language definition files; * copy the files frenchb.lua, french.ldf, frenchb.ldf, francais.ldf, acadian.ldf and canadien.ldf to a location where TeX can find them (default location: $TEXMF/tex/generic/babel-french/); diff --git a/macros/latex/contrib/babel-contrib/french/frenchb-doc.pdf b/macros/latex/contrib/babel-contrib/french/frenchb-doc.pdf Binary files differindex dae1c3f742..ec1b68e6e4 100644 --- a/macros/latex/contrib/babel-contrib/french/frenchb-doc.pdf +++ b/macros/latex/contrib/babel-contrib/french/frenchb-doc.pdf diff --git a/macros/latex/contrib/babel-contrib/french/frenchb-doc.tex b/macros/latex/contrib/babel-contrib/french/frenchb-doc.tex index 584b8b980f..d76aa39eb3 100644 --- a/macros/latex/contrib/babel-contrib/french/frenchb-doc.tex +++ b/macros/latex/contrib/babel-contrib/french/frenchb-doc.tex @@ -1,5 +1,4 @@ -\RequirePackage{pdfmanagement-testphase} -\DeclareDocumentMetadata{pdfstandard=A-2b, lang=fr-FR} +\DocumentMetadata{pdfstandard=A-2b, lang=fr-FR} \documentclass[a4paper,12pt,german,english,french]{article} % LuaTeX ONLY! @@ -28,7 +27,7 @@ %%% *** APRÈS fontspec *** \usepackage{babel} -\frenchbsetup{og=«, fg=», AutoSpacePunctuation=false} +\frenchbsetup{og=«, fg=»} \frenchbsetup{ListItemsAsPar} \usepackage{microtype} @@ -121,7 +120,7 @@ \title{Mode d’emploi du module \ext{babel-french}} \author{\href{mailto:daniel.flipo@free.fr}{Daniel \textsc{Flipo}}} -\newcommand*{\latestversion}{3.5q} +\newcommand*{\latestversion}{3.5r} \date{Version {\latestversion} -- \today} \begin{document} @@ -158,8 +157,6 @@ \vspace{-\baselineskip}\noindent \descindentFB=0pt \begin{description} - \item[30 janvier 2017] Le comportement par défaut de la commande - |\frquote{}| sous LuaTeX est modifié, voir p.~\pageref{frquote}. \item[30 avril 2017] Utiliser |\frenchsetup{}| de préférence à |\frenchbsetup{}|, voir p.~\pageref{sec:Perso}. Personnalisation de la commande |\part{}|, voir p.~\pageref{ssec:captions}. @@ -184,6 +181,8 @@ voir p.~\pageref{decimalmathcomma}. \item[8 mars 2023] Correction de bug dans les listes, voir p.~\pageref{par-in-lists}. + \item[19 déc. 2023] \ext{babel-french} est maintenant compatible + avec \pkg{ucharclasses} (XeLaTeX). \file{frenchb.ins} supprimée. \end{description} \end{abstract} \egroup @@ -268,9 +267,9 @@ le faire dépend du format utilisé : commandes\\ |\usepackage[T1]{fontenc}|\\ |\usepackage{lmodern}|\\ - la déclaration du codage d’entrée n’est nécessaire que si celui-ci n’est - pas le codage par défaut (|utf8| depuis 2018), par exemple |latin9| ou - |latin1| ou |applemac|, etc.\\ + rapellons que la déclaration du codage d’entrée n’est nécessaire que si + celui-ci n’est pas le codage par défaut (|utf8| depuis 2018), par exemple + |latin9| ou |latin1| ou |applemac|, etc.\\ |\usepackage[latin9]{inputenc}| \item avec LuaLaTeX ou XeLaTeX on peut ajouter |\usepackage{fontspec}| mais ceci est devenu facultatif avec les formats LaTeX récents (2017). @@ -391,9 +390,9 @@ document (ou maquette) est modifiée de la façon suivante% ajoutée en français ; lorsque l’ajout échoue, un message est affiché dans le fichier \file{.log}. - Certaines classes ou extensions modifient la présentation des légendes; - parmi elles, les classes (\cls{memoir}, \cls{beamer}, koma-script et AMS - et les extensions(\ext{caption} et \ext{floatrow} sont compatibles avec + Certaines classes ou extensions modifient la présentation des légendes ; + parmi elles, les classes \cls{memoir}, \cls{beamer}, koma-script et AMS + et les extensions \ext{caption} et \ext{floatrow} sont compatibles avec \ext{babel-french}. Un avertissement est inséré dans le fichier \file{.log} lorsqu’il y a risque @@ -405,7 +404,6 @@ document (ou maquette) est modifiée de la façon suivante% En ce qui concerne les conventions typographiques locales (variables avec la langue) la commande |\selectlanguage{french}| produit les effets suivants : -\enlargethispage*{\baselineskip} \begin{itemize} \item Les motifs de césures françaises sont activés. @@ -421,14 +419,6 @@ produit les effets suivants : qui disposent d’un mécanisme permettant d’accéder aux mêmes fonctionnalités sans recours aux caractères actifs. -\item la définition de |\dots| est modifiée pour - supprimer l’espace qui suit (cet espace est gênant devant une - parenthèse par exemple\dots)% - \footnote{Certains auteurs préfèrent en français «...» (codé \code{...} - sans espace) à «\dots» (codé \cs{dots}). Le mieux est d’utiliser - directement le caractère … dans le texte source dès lors que celui-ci est - codé en utf-8.}. - \item La commande |\today| retourne la date en français. \item Les titres («caption names» en anglais) sont traduits en @@ -436,8 +426,24 @@ produit les effets suivants : « Chapitre » au lieu de « Chapter ». Voir section~\ref{ssec:captions} p.~\pageref{ssec:captions} comment modifier ces intitulés. +\item La définition de |\dots| est modifiée% +\footnote{en mode texte seulement, en fait c’est \cs{textellipsis} qui est + modifiée.}, \emph{uniquement} avec les moteurs 8-bits (pdftex), afin de + supprimer l’espace qui suit, espace gênant devant une parenthèse par exemple. + Ceci dit, la commande |\dots| \emph{ne devrait plus être utilisée} + dès lors que le texte source est codé en utf-8 : + il est plus facile de saisir |…|% +\footnote{Il s’agit du glyphe \texttt{…} obtenu par exemple grâce à une touche + \texttt{Compose}, \emph{pas} de \texttt{...} (trois points consécutifs).} + que |\dots|, le texte source est plus lisible et on évite les + problèmes d’avalement des espaces après une commande. + Avec les moteurs Unicode (xetex, luatex), la commande |\dots| standard + utilise le glyphe de la police de sortie sans ajout d’espace, + \ext{babel-french} ne la redéfinit donc pas. + \end{itemize} +\vspace{\parskip} La commande |\selectlanguage{english}| ramène au comportement standard de LaTeX (typographie américaine). @@ -473,6 +479,7 @@ Des commandes ont été prévues pour faciliter la saisie : Pour les citations imbriquées, plusieurs présentations sont proposées selon les options choisies : + \enlargethispage*{\baselineskip} \begin{itemize} \item Les citations internes sont balisées par des guillemets anglais ``comme ceci’’ (recommandation de Aurel Ramat) sauf si @@ -493,10 +500,9 @@ Des commandes ont été prévues pour faciliter la saisie : ce faire, il suffit de coder la citation interne avec |\frquote*{}| au lieu de |\frquote{}|. -\pagebreak Exemple de citation imbriquée : -\vspace{0.5\baselineskip} +\vspace{\parskip} \begin{minipage}[t]{.47\textwidth} \hspace*{\fill}% \fbox{\begin{minipage}[t]{.95\textwidth} @@ -532,7 +538,7 @@ Exemple de citation imbriquée : \hspace*{\fill}LuaLaTeX + \fbo{EveryLineGuill=open}\hspace*{\fill}% \end{minipage} -\vspace{0.5\baselineskip} +\vspace{\parskip} Le codage est le suivant : {\ttfamily\ColorVerb Xavier raconte… |\frquote{|Au moment… l’hôtesse m’a dit tout bonnement : |\frquote*{|Je suis désolée, … en anglais.|}}|} @@ -621,7 +627,6 @@ vertical des lettres supérieures simulées par |\fup| coupure sur les espaces mais d’autoriser éventuellement celle du mois (jan-vier, dé-cembre, …) qui est interdite par défaut. -\enlargethispage{\baselineskip} \item En mode mathématique, la virgule est toujours suivie d’une espace car elle est traitée comme un signe de ponctuation et non comme une virgule décimale% @@ -638,9 +643,9 @@ vertical des lettres supérieures simulées par |\fup| corps du document \emph{en mode texte} et dans une partie \emph{en français}, son effet survit à un changement de langue (passage en anglais et retour en français par exemple), sauf bien sûr si elle est placée dans un groupe. - Une solution alternative consiste à utiliser l’extension \ext{icomma}. +\vspace{\parskip} \item La commande |\nombre|, destinée à formater automatiquement les nombres entiers ou décimaux par tranches de trois chiffres séparées par des espaces en français et par des @@ -656,15 +661,20 @@ vertical des lettres supérieures simulées par |\fup| \end{itemize} +\vspace{\parskip} En ajoutant |\usepackage{xspace}| dans le préambule, les espaces suivant les commandes |\ier|,…, |\ieres|, |\ieme|, |\iemes|, -|\fg| et |\dots| sont -respectés sans avoir à les forcer par des |{}| ou -des~\code{\boi\textvisiblespace}. Noter cependant que l’auteur de \pkg{xspace} -ne recommande plus vraiment son utilisation, aussi peut-on préférer -\emph{ne pas charger} \pkg{xspace} et gérer les espaces soi-même : +|\fg| et |\dots| sont respectés sans avoir à les forcer par des |{}| ou +des~\code{\boi\textvisiblespace}. Le recours à l’extension \pkg{xspace} est +cependant une \emph{fausse simplification} car \emph{certaines} commandes sont +affectées mais \emph{pas toutes}. Un exemple extrême est fourni par la +commande |\dots| : lorsqu’elle est redéfinie par \pkg{babel-french} (moteurs +8-bits et en français seulement) on peut omettre la paire d’accolades, mais +celle-ci est indispensable dans une partie en anglais par exemple ou avec les +moteurs Unicode (|\dots| garde sa définition standard)… Il me paraît plus simple +d’éviter le recours à \pkg{xspace} et de gérer les espaces soi-même : « |les 1\ier, 2 et 3~mai| » ou « |le 1\ier~mai| » (espace insécable). \section{Personnalisation} @@ -1079,26 +1089,26 @@ La liste étant longue, les options sont regroupées par thèmes. \begin{description} -\item [SmallCapsFigTabcaptions=false (true*)]; si cette option est mise +\item [SmallCapsFigTabCaptions=false (true*)]; si cette option est mise à \fbo{false}, le recours aux petites capitales dans les intitulés des légendes de figures et tables est supprimé, on obtient « Figure » et « Table » au lieu de « \textsc{Figure} » et « \textsc{Table} ». Noter que le même résultat peut être obtenu en définissant |\FBfigtabshape| comme |\relax| avant le chargement de \ext{babel}.\hlabel{scfigtab} -\item [CustomiseFigTabcaptions=false (true*)] ; si cette option est mise +\item [CustomiseFigTabCaptions=false (true*)] ; si cette option est mise à \fbo{false}, le séparateur défini par |\CaptionSeparator| est remplacé par le séparateur par défaut (deux-points) dans les légendes des figures et des tables, ceci pour toutes les langues. En français, \ext{babel-french} ajoute si possible une espace insécable adéquate devant le deux-points ou affiche un message dans le fichier \file{.log}. -\item [OldFigTabcaptions=true (false)] peut être utilisée pour retrouver +\item [OldFigTabCaptions=true (false)] peut être utilisée pour retrouver la présentation antérieure (pré~3.0) des légendes de figures et tables, c.-à-d. |\CaptionSeparator| en français et deux-points pour les autres langues. Cette option ne fonctionne que pour les classes standard \cls{article}, \cls{report}, \cls{book} et rend inopérante l’option - \fbo{CustomiseFigTabcaptions}. + \fbo{CustomiseFigTabCaptions}. \end{description} @@ -1271,7 +1281,7 @@ listes \env{itemize}, \env{enumerate} et \env{description} : gauche au lieu d’être décalées vers la droite. % Illustration de \parindent et \listindentFB -\vspace{.5\baselineskip} +\vspace{\parskip} \begin{minipage}[t]{.45\textwidth} \fbox{\begin{minipage}[t]{0.9\textwidth}\raggedright \FBListItemsAsParfalse \parindent=0pt \listindentFB=1.5em @@ -1372,7 +1382,7 @@ listes \env{itemize}, \env{enumerate} et \env{description} : |\setlength{\descindentFB}{0pt}|. % Illustration de \parindent et \descindentFB -\vspace{.5\baselineskip} +\vspace{\parskip} \begin{minipage}[t]{.45\textwidth} \fbox{\begin{minipage}[t]{0.9\textwidth}\raggedright \FBListItemsAsParfalse @@ -1430,7 +1440,7 @@ sections~\ref{sec:description} (listes \env{itemize}) et \ref{sec:Perso} (listes \env{description}). % Illustration de l’option \fbo{ListItemsAsPar} -\vspace{.5\baselineskip} +\vspace{\parskip} \begin{minipage}[t]{.45\textwidth} \fbox{\begin{minipage}[t]{0.9\textwidth}\raggedright \FBListItemsAsParfalse \parindent=1.5em \listindentFB=1.5em @@ -1580,12 +1590,18 @@ Voir section~\ref{decimalmathcomma} p.~\pageref{decimalmathcomma} pour plus de détails. \vspace{\parskip} -La version 3.5q corrige un bug concernant les listes signalé par Denis Bitouzé : -les alinéas inclus dans une liste n’étaient pas distinguables. Dorénavant -|\listparindent| est défini comme |\parindent| et si|\parskip > 0|, |\parsep| -est défini comme |\parskip|. Il est possible de revenir à l’ancienne -présentation en ajoutant \emph{dans l’environnement de liste} les commandes -|\parskip=0pt| et |\parindent=0pt|.\hlabel{par-in-lists} +La version 3.5q corrige un bug concernant les listes signalé par Denis +Bitouzé : les alinéas inclus dans une liste n’étaient pas distinguables. +Dorénavant |\listparindent| est défini comme |\parindent| et si|\parskip > 0|, +|\parsep| est défini comme |\parskip|. Il est possible de revenir +à l’ancienne présentation en ajoutant \emph{dans l’environnement de liste} +les commandes |\parskip=0pt| et |\parindent=0pt|.\hlabel{par-in-lists} + +\vspace{\parskip} +La version 3.5r est compatible avec \pkg{ucharclasses.sty} qui est maintenant +chargé avec l’extension \pkg{fontsetup} lorsque le moteur XeTeX est utilisé. +D’autre part le fichier \file{frenchb.ins} n’est plus nécessaire pour extraire +les fichiers \file{*.ldf} de \file{frenchb.dtx} (voir~\file{README.md}). \subsection{Changements entre les versions 3.4d et 3.3d} \label{ssec:changes-3.4} @@ -2005,7 +2021,7 @@ La solution \biblatex/\biber{} présente des nombreux avantages par rapport document en français ; \item \biblatex{}, associé à \biber{}, permet le traitement des fichiers - ~\file{.bib} codés en UTF-8 ce qui facilite grandement la coexistence + ~\file{.bib} codés en utf-8 ce qui facilite grandement la coexistence de références à des ouvrages en français, en russe et en grec par exemple ; \item \biblatex{} possède des options qui remplacent de nombreuses extensions @@ -2042,7 +2058,7 @@ introduisent automatiquement des espaces insécables et plus fines pour un meilleur rendu typographique. Les points de suspensions sont saisis |...| avec -\ext{e-french} et |\dots| avec \ext{babel-french}. +\ext{e-french} et |…| (ou |\dots|) avec \ext{babel-french}. Les commandes suivantes peuvent être ajoutées au préambule pour émuler certaines commandes de \ext{e-french} : @@ -2062,7 +2078,7 @@ Pour ceux qui éditent leurs sources LaTeX avec emacs, une fonction Lisp \file{french2b} opère une adaptation \emph{partielle} d’un fichier conçu pour \ext{e-french} facilitant sa compilation avec \ext{babel-french}. L’appel à \ext{e-french} est remplacé en un appel à \ext{babel-french}, les guillemets -|<<| et |>>| sont convertis en |\og| et |\fg| et les |...| en |\dots|, enfin +|<<| et |>>| sont convertis en |\og| et |\fg| et les |...| en |…|, enfin quelques commandes spécifiques à \ext{e-french} sont ajoutées dans le préambule. diff --git a/macros/latex/contrib/babel-contrib/french/frenchb.dtx b/macros/latex/contrib/babel-contrib/french/frenchb.dtx index fa68afd071..d0a8f15715 100644 --- a/macros/latex/contrib/babel-contrib/french/frenchb.dtx +++ b/macros/latex/contrib/babel-contrib/french/frenchb.dtx @@ -1,6 +1,72 @@ -%\iffalse -% Tell the LaTeX system who we are and write an entry on the -% transcript. +% \iffalse meta-comment +% +% Copyright © 1996-2023 Daniel Flipo. +% +% This program can be distributed and/or modified under the terms +% of the LaTeX Project Public License either version 1.3c 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.3c or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% Please report errors to: daniel (dot) flipo (at) free (dot) fr +% +%<*batch> +%<*gobble> +\ifx\jobname\relax\let\documentclass\undefined\fi +\ifx\documentclass\undefined +\csname fi\endcsname +%</gobble> +\input docstrip.tex +\keepsilent +\let\MetaPrefix\relax +\preamble +This is a generated file part of the babel-french bundle +to be used with the Babel system. +------------------------------------------------------------- + +It may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either version 1.3 +of this license or (at your option) any later version. +The latest version of this license is in + http://www.latex-project.org/lppl.txt +and version 1.3 or later is part of all distributions of LaTeX +version 2003/12/01 or later. + +This work has the LPPL maintenance status "maintained". + +The Current Maintainer of this work is Daniel Flipo. + +Please report errors to: <daniel (dot) flipo (at) free (dot) fr> + +\endpreamble +\postamble +\endpostamble +\let\MetaPrefix\DoubleperCent +\askforoverwritefalse +\generate{\file{french.ldf}{\from{frenchb.dtx}{french}} + \file{acadian.ldf}{\from{frenchb.dtx}{acadian}} + \file{canadien.ldf}{\from{frenchb.dtx}{canadien}} + \file{frenchb.ldf}{\from{frenchb.dtx}{frenchb}} + \file{francais.ldf}{\from{frenchb.dtx}{francais}} + } +\def\MetaPrefix{-- } +\def\luapostamble{\MetaPrefix\space End of File frenchb.lua.} +\usepostamble\luapostamble +\nopreamble +\generate{\file{frenchb.lua}{\from{frenchb.dtx}{lua}} + } +\endbatchfile +%</batch> +%<*gobble> +\fi +\expandafter\ifx\csname @currname\endcsname\empty +\csname fi\endcsname +%</gobble> +% %<*dtx> \ProvidesFile{frenchb.dtx} %</dtx> @@ -11,26 +77,16 @@ %<frenchb>\ProvidesLanguage{frenchb} %<lua>--[[ %<lua> File `frenchb.lua’ generated from frenchb.dtx - [2023/03/08 v3.5q French support from the babel system] -%<*internal> -\iffalse -%</internal> -%<*lua> - Copyright © 2014-2022 Daniel Flipo - <daniel (dot) flipo (at) free (dot) fr> - License LPPL: see french.ldf. ---]] -%</lua> -%<*internal> -\fi -%</internal> -%<*dtx> -%% File `frenchb.dtx’ -%</dtx> + [2023-12-19 v3.5r French support from the babel system] +%<lua> Copyright © 2014-2023 Daniel Flipo +%<lua> <daniel (dot) flipo (at) free (dot) fr> +%<lua> License LPPL: see french.ldf. +%<lua>--]] +% %<*dtx|french> %% %% Babel package for LaTeX version 2e -%% Copyright © 1996-2022 +%% Copyright © 1996-2023 %% by Daniel Flipo <daniel (dot) flipo (at) free (dot) fr> %% %</dtx|french> @@ -39,7 +95,8 @@ %% code for the French language definition file. %% %</dtx> -%<*filedriver> +% +%<*driver> \DocumentMetadata{pdfstandard=A-2b, lang=en-US} \documentclass[a4paper]{ltxdoc} \usepackage[left=38mm,right=38mm,top=30mm,bottom=50mm]{geometry} @@ -88,6 +145,7 @@ minus.8\fontdimen4\font} \hyphenation{Lua-TeX Lua-LaTeX Xe-LaTeX} \lefthyphenmin=2 \righthyphenmin=3 +\setlength{\parindent}{0pt} \RecordChanges \AtEndDocument{% \clearpage @@ -98,7 +156,6 @@ \PrintChanges } \begin{document} -\setlength{\parindent}{0pt} \GetFileInfo{frenchb.dtx} \begin{center} \textbf{\Large A Babel language definition file for French}\\[2mm]^^A\] @@ -112,8 +169,11 @@ \clearpage \DocInput{frenchb.dtx} \end{document} -%</filedriver> -%\fi +%</driver> +%<*gobble> +\fi +%</gobble> +% \fi % % \section{The French language} % @@ -137,7 +197,7 @@ % Thanks to all of them! % % LaTeX-2.09 is no longer supported. -% This new version (3.x) has been designed to be used only with +% Version 3.0 has been designed to be used only with % LaTeX2e and Plain formats based on TeX, pdfTeX, LuaTeX or XeTeX % engines. % @@ -834,6 +894,11 @@ % can be recovered by adding |\parskip=0pt|, |\parindent=0pt| % \emph{inside} the list environment. % +% Version 3.5r is compatible with \pkg{ucharclasses} which is now +% loaded by \pkg{fontsetup} with the XeTeX engine. +% The \file{frenchb.ins} file is no longer needed to extract the +% \file{.ldf} files from \file{frenchb.dtx} (see~\file{README.md}). +% % \subsubsection*{What’s new in version 3.4?} % % Version 3.4a adds a new command |\frenchdate| (see @@ -1132,7 +1197,7 @@ %\changes{v2.1d}{2008/05/04}{Avoid warning `\cs{end} occurred % when \cs{ifx} ... incomplete’ with LaTeX-2.09.} % -% \begin{macro}{\ifLaTeXe} +% \begin{macro}{\ifLaTeXe} % No support is provided for late LaTeX-2.09: issue a warning % and exit if LaTeX-2.09 is in use. Plain is still supported. % \begin{macrocode} @@ -1152,11 +1217,11 @@ \fi \bbl@tempa % \end{macrocode} -% \end{macro} +% \end{macro} % -%\begin{macro}{\ifFBunicode} -% \begin{macro}{\ifFBLuaTeX} -% \begin{macro}{\ifFBXeTeX} +% \begin{macro}{\ifFBunicode} +% \begin{macro}{\ifFBLuaTeX} +% \begin{macro}{\ifFBXeTeX} % French hyphenation patterns are now coded in Unicode, see file % \file{hyph-fr.tex}. XeTeX and LuaTeX engines require some extra % code to deal with the French ``apostrophe’’. @@ -1200,7 +1265,7 @@ % \changes{v3.3b}{2017/07/08}{New `if’ \cs{ifFBfrench} to replace % \cs{iflanguage} test which is based on patterns.} % -% \begin{macro}{\ifFBfrench} +% \begin{macro}{\ifFBfrench} % True when the current language is French or any of its dialects; % will be set to true by |\extrasfrench| and to false by % |\noextrasfrench|. Used in |\DecimalMathComma| and @@ -1277,15 +1342,15 @@ % \changes{v3.0a}{2014/01/10}{New flag \cs{ifFB@luatex@punct} for % `high punctuation’ management with LuaTeX engines.} % -% \begin{macro}{\ifFB@active@punct} +% \begin{macro}{\ifFB@active@punct} % Three internal flags are needed for the three different techniques % used for `high punctuation’ management. % \begin{macrocode} \newif\ifFB@active@punct \FB@active@puncttrue % \end{macrocode} -% \end{macro} +% \end{macro} % -% \begin{macro}{\ifFB@luatex@punct} +% \begin{macro}{\ifFB@luatex@punct} % With LuaTeX, starting with version 1.0.4, callbacks are used to % get rid of active punctuation. With previous versions, `high % punctuation’ characters remain active (see below). @@ -1309,9 +1374,9 @@ \fi \fi % \end{macrocode} -% \end{macro} +% \end{macro} % -% \begin{macro}{\ifFB@xetex@punct} +% \begin{macro}{\ifFB@xetex@punct} % For XeTeX, the availability of |\XeTeXinterchartokenstate| % decides whether the `high punctuation’ characters (|;| |!| |?| % and |:|) have to be made |\active| or not. @@ -1322,24 +1387,26 @@ % % The number of available character classes has been increased from % 256 to 4096 in XeTeX v.~0.99994, the class for non-characters is -% now 4095 instead of 255. +% now 0xFFF=4095 (formerly 0xFF=255). The class for standard +% characters is 0. % \begin{macrocode} -\newcount\FB@nonchar +\newcount\FB@stdchar \newif\ifFB@xetex@punct \ifdefined\XeTeXinterchartokenstate \FB@xetex@puncttrue\FB@active@punctfalse - \ifdim\the\XeTeXversion\XeTeXrevision pt<0.99994pt - \FB@nonchar=255 \relax + \ifdim\the\XeTeXversion\XeTeXrevision\p@ < 0.99994\p@ + \chardef\FB@nonchar="FF \relax \else - \FB@nonchar=4095 \relax + \chardef\FB@nonchar="FFF \relax \fi + \FB@stdchar=\z@ \fi % \end{macrocode} -% \end{macro} +% \end{macro} % -% \begin{macro}{\FBguillspace} -% \begin{macro}{\FBcolonspace} -% \begin{macro}{\FBthinspace} +% \begin{macro}{\FBguillspace} +% \begin{macro}{\FBcolonspace} +% \begin{macro}{\FBthinspace} % \changes{v2.5a}{2010/08/10}{Define \cs{FBthinspace} for those who want % to customise the width of the space before ; and co.} % @@ -1380,9 +1447,9 @@ \newcommand*{\FBcolonspace}{\space} \newcommand*{\FBthinspace}{\hskip .5\fontdimen2\font \relax} % \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} % % \changes{v3.3a}{2016/04/30}{Skip \cs{FBguillskip} for LuaTeX % replaced by toks \cs{FBguillsp}.} @@ -1393,7 +1460,7 @@ % \changes{v3.4a}{2018/01/26}{New command \cs{FBsetspaces} to fine tune % spacing independently in French and in French dialects.} % -% \begin{macro}{\FBsetspaces} +% \begin{macro}{\FBsetspaces} % This command makes it easy to fine tune |\FBguillspace|, % |\FBcolonspace| and |\FBthinspace| in French (defaut) or % independently in a French dialect using the optional argument. @@ -1443,7 +1510,7 @@ \@onlypreamble\FBsetspaces \fi % \end{macrocode} -% \end{macro} +% \end{macro} % % Remember that the \emph{same} |\extrasfrench| command is executed % when switching to French or to a French dialect (Acadian). @@ -2283,18 +2350,28 @@ return french_punctuation % quotes is required by options \fbo{og=«} and \fbo{fg=»} in % \fbsetup{} (see section~\ref{ssec-keyval}). % -% The default value for |\XeTeXcharclass| is 0 for characters tokens -% and |\FB@nonchar| for all other tokens (glues, kerns, math and box -% boundaries, etc.). -% These defaults should not be changed otherwise the spacing before -% the `high punctuation’ characters and inside quotes might not be -% correct. +% Unless \pkg{ucharclass} is loaded, the default value for +% |\XeTeXcharclass| is 0 for characters tokens and |\FB@nonchar| for +% all other tokens (glues, kerns, math and box boundaries, etc.). +% \pkg{ucharclass} defines a XeTeX class for every range of Unicode +% characters in order to facilitate font switching. Most French +% characters belong to range ["20, "7F] (class |\BasicLatinClass|) +% some (accented chars, diacritics,…) to range ["80, "FF] (class +% |\LatinSupplementClass|) and three (œ, Œ, and the long-s) to +% ["100, "17F] (class |\LatinExtendedAClass|). +% +% We check AtBeginDocument whether \pkg{ucharclass} is loaded; if so, +% when switching to French, the class |\FB@stdchar| of all characters +% possibly used in French (except punctuation) will be forced to +% |\BasicLatinClass| which is the default for most of them, the class +% of the others (accented chars, ligatures, diacritics, etc.) will +% be saved and changed locally in French, then restored to their +% original value when leaving French. % % We switch |\XeTeXinterchartokenstate| to 1 and change the % |\XeTeXcharclass| values of |;| |!| |?| |:| |(| |]| -% \texttt{«} and \texttt{»} when -% entering French. Special care is taken to restore them to their -% inital values when leaving French. +% \texttt{«} and \texttt{»} when entering French. +% Their inital values will be restored when leaving French. % % \changes{v2.5d}{2011/01/19}{Moved the \cs{newcount} command outside % \cs{ifFB@xetex@punct} ... \cs{fi} (it broke Plain formats).} @@ -2303,28 +2380,24 @@ return french_punctuation % instead of \cs{@for} borrowed from file ltcntrl.dtx % (\cs{@for} is undefined in Plain).} % +% \changes{v3.5r}{2023/12/19}{Compatibility with \pkg{ucharclasses} +% package added.} +% % The following part holds specific code for punctuation with XeTeX % engines. % % \begin{macrocode} \ifFB@xetex@punct - \ifLaTeXe + \ifLaTeXe \PackageInfo{french.ldf}{No need for active punctuation characters\MessageBreak with this version of XeTeX!\MessageBreak reported} - \else + \else \fb@info{No need for active punctuation characters\\ with this version of XeTeX!} - \fi + \fi % \end{macrocode} % -% \changes{v2.5i}{2012/04/20}{Temporary fix: as long as -% \file{xeCJK.sty} will not use \cs{newXeTeXintercharclass} to -% allocate its classes, we will have to define 3 fake classes.} -% -% \changes{v2.5j}{2012/05/08}{Previous fix removed: bug fixed in -% \file{xeCJK.sty} version 3.0.4 (06-May-2012).} -% % \changes{v2.6g}{2013/12/09}{U+00A0 (Unicode nobreakspace) and U+202F % (Unicode nobreakthinspace) added to class \cs{FB@punctnul} % to prevent frenchb from adding it’s own space before `high @@ -2358,32 +2431,42 @@ return french_punctuation \def\noexpand\originalTeX{\the\toks@ #2=\the#1#2\relax}}% \x} % \end{macrocode} -% |\FB@charlist| holds the all list of characters which have their -% |\XeTeXcharclass| value modified in French: the first set includes +% |\FB@charlistsave| holds the all list of characters which have their +% |\XeTeXcharclass| value modified in French: it always includes % high punctuation, French quotes, opening delimiters and no-break -% spaces \\[5pt] -% \begin{tabular}{*{10}{|c}|}\hline -% "21 &"3A &"3B &"3F &"AB &"BB &"28 &"5B &"A0 &"202F -% \\ \hline -% \char"21 &\char"3A &\char"3B &\char"3F & « & » -% &\char"28 &\char"5B & & \\ \hline -% \end{tabular}\\[5pt] -% the second one holds those which need resetting in French when -% \file{xeCJK.sty} is in use\\[5pt] -% \begin{tabular}{*{12}{|c}|}\hline -% "29 &"5D &"7B &"7D &"2C &"2D &"2E &"22 &"25 &"27 &"60 &"2019 -% \\ \hline -% \char"29 &\char"5D &\char"7B &\char"7D &\char"2C &\char"2D -% &\char"2E &\char"22 &\char"25 &\textquotesingle &\char"60 -% &\char"27 \\ \hline -% \end{tabular} -% -% \begin{macrocode} - \def\FB@charlist{"21,"3A,"3B,"3F,"AB,"BB,"28,"5B,"A0,"202F,% - "29,"5D,"7B,"7D,"2C,"2D,"2E,"22,"25,"27,"60,"2019} -% \end{macrocode} -% -% \begin{macro}{\FB@xetex@punct@french} +% spaces. If \pkg{ucharclasses} is loaded, non-\textsc{ascii} +% characters used in French have to be added; as \pkg{xeCJK} +% changes the class of some characters used in French, these have to +% be saved too if \pkg{xeCJK} is loaded. +% +% \begin{macrocode} + \def\FB@charlist{"21,"3A,"3B,"3F,"AB,"BB,"28,"5B,"A0,"202F} + \def\FB@charlistUCC{} + \def\FB@charlistxeCJK{} + \edef\FB@charlistsave{\FB@charlist} + \ifLaTeXe + \AtBeginDocument{% + \@ifpackageloaded{ucharclasses}% + {\ifdefined\BasicLatinClass + \RenewCommandCopy{\FB@stdchar}{\BasicLatinClass}% + \def\FB@charlistUCC{"C0,"C2,"C6,"C7,"C8,"C9,"CA,"CB,"CE,"CF,% + "D4,"D6,"D9,"DB,"DC,"E0,"E2,"E6,"E7,"E8,"E9,"EA,"EB,"EE,% + "EF,"F4,"F6,"F9,"FB,"FC,"152,"153,"17F,"2019}% + \addto\FB@charlist{,\FB@charlistUCC}% + \edef\FB@charlistsave{\FB@charlist}% + \fi + }{}% + \@ifpackageloaded{xeCJK}% + {\def\FB@charlistxeCJK{% + "29,"5D,"7B,"7D,"2C,"2D,"2E,"22,"25,"27,"60,"2019}% + \addto\FB@charlist{,\FB@charlistxeCJK}% + \edef\FB@charlistsave{\FB@charlist}% + }{}% + } + \fi +% \end{macrocode} +% +% \begin{macro}{\FB@xetex@punct@french} % The following command will be executed when entering French, it % first saves the values to be modified, then fits them to our % needs. @@ -2397,8 +2480,7 @@ return french_punctuation % \cs{XeTeXcharclass} of ASCII chars `-’ `,’ `.’ `)’ `]’ `\}’ % `\{’ `\%’ opening and closing single and double quotes. % We set their class to 0 in French and reset their class -% to their original value when leaving French. See -% \cs{FB@xetex@punct@nonfrench} below.} +% to their original value when leaving French.} % % \changes{v3.1k}{2015/12/05}{Thin glues (less than 1sp) should not % trigger space insertion before high ponctuation. Add a check on @@ -2412,16 +2494,39 @@ return french_punctuation % \changes{v3.2c}{2016/05/14}{Switch \cs{ifFB@spacing} added to all % \cs{XeTeXinterchartoks} commands.} % -%% \changes{v3.5o}{2022/11/03}{\cs{shorthandon} and \cs{shorthandoff} +% \changes{v3.5o}{2022/11/03}{\cs{shorthandon} and \cs{shorthandoff} % are no longer redefined (it broke \cs{shorthandoff*}).} % % \begin{macrocode} \newcommand*{\FB@xetex@punct@french}{% \babel@savevariable{\XeTeXinterchartokenstate}% - \bbl@for\FB@char\FB@charlist + \bbl@for\FB@char\FB@charlistsave {\FBsavevariable@loop{\XeTeXcharclass}{\FB@char}}% % \end{macrocode} -% Let’s now set the classes and interactions between classes. +% If \pkg{ucharclasses} is loaded, force non-\textsc{ascii} used +% in French to class |\FB@stdchar| (=|\BasicLatinClass|). +% \begin{macrocode} + \ifx\FB@charlistUCC\@empty\else + \bbl@for\FB@char\FB@charlistUCC + {\XeTeXcharclass \FB@char \FB@stdchar}% + \fi +% \end{macrocode} +% These characters have their class changed by \file{xeCJK.sty}, +% let’s reset their class in French. +% \begin{macrocode} + \ifx\FB@charlistxeCJK\@empty\else + \bbl@for\FB@char\FB@charlistxeCJK + {\XeTeXcharclass\FB@char=\FB@stdchar}% + \fi +% \end{macrocode} +% This will avoid spurious spaces in (!), [?] and with Unicode +% non-breaking spaces (U+00A0, U+202F): +% \begin{macrocode} + \bbl@for\FB@char {`\[,`\(,"A0,"202F}% + {\XeTeXcharclass\FB@char=\FB@punctnul}% +% \end{macrocode} +% Let’s now define specific classes for punctuation and interactions +% between classes. % When false, the flag |\ifFB@spacing| switches off any interaction % between classes (this flag is controlled by user-level command % |\NoAutoSpacing|; this flag is also set to false when the current @@ -2429,7 +2534,7 @@ return french_punctuation % \begin{macrocode} \XeTeXinterchartokenstate=\@ne \XeTeXcharclass `\: = \FB@punctthick - \XeTeXinterchartoks \z@ \FB@punctthick = {% + \XeTeXinterchartoks \FB@stdchar \FB@punctthick = {% \ifFB@spacing\ifhmode\FDP@colonspace\fi\fi}% \XeTeXinterchartoks \FB@guilf \FB@punctthick = {% \ifFB@spacing\FDP@colonspace\fi}% @@ -2452,10 +2557,9 @@ return french_punctuation \fi \fi \fi}% - \bbl@for\FB@char - {`\;,`\!,`\?}% + \bbl@for\FB@char {`\;,`\!,`\?}% {\XeTeXcharclass\FB@char=\FB@punctthin}% - \XeTeXinterchartoks \z@ \FB@punctthin = {% + \XeTeXinterchartoks \FB@stdchar \FB@punctthin = {% \ifFB@spacing\ifhmode\FDP@thinspace\fi\fi}% \XeTeXinterchartoks \FB@guilf \FB@punctthin = {% \ifFB@spacing\FDP@thinspace\fi}% @@ -2469,34 +2573,20 @@ return french_punctuation \fi \fi \fi}% - \XeTeXinterchartoks \FB@guilo \z@ = {% + \XeTeXinterchartoks \FB@guilo \FB@stdchar = {% \ifFB@spacing\FB@guillspace\fi}% \XeTeXinterchartoks \FB@guilo \FB@nonchar = {% \ifFB@spacing\FB@guillspace\ignorespaces\fi}% - \XeTeXinterchartoks \z@ \FB@guilf = {% + \XeTeXinterchartoks \FB@stdchar \FB@guilf = {% \ifFB@spacing\FB@guillspace\fi}% \XeTeXinterchartoks \FB@punctthin \FB@guilf = {% \ifFB@spacing\FB@guillspace\fi}% \XeTeXinterchartoks \FB@nonchar \FB@guilf = {% \ifFB@spacing\unskip\FB@guillspace\fi}% -% \end{macrocode} -% This will avoid spurious spaces in (!), [?] and with Unicode -% non-breaking spaces (U+00A0, U+202F): -% \begin{macrocode} - \bbl@for\FB@char - {`\[,`\(,"A0,"202F}% - {\XeTeXcharclass\FB@char=\FB@punctnul}% -% \end{macrocode} -% These characters have their class changed by \file{xeCJK.sty}, -% let’s reset them to 0 in French. -% \begin{macrocode} - \bbl@for\FB@char - {`\{,`\,,`\.,`\-,`\),`\],`\},`\%,"22,"27,"60,"2019}% - {\XeTeXcharclass\FB@char=\z@}% } \addto\extrasfrench{\FB@xetex@punct@french} % \end{macrocode} -% \end{macro} +% \end{macro} % % End of specific code for punctuation with modern XeTeX engines. % \begin{macrocode} @@ -2639,8 +2729,8 @@ return french_punctuation \newif\ifFBAutoSpacePunctuation \FBAutoSpacePunctuationtrue % \end{macrocode} % -% \begin{macro}{\AutoSpaceBeforeFDP} -% \begin{macro}{\NoAutoSpaceBeforeFDP} +% \begin{macro}{\AutoSpaceBeforeFDP} +% \begin{macro}{\NoAutoSpaceBeforeFDP} % % \changes{v2.3a}{2008/10/10}{\cs{NoAutoSpaceBeforeFDP} and % \cs{AutoSpaceBeforeFDP} now set the flag @@ -2739,7 +2829,7 @@ return french_punctuation % \changes{v2.5a}{2010/08/14}{New command \cs{NoAutoSpacing}, % suggested by MPG.} % -% \begin{macro}{\NoAutoSpacing} +% \begin{macro}{\NoAutoSpacing} % The following command disables automatic spacing for high % punctuation and French quote characters; it also switches off % active punctuation characters (if any). @@ -2757,15 +2847,15 @@ return french_punctuation \ifFB@active@punct\shorthandoff{;:!?}\fi } % \end{macrocode} -% \end{macro} +% \end{macro} % % \subsection{Commands for French quotation marks} % \label{ssec-quotes} % -% \begin{macro}{\guillemotleft} -% \begin{macro}{\guillemotright} -% \begin{macro}{\textquoteddblleft} -% \begin{macro}{\textquoteddblright} +% \begin{macro}{\guillemotleft} +% \begin{macro}{\guillemotright} +% \begin{macro}{\textquoteddblleft} +% \begin{macro}{\textquoteddblright} % pdfLaTeX users are supposed to use 8-bit output % encodings (T1, LY1,…) to typeset French, those who still % stick to OT1 should load \pkg{aeguill} or a similar package. @@ -2802,18 +2892,18 @@ return french_punctuation \let\xspace\relax \fi % \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} % % \changes{v3.4a}{2018/01/18}{New \cs{FBgspchar} to customise the % space character to be used for \cs{og} and\cs{fg} with the % UnicodeNoBreakSpaces option.} % -% \begin{macro}{\FBgspchar} -% \begin{macro}{\FB@og} -% \begin{macro}{\FB@fg} +% \begin{macro}{\FBgspchar} +% \begin{macro}{\FB@og} +% \begin{macro}{\FB@fg} % The next step is to provide correct spacing after `«’ and before % `»’; no line break is allowed neither \emph{after} the opening % one, nor \emph{before} the closing one. @@ -2871,12 +2961,12 @@ return french_punctuation \guillemotright} \fi % \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} % -% \begin{macro}{\og} -% \begin{macro}{\fg} +% \begin{macro}{\og} +% \begin{macro}{\fg} % % The user level macros for quotation marks are named |\og| % (``\underline{o}uvrez \underline{g}uillemets’’) and |\fg| @@ -2923,8 +3013,8 @@ return french_punctuation \def\fg{\ifdim\lastskip>\z@\unskip\fi\textquotedblright} \fi % \end{macrocode} -% \end{macro} -% \end{macro} +% \end{macro} +% \end{macro} % % \changes{v3.0a}{2014/01/10}{\cs{bbl@nonfrenchguillemets} deleted, % use \cs{babel@save} instead.} @@ -2937,7 +3027,7 @@ return french_punctuation % \changes{v3.1a}{2014/05/20}{New command \cs{frquote} for imbedded or % long French quotations.} % -% \begin{macro}{\frquote} +% \begin{macro}{\frquote} % Another way of entering French quotes relies on |\frquote{}| % with supports up to two levels of quotes. % Let’s define the default quote characters to be used for level one @@ -3127,7 +3217,7 @@ return french_punctuation % \begin{macrocode} \newcommand*{\NoEveryParQuote}{\let\FBeveryparguill\FBguillnone} % \end{macrocode} -% \end{macro} +% \end{macro} % % \subsection{Date in French} % \label{sssec-date} @@ -3204,7 +3294,7 @@ return french_punctuation % \changes{v2.1a}{2008/03/24}{Command \cs{fup} added to produce % better superscripts than \cs{textsuperscript}.} % -% \begin{macro}{\up} +% \begin{macro}{\up} % % \changes{v2.1c}{2008/04/29}{Provide a temporary definition % (hyperref safe) of \cs{up} in case it has to be expanded in @@ -3215,7 +3305,7 @@ return french_punctuation % defined elsewhere (catalan.ldf). % Bug pointed out by Felip Manyé i Ballester.} % -% \begin{macro}{\fup} +% \begin{macro}{\fup} % % \changes{v2.1b}{2008/04/02}{Command \cs{fup} changed to use % real superscripts from fourier v.~1.6.} @@ -3351,15 +3441,15 @@ return french_punctuation \providecommand*{\up}[1]{\leavevmode\raise1ex\hbox{\sevenrm #1}} \fi % \end{macrocode} -% \end{macro} -% \end{macro} +% \end{macro} +% \end{macro} % -% \begin{macro}{\ieme} -% \begin{macro}{\ier} -% \begin{macro}{\iere} -% \begin{macro}{\iemes} -% \begin{macro}{\iers} -% \begin{macro}{\ieres} +% \begin{macro}{\ieme} +% \begin{macro}{\ier} +% \begin{macro}{\iere} +% \begin{macro}{\iemes} +% \begin{macro}{\iers} +% \begin{macro}{\ieres} % \changes{v3.1b}{2014/06/23}{Removed \cs{lowercase} from definitions % of \cs{ieme} and co: \cs{up} already does the conversion.} % @@ -3373,33 +3463,33 @@ return french_punctuation \def\iere{\up{re}\xspace} \def\ieres{\up{res}\xspace} % \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} % % \changes{v3.3c}{2017/07/23}{New configurable kerns \cs{FBmedkern}, % and \cs{FBthickkern} suitable for HTML translation.} % -% \begin{macro}{\FBmedkern} -% \begin{macro}{\FBthickkern} +% \begin{macro}{\FBmedkern} +% \begin{macro}{\FBthickkern} % \begin{macrocode} \newcommand*{\FBmedkern}{\kern+.2em} \newcommand*{\FBthickkern}{\kern+.3em} % \end{macrocode} -% \end{macro} -% \end{macro} +% \end{macro} +% \end{macro} % % \changes{v2.1c}{2008/04/29}{Added commands \cs{Nos} and \cs{nos}.} % -% \begin{macro}{\primo} -% \begin{macro}{\fprimo)} -% \begin{macro}{\nos} -% \begin{macro}{\Nos} -% \begin{macro}{\No} -% \begin{macro}{\no} +% \begin{macro}{\primo} +% \begin{macro}{\fprimo)} +% \begin{macro}{\nos} +% \begin{macro}{\Nos} +% \begin{macro}{\No} +% \begin{macro}{\no} % \changes{v3.1b}{2014/06/23}{Removed \cs{lowercase} from definitions % of \cs{FrenchEnumerate}, … \cs{No} and co: \cs{up} already % does the conversion.} @@ -3445,15 +3535,15 @@ return french_punctuation \DeclareRobustCommand*{\nos}{% \texorpdfstring{n\up{os}\FBmedkern}{n\textdegree\space}} % \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} % -% \begin{macro}{\bname} -% \begin{macro}{\bsc} +% \begin{macro}{\bname} +% \begin{macro}{\bsc} % These commands are meant to easily enter family names (in small % capitals for the latter) while avoidind hyphenation. % A |\kern0pt| is used instead of |\mbox| because |\mbox| would break @@ -3483,8 +3573,8 @@ return french_punctuation \let\bsc\bname \fi % \end{macrocode} -% \end{macro} -% \end{macro} +% \end{macro} +% \end{macro} % % Some definitions for special characters. We won’t define |\tilde| % as a Text Symbol not to conflict with the macro |\tilde| for math @@ -3521,7 +3611,7 @@ return french_punctuation \newcommand*{\at}{@} % \end{macrocode} % -% \begin{macro}{\degres} +% \begin{macro}{\degres} % We now define a macro |\degres| for typesetting the abbreviation % for `degrees’ (as in `degrees Celsius’). As the bounding box of % the character `degree’ has \emph{very} different widths in CM/EC @@ -3568,13 +3658,13 @@ return french_punctuation } \fi % \end{macrocode} -% \end{macro} +% \end{macro} % % \subsection{Formatting numbers} % \label{ssec-numbers} % -% \begin{macro}{\StandardMathComma} -% \begin{macro}{\DecimalMathComma} +% \begin{macro}{\StandardMathComma} +% \begin{macro}{\DecimalMathComma} % As mentioned in the \TeX{}book p.~134, the comma is of type % |\mathpunct| in math mode: it is automatically followed by a % thin space. This is convenient in lists and intervals but @@ -3636,7 +3726,8 @@ return french_punctuation % (see |\dec@m@c|’s expansion). % The \pkg{icomma} inhibits |\DecimalMathComma|. % \begin{macrocode} -\newif\if@FBpreamble \ifLaTeXe \@FBpreambletrue \fi +\newif\if@FBpreamble +\ifLaTeXe \@FBpreambletrue \fi \newif\if@preamble@DecimalMathComma \newcommand*{\DecimalMathComma}{% \if@FBpreamble \@preamble@DecimalMathCommatrue @@ -3668,55 +3759,14 @@ return french_punctuation \fi } % \end{macrocode} -% Ii issued in the preamble, |\DecimalMathComma| works globally on -% all parts of the document that are typeset in a French dialect. -% Can be canceled anytime by |\StandardMathComma|. -% \begin{macrocode} -\ifLaTeXe - \AtBeginDocument{% - \@FBpreamblefalse - \@ifpackageloaded{icomma}% - {\FB@icommatrue - \if@preamble@DecimalMathComma - \PackageWarning{french.ldf}{% - icomma package loaded, \protect\DecimalMathComma% - \MessageBreak does nothing. Reported}% - \fi - }% - {\if@preamble@DecimalMathComma - \ifFB@mainlanguage@FR \dec@math@comma \fi - \let\dec@m@c\dec@math@comma - \addto\extrasfrench{\dec@m@c}% - \ifdefined\extrasacadian - \addto\extrasacadian{\dec@m@c}% - \fi - \fi -% \end{macrocode} -% The comma is reset to type |\mathpunct| when leaving French -% dialects (only if the icomma package is not loaded). +% \end{macro} +% \end{macro} +% This is for Plain formats \emph{only} (see below). % \begin{macrocode} - \addto\noextrasfrench{\std@math@comma}% - \ifdefined\noextrasacadian - \addto\noextrasacadian{\std@math@comma}% - \fi - }% - } -\else +\ifLaTeXe\else \addto\noextrasfrench{\std@math@comma} \fi % \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\nombre} -% -% \changes{v2.0}{2006/11/06}{\cs{nombre} now requires numprint.sty.} -% -% The command |\nombre| is now borrowed from \file{numprint.sty} for -% LaTeX2e. There is no point to maintain the former tricky code -% when a package is dedicated to do the same job and more. -% For Plain based formats, |\nombre| no longer formats numbers, -% it prints them as is and issues a warning about the change. % % Fake command |\nombre| for Plain based formats, warning users of % \frenchb{} v.~1.x.\ about the change: @@ -3724,7 +3774,6 @@ return french_punctuation \newcommand*{\nombre}[1]{{#1}\fb@warning{*** \noexpand\nombre no longer formats numbers\string! ***}} % \end{macrocode} -% \end{macro} % % Let’s activate LuaTeX punctuation if necessary (LaTeX or Plain) % so that |\FBsetspaces| commands can be used in the preamble, @@ -3737,7 +3786,7 @@ return french_punctuation \fi \let\FBstop@here\relax \def\FBclean@on@exit{% - \let\ifLaTeXe\undefined + \let\ifLaTeXe\iffalse \let\LaTeXetrue\undefined \let\LaTeXefalse\undefined \let\FB@llc\loadlocalcfg @@ -3753,16 +3802,53 @@ return french_punctuation \FBstop@here % \end{macrocode} % -% What follows is for LaTeX2e \emph{only}. -% We redefine |\nombre| for LaTeX2e. A warning is issued -% at the first call of |\nombre| if |\numprint| is not -% defined, suggesting what to do. The package \pkg{numprint} -% is \emph{not} loaded automatically by \frenchb{} because of -% possible options conflict. +% What follows is for LaTeX2e \emph{only}: the next piece of code +% would break Plain formats. +% If issued in the preamble, |\DecimalMathComma| works globally on +% all parts of the document that are typeset in a French dialect. +% Can be canceled anytime by |\StandardMathComma|. +% \begin{macrocode} +\AtBeginDocument{% + \@FBpreamblefalse + \@ifpackageloaded{icomma}% + {\FB@icommatrue + \if@preamble@DecimalMathComma + \PackageWarning{french.ldf}{% + icomma package loaded, \protect\DecimalMathComma% + \MessageBreak does nothing. Reported}% + \fi + }% + {\if@preamble@DecimalMathComma + \ifFB@mainlanguage@FR \dec@math@comma \fi + \let\dec@m@c\dec@math@comma + \addto\extrasfrench{\dec@m@c}% + \ifdefined\extrasacadian + \addto\extrasacadian{\dec@m@c}% + \fi + \fi +% \end{macrocode} +% The comma is reset to type |\mathpunct| when leaving French +% dialects (only if the icomma package is not loaded). +% \begin{macrocode} + \addto\noextrasfrench{\std@math@comma}% + \ifdefined\noextrasacadian + \addto\noextrasacadian{\std@math@comma}% + \fi + }% + } +% \end{macrocode} +% +% \begin{macro}{nombre} +% We redefine |\nombre| for LaTeX2e. The command |\nombre| is now +% borrowed from \file{numprint.sty} for LaTeX2e. There is no point to +% maintain the former tricky code when a package is dedicated to do +% the same job and more. A warning is issued at the first call of +% |\nombre| if |\numprint| is not defined, suggesting what to do. +% The package \pkg{numprint} is \emph{not} loaded automatically by +% \frenchb{} because of possible options conflict. % % \changes{v3.1i}{2015/10/03}{\cs{nombre} command changed when % numprint.sty is not loaded: only one warning, no error.} -% % \begin{macrocode} \renewcommand*{\nombre}[1]{\Warning@nombre{#1}} \newcommand*{\Warning@nombre}[1]{% @@ -3780,6 +3866,7 @@ return french_punctuation \fi } % \end{macrocode} +% \end{macro} % % \changes{v3.3c}{2017/08/10}{New command \cs{FBthousandsep} to % customise numprint.} @@ -4150,10 +4237,10 @@ return french_punctuation } % \end{macrocode} % -% \subsection{Dots…} -% \label{ssec-dots} +% \subsection{Dots…} +% \label{ssec-dots} % -% \begin{macro}{\FBtextellipsis} +% \begin{macro}{\FBtextellipsis} % Unless a ready-made character is available in the current font, % LaTeX’s default definition of |\textellipsis| includes a |\kern| at % the end; this space is not wanted in some cases (before a closing @@ -4188,7 +4275,7 @@ return french_punctuation \addto\extrasfrench{\bbl@frenchdots} \fi % \end{macrocode} -% \end{macro} +% \end{macro} % % \subsection{More checks about packages’ loading order} % \label{ssec-loading-order} @@ -4283,7 +4370,7 @@ return french_punctuation % |\babel@save| and |\babel@savevariable| did not work for % French).\par} % -% \begin{macro}{\frenchsetup} +% \begin{macro}{\frenchsetup} % Let’s now define this command which reads and sets the options % to be processed either immediately (i.e.\ just after setting the % key) or later (at |\begin{document}|) by |\FBprocess@options|. @@ -4910,7 +4997,7 @@ return french_punctuation }% } % \end{macrocode} -% \end{macro} +% \end{macro} % % \begin{macro}{\FBprocess@options} % |\FBprocess@options| will be executed at |\begin{document}|: @@ -5173,7 +5260,7 @@ return french_punctuation \fi } % \end{macrocode} -% \end{macro} +% \end{macro} % % \changes{v2.0}{2006/12/06}{Added warning for OT1 encoding.} % @@ -5255,11 +5342,11 @@ return french_punctuation % Lists have been completely redesigned in frenchb v.~2.6a. % An option for backward compatibility is provided.} % -% \begin{macro}{\listFB} +% \begin{macro}{\listFB} % \changes{v3.5q}{2023/02/15}{Bug correction: \cs{parsep} should be % related to \cs{parskip} and \cs{listparindent} to \cs{parindent}.} -% \begin{macro}{\listORI} -% \begin{macro}{\FB@listVsettings} +% \begin{macro}{\listORI} +% \begin{macro}{\FB@listVsettings} % Vertical spacing in lists should be shorter in French texts than % the defaults provided by LaTeX. % Note that the easy way, just changing values of vertical spacing @@ -5311,9 +5398,9 @@ return french_punctuation \def\listFB#1#2{\listORI{#1}{\FB@listVsettings #2}} \let\endlistFB\endlistORI % \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} % % Let’s now consider French itemize-lists. They differ from those % provided by the standard LaTeX classes: @@ -5329,13 +5416,13 @@ return french_punctuation % aligned as shown p.~\pageref{ListAsPar}. % \end{itemize} % -% \begin{macro}{\FrenchLabelItem} +% \begin{macro}{\FrenchLabelItem} % \changes{v2.6a}{2013/01/30}{default changed from \cs{textendash} to % \cs{textemdash}.} -% \begin{macro}{\Frlabelitemi} -% \begin{macro}{\Frlabelitemii} -% \begin{macro}{\Frlabelitemiii} -% \begin{macro}{\Frlabelitemiv} +% \begin{macro}{\Frlabelitemi} +% \begin{macro}{\Frlabelitemii} +% \begin{macro}{\Frlabelitemiii} +% \begin{macro}{\Frlabelitemiv} % Default labels for French itemize-lists (same label for all levels): % \begin{macrocode} \newcommand*{\FrenchLabelItem}{\textemdash} @@ -5344,16 +5431,16 @@ return french_punctuation \newcommand*{\Frlabelitemiii}{\FrenchLabelItem} \newcommand*{\Frlabelitemiv}{\FrenchLabelItem} % \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} % -% \begin{macro}{\listindentFB} -% \begin{macro}{\descindentFB} -% \begin{macro}{\labelindentFB} -% \begin{macro}{\labelwidthFB} +% \begin{macro}{\listindentFB} +% \begin{macro}{\descindentFB} +% \begin{macro}{\labelindentFB} +% \begin{macro}{\labelwidthFB} % Let’s define four dimens |\listindentFB|, |\descindentFB|, % |\labelindentFB| and |\labelwidthFB| to customise lists’ horizontal % indentations. @@ -5372,10 +5459,10 @@ return french_punctuation \newdimen\labelwidthFB \setlength{\labelwidthFB}{-1pt} % \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} % % \changes{v3.2e}{2016/10/28}{Add missing redefinitions for % \cs{leftmarginv}, \cs{leftmarginvi}. Suggested by J.F. Burnol.} @@ -5384,8 +5471,8 @@ return french_punctuation % lists’ items can be typeset as paragraphs with indented labels % while the default leaves the labels hanging into the left margin.} % -% \begin{macro}{\leftmarginFB} -% \begin{macro}{\FB@listHsettings} +% \begin{macro}{\leftmarginFB} +% \begin{macro}{\FB@listHsettings} % |\FB@listHsettings| holds the new horizontal settings chosen for % French lists \env{itemize}, \env{enumerate} and \env{description} % (two possible layouts). @@ -5424,11 +5511,11 @@ return french_punctuation \ifnum\@listdepth=\@ne i\else ii\fi\endcsname } % \end{macrocode} -% \end{macro} -% \end{macro} +% \end{macro} +% \end{macro} % -% \begin{macro}{\itemizeFB} -% \begin{macro}{\FB@itemizesettings} +% \begin{macro}{\itemizeFB} +% \begin{macro}{\FB@itemizesettings} % % \changes{v2.6f}{2013/11/25}{\cs{labelwidth} must be reset, f.i. when % an itemize list occurs inside environments based on trivlist which @@ -5487,8 +5574,8 @@ return french_punctuation } \let\enditemizeFB\endlistORI % \end{macrocode} -% \end{macro} -% \end{macro} +% \end{macro} +% \end{macro} % % \begin{macrocode} \def\setlabelitemsFB{% @@ -5525,7 +5612,7 @@ return french_punctuation } % \end{macrocode} % -% \begin{macro}{\enumerateFB} +% \begin{macro}{\enumerateFB} % The definition of |\enumerateFB|, new to version~2.6a, follows % the one of |\enumerate| in standard LaTeX classes (see % \file{ltlists.dtx}), vertical spaces are customised (or not) @@ -5547,9 +5634,9 @@ return french_punctuation } \let\endenumerateFB\endlistORI % \end{macrocode} -% \end{macro} +% \end{macro} % -% \begin{macro}{\descriptionFB} +% \begin{macro}{\descriptionFB} % \changes{v2.6b}{2013/02/10}{Settings of \cs{FB@listHsettings} should % apply to description lists too.} % @@ -5598,10 +5685,10 @@ return french_punctuation } \let\enddescriptionFB\endlistORI % \end{macrocode} -% \end{macro} +% \end{macro} % -% \begin{macro}{\update@frenchlists} -% \begin{macro}{\bbl@frenchlistlayout} +% \begin{macro}{\update@frenchlists} +% \begin{macro}{\bbl@frenchlistlayout} % |\update@frenchlists| will set up lists according to the final % options (default or part of \fbsetup{} eventually overruled in % |\FBprocess@options|). @@ -5653,13 +5740,13 @@ return french_punctuation } \addto\extrasfrench{\bbl@frenchlistlayout} % \end{macrocode} -% \end{macro} -% \end{macro} +% \end{macro} +% \end{macro} % % \subsection{French indentation of sections} % \label{ssec-indent} % -% \begin{macro}{\bbl@frenchindent} +% \begin{macro}{\bbl@frenchindent} % In French the first paragraph of each section should be indented, % this is another difference with US-English. This is controlled % by the flag |\if@afterindent|. @@ -5686,7 +5773,7 @@ return french_punctuation \fi} \addto\extrasfrench{\bbl@frenchindent} % \end{macrocode} -% \end{macro} +% \end{macro} % % \subsection{Formatting footnotes} % \label{ssec-footnotes} @@ -5735,7 +5822,7 @@ return french_punctuation } % \end{macrocode} % -% \begin{macro}{\@makefntextFB} +% \begin{macro}{\@makefntextFB} % We then define |\@makefntextFB|, a variant of |\@makefntext| % which is responsible for the layout of footnotes, to match the % specifications of the French `Imprimerie Nationale’: footnotes @@ -5864,7 +5951,7 @@ return french_punctuation \fi} \providecommand\@makefntextFB[1]{\insertfootnotemarkFB #1} % \end{macrocode} -% \end{macro} +% \end{macro} % % The rest of |\@makefntext|’s customisation is done at the % |\begin{document}|. We save the original definition of @@ -6095,6 +6182,7 @@ return french_punctuation %<acadian|canadien|frenchb|francais>\input french.ldf\relax %<acadian|canadien>\let\extrasacadian\extrasfrench %<acadian|canadien>\let\noextrasacadian\noextrasfrench +%<acadian|canadien|frenchb|francais|french>\endinput % \end{macrocode} % % \Finale diff --git a/macros/latex/contrib/babel-contrib/french/frenchb.ins b/macros/latex/contrib/babel-contrib/french/frenchb.ins deleted file mode 100644 index 0f973a54df..0000000000 --- a/macros/latex/contrib/babel-contrib/french/frenchb.ins +++ /dev/null @@ -1,98 +0,0 @@ -%% -%% This file will generate fast loadable files and documentation driver -%% files from the doc files in this package when run through LuaTeX. -%% -%% Copyright 2001-2023 Daniel Flipo. All rights reserved. -%% -%% This is a generated file part of the the babel-french bundle -%% to be used with the Babel system. -%% ------------------------------------------------------------- -%% -%% It may be distributed under the terms of the LaTeX Project Public -%% License, as described in lppl.txt in the base LaTeX distribution. -%% Either version 1.3 or, at your option, any later version. -%% -%% --------------- start of docstrip commands ------------------ -%% -\def\filedate{2023/01/02} -\def\batchfile{frenchb.ins} -\input docstrip.tex - -{\ifx\generate\undefined -\Msg{**********************************************} -\Msg{*} -\Msg{* This installation requires docstrip} -\Msg{* version 2.4e or later.} -\Msg{*} -\Msg{* An older version of docstrip has been input} -\Msg{*} -\Msg{**********************************************} -\errhelp{Move or rename old docstrip.tex.} -\errmessage{Old docstrip in input path} -\batchmode -\csname @@end\endcsname -\fi} - -\declarepreamble\mainpreamble -This is a generated file part of the babel-french bundle -to be used with the Babel system. -------------------------------------------------------------- - -It may be distributed and/or modified under the -conditions of the LaTeX Project Public License, either version 1.3 -of this license or (at your option) any later version. -The latest version of this license is in - http://www.latex-project.org/lppl.txt -and version 1.3 or later is part of all distributions of LaTeX -version 2003/12/01 or later. - -This work has the LPPL maintenance status "maintained". - -The Current Maintainer of this work is Daniel Flipo. - -Please report errors to: <daniel (dot) flipo (at) free (dot) fr> - -\endpreamble - -\keepsilent -\askforoverwritefalse - -\usedir{tex/generic/babel-french} - -\usepreamble\mainpreamble -\generate{\file{french.ldf}{\from{frenchb.dtx}{french}} - \file{acadian.ldf}{\from{frenchb.dtx}{acadian}} - \file{canadien.ldf}{\from{frenchb.dtx}{canadien}} - \file{frenchb.ldf}{\from{frenchb.dtx}{frenchb}} - \file{francais.ldf}{\from{frenchb.dtx}{francais}} - } - -\def\MetaPrefix{-- } - -\def\luapostamble{% - \MetaPrefix\space End of File frenchb.lua.% -} - -\nopreamble -\usepostamble\luapostamble - -\generate{\file{frenchb.lua}{\from{frenchb.dtx}{lua}}} - -\ifToplevel{ -\Msg{***********************************************************} -\Msg{*} -\Msg{* To finish the installation you have to move the following} -\Msg{* files into a directory searched by TeX:} -\Msg{*} -\Msg{* \space\space frenchb.lua\space\space french.ldf} -\Msg{* \space\space frenchb.ldf\space\space francais.ldf} -\Msg{* \space\space canadian.ldf\space\space and acadian.ldf} -\Msg{*} -\Msg{* To produce the documentation run the file frenchb.dtx} -\Msg{* through pdfLaTeX.} -\Msg{*} -\Msg{* Happy TeXing} -\Msg{***********************************************************} -} - -\endbatchfile diff --git a/macros/latex/contrib/babel-contrib/french/frenchb.pdf b/macros/latex/contrib/babel-contrib/french/frenchb.pdf Binary files differindex 395080ae3f..e5dd20f656 100644 --- a/macros/latex/contrib/babel-contrib/french/frenchb.pdf +++ b/macros/latex/contrib/babel-contrib/french/frenchb.pdf diff --git a/macros/latex/contrib/tablvar/README.md b/macros/latex/contrib/tablvar/README.md index 5a92c8ecd9..565ed9c049 100644 --- a/macros/latex/contrib/tablvar/README.md +++ b/macros/latex/contrib/tablvar/README.md @@ -5,9 +5,9 @@ - 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 of the array environment and uses intuitive position commands. -- Arrows are automatically drawn (with PSTricks by default or TikZ in option). -- Macros are provided for drawing double bars, single bars crossing the zeros, areas where the function is not defined or placing special values. -- Several features of variation tables can be customized. +- Arrows are automatically drawn (with PSTricks or TikZ). +- Macros are provided for drawing double bars, single bars crossing the zeros, intervals where a function is not defined or for placing special values. +- Several features of variations tables can be customized. ## Documentation @@ -18,7 +18,7 @@ The documentation is in French. ## Installation - run LaTeX on tablvar.ins, you obtain the file tablvar.sty, -- if then you run LaTeX + dvips + ps2pdf on tablvar.dtx you get the file tablvar.pdf which is also in the archive, +- if then you run XeLaTeX or LaTeX + dvips + ps2pdf on tablvar.dtx you get the file tablvar.pdf which is also in the archive, - put the files tablvar.sty and tablvar.pdf in your TeX Directory Structure. diff --git a/macros/latex/contrib/tablvar/tablvar.dtx b/macros/latex/contrib/tablvar/tablvar.dtx index 28e8f1ead0..afc47fc953 100644 --- a/macros/latex/contrib/tablvar/tablvar.dtx +++ b/macros/latex/contrib/tablvar/tablvar.dtx @@ -1,6 +1,6 @@ % \iffalse meta-comment % -% Copyright (C) 2018-2019 by Antoine Missier <antoine.missier@ac-toulouse.fr> +% Copyright (C) 2018-2023 by Antoine Missier <antoine.missier@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 @@ -22,7 +22,7 @@ %<*package> \NeedsTeXFormat{LaTeX2e}[2005/12/01] \ProvidesPackage{tablvar} - [2019/07/01 v1.2 .dtx tablvar file] + [2023/12/23 v2.0 .dtx tablvar file] %</package> %<*driver> \documentclass{ltxdoc} @@ -30,22 +30,44 @@ \usepackage[T1]{fontenc} \usepackage[french]{babel} \usepackage{lmodern} -\usepackage{tablvar} -\usepackage[Symbol]{upgreek} -\renewcommand\pi{\uppi} -\newcommand*\dfrac[2]{{\displaystyle\frac{#1}{#2}}} -\DisableCrossrefs -%\CodelineIndex -%\RecordChanges +\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} } -\newcommand\tikz{{\fontfamily{cmr}Ti{\em k}Z}} +\DisableCrossrefs +%\CodelineIndex +%\RecordChanges \begin{document} \DocInput{tablvar.dtx} %\PrintChanges @@ -54,7 +76,7 @@ %</driver> % \fi % -% \CheckSum{2825} +% \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 @@ -76,64 +98,102 @@ % \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.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 01/07/2019.}} +% correspond à \textsf{tablvar}~\fileversion, dernière modification le 23/12/2023.}} % \author{Antoine Missier \\ \texttt{antoine.missier@ac-toulouse.fr}} -% \date{1\ier\ juillet 2019} +% \date{23 décembre 2023} % \maketitle % \tableofcontents % % \section{Introduction} % -% Cette extension permet de construire des tableaux de variation (et de signes) +% 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} de Daniel Flipo et -% \textsf{variations} de Christian Obrecht ou, plus complexes, -% \textsf{tablor} de Guillaume Connan et \textsf{tkz-tab} de Alain Matthes.}, -% 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, +% \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\ pour -% définir un \emph{graphe} de \emph{nœuds} reliés par des flèches, +% (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 ici est d'utiliser la même syntaxe que les environnements +% 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 +% (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|, +% On a simplement besoin de préciser, dans une commande |\variations|, % ce qui est en haut et ce qui est en bas. % -% 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 \texttt{LaTeX + dvips + ps2pdf} ; -% pour l'option |tikz|, il faut compiler DEUX fois avec \texttt{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 supprimer le fichier |.aux|, sinon la compilation plante. +% \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). % -% Cette documentation donne une galerie d'exemples et décrit les commandes -% fournies. +% \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} % -% Un tableau de variation (ou de signes) se définit par un environnement |tablvar| +% % \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). @@ -151,8 +211,7 @@ %\end{tablvar} %\] % \begin{verbatim} -%\[ -%\begin{tablvar}{4} +%\[\begin{tablvar}{4} % \hline % x & -5 && -1 && 2 && 3 && 5 \\ % \hline @@ -161,191 +220,178 @@ % \variations{ \mil{f(x)} & \bas{0} && \haut{2} && \bas{1} && % \haut{4} && \bas{-3} } % \hline -%\end{tablvar} -%\] +%\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]{4.7cm} -%\[ -%\begin{tablvar}[4em]{1} -% \hline -% x & -5 && +\infty \\ -% \hline -% \variations{\mil{f(x)} & \haut{2} && \bas{-1}} -% \hline -%\end{tablvar} -%\] -% \end{minipage} +% 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| ne sont en fait que des alias d'une commande +% 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 -% 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|.} +% 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). -% 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)$, +% \medskip % \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.\\ -% \enlargethispage{1ex} -% \begin{minipage}[t]{7.4cm} -% \begin{verbatim} +% 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 & & \frac12 & & 1 \\ +% x & 0 & & \frac{1}{2} & & +\infty \\ % \hline % f'(x) & & + & 0 & - & \\ % \hline -% \variations{\mil{f(x)} & \bas{2} && -% \haut{f(\frac12)} && \bas{0} -% } +% \variations{\mil{f(x)} & \bas{2} && +% \haut{f(\frac{1}{2})} && \bas{0}} % \hline %\end{tablvar} -% \end{verbatim} -% \end{minipage} -% \begin{minipage}[t]{5.2cm} -%\[ +% \hspace{3.8em} %\begin{tablvar}{2} % \hline -% x & 0 & & \frac12 & & 1 \\ +% x & 0 & & \frac{1}{2} & & +\infty \\ % \hline % f'(x) & & + & 0 & - & \\ % \hline -% \variations{\mil{f(x)} & \bas{2} && -% \haut{f(\frac12)} && \bas{0} -% } +% \variations{\pos*{2}{f(x)} & \pos{3}{2} && +% \pos[t]{1}{f(\frac{1}{2})} && \pos{3}{0}} % \hline %\end{tablvar} %\] -% \end{minipage} -% \\ -% 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} +%\[\begin{tablvar}{2} % \hline -% x & 0 & & \frac12 & & 1 \\ +% x & 0 & & \frac{1}{2} & & +\infty \\ % \hline -% f'(x) & & + & 0 & - & \\ +% f'(x) & & + & 0 & - & \\ % \hline -% \variations{\pos*{2}{f(x)} & \pos{3}{2} & -% &\pos[t]{1}{f(\frac12)} && \pos{3}{0} -% } +% \variations{ \pos*{2}{f(x)} & \pos{3}{2} && +% \pos[t]{1}{f(\frac{1}{2}} && \pos{3}{0} } % \hline -%\end{tablvar} +%\end{tablvar}\] % \end{verbatim} -% \end{minipage} -% \begin{minipage}[t]{5.2cm} -%\[ -%\begin{tablvar}{2} +% \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 & 0 & & \frac12 & & 1 \\ +% x & -5 && +\infty \\ % \hline -% f'(x) & & + & 0 & - & \\ +% \variations[2]{ \mil{f(x)} & \haut{2} && +% \bas{-1} } % \hline -% \variations{\pos*{2}{f(x)} & \pos{3}{2} & -% &\pos[t]{1}{f(\frac12)} && \pos{3}{0} -% } +%\end{tablvar} \] +% \end{verbatim} +% \end{minipage} +% \begin{minipage}[t]{4.2cm} +%\[\begin{tablvar}[4em]{1} % \hline -%\end{tablvar} -%\] +% x & -5 && +\infty \\ +% \hline +% \variations[2]{\mil{f(x)} & \haut{2} && \bas{-1}} +% \hline +%\end{tablvar}\] % \end{minipage} +% \hypertarget{colvalwidth}{} % -% \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} +% \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 & -5 && 0 && 2 && 3 && 5 \\ +% x & 0 && 1 && 2 && 3 && 5 \\ % \hline -% \variations{ \pos*{2}{f(x)} & \pos{3}{-4} && \pos{2}{1} && \pos{2}{1} +% \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èche au milieu, on doit utiliser |\pos{2}| et non |\mil|. +%\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} -%\[ -% \renewcommand{\fleche}{\ncline[linewidth=0.3pt,arrowsize=2pt 3, -% arrowinset=0.5,nodesep=1.5pt]{->}} -%\begin{tablvar}{4} +%\[\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} -% } +% && \pos{1}{4} && \pos{3}{0} } % \hline -%\end{tablvar} -%\] +%\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} +% 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 && \makebox[2.5em]{$-1$} && -% \makebox[2.5em]{$\frac{3}{2}$} && +\infty \\ +% x & -\infty && -1 && \frac{3}{2} && +\infty \\ % \hline % x+1 & & - & \barre[0] & + & \barre & + & \\ % \hline @@ -353,21 +399,17 @@ % \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} -% } +% \variations{ \mil{\makecell{\mbox{Variations} \\ \mbox{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). +%\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} +%\[\begin{tablvar}{3} % \hline -% x & -\infty && \makebox[2.5em]{$-1$} && -% \makebox[2.5em]{$\frac{3}{2}$} && +\infty \\ +% x & -\infty && -1 && \frac{3}{2} && +\infty \\ % \hline % x+1 & & - & \barre[0] & + & \barre & + & \\ % \hline @@ -375,146 +417,144 @@ % \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} -% } +% \variations{ \mil{\makecell{\mbox{Variations} \\ \mbox{de }f}} & +% \haut{+\infty} && \bas{-14} && \haut{\frac{69}{4}} && \bas{-\infty} } % \hline -%\end{tablvar} -%\end{verbatim} +%\end{tablvar}\] +% \end{verbatim} % -% \subsection{Doubles barres et discontinuités} +% \subsection{Doubles barres, discontinuités et limites} % -% Une double barre s'obtient avec la commande |\bb|. \DescribeMacro{\bb} -% Pour ne pas tracer de flèche entre deux nœuds (en particulier pour éviter -% de traverser une double barre), on place la -% commande |\discont| entre les deux. \DescribeMacro{\discont} -%\[ -%\begin{tablvar}{2} -% \hline -% x & -\infty && 0 && +\infty \\ +% \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 -% -\frac{1}{x} & & + & \bb & - & \\ +% x & -\infty && 0 && +\infty \\ % \hline -% \variations{ \mil{\dfrac{1}{x^2}} & \bas{0} && \haut{+\infty} \bb -% \discont \haut{+\infty} && \bas{0} -% } +% \variations{\mil{\e^{\frac{1}{x}}} & \haut{1} && +% \bas{0} \pos*{2}{\bb} \discont \haut{+\infty} && \bas{1} } % \hline -%\end{tablvar} -%\] -% La commande |\dfrac| provient de l'extension \textsf{amsmath} ou peut être redéfinie -% par |\newcommand*\dfrac[2]{{\displaystyle\frac{#1}{#2}}}|. -% -% \smallskip +%\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} +%\[\begin{tablvar}{2} % \hline -% x & -\infty && 0 && +\infty \\ +% x & -\infty && 0 && +\infty \\ % \hline -% -\frac{1}{x} & & + & \bb & - & \\ +% \variations{\mil{\e^{\frac{1}{x}}} & \haut{1} && +% \bas{0} \pos*{2}{\bb} \discont \haut{+\infty} && \bas{1} } % \hline -% \variations{ \mil{\dfrac{1}{x^2}} & \bas{0} && \haut{+\infty} \bb -% \discont \haut{+\infty} && \bas{0} -% } -% \hline -%\end{tablvar} +%\end{tablvar}\] % \end{verbatim} % -% \vspace{-1ex} -% 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} +% \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 && -1 && 0 && 1 && +\infty \\ +% x & -\infty && 0 && +\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} -% } +% -\frac{1}{x} & & + & \bb & - & \\ % \hline -%\end{tablvar} -%\] +% \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}[3em]{4} +%\[\begin{tablvar}[firstcolsep=10pt,intervalwidth=4em]{2} % \hline -% x & -\infty && -1 && 0 && 1 && +\infty \\ +% x & -\infty && 0 && +\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} -% } +% -\frac{1}{x} & & + & \bb & - & \\ % \hline -%\end{tablvar} +% \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} -% 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} +% \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. -% Elle trace la double barre, place les limites et gère la discontinuité. -%\[ -%\begin{tablvar}[2em]{4} +% 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} -% } +% \bblim{1}{+\infty}{3}{-\infty} && \haut{0} } % \hline -%\end{tablvar} -%\] +%\end{tablvar}\] % \begin{verbatim} -%\begin{tablvar}[2em]{4} +%\[\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} -% } +% \bblim{1}{+\infty}{3}{-\infty} && \haut{0} } % \hline -%\end{tablvar} +%\end{tablvar}\] % \end{verbatim} +% \hypertarget{bordercolsep}{}\hypertarget{limsep}{} % -% Un autre exemple avec des limites de largeur assez différentes (placées ici sur la même ligne). -%\[ -%\begin{tablvar}{3} +% \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 & 0 & & \frac{\pi}{6} & & \frac{\pi}{2} & & \pi \\ +% x & -\infty && 0 && 1 && +\infty \\ % \hline -% f'(x) & & + & 0 & \hspace{1em} - & \bb & \hspace{-1em} - & \\ +% f'(x) & & + & \bb & - & 0 & + & \\ % \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)} -% } +% \variations{ \mil{x\e^{\frac{1}{x}}} & \bas{-\infty} && +% \bblim{1}{0}{1}{+\infty} && \bas{\e} & & \haut{+\infty} } % \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. +%\end{tablvar}\] % \begin{verbatim} -%\begin{tablvar}{3} +%\[\begin{tablvar}[bordercolsep=4pt,limsep=3pt]{3} % \hline -% x & 0 & & \frac{\pi}{6} & & \frac{\pi}{2} & & \pi \\ +% x & -\infty && 0 && 1 && +\infty \\ % \hline -% f'(x) & & + & 0 & \hspace{1em} - & \bb & \hspace{-1em} - & \\ +% f'(x) & & + & \bb & - & 0 & + & \\ % \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)} -% } +% \variations{ \mil{x\e^{\frac{1}{x}}} & \bas{-\infty} && +% \bblim{1}{0}{1}{+\infty} && \bas{\e} & & \haut{+\infty} } % \hline -%\end{tablvar} +%\end{tablvar}\] % \end{verbatim} % % L'environnement |tablvar*| \DescribeEnv{tablvar*} @@ -522,790 +562,1277 @@ % 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. +% la première et à droite pour la dernière. % -%\[ -%\begin{tablvar*}{2} +%\[\begin{tablvar*}{2} % \hline % x & 0 && 1 && +\infty \\ % \hline -% \variations{ \mil{\ln x -x} & \bb \pos{3}{-\infty} && \pos{1}{-1} && -% \pos{3}{-\infty} } +% \variations{ \mil{\ln x -x} & \bb\limd{3}{-\infty} && \haut{-1} && +% \bas{-\infty} } % \hline %\end{tablvar*} -%\qquad +%\quad %\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} } +% \bas{-\infty} && \haut{-1} && \bas{-\infty} } % \hline -%\end{tablvar*} -%\] +%\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} +%\[\begin{tablvar*}{2} % \hline % x & 0 && 1 && +\infty \\ % \hline -% \variations{ \mil{\ln x -x} & \bb \pos{3}{-\infty} && \pos{1}{-1} && -% \pos{3}{-\infty} } +% \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} -% \pos{3}{-\infty} && \pos{1}{-1} && \pos{3}{-\infty} } +% \bas{-\infty} && \haut{-1} && \bas{-\infty} } % \hline -%\end{tablvar*} +%\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} +% \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*}[3em]{1} +%\[\begin{tablvar}[extleft,intervalwidth=4em]{1} % \hline % x & 0 && +\infty \\ % \hline % \variations{ \mil{1-\dfrac{1}{x}} & \bb -% \bas{-\infty} && \haut{1\hspace{0.5em}} -% } +% \limd{3}{-\infty} && \haut{1} } % \hline -%\end{tablvar*} +%\end{tablvar}\] % \end{verbatim} % \end{minipage} % \begin{minipage}[t]{5cm} -%\[ -%\begin{tablvar*}[3em]{1} +%\[\begin{tablvar}[extleft,intervalwidth=4em]{1} % \hline % x & 0 && +\infty \\ % \hline % \variations{ \mil{1-\dfrac{1}{x}} & \bb -% \bas{-\infty} && \haut{1\hspace{0.5em}} -% } +% \limd{3}{-\infty} && \haut{1} } % \hline -%\end{tablvar*} -%\] +%\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. +% 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 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 +% 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*}[5em]{1} +%\[\begin{tablvar*}[6em]{1} % \hline % x & 0 & \vr{1} & +\infty \\ % \hline % \variations{ \mil{\ln x} & -% \bb \pos{3}{-\infty} & -% \vr{0} & \pos{1}{+\infty} } +% \bb \limd{3}{-\infty} & \vr{0} & +% \pos[t]{1}{+\infty} } % \hline -%\end{tablvar*} +%\end{tablvar*}\] % \end{verbatim} % \end{minipage} % \begin{minipage}[t]{5cm} -%\[ -%\begin{tablvar*}[5em]{1} +%\[\begin{tablvar*}[6em]{1} % \hline % x & 0 & \vr{1} & +\infty \\ % \hline % \variations{ \mil{\ln x} & -% \bb \pos{3}{-\infty} & -% \vr{0} & \pos{1}{+\infty} } +% \bb \limd{3}{-\infty} & \vr{0} & +% \pos[t]{1}{+\infty} } % \hline -%\end{tablvar*} -%\] +%\end{tablvar*}\] % \end{minipage} % % Un autre exemple avec deux valeurs remarquables, placées cette fois -% dans des colonnes valeurs. -%\[ -%\renewcommand{\tablvarstretch}{1.2} -%\begin{tablvar}[1.5em]{3} +% 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]{ \pos*{2}{\vdecal{-1.5ex}{\exp x}} & \pos{4}{0} && -% \vr[3]{1} && \vr{\mathrm{e}} && \pos{1}{+\infty} -% } +% \variations[4]{ \mil{\exp x} & \bas{0} && +% \vr[3]{1} && \vr{\e} && \haut{+\infty} } % \hline -%\end{tablvar} -%\] +%\end{tablvar}\] % \begin{verbatim} -%\renewcommand{\tablvarstretch}{1.2} -%\begin{tablvar}[1.5em]{3} +%\[\begin{tablvar}[stretch=1.2,intervalwidth=1em]{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} -% } +% \variations[4]{ \mil{\exp x} & \haut{0} && +% \vr[3]{1} && \vr{\e} && \bas{+\infty} } % \hline -%\end{tablvar} +%\end{tablvar}\] % \end{verbatim} -% \vspace{-2ex} -% \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).\\ +% +% \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 (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.4 par défaut), modification locale -% car placée à l'intérieur de l'environnement math -% \footnote{On peut utiliser ce paramètre pour agrandir la hauteur des lignes -% mais l'effet sera global pour tout le tableau. Si l'on souhaite agrandir -% spécifiquement une ligne on peut utiliser la commande \texttt{\bslash vstrut} -% de l'extension \textsf{spacingtricks}. Malheureusement un ajustement automatique -% comme proposé dans l'extension \textsf{arraycols} ne fonctionne pas, -% à cause des doubles barres.}.\\ -% \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). +% 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 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. +% 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. -% 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} +% 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} && \alpha_2 && \frac{\pi}{2}\\ +% 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})} && \pos{2}{0} &&\pos[b]{3}{-\infty}\bb -% } +% \pos[t]{1}{f(\frac{\pi}{6})} && \posvr{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 +%\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*}{4} +%\[\begin{tablvar}[extright,intervalwidth=2em]{4} % \hline -% x & 0 && \vr{\alpha_1} && \frac{\pi}{6} && \alpha_2 && \frac{\pi}{2}\\ +% 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 -% } +% \pos[t]{1}{f(\frac{\pi}{6})} && \posvr{2}{0} && +% \pos[b]{3}{-\infty}\bb } % \hline -%\end{tablvar*} +%\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, voir l'exemple ci-dessous avec la fonction définie par -%\[ -%f(x)=\left\{ +% 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]{7.5cm} +%\right. .\] +% \begin{minipage}[t]{6.5cm} % \begin{verbatim} -%\begin{tablvar}{2} +%\[\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} -% } +% \limg{1}{1}\hspace{2pt}\discont +% \vr[3]{0}\hspace{2pt}\limd{1}{1} +% && \bas{0} } % \hline -%\end{tablvar} +%\end{tablvar}\] % \end{verbatim} % \end{minipage} -% \begin{minipage}[t]{5cm} -%\[ -%\begin{tablvar}{2} +% \hfill +% \begin{minipage}[t]{5.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} -% } +% \limg{1}{1}\hspace{2pt}\discont +% \vr[3]{0}\hspace{2pt}\limd{1}{1} +% && \bas{0} } % \hline -%\end{tablvar} -%\] +%\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\ieme\ tableau, mais on peut le faire \og à la main\fg{} -% en appelant les macros |\noeud| et |\vrconnect|. +% Voici un dernier exemple, avec deux tableaux conjoints. % -%\[ -%\begin{tablvar}{4} +%\[\begin{tablvar}{4} % \hline -% x & 0 && \noeud{X1}{\frac{\pi}{2}} && \noeud{X2}{\pi} && -% \noeud{X3}{\frac{3\pi}{2}} && 2\pi \\ +% 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} && \haut{\noeud{Y1}{1}} && -% \mil{\noeud{Y2}{0}} && \bas{\noeud{Y3}{-1}} && \haut{0} } +% \variations{ \mil{\sin x} & \bas{0} && \posvr{1}{1} && +% \vr{0} && \posvr{3}{-1} && \haut{0} } % \hline -%\end{tablvar} -%\vrconnect{X1}{Y1} -%\vrconnect{X2}{Y2} -%\vrconnect{X3}{Y3} -%\] +%\end{tablvar}\] % \begin{verbatim} -%\begin{tablvar}{4} +%\[\begin{tablvar}{4} % \hline -% x & 0 && \noeud{X1}{\frac{\pi}{2}} && \noeud{X2}{\pi} && -% \noeud{X3}{\frac{3\pi}{2}} && 2\pi \\ +% 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} && \haut{\noeud{Y1}{1}} && -% \mil{\noeud{Y2}{0}} && \bas{\noeud{Y3}{-1}} && \haut{0} } +% \variations{ \mil{\sin x} & \bas{0} && \posvr{1}{1} && +% \vr{0} && \posvr{3}{-1} && \haut{0} } % \hline -%\end{tablvar} -%\vrconnect{X1}{Y1} -%\vrconnect{X2}{Y2} -%\vrconnect{X3}{Y3} +%\end{tablvar}\] % \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. +% 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 -% 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}{\strut\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} -% } +% \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 -%\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 1\ier\ 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.\\ -% La deuxième ligne avec la racine cubique a été agrandie grâce à la commande \LaTeX\ |\strut|. -% 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} +% x & -\infty & & -1 & & 1 & & +\infty \\ +% \hline +% f'(x) && \hspace{-0.5em} + & \bb & \ZI & \bb & - & \\ % \hline -% x & -\infty && \zbox{-1} && \zbox{1} && +\infty \\ +% \variations{ \pos*{2}{\sqrt{\dfrac{x-1}{x+1}}} +% & \bas{1} && \limg{1}{+\infty} \bb & \ZI +% & \bas{0} \barre && \haut{1} } % \hline -% -\frac{x}{\strut\sqrt{x^2-1}^3} && \hspace{-1.5em} + & \bb & \ZIc & -% \bb & \hspace{1.5em} - & \\ +%\end{tablvar}\] +% +% \begin{verbatim} +%\[\begin{tablvar}{3} % \hline -% \variations{\mil{\dfrac{1}{\sqrt{x^2-1}}} & \bas{0} && -% \zbox[r]{\haut{+\infty}} \bb & \ZIc & -% \bb \zbox[l]{\haut{+\infty}} && \bas{0} -% } +% x & -\infty & & -1 & & 1 & & +\infty \\ +% \hline +% f'(x) && \hspace{-0.5em} + & \bb & \ZI & \bb & - & \\ % \hline -%\end{tablvar} +% \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} % -% 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} +% \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 && \zbox{-\frac{\sqrt{2}}{2}} && -% \zbox{\frac{\sqrt{2}}{2}} && +\infty \\ +% x & -\infty && -1 && 1 && +\infty \\ % \hline -% \frac{2x}{\sqrt{2x^2-1}} && - & \bb & \ZIc & \bb & + & \\ +% -\frac{x}{\strut\sqrt{x^2-1}^3} && + & \bb & \ZI & \bb & - & \\ % \hline -% \variations{\mil{\sqrt{2x^2-1}} & \haut{+\infty} && \zbox[r]{\bas{0}} -% & \ZIc & \zbox[l]{\bas{0}} && \haut{+\infty} -% } +% \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{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}[3em]{3} +%\[\begin{tablvar}[ZItype=c,intervalwidth=3.5em]{3} % \hline -% x & -\infty && \zbox{-\frac{\sqrt{2}}{2}} && -% \zbox{\frac{\sqrt{2}}{2}} && +\infty \\ +% x & -\infty && -1 && 1 && +\infty \\ % \hline -% \frac{2x}{\sqrt{2x^2-1}} && - & \bb & \ZIc & \bb & + & \\ +% -\frac{x}{\strut\sqrt{x^2-1}^3} && + & \bb & \ZI & \bb & - & \\ % \hline -% \variations{\mil{\sqrt{2x^2-1}} & \haut{+\infty} && \zbox[r]{\bas{0}} -% & \ZIc & \zbox[l]{\bas{0}} && \haut{+\infty} -% } +% \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{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.} % -% \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} +%\[\begin{tablvar}[ZItype=c,ZIcolor=green,ZIaddwidth=1pt]{3} % \hline -% x & -\infty & & \zbox{-\frac{\sqrt{2}}{2}}& & -% \zbox{\frac{\sqrt{2}}{2}} & & +\infty \\ +% x & -\infty && -\frac{\sqrt{2}}{2} && \frac{\sqrt{2}}{2} && +\infty \\ % \hline -% f'(x) & & - & \bb & \ZIh & \bb & + & \\ +% \frac{2x}{\sqrt{2x^2-1}} \cstrut{2.5ex} && - & \bb & \ZI & \bb & + & \\ % \hline -% \variations{\mil{f(x)} & \haut{+\infty} && \bas{0} & -% \ZIh & \bas{0} && \haut{+\infty} -% } +% \variations{ \mil{\sqrt{2x^2-1}} & \haut{+\infty} && \bas{0} \barre +% & \ZI & \bas{0} \barre && \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. +%\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}{3} +%\[\begin{tablvar}[ZItype=c,ZIcolor=green,ZIaddwidth=1pt]{3} % \hline -% x & -\infty && \zbox{-\frac{\sqrt{2}}{2}} && -% \zbox{\frac{\sqrt{2}}{2}} & & +\infty \\ +% x & -\infty && -\frac{\sqrt{2}}{2} && \frac{\sqrt{2}}{2} && +\infty \\ % \hline -% f'(x) && - & \bb & \ZIh & \bb & + & \\ +% \frac{2x}{\sqrt{2x^2-1}} \cstrut{2.5ex} && - & \bb & \ZI & \bb +% & + & \\ % \hline -% \variations{\mil{f(x)} & \haut{+\infty} && \bas{0} & -% \ZIh & \bas{0} && \haut{+\infty} } +% \variations{ \mil{\sqrt{2x^2-1}} & \haut{+\infty} && \bas{0} \barre +% & \ZI & \bas{0} \barre && \haut{+\infty} } % \hline -%\end{tablvar} +%\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} +% 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 & &\zbox{-1} &&\zbox{1} & & +\infty \\ -% \hline -% f'(x) && \hspace{-1em} + & \bb & \ZIh & \bb & \hspace{1em} - & \\ +% x & -\infty && -1 && 0 && 1 && +\infty \\ % \hline -% \variations{ \mil{\sqrt{\dfrac{x-1}{x+1}}} -% & \bas{1} && \zbox[r]{\haut{+\infty}} \bb & \ZIh[2ex] -% & \zbox{\bas{0}} \barre && \haut{1} -% } +% \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} -%\] -% 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. +%\end{tablvar}\] % \begin{verbatim} -%\begin{tablvar}[3.5em]{3} +%\[\begin{tablvar}[4em]{4} % \hline -% x & -\infty & &\zbox{-1} && \zbox{1} && +\infty \\ -% \hline -% f'(x) && \hspace{-1em} + & \bb & \ZIh & \bb & \hspace{1em} - & \\ +% x & -\infty && -1 && 0 && 1 && +\infty \\ % \hline -% \variations{ \mil{\sqrt{\dfrac{x-1}{x+1}}} -% & \bas{1} && \zbox[r]{\haut{+\infty}} \bb & \ZIh[2ex] -% & \zbox{\bas{0}} \barre && \haut{1} -% } +% \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{tablvar}\] % \end{verbatim} % -% Voici un exemple avec deux zones interdites. On considère la fonction $f$ telle que -% $f(x)= \sqrt{(x^2-1)(x^2-4)}$. -%{ \footnotesize -%\[ -%\begin{tablvar}{6} +% 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 && \zbox{-2} && \zbox{-1} && 0 && \zbox{1} && \zbox{2} -% && +\infty \\ +% x & -\infty && -2 && -1 && 0 && 1 && 2 && +\infty \\ % \hline -% 2x & &-& \barre & \ZIh &\barre &-& \barre[0] &+& \barre && \barre &+&\\ +% x & &-& \barre & \ZI & \barre &-& \barre[0] &+& \barre & \ZI & \barre &+& \\ % \hline -% 2x^2-5 & &+& \barre & \ZIh & \barre &-& \barre &-& \barre && +% 2x^2-5 & &+& \barre & \ZI & \barre &-& \barre &-& \barre & \ZI & % \barre &+& \\ % \hline -% f'(x) & &-& \bb & \ZIh & \bb &+& \barre[0] &-& \bb && \bb &+& \\ +% f'(x) & &-& \bb & \ZI & \bb &+& \barre[0] &-& \bb & \ZI & \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} -% } +% \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{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} +%{ \small \[\begin{tablvar}[2em]{6} % \hline -% x & -\infty && \zbox{-2} && \zbox{-1} && 0 && \zbox{1} && \zbox{2} -% && +\infty \\ +% x & -\infty && -2 && -1 && 0 && 1 && 2 && +\infty \\ % \hline -% 2x & &-& \barre & \ZIh &\barre &-& \barre[0] &+& \barre && \barre &+&\\ +% x & &-& \barre & \ZI & \barre &-& \barre[0] &+& \barre & \ZI & +% \barre &+& \\ % \hline -% 2x^2-5 & &+& \barre & \ZIh & \barre &-& \barre &-& \barre && +% 2x^2-5 & &+& \barre & \ZI & \barre &-& \barre &-& \barre & \ZI & % \barre &+& \\ % \hline -% f'(x) & &-& \bb & \ZIh & \bb &+& \barre[0] &-& \bb && \bb &+& \\ +% f'(x) & &-& \bb & \ZI & \bb &+& \barre[0] &-& \bb & \ZI & \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} -% } +% \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{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). +% \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}{6} +%\[ \begin{tablvar}[intervalwidth=1.8em,ZIaddwidth=1pt]{8} % \hline -% x & -\infty && \zbox{-2} && \zbox{-1} && 0 && \zbox{1} && \zbox{2} -% && +\infty \\ +% x & -\infty && -2 && -\sqrt{\frac{5}{2}} && -1 +% && 0 && 1 && \sqrt{\frac{5}{2}} && 2 && +\infty \\ % \hline -% 2x & &-& \barre && \barre &-& \barre[0] &+& \barre && -% \barre{} &+& \ZIh \\ +% 2x & &-& \barre &-& \barre &-& \barre &-& \barre[0] &+& +% \barre &+& \barre &+& \barre &+& \\ % \hline -% 2x^2-5 & &+& \barre & & \barre &-& \barre &-& \barre && -% \barre{} &+& \ZIh \\ +% 2x^2-5 & &+& \barre &+& \barre[0] &-& \barre &-& \barre &-& +% \barre &-& \barre[0] &+& \barre &+& \\ % \hline -% f'(x) & &-& \bb & \ZIh* & \bb &+& \barre[0] &-& \bb & \ZIh* & \bb &+&\\ +% f'(x) & &-& \bb & \ZI & \barre & \ZI & \bb &+& +% \barre[0] &-& \bb & & & & \bb & + & \\ % \hline -%\end{tablvar} -%\] -%} +% \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} -%\begin{tablvar}{6} +%{ \footnotesize +%\[ \begin{tablvar}[intervalwidth=1.8em,ZIaddwidth=1pt]{8} % \hline -% x & -\infty && \zbox{-2} && \zbox{-1} && 0 && \zbox{1} && \zbox{2} -% && +\infty \\ +% x & -\infty && -2 && -\sqrt{\frac{5}{2}} && -1 +% && 0 && 1 && \sqrt{\frac{5}{2}} && 2 && +\infty \\ % \hline -% 2x & &-& \barre & & \barre &-& \barre[0] &+& \barre && -% \barre{} &+& \ZIh \\ +% 2x & &-& \barre &-& \barre &-& \barre &-& \barre[0] &+& +% \barre &+& \barre &+& \barre &+& \\ % \hline -% 2x^2-5 & &+& \barre & & \barre &-& \barre &-& \barre && -% \barre{} &+& \ZIh \\ +% 2x^2-5 & &+& \barre &+& \barre[0] &-& \barre &-& \barre &-& +% \barre &-& \barre[0] &+& \barre &+& \\ % \hline -% f'(x) & &-& \bb & \ZIh* & \bb &+& \barre[0] &-& \bb & \ZIh* & \bb &+&\\ +% f'(x) & &-& \bb & \ZI & \barre & \ZI & \bb &+& +% \barre[0] &-& \bb & & & & \bb & + & \\ % \hline -%\end{tablvar} +% \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} % -% 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} +% \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 && \zbox{-1}\phantom{0} && \zbox[l]{1}\phantom{0} && 2 && -% +\infty \\ -% \hline -% \sqrt{x^2-1} && + & \barre[0] & \ZIh* & \barre[0] & + & \barre & + &\\ +% x & -\infty && -1 && 1 && 2 && +\infty \\ % \hline % x-2 && - & \barre & - & \barre & - & \barre[0] & + & \\ % \hline -% (x-2)\sqrt{x^2-1} && - & \barre[0] & \ZIinit\ZIh* & \barre[0] & - & +% \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} -%\] -% \smallskip +%\end{tablvar}\] % \begin{verbatim} -%\begin{tablvar}{4} +%\[\begin{tablvar}{4} +% \hline +% x & -\infty && -1 && 1 && 2 && +\infty \\ +% \hline +% x-2 && - & \barre & - & \barre & - & \barre[0] & + & \\ % \hline -% x & -\infty && \zbox{-1}\phantom{0} && \zbox[l]{1}\phantom{0} && 2 && -% +\infty \\ +% \sqrt{x^2-1} && + & \barre[0] & \ZI & \barre[0] & + & \barre & + & \\ % \hline -% \sqrt{x^2-1} && + & \barre[0] & \ZIh* & \barre[0] & + & \barre & + &\\ +% (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] & \ZIinit\ZIh* & \barre[0] & - & +% (x-2)\sqrt{x^2-1} && - & \barre[0] & \ZI* & \barre[0] & - & % \barre[0] & + & \\ % \hline -%\end{tablvar} +%\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} -% \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). +% +% \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{\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. +% \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}. % -%{ \footnotesize -%\[ -%\begin{tablvar}{8} +% \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 && \zbox{-2} && \zbox{-\sqrt{\frac{5}{2}}} && \zbox{-1} -% && 0 && 1 && \zbox{\sqrt{\frac{5}{2}}} && 2 && +\infty \\ +% x & -\infty && -2 && 0 && +\infty \\ % \hline -% 2x & &-& \barre &-& \barre &-& \barre &-& \barre[0] &+& -% \barre &+& \barre &+& \barre &+& \\ +% -\frac{x+2}{x^4} && - & \barre[0] & + & \bb & - & \\ % \hline -% 2x^2-5 & &+& \barre &+& \barre[0] &-& \barre &-& \barre &-& -% \barre &-& \barre[0] &+& \barre &+& \\ +% \variations{\mil{\e^{\frac{x+1}{x^2}}} & \haut{1} && \bas{\e^{-\frac{1}{4}}} +% && \bblim{1}{+\infty}{1}{+\infty} && \bas{1} } % \hline -% f'(x) & &-& \bb & & \hachure{-4em,-12.8ex}{4em,2.6ex} & & \bb &+& -% \barre[0] &-& \bb & & & & \bb & + & \\ +%\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 -% \variations{\mil{f(x)} & \haut{+\infty} && \bas{0} \discont && && -% \bas{0} && \haut{2} && \bas{0} \discont && -% \pos*{3}{\hachure{-4em,14.3ex}{4em,-1.2ex}} && \bas{0} && -% \haut{+\infty} -% } +% x & -\infty && -2 && 0 && +\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. +% -\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{tablvar}{8} +%\[\begin{tabvar}{|C|CCCCR|} % \hline -% x & -\infty && \zbox{-2} && \zbox{-\sqrt{\frac{5}{2}}} && \zbox{-1} -% && 0 && 1 && \zbox{\sqrt{\frac{5}{2}}} && 2 && +\infty \\ +% x & 0 & & \frac{1}{2} & & 1 \\ % \hline -% 2x & &-& \barre &-& \barre &-& \barre &-& \barre[0] &+& -% \barre &+& \barre &+& \barre &+& \\ +% f’(x) && + & \barre{0} & - & \\ % \hline -% 2x^2-5 & &+& \barre &+& \barre[0] &-& \barre &-& \barre &-& -% \barre &-& \barre[0] &+& \barre &+& \\ +% \niveau{1}{2}\TVcenter{f(x)} & 0 & \croit +% & \frac{1}{4} & \decroit & 0 \\ % \hline -% f'(x) & &-& \bb & &\hachure{-4em,-12.8ex}{4em,2.6ex} & & \bb &+& -% \barre[0] &-& \bb & & & & \bb & + & \\ +%\end{tabvar}\] +% \end{verbatim} +% \end{minipage} +% \begin{minipage}[t]{5cm} +%\[\begin{tabvar}{|C|CCCCR|} % \hline -% \variations{\mil{f(x)} & \haut{+\infty} && \bas{0} \discont && && -% \bas{0} && \haut{2} && \bas{0} \discont && -% \pos*{3}{\hachure{-4em,14.3ex}{4em,-1.2ex}} && \bas{0} && -% \haut{+\infty} -% } +% x & 0 & & \frac{1}{2} & & 1 \\ % \hline -%\end{tablvar} +% 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} % -% \pagebreak +%\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} +% \subsection{Extensions requises et options du package} % % \begin{macrocode} \RequirePackage{array} \RequirePackage{ifthen} \RequirePackage{multido} -\RequirePackage{colortbl} % pour \ZIc +\RequirePackage{xkeyval} +\RequirePackage{ifpdf} -\newboolean{tikz} -\DeclareOption{tikz}{\setboolean{tikz}{true}} -\DeclareOption{pstricks}{\setboolean{tikz}{false}} % valeur par défaut +\newif\iftv@tikz % false par défaut +\DeclareOption{tikz}{\tv@tikztrue} +\newif\iftv@pstricks +\DeclareOption{pstricks}{\tv@pstrickstrue} \ProcessOptions \relax -\ifthenelse{\boolean{tikz}}{ +\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} - \newlength{\tikznode@below} - }{ + \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} +% \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, -% mais qui n'ont en principe pas besoin d'être touchés. +% 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 à 2.5~em. +% valeur prédéfinie à \texttt{3em}. % \begin{macrocode} \newlength{\intervalwidth} -\setlength{\intervalwidth}{2.5em} % largeur des "intervalles" +\setlength{\intervalwidth}{3em} % 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{macro}{\colvalwidth} +% Définit la largeur des colonnes de valeurs, +% valeur prédéfinie à \texttt{2em}. % \begin{macrocode} -\newlength{\bordercolsep} % largeur de l'espace inter-colonne -\setlength{\bordercolsep}{2pt} +\newlength{\colvalwidth} +\setlength{\colvalwidth}{2em} % largeur des colonnes de valeurs % \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{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{\innercolsep} -\setlength{\innercolsep}{4pt} +\newlength{\firstcolsep} +\setlength{\firstcolsep}{5pt} % valeur LaTeX par défaut % \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{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} -\newcounter{maxdiscont} -\setcounter{maxdiscont}{3} % nb max de discontinuités +\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 1.4 (1 correspondant +% des lignes du tableau. La valeur par défaut est \texttt{1.6} (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.4} +\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 : 0.5~pt par défaut. +% 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} -% \subsection{Les commandes graphiques PSTricks/\tikz} +% \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, @@ -1314,59 +1841,61 @@ % (plus précisément liées à l'extension \textsf{pst-node}). % % \begin{macro}{\fleche} -% La commande \cmd{\fleche}\marg{noeud1}\marg{noeud2} possède deux paramètres +% 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 réalisé automatiquement par la commande |\variations|. -% Pour modifier l'aspect des flèches on peut redéfinir la commande. +% 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]{ - \ifthenelse{\boolean{tikz}}{ + \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{noeud1}\marg{noeud2} +% 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 : lignes en pointillés d'épaisseur 1\,pt. +% Par défaut, les lignes sont en pointillés d'épaisseur \texttt{1pt}. % \begin{macrocode} \newcommand*{\vrconnect}[2]{ - \ifthenelse{\boolean{tikz}}{ - \tikz[remember picture,overlay]{\draw[dotted,line width=1pt] + \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{noeud}\marg{valeur} +% \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), +% 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 (sans effet pour |tikz|) ; +% 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]{ - \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 - }{ + \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} @@ -1376,16 +1905,36 @@ % 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. +% 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]{ - \ifthenelse{\boolean{tikz}}{ - \tikz[remember picture,overlay]{\fill[pattern=north east lines] + \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} @@ -1393,15 +1942,16 @@ % \subsection{Longueurs et compteurs internes} % % \begin{macrocode} -\newcounter{ligne} % numéro de ligne -\newcounter{noeud} % numéro du nœud +\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 $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} @@ -1412,122 +1962,243 @@ } % \end{macrocode} -% Longueurs et compteurs pour la commande |\ZIh|. +% 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{ZI} % numéro de la ZI -\newcounter{ZIstar} % numéro de ZI pour la commande \ZI* -\newcounter{ZIvarlignes} % dernière ligne des variations +\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*}} % -% Grâce à l'extension \textsf{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} % \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| ou |tablvar*|. +% 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 -% dans l'environnement |tablvar|. +% à 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}{ +\newcommand*{\tablvarinit}[1]{ \setlength{\extrarowheight}{0pt} % paramètre de l'extension array - \renewcommand{\arraystretch}{\tablvarstretch} - \setcounter{ligne}{0} + \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 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|. +% 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}[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 +\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{environment}{tablvar} -% L'environnement |tablvar| : |\begin{tablvar}|\oarg{width}\marg{nbintervals}. -% Le 1\ier\ paramètre (optionnel) permet de régler la largeur des colonnes -% intervalles (définie par |\intervalwidth| -% par défaut), le 2\ieme\ 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{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} de Josselin Noirel -% ne fonctionne pas ici : les double-barres ne sont pas correctement dessinées.}. +% 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} -\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}} +\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{environment} +% \end{macro} -% \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{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} -\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} +\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}{% - |c|@{\hspace{\bordercolsep}}% - l@{\hspace{\innercolsep}}% - i{#1}@{\hspace{\innercolsep}}% + |@{\hspace{\firstcolsep}}% + A@{\hspace{\firstcolsep}}% + |@{\hspace{\bordercolsep}}% + B@{\hspace{\innercolsep}}% + i@{\hspace{\innercolsep}}% *{\value{nb@intervals}}{ - c@{\hspace{\innercolsep}}% - i{#1}@{\hspace{\innercolsep}}% + v{c}@{\hspace{\innercolsep}}% + i@{\hspace{\innercolsep}}% }% - r@{\hspace{\bordercolsep}}|% + 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}} % -% C'est ici qu'est la magie ! -% % \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 de variations doit subir un traitement particulier). -% Nous avons créé une variante de |\multido| (du package \textsf{multido}) car +% (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. @@ -1544,48 +2215,50 @@ % \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|, +% 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 |ligne| correspond à l'argument de ligne de |\pos|.\\ +% 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 !? +% 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{ligne}{0} % nécessaire pour 2 parties variations + \setcounter{nbvarlignes}{#1} + \setcounter{var@ligne}{0} \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 \varloop{#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é + \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{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{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}{\thenoeud}{ + \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} + \fleche{N\Ix}{N\Iy} } } % tracé des pointillés pour les valeurs remarquables - \multido{\Ix=1+1}{\thenumvr}{\vrconnect{X\Ix}{Y\Ix}} + \multido{\Ix=1+1}{\thenumvr}{\vrconnect{X\Ix}{Y\Ix}} \\ % dernier retour ligne du tableau } % \end{macrocode} @@ -1593,105 +2266,173 @@ % \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|). +% \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.\\ -% \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. +% est utilisé pour le positionnement des flèches. +% La macro |\valpos| sert de macro sous-jacente à la macro |\pos|. % \begin{macrocode} -\newcommand*{\@pos}[3][c]{ - \stepcounter{noeud} - \ifthenelse{\theligne=#2}{ - \noeud[#1]{N\thenoeud}{#3} +\newcommand*{\valpos}[3][c]{ + \stepcounter{var@noeud} + \ifthenelse{\thevar@ligne=#2}{ + \noeud[#1]{N\thevar@noeud}{#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{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*{\haut}{\pos{1}} +\newcommand*{\zbox}[2][c]{\makebox[0pt][#1]{$#2$}} % \end{macrocode} % \end{macro} -% \begin{macro}{\bas} -% \cmd{\bas}\marg{valeur} = \cmd{\pos}|{3}|\marg{valeur}. +% \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*{\bas}{\pos{3}} +\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} -% \end{macro} -% \begin{macro}{\mil} -% \cmd{\mil}\marg{valeur} = \cmd{\pos*}|{2}|\marg{valeur}. +% 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*{\mil}{\pos*{2}} +\newcommand*{\haut}{\pos{1}} % \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{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*{\zbox}[2][c]{\makebox[0pt][#1]{$#2$}} +\newcommand*{\bas}{\pos{\value{nbvarlignes}}} % \end{macrocode} % \end{macro} % \begin{macro}{\vdecal} -% Décalage vertical : \cmd{\vdecal}\marg{decal}\marg{contenu}, +% 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. +% 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} -% \subsection{Barres, discontinuités et valeurs remarquables} -% -% \begin{macro}{\bb} -% La macro |\bb|, qui produit une double barre, -% provient de l'extension \textsf{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{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*{\bb}{\kern1pt\vrule\kern1pt\vrule\kern1pt} +\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 général, on met 0 comme argument optionnel. +% |\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} - \vrule width \tvbarrewidth -} +\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). @@ -1699,46 +2440,39 @@ % et le nœud suivant ne sera pas tracée. % \begin{macrocode} \newcommand*{\discont}{ - \ifthenelse{\theligne=1}{ + \ifthenelse{\thevar@ligne=1}{ % on ne compte les discontinuités qu'une seule fois, sur ligne 1 - \stepcounter{numdiscont} - \setcounter{discont\thenumdiscont}{\thenoeud} - }{} - } + \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 correctement des limites à gauche et à droite -% d'une double barre en conservant le centrage de la double barre. +% Sert à positionner des limites à gauche \emph{et} à droite +% d'une 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} +% 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 -} +\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. +% 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), @@ -1746,83 +2480,267 @@ % 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 +\newcommand*{\vr}[2][2]{% ligne 2 par défaut sauf si tv@row=1 \stepcounter{numvr} - \ifthenelse{\theligne=0}{ - \noeud{X\thenumvr}{#2} - }{ - \ifthenelse{\theligne=#1}{ - \noeud{Y\thenumvr}{#2} - }{} + \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} % -% \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. +% 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{\ZIc}{\discont \cellcolor[gray]{0.7}} +\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} -% 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 |\ZIh|\oarg{hauteur} -% 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). Elle possède le même argument optionnel \oarg{hauteur}. +% \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{\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 - }{} + \ifthenelse{\thevar@ligne=\value{nbvarlignes}}{\@@ZI[#1]}{% + \ZIfind + \ifnum \thenumZI = 0 \ZInew \fi + \ZIaddheight{\thenumZI} } - \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*{\@@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*{\ZIh}{\@ifstar{\@@ZI}{\@ZI}} +\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 diff --git a/macros/latex/contrib/tablvar/tablvar.ins b/macros/latex/contrib/tablvar/tablvar.ins index 94f28ed03a..0280b61773 100644 --- a/macros/latex/contrib/tablvar/tablvar.ins +++ b/macros/latex/contrib/tablvar/tablvar.ins @@ -1,5 +1,5 @@ %% -%% Copyright (C) 2018-2019 by Antoine Missier <antoine.missier@ac-toulouse.fr> +%% Copyright (C) 2018-2023 by Antoine Missier <antoine.missier@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 @@ -21,7 +21,7 @@ This is a generated file. -Copyright (C) 2018-2019 by Antoine Missier <antoine.missier@ac-toulouse.fr> +Copyright (C) 2018-2023 by Antoine Missier <antoine.missier@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 @@ -46,7 +46,7 @@ and version 1.3 or later is part of all distributions of LaTeX version \Msg{* tablvar.sty *} \Msg{* *} \Msg{* To produce the documentation run the file tablvar.dtx *} -\Msg{* through LaTeX + dvips + ps2pdf. *} +\Msg{* through XeLaTeX or LaTeX + dvips + ps2pdf. *} \Msg{* *} \Msg{* Happy TeXing! *} \Msg{* *} diff --git a/macros/latex/contrib/tablvar/tablvar.pdf b/macros/latex/contrib/tablvar/tablvar.pdf Binary files differindex 32697460b4..7f5962d8fc 100644 --- a/macros/latex/contrib/tablvar/tablvar.pdf +++ b/macros/latex/contrib/tablvar/tablvar.pdf |