summaryrefslogtreecommitdiff
path: root/macros
diff options
context:
space:
mode:
Diffstat (limited to 'macros')
-rw-r--r--macros/latex/contrib/babel-contrib/french/README.md3
-rw-r--r--macros/latex/contrib/babel-contrib/french/frenchb-doc.pdfbin187963 -> 190030 bytes
-rw-r--r--macros/latex/contrib/babel-contrib/french/frenchb-doc.tex110
-rw-r--r--macros/latex/contrib/babel-contrib/french/frenchb.dtx668
-rw-r--r--macros/latex/contrib/babel-contrib/french/frenchb.ins98
-rw-r--r--macros/latex/contrib/babel-contrib/french/frenchb.pdfbin367390 -> 369496 bytes
-rw-r--r--macros/latex/contrib/tablvar/README.md8
-rw-r--r--macros/latex/contrib/tablvar/tablvar.dtx2942
-rw-r--r--macros/latex/contrib/tablvar/tablvar.ins6
-rw-r--r--macros/latex/contrib/tablvar/tablvar.pdfbin217215 -> 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
index dae1c3f742..ec1b68e6e4 100644
--- a/macros/latex/contrib/babel-contrib/french/frenchb-doc.pdf
+++ b/macros/latex/contrib/babel-contrib/french/frenchb-doc.pdf
Binary files differ
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
index 395080ae3f..e5dd20f656 100644
--- a/macros/latex/contrib/babel-contrib/french/frenchb.pdf
+++ b/macros/latex/contrib/babel-contrib/french/frenchb.pdf
Binary files differ
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
index 32697460b4..7f5962d8fc 100644
--- a/macros/latex/contrib/tablvar/tablvar.pdf
+++ b/macros/latex/contrib/tablvar/tablvar.pdf
Binary files differ