% \iffalse meta-comment
% Time-stamp: <2009-06-22T14:58:16 (cest) [yvon sur hypatie]>
% Copyright (C) 2009 by Yvon Henel 
% dit �le TeXnicien de surface� <le.texnicien.de.surface@wanadoo.fr>
% ------------------------------------------------------------------
% 
% This file may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.2
% 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.2 or later is part of all distributions of LaTeX 
% version 1999/12/01 or later.
% \fi
%
% \iffalse
%<package|suite|taupe>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<package>\def\PackageName{tdsfrmath}  
%<package|suite|taupe>\def\fileversion{v1.3}  
%<package|suite|taupe>\def\filedate{2009/06/22} 
%<package>\def\fileinfo{macros pour les maths
%<package>              par Le TeXnicien de surface} 
%<package>\ProvidesPackage{tdsfrmath}
%<package>   [\filedate\space\fileversion\space\fileinfo] 
%<*driver>
\documentclass[a4paper]{ltxdoc}
\usepackage[latin9]{inputenc}
\usepackage[T1]{fontenc}  
\usepackage{array}
\usepackage{xspace}
\usepackage{url}
\usepackage{fixltx2e}
\usepackage{float} 
\usepackage[tame]{paresse}
\IfFileExists{lmodern.sty}{\usepackage{lmodern}}{}
\usepackage[np]{numprint}
\usepackage[taupe,suite]{tdsfrmath}[2008/08/11]
\usepackage[english,frenchb]{babel}
\usepackage[pdfpagelabels,
            colorlinks=true,
            linkcolor=blue,
            urlcolor=blue,
            citecolor=blue]{hyperref}
% commentez la ligne suivante pour avoir un document avec le code
% \OnlyDescription
\EnableCrossrefs         
\CodelineIndex
\RecordChanges
\makeatletter
%%% quelques red�finition de commande de la classe ltxdoc.cls ou de
%%% l'extension doc.sty pour une documentation en fran�ais.
\GlossaryPrologue{%
  \section*{{Changements}}%
  \markboth{{Changements}}{{Changements}}}
\IndexPrologue{\section*{Index}\markboth{Index}{Index}%
  Les nombres en italique ou en bleu renvoient � la page o� l'entr�e
  est d�crite; les nombres soulign�s renvoient � la ligne de code de
  la d�finition; les nombres en caract�res romains renvoient � la
  ligne de code o� l'entr�e est utilis�e.}
\renewcommand{\SpecialMainEnvIndex}[1]{%
  \@bsphack\special@index{%
    #1\actualchar {\string\ttfamily\space#1} (environnement)%
    \encapchar main}%
  \special@index{environnements:\levelchar{%
      \string\ttfamily\space#1}\encapchar main}\@esphack}
\def\generalname{G�n�ral}
%%% fin de la francisation
\newcommand\DescribeOptionCle[1]{\@bsphack \marginpar{\raggedleft
    \OptionclePresent{#1}}\index{#1 (\textsc{cl�})}\@esphack}
\newcommand\DescribeOptionVal[2]{\@bsphack \marginpar{\raggedleft
     \OptionvalPresent{#1}}\index{#1 [#2]}\@esphack}
\newcommand\IndexVal[2]{\index{#1 [#2]}}
\makeatother 
\newcommand\mlabel[1]{\phantomsection\label{macro#1}}
\newcommand\clabel[1]{\phantomsection\label{cle#1}}
\newcommand\Page[1]{page~\pageref{macro#1}}
\newcommand\Voir[1]{cf.~page~\pageref{macro#1}}
\newlength\xttlarge
\newcommand\Alinea[1][12]{\hspace*{#1\xttlarge}}
\newcommand\DonneMath{\framebox{\footnotesize\grastab{M}}\xspace}
\newcommand\CleVal[2]{\framebox{\footnotesize\texttt{[#1=#2]}}}
\newcommand{\CAD}{c.-�-d.\xspace}
\newcommand{\PX}{p.~ex.\xspace}
\newcommand{\TO}{\textemdash~\ignorespaces}
\newcommand{\TF}{\unskip~\textemdash\xspace}
\newcommand{\BOP}{\discretionary{}{}{}}
\newcommand{\Pkg}[1]{\texttt{#1.sty}}
\newcommand{\fctt}{\texttt{fr.comp.text.tex}\xspace}
\newcommand{\Sourire}{\texttt{;-)}\xspace}
\newcommand\OptionclePresent[1]{\texttt{\textbf{#1}}}
\newcommand\Optioncle[1]{\OptionclePresent{#1}}
\newcommand\OptionvalPresent[1]{\texttt{\textit{#1}}}
\newcommand\Optionval[2]{\OptionvalPresent{#1}\IndexVal{#1}{#2}}
\newcommand\SignalNouveau[1]{%
  \marginpar{\raggedleft\framebox{\textbf{N v#1}}\hspace*{2em}}}
\newcommand\Nouveau[3][***]{%
%  \SignalNouveau{#3}%
  \emph{#2}\footnote{Nouveaut� de la version #3%
    \ifthenelse{\equal{#1}{***}}{.}{, #1}}}
%%% fin de la personalisation
\begin{document}
  \settowidth{\xttlarge}{\texttt{x}}
  \DocInput{tdsfrmath.dtx}
\end{document}
%</driver>
% \fi
%
% \CheckSum{1100}
%
% \CharacterTable
%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%   Digits        \0\1\2\3\4\5\6\7\8\9
%   Exclamation   \!     Double quote  \"     Hash (number) \#
%   Dollar        \$     Percent       \%     Ampersand     \&
%   Acute accent  \'     Left paren    \(     Right paren   \)
%   Asterisk      \*     Plus          \+     Comma         \,
%   Minus         \-     Point         \.     Solidus       \/
%   Colon         \:     Semicolon     \;     Less than     \<
%   Equals        \=     Greater than  \>     Question mark \?
%   Commercial at \@     Left bracket  \[     Backslash     \\
%   Right bracket \]     Circumflex    \^     Underscore    \_
%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%   Right brace   \}     Tilde         \~}
%
% \GetFileInfo{tdsfrmath.sty}
%
% \changes{v1}{2008/06/01}{1\iere version publique.}
% \changes{v1.1}{2008/08/11}{Correction de l'avertissement �ronn� en cas
% de chargement d'une police pour le gras de tableau.}
% \changes{v1.1}{2008/08/11}{Correction de l'oubli de la cl� CharPoGdT
% dans l'exemple de chargement de dsfont}
% \changes{v1.1}{2008/08/11}{Changement du m�canisme de d�finition du
% gras de tableau pour permettre l'utilisation d'un gras \og
% normal\fg.} 
% \changes{v1.2}{2008/09/17}{Cr�ation de la cl�
% \texttt{avecmathdesign} pour permettre l'utilisation de mathdesign.}
%
% \DoNotIndex{\newcommand,\newenvironment,\ae,\oe,\DeclareOption,^^A
%   \alpha, \beta, \gamma, \delta, \epsilon,^^A
%   \varepsilon, \zeta, \eta, \theta, \vartheta, \iota, \kappa,^^A
%   \lambda, \mu, \nu, \xi, \pi, \varpi, \rho, \varrho, \sigma,^^A
%   \varsigma, \tau, \upsilon, \phi, \varphi, \chi, \psi, \omega,^^A
%   \upalpha, \upbeta, \upgamma, \updelta, \upepsilon,^^A
%   \upvarepsilon, \upzeta, \upeta, \uptheta, \upvartheta, \upiota, \upkappa,^^A
%   \uplambda, \upmu, \upnu, \upxi, \uppi, \upvarpi, \uprho, \upvarrho, \upsigma,^^A
%   \upvarsigma, \uptau, \upupsilon, \upphi, \upvarphi, \upchi, \uppsi, \upomega,^^A
%   \Delta, \Gamma, \Theta, \Lambda, \Xi, \Pi, \Phi, \Psi \Sigma,^^A
%   \Upsilon, \ExecuteOptions, \providecommand, \newif,^^A  
%   \fi, \if, \or, \ifnum, \ifinner, \ifcase, \def, \expandafter,^^A
%   \RequirePackage, \@ctrerr, \ProcessOptions,\relax,^^A
%   \AtEndOfPackage, \AtBeginDocument,\,, \{, \}, \`, \',^^A 
%   \DeclareMathOperator, \InputIfFileExists,^^A 
%   \@ifstar, \@gobble, \@ifdefinable, \@nil,^^A 
%   \ifthenelse, \equal, \value,^^A 
%   \frac, \geqslant, \leqslant, \dfrac,\ast, \imath, \jmath, \binom,^^A 
%   \displaystyle, \ifx, \infty, \int, \langle, \left, \let, \llbracket,^^A 
%   \longmapsto, \longrightarrow, \lVert, \lvert, \MakeUppercase, \mathbb,^^A 
%   \mathscr, \MessageBreak, \mspace, \newtoks, \overrightarrow,^^A 
%   \PackageError, \PackageInfo, \PackageWarningNoLine, \partial, \rangle,^^A 
%   \renewcommand, \right, \rrbracket, \rVert, \rvert, \string, \the,^^A 
%   \varnothing, \xrightarrow, \xspace,^^A 
%   \text, \textup \csname, \endcsname, \value, \else, \Omega,^^A 
%   \ensuremath, \newcommandx, \@ifundefined, \edef, \long,^^A 
%   \DeclareRobustCommand,\IfFileExists, \ExecuteOptionsX,^^A  
%   \define@boolkey, \define@choicekey, \define@cmdkey,^^A 
%   \count, \count@, \mathcal, \newboolean, \newmcodes@,^^A 
%   \newmuskip, \ProcessOptionsX, \qopname, \setboolean,^^A 
%   \boolean, \textup, \WithSuffix, \ProvidesFile^^A 
%   }
% 
% \title{L'extension \textsf{tdsfrmath}\thanks{Ce document correspond
%        au fichier \textsf{tdsfrmath}~\fileversion, du \filedate.}}  
% \author{Le \TeX nicien de surface\thanks{%
%                 \texttt{le.texnicien.de.surface@wanadoo.fr}}}  
%
% \maketitle
%
% \begin{abstract}
%   Cette extension veut fournir des macros � \og l'utilisateur
%   final\fg pour cr�er des documents math�matiques ayant un aspect
%   fran�ais. 
% \end{abstract}
% \begin{otherlanguage}{english}
%   \begin{abstract}
%     This package provides a bunch of macros to help the ``final
%     user'' to produce maths texts with a definite french look. For
%     there is a marked aspect of localisation, I don't provide any
%     English documentation.   
%   \end{abstract}
% \end{otherlanguage}
% 
% \tableofcontents{}
% \newpage
%\section{Introduction}
%\label{secIntro}
% Le but de cette extension est de fournir des macros pr�tes � l'usage
% � des professeurs de math�matiques des coll�ges, lyc�es \TO et plus
% si affinit�s\TF qui voudraient bien utiliser \LaTeX\ sans trop
% mettre le nez dans la programmation ni devoir retenir des choses
% aussi barbares que \cs{overrightarrow} pour faire un vecteur
% \Sourire
% 
% De plus elle tente de donner aux math�matiques un aspect vraiment
% plus fran�ais. On aura par exemple \og \(\D x\)\fg au lieu de \og
% \(dx\)\fg dans les int�grales et les d�riv�es.
% 
% \Pkg{tdsfrmath} s'appuie lourdement sur \texttt{amsmath} qu'il
% requiert. On n'aura donc pas besoin de le charger avec un
% \cs{usepackage} si l'on utilise \texttt{tdsfrmath}.
% 
% \textbf{Remarque}: depuis la version~1.2, \texttt{amssymb} est
% utilis� si l'option
% \Optioncle{avecmathde}\BOP\OptionclePresent{sign} est fausse comme
% c'est le cas par d�faut. 
% Si on utilise \Pkg{mathdesign}, on donnera la valeur
% \OptionvalPresent{true} � \Optioncle{avecmathdesign} et, dans ce
% cas, \texttt{amssymb} ne sera pas charg�. Voir la
% section~\ref{nouveau12}, page~\pageref{nouveau12}.
% 
% \medbreak
% 
% � l'origine de cette extension, je trouve un vieux fichier
% \texttt{.sty} que je m'�tais concoct�, par petits bouts, lorsque je
% s�vissais encore dans le secondaire. Ayant appris un peu de \LaTeX\
% depuis, j'ai pens� � en am�liorer les macros. J'ai aussi consacr�
% quelques heures � la francisation de l'aspect, chose � laquelle je
% n'avais accord� que peu d'attention jusqu'ici car, je dois l'avouer,
% je m'�tais beaucoup servi de \LaTeX\ pour produire des textes
% math�matiques en anglais. 
% 
% En tout cas, pour en rassurer certains qui pourraient consid�rer
% qu'ils ne pourraient jamais arriver � un tel niveau (\emph{sic})
% d'�criture de macros: ceci est le r�sultat de nombreuses heures
% �tal�es sur plus de 15~ans. Je dois par ailleurs remercier
% publiquement tous ceux qui sur \fctt ont r�pondu � mes questions,
% pas toujours tr�s profondes d'ailleurs, et m'ont apport� une aide
% pr�cieuse jusqu'aujourd'hui m�me dans l'utilisation de notre outil
% pr�f�r� de cr�ation de document.
% 
% \section{Utilisation}
% 
% Pour la premi�re fois, plut�t que des options, j'utilise le syst�me
% de cl�s et valeurs que permet \Pkg{xkeyval}. De m�me, j'utilise
% \Pkg{xargs} qui permet la d�finition de commandes admettant
% plusieurs arguments par d�faut. 
% 
% Dans le cours du texte une cl� est �crite \OptionclePresent{cl�} et
% une valeur \OptionvalPresent{val}. Les cl�s dont les noms comportent
% des majuscules sont bool�ennes \CAD que leur valeur est soit
% \OptionvalPresent{true} \TO vrai\TF soit \OptionvalPresent{false}
% \TO faux. Les cl�s marqu�es \og choix\fg dans la
% table~\ref{TABcles}, page~\pageref{TABcles}, permettent de choisir
% entre quelques valeurs pr�d�finies. D'autres enfin attendent un
% texte avec plus ou moins de restrictions suivant ce � quoi servira
% le texte.
% 
% J'ai amplement (\string?) comment� la partie contenant le code, et
% on s'y reportera pour les d�tails d'imp�mentation, mais je commence
% ici par pr�senter toutes les options et toutes les macros de cette
% extension.
% 
% \subsection{� propos des cl�s bool�ennes}
% 
% Nouveaut� de la version 1.3. 
% 
% Les cl�s bool�ennes, comme \Optioncle{taupe} p.~ex., sont des cl�s
% qui n'admettent pour valeur que |true| ou |false|. L'extension
% \Pkg{xkeyval} me permet de leur donner une valeur \emph{par d�faut}
% et une valeur \emph{d'origine}: la valeur d'origine est celle que
% poss�de la cl� lorsque l'on charge \Pkg{tdsfrmath} sans aucune
% option avec |\usepackage|\BOP|{tdsfrmath}|. La valeur par d�faut est
% celle que l'on obtient en mentionnant la cl� sans lui donner de
% valeur comme avec |\usepackage|\BOP|[taupe]|\BOP|{tdsfrmath}| qui
% revient au m�me que |\usepackage|\BOP|[taupe| |=|
% |true]|\BOP|{tdsfrmath}| car la valeur par d�faut de la cl�
% \Optioncle{taupe} est \OptionvalPresent{true}. 
% 
% \subsection{Chargement optionnel}
%
% \Pkg{tdsfrmath} permet de charger du code de mani�re optionnelle. Ce
% code est plac� dans des fichiers d'extension \texttt{.sto}, �
% savoir: \texttt{taupe.sto} contenant des macros destin�e plut�t �
% une utilisation en classe pr�pa; \texttt{suite.sto} dont les macros
% ne traitent que des suites. 
% 
% \DescribeOptionCle{taupe}\clabel{taupe}
% � chacun de ces fichiers correspond une cl� bool�enne, de m�me nom,
% dont la valeur d'origine est \OptionvalPresent{false} ce qui
% \DescribeOptionCle{suite}\clabel{suite}
% entraine que ces fichiers ne sont pas charg�s.
% 
% Si on veut utiliser les macros d�finies dans \texttt{taupe.sto}, on
% appelera \texttt{tdsfrmath} par:
% |\usepackage[taupe=true]{tdsfrmath}| ou encore avec
% |\usepackage|\BOP|[taupe]|\BOP|{tdsfrmath}| depuis la version
% 1.3\SignalNouveau{1.3} puisque la valeur par d�faut de
% \Optioncle{taupe} est \OptionvalPresent{true}.
% 
% \bigbreak
% 
% Le fichier \texttt{taupe.sto} contient des d�finitions qui d�pendent
% de la cl� \Optioncle{ArgArcMaj} \TO
% \DescribeOptionCle{ArgArcMaj}\clabel{ArgArcMaj} \textbf{arg} et
% \textbf{arc} avec \textbf{maj}uscule\TF dont la valeur d'origine est
% \Optionval{false}{ArgArcMaj} ce qui entraine que les noms des
% fonctions circulaires et hyperboliques r�ciproques \TO comme
% \(\argch x\)\TF sont �crites en minuscule. En donnant la valeur
% \Optionval{true}{ArgArcMaj}, valeur par d�faut, � la cl�
% \Optioncle{ArgArcMaj}, ils prennent une majuscule \TO on a alors
% \(\operatorname{Argch}x\).
% 
% \subsection{R�glage de la police calligraphique}
% 
% Trois cl�s r�glent le choix de la police calligraphique en mode
% math�matique. D'origine la cl� bool�enne \Optioncle{CharPoCal} \TO
% pour \OptionclePresent{Char}ger
% \DescribeOptionCle{CharPoCal}\clabel{CharPoCal} une
% \OptionclePresent{Po}lice \OptionclePresent{Cal}ligraphique\TF est
% \OptionvalPresent{true} ce qui permet de d�finir la police
% calligraphique pour remplacer \cs{mathcal} qui serait celle que l'on
% obtiendrait si \Optioncle{CharPoCal} avait la valeur
% \OptionvalPresent{false}.
% 
% Lorsque \Optioncle{CharPoCal} vaut \OptionvalPresent{true} \TO ce
% qui est �galement sa valeur par d�faut \TF, il faut d�finir les cl�s
% \Optioncle{calpack} et \Optioncle{calcomd}.
% 
% La cl� \Optioncle{calpack}, qui contient
% \DescribeOptionCle{calpack}\clabel{calpack}
% \OptionvalPresent{mathrsfs} par d�faut, prend pour valeur le nom,
% sans l'extension \texttt{sty}, d'un module donnant acc�s � une
% \DescribeOptionVal{mathrsfs}{calpack}
% police calligraphique, \PX, \texttt{mathrsfs} ou \texttt{eucal}.
% 
% La cl� \Optioncle{calcomd}, qui contient
% \DescribeOptionCle{calcomd}\clabel{calcomd}
% \OptionvalPresent{mathscr} par d�faut, prend pour valeur le nom
% d'une macro \textbf{sans} la barre oblique initiale. C'est la macro
% \DescribeOptionVal{mathscr}{calcomd}
% permettant de \emph{passer} en police calligraphique. L'extension
% \Pkg{mathrsfs} contient bien la macro \cs{mathscr}. 
% 
% \bigbreak
% 
% En r�sum�, si l'on veut utiliser le \cs{mathcal} tel que propos� par
% \LaTeX\ plus \Pkg{amsmath}, on chargera: 
% 
% \noindent|\usepackage[CharPoCal=false]{tdsfrmath}|
% 
% \noindent\TO ce que l'on fera �galement pour utiliser \Pkg{fourier}
% si on veut b�n�ficier de la red�finition de \cs{mathcal} qu'op�re
% cette extension \TF et si l'on veut utiliser \Pkg{eucal} et sa
% commande \cs{mathcal} \TO eh oui! cette extension red�finit
% \cs{mathcal}\TF il faudra
% 
% \noindent|\usepackage[calpack=eucal,|
% |cal|\BOP|comd=|\BOP|math|\BOP|cal]|\BOP|{tdsfrmath}| 
% 
% \noindent on remarquera que |CharPoCal=true| n'est pas n�cessaire
% puisque c'est la valeur par d�faut.
% 
% Si n�cessaire, on peut passer une option � l'extension \emph{pass�e}
% � \Optioncle{calpack}, en renseignant la cl� \Optioncle{caloptn}
% \DescribeOptionCle{caloptn}\clabel{caloptn}
% comme dans, \PX
% 
% \noindent|\usepackage[calpack=euscript,|\\
% \Alinea |caloptn=mathcal,|\\
% \Alinea |calcomd=mathcal]{tdsfrmath}|
% 
% \noindent dans lequel on remarquera qu'il faut bien donner une
% valeur � \Optioncle{calcomd} comme je l'ai d�j� �crit
% ci-dessus.
% 
% \texttt{Remarque}: j'ai introduit dans la version 1.2 une cl�
% permettant d'utiliser conjointement \Pkg{tdsfrmath} et
% \Pkg{mathdesign}, cf.~\pageref{nouveau12}. Dans ce cas, les cl�s
% \Optioncle{CharPoCal}, \Optioncle{calpack}, \Optioncle{caloptn} et
% \Optioncle{calcomd} sont ignor�es donc inutiles.
% 
% \bigbreak
% 
% \DescribeMacro{\manus} Dans tous les cas, on acc�de � la police
% calligraphique avec la macro \cs{manus}, � un seul argument
% obligatoire, qui est d�finie de telle sorte que l'on puisse saisir
% \og |et dans \manus{c} on trouve|\fg pour obtenir \og et dans
% \manus{c} on trouve\fg.
% 
% \subsection{R�glage de la police \og gras de tableau\fg}
% 
% Par d�faut, le \og gras de tableau\fg (\emph{blackboard bold}) est
% celui de \LaTeX\ plus \Pkg{amsmath} \CAD \(\mathbb{G}\). Il en
% existe bien d'autres versions que l'on trouvera dans le fameux
% \texttt{symbols-a4.pdf} disponible g�n�ralement dans votre
% distribution, et donc sur votre disque, dans
% \texttt{texmf-doc/doc/english/comprehensive/}.
% 
% Pour permettre de red�finir la police du gras de tableau, je fournis
% un m�canisme similaire � celui qui pr�c�de. On utilisera alors la
% macro \cs{grastab} pour obtenir le \og gras de tableau\fg choisi. 
% 
% La cl� bool�enne \Optioncle{CharPoGdT} \TO pour
% \OptionclePresent{Char}ger
% \DescribeOptionCle{CharPoGdT}\clabel{CharPoGdT} une
% \OptionclePresent{Po}lice \OptionclePresent{G}ras
% \OptionclePresent{d}e \OptionclePresent{T}ableau\TF vaut
% \OptionvalPresent{false} � l'origine mais a \OptionvalPresent{true}
% pour valeur par d�faut.
% 
% En fixant \Optioncle{CharPoGdT} � \OptionvalPresent{true}, on peut
% \DescribeOptionCle{gdtpack}\clabel{gdtpack}
% d�finir la cl� \Optioncle{gdtpack} en lui donnant le nom de l'extension
% qui fournira le gras d�sir�, on peut �ventuellement lui passer une
% \DescribeOptionCle{gdtoptn}\clabel{gdtoptn}
% option avec \Optioncle{gdtoptn} et, toujours �ventuellement, fixer
% \Optioncle{gdtcomd} avec le nom de la macro d�sir�e \TO toujours
% sans barre oblique inverse\TF seulement, cette fois, du fait du
% \DescribeOptionCle{gdtcomd}\clabel{gdtcomd}
% choix de la valeur par d�faut de \Optioncle{gdtcomd}, on n'aura pas
% besoin de fixer la valeur de \Optioncle{gdtcomd} si la macro est
% encore \cs{mathbb}.
% 
% Voici ce que l'on �crira pour obtenir le gras de tableau tel que
% fournit par \Pkg{dsfont} avec l'option \texttt{sans} et la commande
% \cs{mathds} \TO tous les go�ts sont dans la nature \TF
% 
% \noindent|\usepackage[CharPoGdT=true,| |gdtpack=dsfont,| |gdtoptn=sans,|\\
% \Alinea |gdtcomd=mathds]{tdsfrmath}|%
% 
% \noindent ou encore: 
% 
% \noindent|\usepackage[CharPoGdT,| |gdtpack=dsfont,| |gdtoptn=sans,|\\
% \Alinea |gdtcomd=mathds]{tdsfrmath}|%
% 
% \noindent et \cs{grastab} donnera ce que l'on voit dans
% \texttt{symbols-a4.pdf}. 
% 
% On peut �galement\footnote{Ce changement � lui seul justifie le
%   passage � la version 1.1. C'est � la demande g�n�rale de Maxime
%   \textsc{Chupin} sur \texttt{fctt} que je proc�de � la red�finition
%   du m�canisme du choix du gras de tableau \Sourire}, lorsque la cl�
% \Optioncle{CharPoGdT} vaut \OptionvalPresent{true} ne pas d�finir la
% cl� \Optioncle{gdtpack} mais d�finir la cl� \Optioncle{gdtcomd}
% comme pr�c�demment. Ce m�canisme permet d'utiliser \PX le gras \og
% normal\fg pour le \og gras de tableau\fg avec
% 
% \noindent|\usepackage[CharPoGdT=true,| |gdtcomd=textbf]{tdsfrmath}|
% 
% \noindent ou encore: 
% 
% \noindent|\usepackage[CharPoGdT,| |gdtcomd=textbf]{tdsfrmath}|
% 
% \noindent et on aura alors, \PX, \(\textbf{R}\) avec |\R|. 
% 
% \bigbreak
% 
% \DescribeMacro{\grastab} La macro \cs{grastab} prend �galement un
% seul argument obligatoire. Elle ne passe pas son argument en
% majuscule car certaines extensions fournissent aussi des minuscules
% en gras de tableau. Cependant elle assure le mode math�matique. On
% peut donc saisir \og |et comme \grastab{M} est unif�re|\fg pour
% obtenir \og et comme \grastab{M} est unif�re\fg.
% 
% \subsection{Utilisation de \Pkg{tdsfrmath} avec \Pkg{mathdesign}}
% \label{nouveau12}
% 
% � la demande d'un utilisateur\footnote{Eh oui! C'est encore Maxime
% \textsc{Chupin}. Si vous aussi, vous voulez voir votre nom dans
% cette documentation, n'h�sitez pas � me faire part de vos
% d�sid�ratas. Sait-on jamais, vous pourriez motiver le passage � la
% version suivante \Sourire} de \Pkg{mathdesign} qui voulait
% pouvoir utiliser \Pkg{tdsfrmath} j'ai pass� cette extension � la
% version~1.2 dans laquelle j'introduis un m�canisme plut�t
% simplissime pour assurer la cohabitation la plus harmonieuse
% possible entre ces deux extensions.
% 
% La cl� bool�enne \Optioncle{avecmathdesign}\label{avecMD} vaut
% \Optionval{false}{avecmathdesign} � l'origine.
% \DescribeOptionCle{avecmathdesign} Lorsqu'on lui donne, au
% chargement de \Pkg{tdsfrmath}, la valeur \OptionvalPresent{true} \TO
% qui est sa valeur par d�faut \TF, on n'a plus besoin de sp�cifier
% quoique ce soit concernant la police calligraphique car
% \Pkg{tdsfrmath} se repose enti�rement sur \Pkg{mathdesign} qu'il
% faut charger explicitement avec \cs{usepackage} en lui passant les
% options ad�quates comme l'explique le manuel \TO
% \texttt{mathdesign-doc.pdf}\TF de l'extension.
% 
% Cette option ne change rien au m�canisme de gestion du gras de
% tableau. C'est d� au fait agr�able que la macro de \Pkg{mathdesign}
% qui cr�e le gras de tableau s'appelle �galement \cs{mathbb} ce que
% \Pkg{tdsfrmath} consid�re comme la valeur par d�faut. Cela permet de
% r�pondre � moindre frais aux deux demandes de Maxime
% \textsc{Chupin}. 
%  
% \subsection{Des n-uplets, de leur saisie et de leur pr�sentation}
% 
% La cl� \Optioncle{nupletsep}
% \DescribeOptionCle{nupletsep}\clabel{nupletsep} peut prendre la
% valeur \Optionval{virgule}{nupletsep}, qui est le r�glage par
% d�faut, ou \Optionval{pointvirgule}{nupletsep}. Toute autre valeur
% provoque un avertissement et on se retrouve avec le r�glage par
% d�faut.
% 
% Le r�glage par d�faut\DescribeOptionVal{virgule}{nupletsep},
% \Optionval{virgule}{nupletsep} compose les \(n\)-uplets comme ceci:
% \nuplet{a b}. Avec l'autre r�glage possible
% \Optionval{pointvirgule}{nupletsep}, on aurait \((a\,\string;\,
% b)\). J'ai longtemps utilis� cette derni�re\footnote{Pour tout dire,
%   � l'�poque, mon fichier de macros ne ressemblait � celui-ci que de
%   tr�s loin mais on apprend avec l'age \TO au moins pendant un
%   moment.} pour �crire des textes � destination des �l�ves du
% secondaire car on est souvent amen� � utiliser des nombres d�cimaux
% et, dans ce cas, le m�lange de virgule ne m'a jamais paru tr�s
% heureux.
% 
% \bigbreak
% 
% La macro \cs{TdSMnuplet} \DescribeMacro{\TdSMnuplet}prend un
% argument obligatoire qui est une liste dont les �l�ments sont
% s�par�s par des espaces. Avec \og |\TdSMnuplet{a b c d}|\fg on
% obtient \og \TdSMnuplet{a b c d}\fg. C'est une macro auxiliaire
% aussi lui ai-je donn� un nom qui commence par |TdSM| mais elle peut
% reservir, directement ou dans la d�finition d'une commande dont je
% n'ai pas vu l'utilit�, aussi je n'ai pas mis de |@| dans son nom.
% 
% La macro \emph{ordinaire} est \cs{nuplet}.\DescribeMacro{\nuplet}
% Avec elle on obtient la pr�sentation \emph{classique} des
% \(n\)-uplets: |\nuplet{a b 3 c 8}| compose \nuplet{a b 3 c 8}.
% 
% La d�finition de \cs{TdSMnuplet} permet de coder
% \verb*|\nuplet{ a b}| pour \nuplet{ a b}.
% 
% Bien entendu, comme d'habitude, on ne peut avoir le beurre et
% l'argent d'icelui. On peut coder 
% \verb*|\nuplet{ a\times b+c a\cap b}| pour obtenir \nuplet{ a\times
% b+c a\cap b} mais avec 
% \verb*|\nuplet{ a + b + c }| on aura \nuplet{ a + b + c }. Vous �tes
% pr�venus! \Sourire%
% 
% En fait, la pr�sentation obtenue avec \cs{nuplet} repose sur
% \cs{EncloreExtensible} \DescribeMacro{\EncloreExtensible} dont la
% syntaxe est: 
% 
% \noindent\cs{EncloreExtensible}\oarg{md}\marg{d�lim-gauche}\BOP%
% \marg{d�lim-droite}\marg{texte}
% 
% \noindent\meta{md} vaut |1| par d�faut, s'il vaut |0| les
% math�matiques sont compos�es en mode hors-texte \TO
% \cs{displaystyle}.  Je sais bien que c'est une mauvaise pratique,
% que �a bousille l'interligne, que �a fiche en l'air l'uniformit� du
% gris typo, \&c. \textsc{mais}, h�las, parfois, c'est bien
% utile. Alors je le permets mais avec \(0\) qui rappelle ce qu'il
% faut penser d'une telle pratique \Sourire.
% 
% \meta{d�lim-gauche} est quelque chose qui peut �tre pr�c�d� de
% \cs{left} comme |(| ou |\Vert|, \meta{d�lim-droite} est quelque
% chose qui peut �tre pr�c�d� de \cs{right} comme |)| ou |\Vert|, Si
% on ne veut rien de visible � gauche ou � droite, il faut que le
% 1\ier ou le 2\ieme argument obligatoire soit un
% point. \meta{texte} est ce qui sera plac� entre les d�limiteurs,
% en mode math�matique.
% 
% \bigbreak
% 
% La macro \cs{EncloreExtensible} nous place en mode math�matique. 
% 
% En voici un exemple un rien b�te: 
% \cs{EncloreExtensible}\BOP|{(}|\BOP|{\rangle}|\BOP|{x^{2}}| produit
% \EncloreExtensible{(}{\rangle}{x^{2}}. 
% 
% Le comportement des d�limiteurs varient suivant qu'on est \TO de
% mani�re forc�e par l'argument optionnel ou de mani�re
% \emph{naturelle} parce que l'on est dans une formule compos�e
% hors-texte\TF en mode math�matique hors-texte ou en mode
% math�matique en ligne. Dans le 1\ier cas, les d�limiteurs sont
% extensibles, dans le second ils ne le sont pas. On verra plus bas,
% \Page{repere}, le rendu des parenth�ses dans la macro \cs{repere}.
% 
% Cette macro \cs{EncloreExtensible} me sert � en d�finir plusieurs
% autres que voici. Toutes ont la m�me syntaxe: 
% 
% \noindent\cs{Macro}\oarg{md}\marg{texte}
% 
% \noindent o� \meta{md} et \meta{texte} \DescribeMacro{\parent} ont
% le m�me sens que ci-dessus. Ce sont \cs{parent} pour obtenir des
% parenth�ses, \cs{accol} pour des accolades \DescribeMacro{\accol} et
% \cs{crochet} pour des \dots\ oui, des crochets! Voici, \PX,
% |\parent{a}| qui produit \parent{a}; |\accol{\vide}| qui produit
% \accol{\vide}; \DescribeMacro{\crochet} |\crochet{8\cdot9}| qui
% produit \crochet{8\cdot9}.
% 
% Dans le m�me genre, on a \cs{varabs} pour obtenir la valeur absolue
% comme ici: \DescribeMacro{\varabs} \varabs{-12} cod� |\varabs{-12}|.
% 
% Dans la m�me veine, toujours, \cs{norme} pour �crire la norme comme
% suit: \DescribeMacro{\norme} \norme{\vecti} cod� |\norme{\vecti}|.
% 
% \bigbreak
% 
% Revenons aux \(n\)-uplets. Les macros qui les produisent acceptent,
% elles aussi, toutes un argument optionnel qui force le mode
% hors-texte quand il vaut |0|.
% 
% \DescribeMacro{\nuplet} On obtient, comme d�j� vu ci-dessus,
% \nuplet{c d} avec \verb*|\nuplet{c d}| \TO j'insiste sur l'espace,
% non?\TF et avec \verb*|\anuplet{c d}| on a \anuplet{c d}. Cette
% \DescribeMacro{\anuplet}
% derni�re doit son nom � ce qu'elle utilise des \textbf{a}ccolades.
% 
% Toutes les deux, comme je l'ai d�j� signal�, peuvent traiter
% un\label{nupletrem} nombre quelconque d'arguments s�par�s par des
% espaces comme, \PX, \anuplet{a b c d e f} obtenu avec 
% |\anuplet{a b c d e f}|. 
% Il faut toutefois remarquer que si l'on veut utiliser
% un macro � l'int�rieur, \PX \cs{alpha}, il faudra la faire suivre ou
% l'entourer d'une paire d'accolades pour pr�server l'espace, sinon
% c'est l'erreur assur�e et \TeX\ prof�rera une de ces habituelles
% remarques absconces \Sourire
% 
% On codera donc |\nuplet{a \alpha{} \beta}| pour obtenir \nuplet{a
%   \alpha{} \beta}. Mais, coqu�terie d'auteur, je me suis arrang�
% pour que l'on puisse coder directement |\nuplet{a �a �b}| pour avoir
% {\ActiveLaParesse\nuplet{a �a �b}} lorsque l'extension
% \Pkg{paresse}, de votre serviteur, est charg�e.
% 
% Avec |\nuplet{\frac{1}{2} \frac{3}{4}}| on produit
% \nuplet{\frac{1}{2} \frac{3}{4}}.
% 
% \bigbreak
% 
% Je ne suis pas all� plus loin car je pense que je couvre largement
% les besoins du secondaire avec tout �a. Qui voudrait obtenir
% une macro du m�me genre, pourra toujours la d�finir � l'aide de
% \cs{EncloreExtensible}  et \cs{TdMnuplet} qui font le travail
% principal.  
% 
% Cependant, je fournis la macro \cs{rnuplet}, pr�vue pour �tre
% utilis�e dans le cas de l'�criture d'une fonction, \PX En effet,
% elle pr�c�de la composition du \(n\)-uplet d'une espace n�gative ce
% qui a pour effet de rapprocher la premi�re parenth�se de ce qui
% pr�c�de. Comparer \(f\rnuplet{x y}\), obtenu avec 
% |\(f\rnuplet{x y}\)|, � \(f\nuplet{x y}\), |\(f\nuplet{x y}\)|, 
% et � \(f\rnuplet{x y}[5]\), |\(f\rnuplet{x y}[5]\)|.
% 
% \DescribeMacro{\rnuplet}
% Cette macro  a pour syntaxe 
% 
% \noindent\cs{rnuplet}\oarg{md}\marg{texte}\oarg{�cart}
%
% \noindent le seul argument nouveau est \meta{�cart} qui r�gle
% l'espacement entre ce qui pr�c�de la macro et la parenth�se. Par
% d�faut cet argument vaut \cs{TdSMReculParenthese} dont la valeur
% est~\(-2\), \meta{�cart} doit �tre un nombre. 
% 
% Le |r| est l� pour faire penser (\string?) � \emph{recul}.
% 
% On pourrait donc �crire mais, bien s�r, on \textbf{ne le fera pas}, 
% |\(f|\BOP|\rnuplet|\BOP|[0]|\BOP|{\frac{1}|\BOP|{2}|
% |3}|\BOP|[10]|\BOP|\)| pour obtenir l'horreur: 
% \(f\rnuplet[0]{\frac{1}{2} 3}[10].\) 
% 
% \vspace{\baselineskip}
% 
% \DescribeMacro{\TdSMReculParenthese}\mlabel{TdSMReculParenthese}
% C'est la macro qui fixe, de mani�re g�n�rale, l'espace entre le
% texte qui pr�c�de et la parenth�se \TO ou d�limiteur �quivalent\TF
% ouvrante. On peut la red�finir avec \cs{renewcommand}. 
% 
% \textsf{Remarque}:  Elle n'est pas \emph{secr�te} donc son nom ne
% comporte pas de |@| mais on n'est pas sens� l'utiliser toutes les
% trois secondes d'o� les capitales. C'est la convention
% g�n�rale\footnote{Il faut prendre ces conventions pour ce qu'elles
% sont et on n'aurait pas trop de peine � trouver des exceptions �
% cette \emph{r�gle}, exceptions qui ne survivent que par la force de
% l'habitude.} de nommage des macros.
% 
% \subsection{De la d�finition des ensembles}
% 
% Je fournis la macro \cs{ensemble}, \Voir{ensemble}, qui permet
% d'�crire, \PX, \og \ensemble{x\in\R}{x^{2}\pgq 2}\fg avec
% \DescribeOptionCle{SepDefEnsExt}\clabel{SepDefEnsExt}
% |\ensemble|\BOP|{x\in\R}|\BOP|{x^{2}\pgq 2}|. Le rendu en est
% controll� par la cl� \Optioncle{SepDefEnsExt} \TO
% \DescribeOptionVal{true}{SepDefEnsExt}
% \textbf{s�p}arateur de la \textbf{d�f}inition d'un \textbf{ens}emble
% \textbf{ext}ensible\TF qui vaut \Optionval{true}{SepDefEnsExt} par
% d�faut. Par ailleurs, la macro \cs{TdSMsepdefens} contient le
% \DescribeMacro{\TdSMsepdefens}\mlabel{TdSMsepdefens}
% s�parateur et peut-�tre red�finie � l'aide d'un \cs{renewcommand}.
% 
% Si, comme c'est le cas � l'origine et par d�faut, la cl�
% \Optioncle{SepDefEnsExt} vaut \Optionval{true}{SepDefEnsExt}, la
% d�finition de \cs{TdSMsepdefens} doit �tre \emph{quelque chose}
% supportant l'action de \cs{middle} \TO qui est � un d�limiteur
% central ce que \cs{left} et \cs{right} sont � ceux de gauche et
% droite\TF comme, \PX, \cs{vert}. Ce qui fait que si l'on veut un
% s�parateur qui ne supporte pas cela, comme |:|, les deux-points, il
% faut passer explicitement la valeur \OptionvalPresent{false} � la
% cl� \Optioncle{SepDefEnsExt}.
% 
% \subsection{Des noms des ensembles classiques}
% 
% Il s'agit ici des macros qui permettent d'obtenir \R et \Q[*] ou
% encore \C[-3]. 
% 
% \DescribeMacro{\TdSM@Decoration} Cette macro \emph{secr�te} place
% les �toiles et signe plus ou moins, ce que j'appelle ici la
% d�coration du nom de l'ensemble. Par d�faut on a \R[*+] mais cette
% disposition est control�e par la cl�
% \DescribeOptionCle{ensdeco}\clabel{ensdeco} \Optioncle{ensdeco} qui
% peut prendre les valeurs \Optionval{ehsb}{ensdeco},
% \Optionval{ehsh}{ensdeco}, \Optionval{sheh}{ensdeco},
% \Optionval{ebsb}{ensdeco}, \Optionval{sbeb}{ensdeco} et
% \Optionval{ebsh}{ensdeco}.
% 
% \DescribeOptionVal{ebsh}{ensdeco}
% Par d�faut, on a |[ensdeco=ebsh]|. Toute autre valeur provoque un
% avertissement et on se retrouve avec le r�glage par d�faut.
% 
% La valeur par d�faut \Optionval{ehsb}{ensdeco} place
% l'\OptionclePresent{�}toile en \OptionclePresent{h}aut et le
% \OptionclePresent{s}igne en \OptionclePresent{b}as. On pourra
% retenir que, quand l'ordre importe peu, on commence par l'�toile
% d'o� \Optionval{ehsb}{ensdeco} et \Optionval{ebsh}{ensdeco} et que,
% sinon, l'ordre d'apparition de \OptionvalPresent{e} et
% \OptionvalPresent{s} r�gle la place de l'�toile \(\ast\) et du
% signe.
% 
% Grace au m�canisme de \cs{define@choice*+} de l'extension
% \texttt{xkeyval}, on pourra passer les valeurs en capitales. Donc
% |[ensdeco=EHSB]| est une �criture valide.
% 
% \medbreak
% 
% \DescribeMacro{\TdSM@PlaceSigne} Cette macro tout aussi
% \emph{secr�te} place le signe plus ou moins quand il est seul. Par
% d�faut on a \R[+] mais cette disposition est control�e par la cl�
% \DescribeOptionCle{placesigne}\clabel{placesigne}
% \Optioncle{placesigne} qui peut prendre les valeurs
% \Optionval{haut}{placesigne} et \Optionval{bas}{placesigne}.
% 
% \DescribeOptionVal{haut}{placesigne} Par d�faut, on a
% |[placesigne=haut]|. Toute autre valeur provoque un avertissement et
% on se retrouve avec le r�glage par d�faut.
% 
% 
% \bigbreak
% 
% \DescribeMacro{\EnsembleDeNombre} Cette macro fait le gros boulot de
% composition.\SignalNouveau{1.3} Elle prend 4~arguments obligatoires:
% le 1\ier donne la lettre majuscule symbolisant l'ensemble comme \og
% R\fg pour \R; le \DescribeMacro{\C} comportement de la macro varie
% suivant que le 2\ieme est �gal � \(1\), \Nouveau{est �gal
%   �~\(0\)}{1.3}, l'une de ces sept chaines de caract�res |*|, |+|,
% |-|, \DescribeMacro{\N} |*+|, |+*|, |-*| et |-*| \TO ou
% \Nouveau{sinon suivant qu'il commence par un signe moins ou
%   pas}{1.3}. C'est ce qui permet d'obtenir plus tard, \PX, \Q[+*]
% avec |\Q[+*]|\TF; le 3\ieme argument est utilis� \DescribeMacro{\Q}
% pour d�noter les ensembles de polyn�mes comme \C[-3] et dans ce cas
% le 2\ieme doit commencer par un signe moins; enfin le 4\ieme doit
% �tre un \DescribeMacro{\R} entier qui donne le nombre de |mu| \TO
% unit� de longueur sp�cifique \DescribeMacro{\Z} au mode
% math�matique\TF qui s�parent la majuscule du crochet ouvrant.
% 
% Je rappelle au passage que |mu| \TO pour \emph{maths unit}\TF est
% une unit� de longueur d�finie uniquement en mode math�matique. Elle
% vaut 1/18 d'un |em| qui est \TO approximativement\TF la largeur d'un
% M dans la fonte courante.
% 
% Avec la version 1.3\SignalNouveau{1.3} j'op�re un changement de
% doctrine! Si le 2\ieme argument n'est pas |*|, |+|, |-|, |*+|, |+*|,
% |-*|, |-*|, |0| ou |1|, la seule chose qui compte est de savoir s'il
% commence par un signe \og \(-\)\fg ou pas. Ce qui fait que |\R[--4]|
% donne d�sormais le (douteux?) \R[--4]. Toutefois, on a maintenant
% \R[n] avec |\R[n]| et \R[-m] avec |\R[-m]| et c'est bien cela dont
% j'avais besoin ces derniers temps! On peut m�me laisser des blancs
% devant le signe moins: \verb*+\R[ -3]+ donne \R[ -3] gr�ce � une
% r�ponse de Manuel \textsc{P�gouri�-Gonnard} sur \fctt.
% 
% Comme il serait fastidieux d'avoir � taper
% \cs{EnsembleDeNombre}\BOP|{N}|\BOP|{1}|\BOP|{}|\BOP|{}| pour obtenir
% simplement \N, je fournis maintenant des commandes courtes
% auxquelles j'ai d�j� fait allusion ci-dessus. Ce sont \cs{N}
% pour~\N, \cs{Z} pour~\Z, \cs{Q} pour~\Q, \cs{R} pour~\R, \cs{C}
% pour~\C et, enfin, si on a pass� la valeur \Optionval{true}{taupe} �
% la cl� \Optioncle{taupe}, \cs{K} pour~\K.
% 
% \bigbreak
% 
% Je ne fournis pas \cs{D} pour les d�cimaux car, d'une part, je doute
% finalement de l'utilit� de cet ensemble et, d'autre part, je r�serve
% cette macro pour plus tard.
% 
% \bigbreak
% 
% J'utilise ici, avec beaucoup de satisfactions, l'extension
% \Pkg{xargs} afin que ces macros prennent deux arguments optionnels
% qui fourniront, dans l'ordre, les 2\ieme et 3\ieme arguments de
% \cs{EnsembleDeNombre}. Par d�faut, le 1\ier argument vaut~|1| et le
% 2\ieme~|X|. 
% 
% Voici toutes les fa�ons d'utiliser \cs{R}, \PX, et ce qu'elles
% produisent: 
% \begin{itemize}\mlabel{nomsens}
% \item |\R| donne \R;
% \item |\R[*]| donne \R[*];
% \item |\R[+]| donne \R[+];
% \item |\R[-]| donne \R[-];
% \item |\R[+*]| ou |\R[*+]| donne \R[+*];
% \item |\R[-*]| ou |\R[*-]| donne \R[-*];
% \item |\R[1]| donne \R[1];
% \item |\R[5]| donne \R[5];
% \item |\R[n]| donne \R[n];
% \item |\R[0]| donne \R[0];
% \item |\R[-6]| donne \R[-6];
% \item |\R[-m]| donne \R[-m];
% \item |\R[-6][Y]| donne \R[-6][Y]. 
% \end{itemize}
% On notera que l'on ne peut pas donner le 2\ieme argument optionnel
% sans donner d'abord le premier.
% 
% \bigbreak
% 
% Cependant, pour des raisons que l'on peut voir \Page{suite*} �
% propos de \cs{suite*}, je fournis quelques macros suppl�mentaires
% qui, du coup, peuvent abr�ger la saisie. 
% 
% \DescribeMacro{\R*} \cs{N}, \cs{Z}, \cs{Q}, \cs{R} et \cs{C} ont une
% forme �toil�e qui fait la m�me chose que la macro avec une |*| pour
% 1\ier argument. On aura donc, \PX, \N* avec |\N*| comme avec
% |\N[*]|. Il en est de m�me avec \cs{K} si \texttt{taupe.sto} est
% charg�.
% 
% \DescribeMacro{\R+} \cs{Q} et \cs{R} ont une forme
% \emph{pluss�e} et une forme \emph{moins�e} qui font, respectivement,
% la m�me chose que \DescribeMacro{\R-} la macro avec |+| et |-| pour
% 1\ier argument optionnel. On aura donc, \PX, \Q+ avec |\Q+| comme
% avec |\Q[+]| et \R- avec |\R-| comme avec |\R[-]|.\mlabel{plusse}
% 
% \DescribeMacro{\R>} \cs{R} b�n�ficie de deux autres raccourcis, �
% savoir \cs{R>} qui produit \R> \CAD la m�me chose que |\R[+*]|
% \DescribeMacro{\R<} et \cs{R<} qui produit \R< \CAD comme |\R[-*]|.
% Si l'on veut d�finir d'autres raccourcis du m�me genre on pourra
% regarder le code page~\pageref{suffixe}.
% 
% Toutefois, si pour une raison quelconque, on voulait \og \(\Q{} +
% \Q\)\fg on devra coder |\(\Q{} + \Q\)|. Il arrive que certaines
% �pines aient des roses\dots
% 
% � la demande\SignalNouveau{1.3} de Maxime Chupin, on dispose
% d�sormais de la macro |\R/| qui donne \R/ et |\R/+| qui donne \R/+.
% 
% \subsection{Des vecteurs, des bases et des rep�res}
% \label{SSECvecteursutil}
%
% \DescribeMacro{\definirvecteur}\mlabel{definirvecteur}
% Cette macro permet, comme son nom l'indique presque, de d�finir 
% des macros qui produisent des vecteurs. Sa syntaxe est: 
% 
% \noindent\cs{definirvecteur}\oarg{bb}\BOP\marg{a}\BOP%
% \marg{n}\BOP\marg{m} 
% 
% Avec \cs{definirvecteur}\BOP\marg{a}\BOP\marg{n}\BOP\marg{m} on
% obtient une macro qui s'appelle \cs{vecta} et qui produit, en se
% pla�ant dans le mode math�matique, la lettre |a| surmont�e de la
% fl�che que donne \cs{overrightarrow} avec un d�calage de |n|~|mu|s
% devant et |m|~|mu|s derri�re le texte.
% 
% L'argument optionnel \meta{bb} permet d'obtenir le nom
% \cs{vectbb} ce qui est indispensable quand le 1\ier argument
% obligatoire est lui-m�me une macro comme \PX \cs{imath}.
% 
% Cette macro fait appel � \cs{TdSM@fairevecteur} d�crite
% \Page{TdSMAfairevecteur}.
% 
% \DescribeMacro{\redefinirvecteur}\mlabel{redefinirvecteur}
% Elle teste l'existence d'une macro du m�me nom et produit une erreur
% s'il en existe d�j� une. Si l'on veut red�finir une commande comme
% \cs{vecti}, on utilisera \cs{redefinirvecteur} qui a la m�me syntaxe
% que sa grande s�ur et qui, elle, produira une erreur si on tente de
% red�finir un vecteur qui ne l'est pas encore.  
% 
% \bigbreak
% 
% \DescribeMacro{\vecti}
% Gr�ce � \cs{definirvecteur}, je d�finis quelques vecteurs courants
% \DescribeMacro{\vectj}
% et utiles: \cs{vecti} \vecti; \cs{vectj} \vectj; \cs{vectk} \vectk; 
% \DescribeMacro{\vectk}
% \cs{vectu} \vectu et enfin \cs{vectv} \vectv.  
% 
% On pourra comparer la composition que permet d'obtenir
% \DescribeMacro{\vectu}
% \cs{TdSM@faire}\BOP|vec|\BOP|teur|, � l'aide des 2\ieme et 3\ieme
% arguments qui 
% \DescribeMacro{\vectv}
% d�finissent un nombre de |mu|s, avec ce que donne une composition
% directe comme ici: \vecti obtenu avec |\vecti| et
% \(\overrightarrow\imath\) produit par |\(\overrightarrow\imath\)|. 
% 
% \bigbreak
% 
% \DescribeMacro{\vecteur}\mlabel{vecteur}
% Cette macro peut �tre suivie par une �toile. Elle prend un argument
% optionnel, valant |1| par d�faut, qui d�termine l'espace plac�
% devant le texte sous la fl�che.
% 
% Elle prend un argument obligatoire qui donne le \meta{texte} qui
% sera plac� sous la fl�che du vecteur. Avec la version sans �toile,
% le texte est compos� \emph{normalement} en mode math�matique comme
% dans \vecteur{AB} produit par |\vecteur{AB}|. Avec la version
% �toil�e le texte est en caract�res romains, ou, plus exactement, est
% compos� dans la police en vigueur pour l'argument de \cs{text} de
% l'extension \Pkg{amstext}, charg�e ici par l'interm�diaire de
% \Pkg{amsmath}. On a donc \vecteur*{CD} avec |\vecteur*{CD}|.
% 
% Enfin, le troisi�me argument, optionnel, r�gle l'espace
% suppl�mentaire, toujours en nombre de |mu|s, qui suit le
% texte. Comparez 
% \vecteur{AB} produit par |\vecteur{AB}| avec 
% \vecteur[10]{AB} produit par |\vecteur[10]{AB}|, 
% \vecteur{AB}[20] produit par |\vecteur{AB}[20]| et 
% \vecteur[10]{AB}[20] produit par |\vecteur[10]{AB}[20]|. 
% 
% \DescribeMacro{\V}
% Ce n'est qu'un raccourci de \cs{vecteur}. Il a donc la m�me syntaxe:
% 
% \noindent\cs{V}|*|\oarg{espace-avant}\marg{texte}\oarg{espace-apr�s}
% 
% o� \meta{espace-avant} et \meta{espace-apr�s} sont des nombres.
% 
% \bigbreak
% 
% \DescribeMacro{\base}\mlabel{base}
% La macro \cs{base} admet un seul argument, optionnel, qui ne doit
% prendre que les valeurs |1|, |2| \TO valeur par d�faut\TF ou |3|. On
% obtient alors \base[1] avec |\base[1]|, \base avec |\base| ou
% |\base[2]|, \base[3] avec |\base[3]|. 
% 
% \bigbreak
% 
% \DescribeMacro{\repere}\mlabel{repere}
% La macro \cs{repere} fournit un rep�re � la fran�aise. Elle est
% construite sur \cs{base} et son 1\ier argument optionnel a le m�me
% r�le que celui de \cs{base}. Le 2\ieme argument optionnel de
% \cs{repere} d�finit le centre du rep�re, c'est |O| par d�faut.
% 
% On a donc \repere ou \repere[3] ou \repere[2][O'] avec |\repere| ou
% |\repere[3]| ou |\repere[2][O']|. On a m�me \repere[1] avec
% |\repere[1]|.  
% 
% Je rappelle qu'il faut le 1\ier argument optionnel si l'on veut
% pr�ciser le 2\ieme.
% 
% Voyons maintenant le rendu des rep�res dans une formule hors-texte: 
% \[\repere[1] \quad \repere \quad \repere[3]\]
% 
% \bigbreak
% 
% Viennent maintenant des macros qui servent essentiellement
% d'abr�viations.
% 
% \DescribeMacro{\rog}\mlabel{rog}
% Tout d'abord ce qu'il faut pour �crire \og \rog\fg avec \cs{rog}
% puis \og \ron\fg avec \cs{ron} \DescribeMacro{\ron}\mlabel{ron} et
% enfin \og \rond\fg avec \cs{rond}.\DescribeMacro{\rond}\mlabel{rond}
% 
% Ces trois commandes acceptent les m�mes arguments que \cs{repere} ce
% qui fait que l'on peut obtenir \og \rond[3][A]\fg avec
% |\rond[3][A]|. On \textbf{ne} doit \textbf{pas} les utiliser en mode
% math�matiques.
% 
% \DescribeMacro{\repcom}\mlabel{repcom} 
% Je fais de m�me avec les rep�res pour le plan complexe, o�, en
% g�n�ral, on utilise \vectu et \vectv pour la base.
% \DescribeMacro{\roncom}\mlabel{roncom} On a donc \og \repcom\fg avec
% \cs{repcom}, \DescribeMacro{\rondcom}\mlabel{rondcom} \og \roncom\fg
% avec \cs{roncom} et enfin \og \rondcom\fg avec \cs{rondcom}.
% 
% Je fournis de quoi �crire les rep�res � la mode du
% coll�ge\footnote{Enfin, c'est comme cela que j'y pensais du temps o�
% j'enseignais en lyc�e. Est-ce bien encore le cas?} mais je ne traite
% que le cas d'un rep�re du plan. 
% 
% \medbreak
% 
% \DescribeMacro{\Repere}\mlabel{Repere}
% Cette macro a une forme �toil�e. Sans �toile, on obtient \og
% \DescribeMacro{\Repere*}
% \Repere\fg et avec l'�toile \TO \CAD avec \cs{Repere*}\TF c'est \og
% \Repere*\fg.
% 
% \DescribeMacro{\Rog}
% Viennent ensuite des abr�viations, construites sur le m�me mod�le
% que les pr�c�dentes: \cs{Rog} pour \og \Rog\fg, \cs{Ron} pour \og
% \DescribeMacro{\Ron}
% \Ron\fg et enfin \cs{Rond} pour \og \Rond\fg. Elles ont toutes une
% forme �toil�e qui permet d'obtenir les lettres \og droites\fg \TO
% \DescribeMacro{\Rond}
% avec les m�mes remarques qu'� propos de \cs{vecteur*},
% \Voir{vecteur}. On a donc, \PX, \og \Rond*\fg avec |\Rond*|. 
% 
% \subsection{L'exponentielle}
% \label{SSECfonctionsutil}
%
% \DescribeMacro{\E}\mlabel{E}
% La macro \cs{E} permet d'obtenir un \og e\fg droit quelque soit
% l'environnement: \og \emph{Le nombre \E vaut approximativement
% \(\np{2,7}\)}\fg cod� |\emph{Le nombre| |\E| |vaut|
% |approximativement| |\(\np{2,7}\).}| grace � \cs{textup} mais il
% n'est en \emph{romain} que si l'environnement est en romain: \og
% \textsl{\textsf{Le nombre \E vaut approximativement
% \(\np{2,7}\)}}\fg o� j'ai utilis� \cs{textsl} pour obtenir des
% caract�res sans empattements. 
% 
% \DescribeMacro{\eu}\mlabel{eu}
% La macro \cs{eu} prend un argument obligatoire qui sera plac� en
% exposant. On saisit |\eu{2x+3}| pour obtenir \eu{2x+3}. Une fois
% encore, grace � \cs{ensuremath}, on n'a pas besoin de passer
% explicitement en mode math�matique.  
% 
% \subsection{Le nombre i}
% 
% \DescribeMacro{\I}\mlabel{I} Je d�finis \cs{I} pour qu'elle donne un
% \og i\fg droit qui est ce que l'on devrait utiliser en fran�ais pour
% noter \og la racine carr�e de \(-1\)\fg \TO pour parler comme les
% anciens.
% 
% On a donc \og le nombre \I qui v�rifie \(\I^{2}=-1\)\fg avec
% le code \og |le| |nombre| |\I| |qui| |v�rifie| |\(\I^{2}=-1\)|\fg.
% 
% Les remarques faites ci-dessus � propos de~\cs{E} s'appliquent
% �galement �~\cs{I}.
% 
% \subsection{Int�grales}
% \label{SSECintegralesutil}
%
% \[\intabfx \qquad \text{plut�t que �a:}\qquad \int_{a}^{b}f(x)dx\]
%
% \DescribeMacro{\FixeReculIntegrande}\mlabel{FixeReculIntegrande}
% Ces deux macros prennent un \textbf{nombre} pour unique argument
% obligatoire.  
% \DescribeMacro{\FixeAvanceDx}\mlabel{FixeAvanceDx}
% Elles permettent de \emph{fixer} le nombre de |mu|s dont
% l'int�grande sera rapproch� du signe somme et celui dont
% l'int�grande et le \(\D x\) seront s�par�s. 
% 
% \medbreak
% 
% \DescribeMacro{\D}\mlabel{D}
% Je fournis la macro \cs{D} avec un \cs{providecommand} car elle est
% d�j� d�finie par \Pkg{kpfonts} de Christophe \textsc{Caignaert},
% avec le m�me effet mais par un autre tour. Cela permet d'utiliser
% \Pkg{kpfonts} et \Pkg{tdsfrmath} sans craindre un conflit de nom. 
% 
% \bigbreak
% 
% \DescribeMacro{\intgen}\mlabel{intgen}
% C'est la macro la plus g�n�rale pour �crire une int�grale. Sa
% syntaxe est:
%  
% \noindent\cs{intgen}\BOP\oarg{md}\BOP\oarg{recul}\BOP\marg{inf}%
% \BOP\marg{sup}\BOP\marg{int�grande}
% 
% \noindent o� \meta{md} est le mode dans lequel sera compos� la
% formule, par d�faut le mode math�matique courant, valeur |1|, avec
% |0| on est en mode hors-texte \TO je ne fais pas de rappel sur ce
% qu'il faut penser de cette man�uvre \Sourire
% 
% \meta{recul} vaut par d�faut |6mu| ou la valeur fix�e par
% \cs{FixeReculIntegrande}, sinon ce doit �tre un nombre de |mu|s \TO
% explicitement on �crira |[1][-8mu]|, et je rappelle que le 2\ieme
% argument optionnel ne peut �tre donn� que si le 1\ier est donn�
% �galement. \meta{inf} et \meta{sup} sont les bornes inf�rieure et
% sup�rieure de l'int�grale, \meta{int�grande} est \TO surprise!\TF
% l'int�grande.
% 
% On l'utilise lorsque l'int�grande et le \(\D x\) sont
% \emph{m�lang�s} comme dans \[\intgen{2}{5}{\dfrac{\D x}{\ln x}}\]
% cod� avec |\[\intgen{2}{5}{\dfrac{\D x}{\ln x}}\]|.
% 
% \bigbreak
% 
% \DescribeMacro{\integrer}\mlabel{integrer} Vient la macro pour le
% cas o� l'int�grande est s�par� de \(\D x\). Sa syntaxe est:
%  
% \noindent\cs{integrer}\BOP\oarg{md}\BOP\oarg{recul}\BOP\marg{inf}%
% \BOP\marg{sup}\BOP\marg{integrande}\BOP\marg{var}%
% \BOP\oarg{avance}.
% 
% On retrouve les arguments de \cs{intgen} mais on trouve un argument
% obligatoire suppl�mentaire \meta{var}, qui est le symbole de la
% variable, et un argument optionnel final \meta{avance} qui r�gle
% la distance entre l'int�grande et le |\D|; \meta{avance} est
% soumis aux m�mes r�gles que le \meta{recul}. Par d�faut
% \meta{avance} vaut |4mu|. 
% 
% On code |\[\integrer{0}{\pi}{\cos 2x}{x}\]| pour
% avoir \[\integrer{0}{\pi}{\cos 2x}{x}\] 
% 
% \bigbreak
% 
% \DescribeMacro{\integrale}\mlabel{integrale}
% La macro suivante est construite sur \cs{integrer} mais est con�ue
% pour �tre un raccourci de
% \cs{integrer}|{a}|\BOP|{b}|\BOP|{f(x)}|\BOP|{x}| avec 
% \cs{integrale}|{a}|\BOP|{b}|\BOP|{f}|\BOP|{x}|. 
% 
% � l'exception du 3\ieme argument obligatoire qui est un
% \emph{symbole} de fonction \TO comme \(f\), \(g\) \&c\TF tous ses
% arguments sont ceux de \cs{integrer}. 
% 
% \DescribeMacro{\intabfx}\mlabel{intabfx}
% Enfin, raccourci du raccourci \cs{intabfx} remplace
% \cs{integrale}|{a}|\BOP|{b}|\BOP|{f}|\BOP|{x}| et compose \intabfx
% dans le cours du texte et \[\intabfx\] en hors-texte.
% 
%
% \subsection{Au bonheur du math�maticien, bazar}
% \label{SSECbazarutil}
%
% Je regroupe ici plusieurs macros qui me facilitent la vie dans la
% saisie des math�matiques. J'y fais une utilisation intense de
% \cs{ensuremath} et \cs{xspace}. 
% 
%
% \subsubsection{De l'infini}
% \label{SSSECinfiniutil}
% 
% \DescribeMacro{\plusinf}\mlabel{plusinf} J'ai mis tr�s longtemps �
% retenir le nom de \cs{infty}, aussi je me
% \DescribeMacro{\moinsinf}\mlabel{moinsinf}suis fait \cs{plusinf},
% \plusinf, et \cs{moinsinf}, \moinsinf. J'esp�re que leurs seuls noms
% me dispense d'en dire plus sauf qu'il me faut pr�ciser qu'elles
% assurent le mode math�matique et s'occupe de l'espace derri�re ce
% qui permet d'�crire |et| |en| |\moinsinf| |on| |trouve| pour
% composer \og et en \moinsinf on trouve\fg.
% 
% \subsubsection{\texorpdfstring{Des intervalles de
% \(\mathbb{R}\)}{Des intervalles de R}} 
% \label{SSSECintervalesdeRutil}
% 
% \DescribeMacro{\interff}\mlabel{interff} 
% On peut �crire les diff�rents intervalles avec les macros
% \cs{interff}, \cs{interoo}, \cs{interof} et
% \DescribeMacro{\interoo}\mlabel{interoo}\cs{interfo}. Leur
% syntaxe commune est
% \cs{int...}\BOP\oarg{md}\BOP\oarg{avant}\BOP\marg{a b}%
% \BOP\oarg{apr�s}.
% On retiendra que \cs{inter} est mis pour \texttt{intervalle} puis
% que la premi�re lettre donne le \emph{sens} du crochet gauche et la
% suivante celui du crochet droit avec \texttt{f} pour \emph{ferm�} et
% \texttt{o} pour \emph{ouvert}. 
% 
% Le premier argument \meta{md} est optionnel est r�gle le mode
% \DescribeMacro{\interfo} math�matique, il vaut |1| par d�faut. Le
% 2\ieme \meta{avant}, optionnel, vaut |0| par d�faut et donne le
% nombre de~|mu|s qui s�pare le d�limiteur ouvrant du texte.  Le
% 4\ieme et dernier \meta{apr�s}, qui vaut |0| par d�faut, est
% �galement optionnel. Il d�finit, en nombre
% \DescribeMacro{\interof} de~|mu|s, la distance qui s�pare le texte
% int�rieur du d�limiteur fermant.
% 
% Le 3\ieme argument \meta{a b} est obligatoire, il fournit le texte �
% placer entre les d�limiteurs. L'espace s�pare les deux valeurs
% extr�mes de l'intervalle. On code donc \verb*|\interff{12 37/5}|
% pour obtenir \interff{12 37/5} mais il faudra coder
% |\interoo|\BOP\verb*|{\moinsinf{} |\BOP|\plusinf}| pour avoir
% \interoo{\moinsinf{} \plusinf}.
% 
% Le s�parateur des valeurs extr�mes de l'intervalle est soumis � la
% cl� \Optioncle{nupletsep}.
% 
% \subsubsection{La r�serve du bazar, miscellan�es}
% 
% \DescribeMacro{\mdfrac}\mlabel{mdfrac}
% Deux macros pour fain�ant donc pour moi \Sourire: \cs{mdfrac} et
% \DescribeMacro{\mfrac}\mlabel{mfrac}
% \cs{mfrac} permettent de saisir les fractions comme si on utilisait
% |\(\dfrac{...}{...}\)| et |\(\frac{...}{...}\)| respectivement. On
% pourra donc coder |\mfrac{1}{2}| pour obtenir \mfrac{1}{2}. 
% 
% \medbreak
% 
% \DescribeMacro{\cnp}\mlabel{cnp}
% Il fut une �poque o�, en France, on ne notait pas le nombre de
% combinaisons comme dans le monde anglo-saxon, d'o� \cs{cnp}. La
% tradition s'est perdue mais la macro est rest�e pour fournir la
% notation \emph{nouvelle vague}. Avec |\cnp{n}{p}| on a
% \cnp{n}{p}. L� encore il n'est pas n�cessaire de passer
% explicitement en mode math�matique. 
% 
% \medbreak
% 
% \DescribeMacro{\dans}\mlabel{dans}
% Deux abr�viations pour �crire les d�finitions de fonctions. Je
% trouve que \cs{dans} est plus court et plus facile � retenir que
% \DescribeMacro{\donne}\mlabel{donne} \cs{longrightarrow} et qu'il en
% est de m�me de \cs{donne} vis-�-vis de \cs{longmapsto}. De fait
% |\(f\):| |\(\R \dans \R\);| |\(x \donne 2x\)| compose: \og \(f\):
% \(\R \dans \R\); \(x \donne 2x\)\fg\footnote{D�but seconde,
% peut-�tre \Sourire}. 
% 
% \medbreak
% 
% \DescribeMacro{\vide}\mlabel{vide}
% Je pr�f�re \vide � \(\emptyset\)\footnote{Celui-l� je m'en sers
% tellement que j'avais oubli� son nom. Ce n'est pas \cs{nothing} mais
% \cs{emptyset} pour faciliter le travail de la m�moire.} et par
% paresse encore, je me suis fait une \cs{vide} qui permet de saisir
% |\vide et autre| pour obtenir \og \vide et autre\fg. Merci
% \cs{ensuremath} \emph{et} \cs{xspace}.  
% 
% \medbreak
% 
% \DescribeMacro{\ppq}\mlabel{ppq}
% Je veux ceci \(0 \ppq 1\) et \(2 \pgq 1\). Comme \cs{leqslant} et
% \DescribeMacro{\pgq}\mlabel{pgq}
% \cs{geqslant}, c'est pas beau, je me suis fait \cs{ppq} \TO \textbf{p}lus
% \textbf{p}etit \textbf{q}ue\TF et \cs{pgq} \TO \textbf{g}rand.
% 
% \medbreak
% 
% \DescribeMacro{\ensemble}\mlabel{ensemble}
% La macro \cs{ensemble} a deux arguments obligatoires, elle sert �
% �crire la d�finition d'un ensemble comme \og
% \ensemble{x\in\R}{f(x)\pgq \frac{1}{2}}\fg obtenu avec 
% |\ensemble|\BOP|{x\in\R}|\BOP|{f(x)\pgq \frac{1}{2}}| et dont l'aspect est
% \[\ensemble{x\in\R}{f(x)\pgq \frac{1}{2}}\] 
% en hors-texte, du fait de la pr�sence de \cs{middle}, lorsque la cl�
% bool�enne \Optioncle{SepDefEnsExt} vaut \OptionvalPresent{true}
% comme c'est le cas par d�faut. 
% 
% Sa syntaxe compl�te est: 
% 
% \noindent\cs{ensemble}\oarg{avant}\marg{1\ier texte}\marg{2\ieme
% texte}\oarg{apr�s} 
% 
% \noindent o� \meta{avant} et \meta{apr�s} doivent �tre des
% nombres. Leur valeur par d�faut est |3|. Ces arguments optionnels
% r�glent la distance avant et apr�s le symbole de s�paration, en
% nombre de |mu|s.
% 
% \subsection{Pour les taupes, taupins et taupines} 
% 
% Les macros de cette section ne sont d�finies que si l'on a pass� la
% valeur \Optionval{true}{taupe} � la cl� \Optioncle{taupe}. Je ne
% pense pas que ces macros soient utiles avant le sup�rieur. Cependant
% aucun m�canisme n'est pr�vu pour s'assurer de la destination du
% document final \Sourire
% 
% \DescribeMacro{\K}\mlabel{K}
% La macro \cs{K} donne \K, le corps bien connu, alias de \R ou \C.  
% 
% \medbreak
% 
% \DescribeMacro{\prodscal}\mlabel{prodscal}
% Cette macro permet d'�crire le produit scalaire comme on le trouve
% assez souvent dans les bouquins pour taupins. Elle ne prend qu'un
% seul argument obligatoire qui est une liste dont les �l�ments sont
% s�par�s par des espaces. Les remarques formul�es � propos de
% \cs{nuplet} s'appliquent donc ici. 
% 
% Avec |\prodscal{u v}| on obtient \og \prodscal{u v}\fg et avec
% |\prodscal{\vectu{}| |\vectv|\BOP|}| ou |\prodscal{{\vectu}| 
% |\vectv}| on obtient \og \prodscal{{\vectu} \vectv}\fg.
% 
% \bigbreak
% 
% Je red�finis quelques macros classiques pour leur donner un aspect
% fran�ais comme on le trouve encore souvent.\label{fonctiontaupe}
% 
% Ce sont les fonctions taupiques usuelles \cs{sinh}, \cs{cosh},
% \cs{tanh} auxquelles j'ajoute \cs{cot} parce que j'ai d� en avoir
% besoin un jour.
% 
% On aura donc, \PX, \og \(\cosh x\)\fg en codant |\(\cosh x\)|.
% 
% Je cr�e les macros \cs{argsh}, \cs{argch} et \cs{argth} pour les
% fonctions hyperboliques r�ciproques. Par d�faut elles ont l'aspect
% suivant: \(\argch x\), \(\argsh y\) et \(\argth z\). 
% 
% \medbreak
% 
% Si on a pass� la valeur \Optionval{true}{ArgArcMaj} � la cl�
% \Optioncle{ArgArcMaj} alors je d�finis les macros \cs{argsh},
% \cs{argch} et \cs{argth} pour qu'elles soient �crites avec une
% majuscule comme \(\operatorname{Argsh}x\). Dans ce cas, je red�finis
% �galement les macros \cs{arccos}, \cs{arcsin} et \cs{arctan} pour
% qu'elles aient le m�me aspect.
% 
% \begin{table}[h,t]
%   \centering
%   \caption{Macros red�finies dans \texttt{taupe.sto}}
%   \label{TABmacrosredeftaupe}
%   \begin{tabular}[c]{*{2}{l >{\(}l<{\)}}}
%     \cs{sinh} & \sinh x &  \cs{cosh} & \cosh x\\
%     \cs{tanh} & \tanh x &  \cs{cot} & \cot y\\
%   \end{tabular}
% \end{table}
% 
% \begin{table}[h,t]
%   \centering
%   \caption{Macros dont l'aspect d�pend de la cl�
%   \OptionclePresent{ArgArcMaj} --- aspect par d�faut} 
%   \label{TABmacrosdefdouble}
%   \begin{tabular}[c]{*{2}{l >{\(}l<{\)}}}
%     \cs{arccos} & \arccos x &  \cs{arcsin} & \arcsin x\\
%     \cs{arctan} & \arctan x &  \cs{argsh}  & \argsh x\\
%     \cs{argch}  & \argch x  &  \cs{argth}  & \argth x\\
%   \end{tabular}
% \end{table}
% 
% Pour noter le noyau et l'image avec une majuscule, je fournis
% \cs{Ker} \TO \(\Ker f\) avec |\(\Ker f\)| � comparer � \(\ker f\)
% avec |\(\ker f\)|\TF et \cs{Img} qui donne \(\Img f\) avec 
% |\(\Img f\)| \TO \cs{Im} est d�j� prise pour noter la partie
% imaginaire d'un complexe.
% 
% \medbreak
% 
% \DescribeMacro{\tendversen}\mlabel{tendversen}
% Pour �crire \(f(x)\tendversen{0} \plusinf\), je fournis
% \cs{tendversen}\marg{en} � utiliser \textbf{en mode
% math�matique}. J'ai cod� 
% |\(f(x)|\BOP|\tendversen{0}| |\plusinf\)| l'exemple ci-avant. 
% 
% \medbreak
% 
% \DescribeMacro{\devlim}\mlabel{devlim}
% Je fournis \cs{devlim}\oarg{en}\marg{ordre} � utiliser en mode
% math�matique pour obtenir \devlim{4} avec |\devlim{4}| et
% \devlim[1]{7} avec |\devlim[1]{7}|. On remarque donc que \meta{en}
% vaut |0| par d�faut. N'est-ce pas �trange? 
% 
% \medbreak
% 
% \DescribeMacro{\parties}\mlabel{parties} 
% Pour �crire \parties{E}, je fournis \cs{parties} utilisable en mode
% texte. Sa syntaxe est \cs{parties}\oarg{n}\marg{ensemble} o�
% \emph{n} est un nombre de~|mu|s qui permet de r�gler la distance
% entre \manus{p} et la parenth�se ouvrante, \emph{n} vaut |-2| par
% d�faut; \emph{ensemble} est le nom de l'ensemble dont on consid�re
% l'ensemble des parties, �tonnant, non? 
% 
% \medbreak
% 
% \DescribeMacro{\drv}\mlabel{drv}
% Pour �crire \og \drv{f(x)}{x}\fg, je fournis
% \cs{drv}\BOP\marg{fonction}\BOP\marg{var} utilisable en mode
% texte. J'ai cod� |\drv{f(x)}{x}| l'exemple ci-dessus.
% 
% Cette macro admet d�sormais --- depuis la version
% 1.3\SignalNouveau{1.3} --- un argument optionnel avec
% |\drv[3]{f(x)}{x}| on obtient \og \drv[3]{f(x)}{x}\fg.
% 
% \medbreak
% 
% \DescribeMacro{\ddrv}\mlabel{ddrv} \cs{ddrv} est � \cs{drv}, ce que
% \cs{dfrac} est � \cs{frac} et donc \og |et| |\ddrv{f(x)}{x}|
% |vaut|\fg compose \og et \ddrv{f(x)}{x} vaut \fg, en bousillant
% l'interligne comme pr�vu! Elle admet �galement un argument optionnel
% qui joue le m�me r�le que celui de~\cs{drv}.
% 
% \medbreak
% 
% \DescribeMacro{\interent}\mlabel{interent}
% Avec |\interent{3 12}| on obtient \interent{3 12}. Cette macro a
% pour syntaxe compl�te:
% \cs{interent}\BOP\oarg{md}\BOP\oarg{avant}\BOP\marg{n m}%
% \BOP\oarg{apr�s}, les arguments jouant le m�me r�le que ceux des
% macros pour intervalles, \Voir{interff}.
% 
% Sa d�finition utilise \cs{llbracket} et \cs{rrbracket} fournis par
% \Pkg{stmaryrd} charg� quand \Optioncle{taupe} vaut
% \Optionval{true}{taupe}.   
% 
% \DescribeMacro{\interzn}\mlabel{interzn}
% Cette macro permet d'obtenir \interzn avec \cs{interzn}. Sa syntaxe
% est d�riv�e de celle de \cs{interent} et prend les m�mes arguments
% \emph{optionnels} avec la m�me signification. Sa syntaxe est donc
% \cs{interzn}\oarg{md}\oarg{avant}\oarg{apr�s}.
% 
% \bigbreak
% 
% Je consacre quelques lignes � la macro \cs{derpart} qui permet
% d'obtenir \TO et je passe en mode math�matique hors-texte pour
% l'occasion\TF 
% \[\derpart{f\rnuplet{x y z}}{xxyyyz}\]
% avec le code |\[\derpart{f\rnuplet{x y z}}{xxyyyz}\]|. 
% 
% \DescribeMacro{\TdSMDerPartSepar}\mlabel{TdSMDerPartSepar}
% Cette macro contient ce qui s�pare, \PX, un \(\partial x^{2}\) du
% \(\partial y\) qui le suit. Par d�faut, elle est d�finie comme �tant
% �gale � |\,| ce qui, � mon sens, am�liore le rendu. Mais on peut la
% red�finir avec un coup de \cs{renewcommand}.
% 
% \DescribeMacro{\derpart}\mlabel{derpart}
% Comme on vient de le voir cette macro permet d'obtenir l'�criture de
% la d�riv�e partielle. Sa syntaxe est:
% 
% \noindent\cs{derpart}\marg{dessus}\marg{dessous}
% 
% \noindent o� \meta{dessus} est le texte qui sera compos� � cot� du
% \(\partial\) au num�rateur et \meta{dessous} est une liste de
% lex�mes \TO � priori des lettres mais on peut y placer une macro
% comme \cs{alpha} en la faisant suivre d'un espace\TF qui formeront
% le d�nominateur.
% 
% Cette macro assure le passage en mode math�matique si n�cessaire.
% 
% Allez, encore un petit exemple, 
% |\[|\BOP|\derpart|\BOP|{f}|\BOP\verb*|{xyz  zz\alpha\alpha x}|%
% \BOP|\]| compose 
% \[\derpart{f}{x y z  z z\alpha\alpha x}\] 
% et on voit que l'on peut se permettre de placer des espaces inutiles
% \Sourire 
% 
% \textsf{Remarque}: pour les utilisateurs de \Pkg{paresse}. On ne
% peut pas utiliser |�a| comme raccourci de \cs{alpha} dans le 2\ieme
% argument de \cs{derpart}. �a serait analys� comme |�| puis |a| ce
% qui n'est peut-�tre pas tout � fait ce que l'on veut. 
% 
% \subsection{Des suites pour le secondaire}
% 
% Lorsque l'on passe la valeur \Optionval{true}{suite} � la cl�
% \Optioncle{suite}, on charge le fichier \texttt{suite.sto} qui donne
% acc�s � quelques macros concernant les suites.
% 
% Depuis la version 1.3\SignalNouveau{1.3}, on obtient le chargement
% de \texttt{suite.sto} en �crivant simplement
% |\usepackage[suite]{tdsfrmath}|.
% 
% \DescribeMacro{\suite}\mlabel{suite}
% La premi�re macro \cs{suite} a pour syntaxe \cs{suite}\oarg{texte}
% et la valeur par d�faut de \meta{texte} est |u|. Elle assure le mode
% math�matique et on peut donc coder |\suite| pour avoir \og
% \suite\fg. 
% 
% \DescribeMacro{\suite*}\mlabel{suite*}
% La version �toil�e a pour syntaxe
% \cs{suite}|*|\oarg{deco}\oarg{texte} o� \meta{texte} a la m�me
% fonction que dans la version sans �toile et o� \meta{deco} vaut
% \cs{N} \CAD \N par d�faut. On a donc \og \suite*\fg avec |\suite*|, 
% \og \suite*[\N*]\fg avec |\suite*[\N*]| et \og
% \suite*[\N][w]\fg avec |\suite*[\N][w]|. 
% 
% \medbreak
% 
% \LaTeX\ ne supporte pas les arguments optionnels imbriqu�s, les
% parenth�ses dans |\suite*[{\N[*]}]| sont absolument indispensables,
% c'est pourquoi j'ai d�fini les macros �toil�es, pluss�es et moins�es
% pr�sent�es en \Page{plusse}. 
% 
% \medbreak
% 
% \DescribeMacro{\suitar}\mlabel{suitar} La commande \cs{suitar} \TO
% \texttt{ar} pour \emph{arithm�tique}\TF a pour syntaxe
% 
% \noindent\cs{suitar}\oarg{texte}\marg{raison}\oarg{rang}\marg{prem}%
% \oarg{entre}
% 
% \noindent o� la valeur par d�faut de \meta{texte} est encore |u|,
% \meta{raison} donne la valeur de la raison de la suite et
% \meta{prem} la valeur du premier terme dont \meta{rang} est le
% rang. Enfin \meta{entre}, qui vaut |{}| par d�faut, compose le
% texte entre la suite et sa description. 
% 
% En codant |\suitar{3}{5}|, on compose \og \suitar{3}{5}\fg et,
% avec |\suitar[w]{3}{5}|, on obtient \og \suitar[w]{3}{5}\fg, enfin,
% avec |\suitar{3}[1]{5}|, on obtient \og \suitar{3}[1]{5}\fg. 
% 
% Avec \verb*|\suitar{3}{5}[ est]| on compose \og \suitar{3}{5}[
% est]\fg, on fera attention � laisser un blanc devant le texte ici.
% Avec \verb*|\suitar{3}{5}[,]| on compose \og \suitar{3}{5}[,]\fg. 
% 
% \medbreak
% 
% \DescribeMacro{\suitgeo}\mlabel{suitgeo} La commande \cs{suitgeo} a
% la m�me syntaxe que \cs{suitar} mais cette fois elle concerne les
% suites g�om�triques. En codant |\suitgeo{3}{5}|, on compose \og
% \suitgeo{3}{5}\fg et, avec |\suitgeo[w]{3}{5}|, on obtient \og
% \suitgeo[w]{3}{5}\fg, enfin, avec |\suitgeo[w]{3}[2]{5}|, on obtient
% \og \suitgeo[w]{3}[2]{5}\fg.
% 
% \DescribeMacro{\suitar*}\mlabel{suitar*}
% Les versions �toil�es, \cs{suitar*} et \cs{suitgeo*} ont la syntaxe
% suivante: 
% 
% \noindent\cs{suitar}|*|\oarg{deco}\oarg{texte}\marg{raison}\oarg{rang}%
% \marg{prem}\oarg{entre}
% 
% \noindent o� on retrouve l'argument optionnel \meta{deco} de
% \cs{suite*} avec la m�me signification, \Voir{suite*}.
% 
% On a donc \og \suitar*[\N*][v]{3}[1]{9}\fg avec le code
% |\suitar*[\N*][v]{3}[1]{9}|. On prendra garde au fait que la macro
% ne cherche pas � assurer la coh�rence entre l'ensemble des indices
% et le rang du premier terme \Sourire 
% 
% \bigbreak
% 
% Ce que je viens de d�crire est le comportement par d�faut de ces
% \DescribeOptionCle{suitedeco}\clabel{suitedeco} macros \cs{suite},
% \cs{suitar}, \cs{suitgeo}, \cs{suite*}, \cs{suitar*} et
% \cs{suitgeo*}, comportement obtenu lorsque la cl�
% \DescribeOptionVal{false}{suitedeco} \Optioncle{suitedeco} a la
% valeur \Optionval{false}{suitedeco}, sa valeur d'origine. Lorsque
% l'on passe la valeur \Optionval{true}{suitedeco}, sa valeur par
% d�faut, � la cl� \Optioncle{suitedeco} le comportement des macros
% avec et sans �toile est invers�.
% 
% \medbreak
% 
% Quitte � �tre un peu lourd, avec |suitedeco=false| on a \og
% \suite\fg avec |\suite| et \og \suite*\fg avec |\suite*|. Avec
% |suitedeco=true| \TO ou simplement |suitedeco|\TF on a \og
% \suite*\fg avec |\suite| et \og \suite\fg avec |\suite*|.
% 
% On fera attention que, si l'on a donn� explicitement les premiers
% arguments optionnels de \cs{suitar}, \PX, dans le cas o�
% |suitedeco=true| on ne pourra pas tout bonnement repasser �
% |suitedeco=false| sans remplacer les formes sans �toiles par des
% formes �toil�es et vice-versa en faisant, de plus, attention au
% 2\ieme argument optionnel donnant le \og nom\fg de la suite. Bref,
% on choisira une fois pour toute la forme de base et on s'y tiendra! 
% 
% 
%\section{R�capitulatif}
%\label{SECrecapitulatif}
% 
% \subsection{Extensions charg�es}
% 
% L'appel de \texttt{tdsfrmath} avec \cs{usepackage} entraine le
% chargement des extensions suivantes: 
% \texttt{ifthen},
% \texttt{xkeyval},
% \texttt{amsmath}, 
% \texttt{amssymb} \TO si \Optioncle{avecmathdesign} a la valeur
% \Optionval{false}{avecmathdesign}\TF,  
% \texttt{xspace}, 
% \texttt{xargs}, 
% \texttt{suffix},
% \texttt{xstring}
% et, si la cl� \Optioncle{taupe} a la valeur \Optionval{true}{taupe},  
% \texttt{stmaryrd} .    
% 
% Il n'est donc pas n�cessaire de les appeler avec \cs{usepackage}
% dans le pr�ambule d'un document chargeant \texttt{tdsfrmath}. 
%
% \subsection{Options}
% 
% Dans la table~\ref{TABcles}, page~\pageref{TABcles}, je note \og
% texte \TeX\fg pour dire que la valeur pass�e � la cl� doit �tre une
% chaine de \emph{lettres} au sens de \TeX, \CAD les minuscules et
% majuscules non accentu�es de l'ASCII comme on le trouve pour le nom
% des macros. Le \og texte\fg tout court est ce qui sert � �crire les
% noms des extensions, on ne devrait donc pas y trouver de caract�res
% \emph{bizarres} mais on peut y voir des chiffres.
% 
%\begin{table}[h,t]
%  \centering
%  \renewcommand{\arraystretch}{1.1}
%  \caption{les cl�s de \Pkg{tdsfrmath}}
%  \label{TABcles}
%  \begin{tabular}{*{2}{l} *{2}{>{\ttfamily}l} l}\hline
%   cl�   & type & \multicolumn{2}{c}{valeur}&\multicolumn{1}{l}{r�f�rence} \\
% \multicolumn{1}{l}{}&\multicolumn{1}{l}{}&d'origine&par d�faut&voir page\\
% \hline\hline
% avecmathdesign & bool�en & false & true& \pageref{avecMD}\\ \hline
%   taupe  & bool�en & false & true &\pageref{cletaupe} \\
%   ArgArcMaj & bool�en & false & true & \pageref{cleArgArcMaj} \\ \hline
%   suite  & bool�en & false & true &\pageref{clesuite} \\
%   suitedeco & bool�en & false & true &\pageref{clesuitedeco} \\ \hline
% SepDefEnsExt& bool�en & true & true &\pageref{cleSepDefEnsExt} \\ \hline
% CharPoCal & bool�en & true& true &\pageref{cleCharPoCal} \\
% calpack & texte & mathrsfs& &\pageref{clecalpack} \\
% calcomd & texte \TeX & mathscr& &\pageref{clecalcomd} \\ 
% caloptn & texte \TeX & ***& &\pageref{clecaloptn} \\ \hline
% CharPoGdT & bool�en & false& true &\pageref{cleCharPoGdT} \\
% gdtpack & texte & ***& &\pageref{clegdtpack} \\
% gdtcomd & texte \TeX & ***& &\pageref{clegdtcomd} \\
% gdtoptn & texte \TeX & ***& &\pageref{clegdtoptn} \\ \hline
% placesigne & choix & haut& &\pageref{cleplacesigne} \\
% ensdeco & choix & ebsh& &\pageref{cleensdeco} \\ \hline
% nupletsep & choix & virgule &  &\pageref{clenupletsep}\\ \hline
%  \end{tabular}
%\end{table}
% 
% 
% 
% \StopEventually{\listoftables}
% \section{Le code}
% \label{secCode}
%
%\subsection{Options et macros de service}
%\label{SSECoptions}
% 
% \iffalse
%<*package>
% \fi
% Je commence par charger une extension bien utile tout de suite. 
%    \begin{macrocode}
\RequirePackage{ifthen}
%    \end{macrocode}
% et une autre qui ne l'est pas moins. 
%    \begin{macrocode}
\RequirePackage{xkeyval}
%    \end{macrocode}
% 
% Depuis la version 1.3\SignalNouveau{1.3}, je charge aussi
% \changes{v1.3}{2009/06/04}{Chargement de \Pkg{xstring}}
%    \begin{macrocode}
\RequirePackage{xstring}
%    \end{macrocode}
% 
% \Pkg{tdsfrmath} est la premi�re extension o� je fais usage de
% \Pkg{xkeyval} et de sa gestion de cl�s pour les options de
% l'extension.
%
%\subsubsection{S�parateur des n-uplets}
%
% \begin{macro}{\TdSM@separateur}
%   Cette macro, d�termin�e par la cl� \Optioncle{nupletsep}, fournit
%   le s�parateur utilis� dans l'�criture des \(n\)-uplets comme dans
%   \nuplet{a b}.
% 
%   J'en profite pour signaler que toutes les macros \og secr�tes\fg
%   de cette extension commence par \cs{TdSM@}.
% 
%   Pour que, plus bas, \cs{ExecuteOptionsX} ait le bon gout de
%   consid�rer les options de l'extension, il faut utiliser le 2\ieme
%   argument de \cs{define@choicekey} en lui passant le nom complet du
%   fichier contenant l'extension. 
% 
%   Pour des raisons de tranquilit� je regroupe toutes les cl�s
%   d�finies au niveau de l'extension dans le \emph{trousseau} \TO la
%   documentation de \texttt{xkeyval} parle simplement d'un pr�fixe\TF
%   \texttt{TdSM}, c'est la raison du 1\ier argument. 
% 
%   Le 3\ieme argument contient le nom de la cl�. Le 4\ieme contient
%   deux macros qui prendront pour la premi�re la valeur pass�e � la
%   clef si elle est valide et pour la deuxi�me un nombre valant
%   \(-1\) si la valeur est invalide sinon le num�ro de la valeur dans
%   la liste \TO aux valeurs s�par�es par des virgules\TF constituant
%   le 5\ieme argument. Les valeurs sont num�rot�es en partant de |0|.
% 
%   Le 6\ieme argument contient du code qui est ex�cut� quand la
%   valeur pass�e � la cl� est valide. Ici, je me sers de \cs{nr} dans
%   le \cs{ifcase} pour d�finir \cs{TdSM@separateur} congrument au
%   choix de l'utilisateur: le 0\ieme cas est celui de la
%   \OptionvalPresent{virgule}, \&c. 
% 
%   Le 7\ieme argument contient le code ex�cut� quand la valeur est
%   invalide. Ici �a consiste en un avertissement \TO erreur non
%   fatale\TF inscrit � la console et dans le \texttt{.log}. 
% 
%   Grace au \texttt{+} on peut utiliser un 7\ieme argument. Grace au
%   \texttt{*}, la v�rification de la validit� de la valeur pass�e �
%   la cl� est faite apr�s que l'entr�e et la liste ont �t� pass�e en
%   minuscules. L'utilisateur peut donc saisir |[nupletsep=Virgule]|
%   sans troubler l'extension. 
% 
%   � la sortie du traitement, on met \cs{val}  � \cs{relax}
%   pour �viter de le rendre inutilisable alors que l'on n'en a plus
%   besoin. On fera la m�me chose avec \cs{nr} apr�s l'ex�cution des
%   options. 
% \changes{v1.3}{2009/01/08}{R��criture du code pour l'option
% nupletsep}
%    \begin{macrocode}
\newcommand{\TdSM@separateur}{\string,\,}
\define@choicekey*+[TdSM]{tdsfrmath.sty}{nupletsep}[\val\nr]%
  {virgule,pointvirgule}{%
    \ifcase\nr\relax
    \renewcommand{\TdSM@separateur}{\string,\,}\or
    \renewcommand{\TdSM@separateur}{\,\string;\,}\fi
  }{%
    \PackageWarningNoLine{tdsfrmath}{la clef <<nupletsep>> ne connait pas
      <<\val>>\MessageBreak <<nupletsep=virgule>> en vigueur}
  }
\let\val\relax
%    \end{macrocode}
% \end{macro}
% 
% \subsubsection{De l'aspect des noms des ensembles classiques}
% 
% \begin{macro}{\TdSM@Decoration}
%   Cette macro place la d�coration. Elle est r�gl�e par
%   \Optioncle{ensdeco}. C'est par la d�claration de cette cl� que je
%   commence. La macro \cs{TdSM@DecoChoix} sert � conserver la trace
%   de la valeur pass�e � la cl�. On s'en servira au moment de d�finir
%   la macro \cs{TdSM@Decoration}
%    \begin{macrocode}
\define@choicekey*+[TdSM]{tdsfrmath.sty}{ensdeco}[\TdSM@DecoChoix\nr]%
  {ehsb,ebsb,ehsh,ebsh,sbeb,sheh}{%
    \PackageInfo{tdsfrmath}{Vous avez choisi \TdSM@DecoChoix\@gobble}
  }{%
    \PackageWarningNoLine{tdsfrmath}{la clef <<ensdeco>> ne connait pas
      <<\TdSM@DecoChoix>>\MessageBreak <<ensdeco=ehsb>> en vigueur}%
    \def\TdSM@DecoChoix{ehsb}}
%    \end{macrocode}
% \end{macro}
% 
% \begin{macro}{\TdSM@PlaceSigne}
%   Cette macro place le signe seul. Elle est r�gl�e par
%   \Optioncle{placesigne}. La macro \cs{TdSM@PlaSiChoix} sert �
%   conserver la trace de la valeur pass�e � la cl�. On s'en servira
%   au moment de d�finir la macro \cs{TdSM@PlaceSigne}
%    \begin{macrocode}
\define@choicekey*+[TdSM]{tdsfrmath.sty}{placesigne}[\TdSM@PlaSiChoix\nr]%
  {haut,bas}{%
    \PackageInfo{tdsfrmath}{Vous avez choisi \TdSM@PlaSiChoix\@gobble}
  }{%
    \PackageWarningNoLine{tdsfrmath}{la clef <<placesigne>> ne connait pas
      <<\TdSM@PlaSiChoix>>\MessageBreak <<placesigne=haut>> en vigueur}%
    \def\TdSM@PlaSiChoix{haut}}
%    \end{macrocode}
% \end{macro}
% 
% \subsubsection{Du choix de la police calligraphique}
% 
% Le m�canisme de \texttt{xkeyval} cr�e la macro \cs{ifTdSM@CharPoCal}
% et ses s�urs \cs{TdSM@CharPoCaltrue} et \cs{TdSM@CharPoCalfalse}.
% Le 5\ieme argument contient \TO depuis la version
% 1.3\SignalNouveau{1.3} \TF la valeur par d�faut |true| ce qui permet
% � l'utilisateur d'obtenir le m�me comportement de \Pkg{tdsfrmath}
% avec |\usepackage|\BOP|[CharPoCal]|\BOP|{tdsfrmath}| qu'avec
% |\usepackage|\BOP|[CharPoCal| |=| |true]|\BOP|{tdsfrmath}|. Il en
% sera de m�me avec toutes les cl�s bool�ennes de cette extension.
% \changes{v1.3}{2009/06/04}{Utilisation de la valeur par d�faut des
%   cl�s bool�ennes}
% 
% On ne confondra pas cette valeur par d�faut avec la valeur que la
% cl� poss�de � l'ex�cution des options, autrement dit, la valeur de
% la cl� lorsque l'extension est appel�e avec un simple
% |\usepackage|\BOP|{tdsfrmath}|. Je parlerai alors de valeur
% \emph{d'origine}.
% 
%    \begin{macrocode}
\define@boolkey+[TdSM]{tdsfrmath.sty}[TdSM@]{CharPoCal}[true]{}%
  {\PackageWarningNoLine{tdsfrmath}{CharPoCal attend la valeur 
      << true >> ou << false >>}}
%    \end{macrocode}
% 
% Avec
% \cs{define@cmdkey}\BOP|[TdSM]|\BOP|{tdsfrmath.sty}|\BOP|[TdSM@]|%
% \BOP|{calpack}|\BOP|[]|\BOP|{}| je d�finis la cl�
% \Optioncle{calpack} et conjointement une macro \cs{TdSM@calpack} qui
% contiendra la valeur pass�e � la cl�. Le pr�fixe de la commande est
% le contenu du 3\ieme argument. La cl� est \emph{attach�e au trousseau}
% \texttt{TdSM} grace au 1\ier argument et, une fois encore, la
% famille est obligatoire pour le fonctionnement ult�rieur du
% \cs{ExecuteOptionsX} et \cs{ProcessOptionsX}, c'est l'objet du
% 2\ieme argument. 
% 
% Le dernier pourrait contenir du code mais je m'occupe de la valeur
% pass�e � la cl� plus bas, \emph{� la main}! 
%    \begin{macrocode}
\define@cmdkey[TdSM]{tdsfrmath.sty}[TdSM@]{calpack}[]{}
\define@cmdkey[TdSM]{tdsfrmath.sty}[TdSM@]{calcomd}[]{}
\define@cmdkey[TdSM]{tdsfrmath.sty}[TdSM@]{caloptn}[]{}
%    \end{macrocode}
%    \begin{macrocode}
%    \end{macrocode}
% 
% \subsubsection{Du choix du gras de tableau}
% 
%    \begin{macrocode}
\define@boolkey[TdSM]{tdsfrmath.sty}[TdSM@]{CharPoGdT}[true]{}
%    \end{macrocode}
%    \begin{macrocode}
\define@cmdkey[TdSM]{tdsfrmath.sty}[TdSM@]{gdtpack}[]{}
\define@cmdkey[TdSM]{tdsfrmath.sty}[TdSM@]{gdtcomd}[]{}
\define@cmdkey[TdSM]{tdsfrmath.sty}[TdSM@]{gdtoptn}[]{}
%    \end{macrocode}
% 
% \subsubsection{Un peu plus pour les taupes}
% 
% Avec la cl� bool�enne \Optioncle{taupe}, on charge le fichier
% \texttt{taupe.sto}. Cela permet de garder l'extension assez mince
% pour une utilisation dans le secondaire.
%
% Si la valeur pass�e � la cl� est \texttt{true} alors
% \cs{ifTdSM@taupe} est d�finie comme valant \texttt{true} ce qui
% entrainera plus bas le chargement de l'extension \Pkg{stmaryrd} qui
% fournit des symboles math�matiques dont celui dont je me sers pour
% �crire les intervalles de~\N.
%    \begin{macrocode}
\define@boolkey[TdSM]{tdsfrmath.sty}[TdSM@]{taupe}[true]{}
%    \end{macrocode}
% Cl� fixant l'aspect des fonctions circulaires et hyperboliques
% r�ciproques.  
%    \begin{macrocode}
\define@boolkey[TdSM]{tdsfrmath.sty}[TdSM@]{ArgArcMaj}[true]{}
%    \end{macrocode}
% 
% \subsubsection{Des macros pour les suites}
% 
% Avec la cl� bool�enne \Optioncle{suite}, on charge le fichier
% \texttt{suite.sto}.
%    \begin{macrocode}
\define@boolkey[TdSM]{tdsfrmath.sty}[TdSM@]{suite}[true]{}
%    \end{macrocode}
% 
%    \begin{macrocode}
\define@boolkey[TdSM]{tdsfrmath.sty}[TdSM@]{suitedeco}[true]{}
%    \end{macrocode}
% 
% \subsubsection{S�parateur de d�finition dans les ensembles}
% 
% La cl� bool�enne \Optioncle{SepDefEnsExt}. 
%    \begin{macrocode}
\define@boolkey[TdSM]{tdsfrmath.sty}[TdSM@]{SepDefEnsExt}[true]{}
%    \end{macrocode}
%
% \subsubsection{Pour les utilisateurs de \Pkg{mathdesign}}
% 
% La cl� bool�enne \Optioncle{avecmathdesign}. 
%    \begin{macrocode}
\define@boolkey[TdSM]{tdsfrmath.sty}[TdSM@]{avecmathdesign}[true]{}
%    \end{macrocode}
% 
% \subsubsection{Ex�cutons les options}
% 
% Il est temps d'ex�cuter les options par d�faut. Puis de s'occuper de
% celles fournies par l'utilisateur. Pour finir, on relache une macro
% qui n'a plus d'usage.
%    \begin{macrocode}
\ExecuteOptionsX[TdSM]{%
  avecmathdesign=false,%
  taupe=false,%
  ArgArcMaj=false,%
  suite=false,%
  suitedeco=false,%
  nupletsep=virgule,%
  SepDefEnsExt=true,%
  placesigne=haut,%
  ensdeco=ehsb,%
  CharPoCal=true,calpack=mathrsfs,calcomd=mathscr,caloptn=***,%
  CharPoGdT=false,gdtpack=***,gdtcomd=***,gdtoptn=***}
\ProcessOptionsX[TdSM]\relax
\let\nr\relax
%    \end{macrocode}
% 
% On charge maintenant les extensions n�cessaires � cette
% extension. La moins connue, car la plus r�cente, est peut-�tre
% \Pkg{xargs} que l'on verra � l'�uvre plusieurs fois pour d�finir des
% macros acceptant plusieurs arguments optionnels.
% 
%    \begin{macrocode}
\RequirePackage{amsmath}
%    \end{macrocode}
% On ne charge \Pkg{amssymb} que si on d�clare ne pas utiliser
% \Pkg{mathdesign}, c'est le comportement par d�faut. 
%    \begin{macrocode}
\ifTdSM@avecmathdesign\else\RequirePackage{amssymb}\fi
\RequirePackage{xspace}
\RequirePackage{xargs}
\RequirePackage{suffix}
%    \end{macrocode}
% Si on a pass� |[taupe=true]|, on charge \Pkg{stmaryrd}
%    \begin{macrocode}
\ifTdSM@taupe
\RequirePackage{stmaryrd}
%    \end{macrocode}
% puis, � la fin de l'extension, on inclut le fichier
% \texttt{taupe.sto} si on le trouve, sinon on gromm�le. 
%    \begin{macrocode}
\AtEndOfPackage{%
  \InputIfFileExists{taupe.sto}{%
    \PackageInfo{tdsfrmath}{fichier taupe.sto inclus\@gobble}}{%
    \PackageWarningNoLine{tdsfrmath}{fichier taupe.sto introuvable}}}
\fi
%    \end{macrocode}
% 
% On traite la cl� \Optioncle{suite} de m�me : 
%    \begin{macrocode}
\ifTdSM@suite
\AtEndOfPackage{%
  \InputIfFileExists{suite.sto}{%
    \PackageInfo{tdsfrmath}{fichier suite.sto inclus\@gobble}}{%
    \PackageWarningNoLine{tdsfrmath}{fichier suite.sto introuvable}}}
\fi
%    \end{macrocode}
% 
% On commence par d�finir \cs{TdSM@MathCalPol} dans le cas o� 
% \Optioncle{avecmathdesign} est \OptionvalPresent{true}
%    \begin{macrocode}
\ifTdSM@avecmathdesign
\def\TdSM@MathCalPol{\mathscr}
\PackageInfo{tdsfrmath}{On compte sur mathdesign !\MessageBreak
  La police calligraphique est << mathscr >> \@gobble}
\else 
%    \end{macrocode}
% dans le cas contraire on traite la cl� \Optioncle{CharPoCal}. 
% Si on a |CharPoCal=true|, on s'occupe de la police calligraphique 
%    \begin{macrocode}
\ifTdSM@CharPoCal
  \PackageInfo{tdsfrmath}{La clef CharPoCal est vraie \@gobble}
%    \end{macrocode}
% on s'inqui�te de l'existence de l'extension r�clam�e, on la charge,
% avec l'�ventuelle option, si on la trouve 
%    \begin{macrocode}
  \IfFileExists{\TdSM@calpack.sty}{%
    \ifthenelse{\equal{\TdSM@caloptn}{***}}%
      {\RequirePackage{\TdSM@calpack}}
      {\RequirePackage[\TdSM@caloptn]{\TdSM@calpack}}
    \def\TdSM@MathCalPol{\csname\TdSM@calcomd\endcsname}
%    \end{macrocode}
% et, une fois charg�e l'extension, on teste l'existence de la
% commande demand�e 
%    \begin{macrocode}
    \@ifundefined{TdSM@MathCalPol}%
%    \end{macrocode}
% on gromm�le si la macro est inconnue
%    \begin{macrocode}
    {\PackageWarningNoLine{tdsfrmath}{La macro 
        << \TdSM@calcomd\space >> n'est pas connue\MessageBreak
        par l'extension \TdSM@calpack\space!\MessageBreak Revoyez
        la valeur de la clef << calcomd >> SVP}}%
%    \end{macrocode}
% ou on signale que tout s'est pass� correctement. 
%    \begin{macrocode}
    {\PackageInfo{tdsfrmath}{La police calligraphique est obtenue via 
        << \TdSM@calcomd\space >>\@gobble}}}%
%    \end{macrocode}
% Vient le cas ou l'extension n'est pas pr�sente: on gromm�le et on
% d�finit la police calligraphique par d�faut. 
%    \begin{macrocode}
  {\PackageWarningNoLine{tdsfrmath}
    {Extension \TdSM@calpack\space pas vue sur la
      machine.\MessageBreak 
      La police calligraphique est << mathcal >>} 
    \def\TdSM@MathCalPol{\mathcal}}
%    \end{macrocode}
% Cela dit, il faut bien d�finir \cs{TdSM@MathCalPol} dans le cas o�
% on la veut sortie de boite \CAD �gale � \cs{mathcal}. 
%    \begin{macrocode}
\else
  \PackageInfo{tdsfrmath}{La clef CharPoCal est fausse.\MessageBreak
    La police calligraphique est << mathcal >> \@gobble}
  \def\TdSM@MathCalPol{\mathcal}
\fi
\fi
%    \end{macrocode}
% Si on a |CharPoGdT=true|, on s'occupe de la police du gras de
% tableau en employant la m�me m�thode \TO et le m�me code \Sourire\TF
% avec la diff�rence qu'il faut tenir compte du fait que, par d�faut,
% \cs{TdSM@gdtcomd} contient \texttt{***} et que l'on peut \TO depuis
% la version 1.1\TF d�finir une commande sans charger une extension
% suppl�mentaire. 
% 
% On commence avec deux macros auxiliaires pour raccourcir le code
% suivant.  
%    \begin{macrocode}
\newcommand\TdSM@DefinirGrasDefaut{%
  \def\TdSM@MathGdTPol{\mathbb}%
  \PackageInfo{tdsfrmath}{Gras de tableau obtenu par mathbb\@gobble}}
\newcommand\TdSM@SiDefaut[1]{\ifthenelse{\equal{#1}{***}}}
%    \end{macrocode}
% 
% On profite lachement du fait que la commande par d�faut de
% \Pkg{mathdesign} pour obtenir du gras de tableau est aussi
% \cs{mathbb} ce qui fait que l'on n'a pas � traiter diff�remment ici
% le cas avec \Pkg{mathdesign} du cas sans ladite extension. 
% 
% On teste la cl� bool�enne |CharPoGdT|
%    \begin{macrocode}
\ifTdSM@CharPoGdT  
\PackageInfo{tdsfrmath}{La clef << CharPoGdT >> est vraie\@gobble}
\TdSM@SiDefaut{\TdSM@gdtpack}
%    \end{macrocode}
% Si on n'a pas pass� de valeur � la clef |gdtpack| on regarde ce qui
% l'en est pour la clef |gdtcomd|: 
%    \begin{macrocode}
{\TdSM@SiDefaut{\TdSM@gdtcomd}
%    \end{macrocode}
% et si cette derni�re cl� n'est pas d�finie on demande �
% l'utilisateur de bien vouloir faire des choix coh�rents! 
%    \begin{macrocode}
  {\PackageWarningNoLine{tdsfrmath}
    {Je ne comprends pas ce que vous voulez !\MessageBreak
      Vous demandez une autre police de gras de tableau\MessageBreak
      sans donner ni extension (clef gdtpack)\MessageBreak 
      ni commande (clef gdtcomd).\MessageBreak 
      Revoyez la documentation SVP}
    \TdSM@DefinirGrasDefaut}
%    \end{macrocode}
% Sinon, on d�finit \cs{TdSM@MathGdTPol}
%    \begin{macrocode}
  {\def\TdSM@MathGdTPol{\csname\TdSM@gdtcomd\endcsname}
%    \end{macrocode}
% et on teste la disponibilit� de cette commande. 
%    \begin{macrocode}
    \@ifundefined{TdSM@MathGdTPol}%
%    \end{macrocode}
% Si elle n'est pas d�finie, on rousp�te et on prend la valeur par
% d�faut
%    \begin{macrocode}
   {\PackageWarningNoLine{tdsfrmath}
     {La macro << \TdSM@gdtcomd\space >> n'est pas connue !\MessageBreak
       Revoyez la valeur de la clef << gdtcomd >> SVP}
     \TdSM@DefinirGrasDefaut}%
%    \end{macrocode}
% sinon on informe, dans le |.log|,  du choix effectu�. 
%    \begin{macrocode}
   {\PackageInfo{tdsfrmath}
     {Le gras de tableau est obtenu via << \TdSM@gdtcomd\space
       >>\@gobble}}}}
%    \end{macrocode}
% On passe au cas o� la cl� |gdtpack| a re�u une valeur
%    \begin{macrocode}
{\IfFileExists{\TdSM@gdtpack.sty}
%    \end{macrocode}
% On teste la pr�sence de l'extension sur le syst�me. Si le syst�me
% est pr�sent, on s'occupe de la cl� |gdtoptn|. 
%    \begin{macrocode}
  {\TdSM@SiDefaut{\TdSM@gdtoptn}
%    \end{macrocode}
% Si elle a la valeur par d�faut, on charge l'extension sans option
%    \begin{macrocode}
    {\RequirePackage{\TdSM@gdtpack}}
%    \end{macrocode}
% sinon on passe l'option � l'extension.
%    \begin{macrocode}
   {\RequirePackage[\TdSM@gdtoptn]{\TdSM@gdtpack}}
%    \end{macrocode}
% On regarde la cl� |gtdcomd|
%    \begin{macrocode}
   \TdSM@SiDefaut{\TdSM@gdtcomd}   
%    \end{macrocode}
% si elle n'a pas re�u de valeur, on retombe dans le cas par d�faut
%    \begin{macrocode}
   {\TdSM@DefinirGrasDefaut}
%    \end{macrocode}
% sinon on s'assure de la disponibilit� de la commande demand�e comme
% ci-dessus.  
%    \begin{macrocode}
   {\def\TdSM@MathGdTPol{\csname\TdSM@gdtcomd\endcsname}
     \@ifundefined{TdSM@MathGdTPol}
     {\PackageWarningNoLine{tdsfrmath}
       {La macro << \TdSM@gdtcomd\space >> n'est pas connue\MessageBreak
         par l'extension \TdSM@gdtpack\space!\MessageBreak 
         Revoyez la valeur de la clef << gdtcomd >> SVP.}}
    {\PackageInfo{tdsfrmath}
      {Le gras de tableau est obtenu via << \TdSM@gdtcomd\space
        >>\@gobble}}}}
%    \end{macrocode}
% On traite le cas o� le fichier de style requis est introuvable. Dans
% ce cas on revient � la d�finition par d�faut. 
%    \begin{macrocode}
  {\PackageWarningNoLine{tdsfrmath}
    {Extension \TdSM@gdtpack\space pas vue sur la machine}
    \TdSM@DefinirGrasDefaut}}
%    \end{macrocode}
% On en a fini avec la premi�re branche du si \TO cas o� la cl�
% |CharPoGdT| est vraie\TF et on passe � la 2\ieme branche. 
%    \begin{macrocode}
\else
\PackageInfo{tdsfrmath}{La clef << CharPoGdT >> est fausse\@gobble}
\TdSM@DefinirGrasDefaut
\fi
%    \end{macrocode}
% 
% Les options �tant trait�es, \cs{TdSM@DecoChoix} contient la valeur
% pass�e � la cl� \Optioncle{ensdeco}. On peut d�finir
% \cs{TdSM@Decoration} congrument.
%    \begin{macrocode}
\ifthenelse{\equal{\TdSM@DecoChoix}{ehsb}}%
  {\newcommand\TdSM@Decoration[2]{^{#1}_{#2}}}{%
\ifthenelse{\equal{\TdSM@DecoChoix}{sheh}}%
  {\newcommand\TdSM@Decoration[2]{^{#2#1}}}{%
\ifthenelse{\equal{\TdSM@DecoChoix}{ehsb}}%
  {\newcommand\TdSM@Decoration[2]{^{#1}_{#2}}}{%
\ifthenelse{\equal{\TdSM@DecoChoix}{ebsb}}%
  {\newcommand\TdSM@Decoration[2]{_{#1#2}}}{%
\ifthenelse{\equal{\TdSM@DecoChoix}{sbeb}}%
  {\newcommand\TdSM@Decoration[2]{_{#2#1}}}{%
\ifthenelse{\equal{\TdSM@DecoChoix}{ebsh}}%
  {\newcommand\TdSM@Decoration[2]{^{#2}_{#1}}}{%
}}}}}}
\let\TdSM@DecoChoix=\relax
%    \end{macrocode}
% 
% De m�me pour \cs{TdSM@PlaceSigne}: 
% 
%    \begin{macrocode}
\ifthenelse{\equal{\TdSM@PlaSiChoix}{haut}}%
  {\newcommand\TdSM@PlaceSigne[1]{^{#1}}}%
  {\newcommand\TdSM@PlaceSigne[1]{_{#1}}}
\let\TdSM@PlaSiChoix=\relax
%    \end{macrocode}
% 
%\subsection{Les noms des ensembles}
%\label{SSECnomsensembles}
%
% Pour pouvoir �crire \cs{R} afin d'obtenir \R, il faut quelques
% macros auxiliaires par lesquelles je commence.
% 
% \begin{macro}{\EnsembleDeNombre}
% \changes{v1.3}{2009/03/12}{Avec |0| en 1\ier argument, on obtient
% l'ensemble des polyn�mes}
% \changes{v1.3}{2009/06/04}{On analyse autrement le 1\ier argument,
% en utilisant \Pkg{xstring}}
% La suivante fait le boulot de composition.  
%    \begin{macrocode}
\newcommandx\EnsembleDeNombre[4]{%
  \ensuremath{%
    \grastab{#1}{%
    \edef\TdSM@arg{\@firstofone#2}%
    \ifthenelse{\equal{\TdSM@arg}{1}}{}{%
    \ifthenelse{\equal{\TdSM@arg}{0}}{\mspace{#4mu}\left[#3\right]}{%
    \ifthenelse{\equal{\TdSM@arg}{*}}{^{\ast}}{%
    \ifthenelse{\equal{\TdSM@arg}{+}}{\TdSM@PlaceSigne{+}}{%
    \ifthenelse{\equal{\TdSM@arg}{-}}{\TdSM@PlaceSigne{-}}{%
    \ifthenelse{\equal{\TdSM@arg}{+*}\or\equal{\TdSM@arg}{*+}}{%
      \TdSM@Decoration{\ast}{+}}{%
    \ifthenelse{\equal{\TdSM@arg}{-*}\or\equal{\TdSM@arg}{*-}}{%
      \TdSM@Decoration{\ast}{-}}{%
    \IfBeginWith{\TdSM@arg}{-}{%
      _{\StrBehind{\TdSM@arg}{-}}\mspace{#4mu}\left[#3\right]}{%
      ^{\TdSM@arg}}}}}}}}}}}\xspace}
%    \end{macrocode}
% \end{macro}
% 
%    \begin{macrocode} 
\newcommandx\N[2][1=1,2=X]%
     {\EnsembleDeNombre{N}{#1}{#2}{\TdSMReculParenthese}}
\newcommandx\Z[2][1=1,2=X]%
     {\EnsembleDeNombre{Z}{#1}{#2}{\TdSMReculParenthese}} 
\newcommandx\Q[2][1=1,2=X]%
     {\EnsembleDeNombre{Q}{#1}{#2}{\TdSMReculParenthese}}
\newcommandx\R[2][1=1,2=X]%
     {\EnsembleDeNombre{R}{#1}{#2}{\TdSMReculParenthese}}
\newcommandx\C[2][1=1,2=X]%
     {\EnsembleDeNombre{C}{#1}{#2}{\TdSMReculParenthese}}
%    \end{macrocode}
% 
% David \textsc{Kastrup} ayant �crit r�cemment que la commande \LaTeX\
% \cs{@ifstar} qui teste la pr�sence d'une �toile |*| derri�re une
% commande n'�tait pas des plus recommandables, j'utilise son
% extension \Pkg{suffix} pour d�finir les commandes �toil�es et, tant
% que j'y suis, les commandes pluss�es, moins�es et autres sur le m�me
% mod�le.\phantomsection\label{suffixe}
%    \begin{macrocode} 
\WithSuffix\newcommand\N*{\N[*]}
\WithSuffix\newcommand\Z*{\Z[*]}
\WithSuffix\newcommand\Q*{\Q[*]}
\WithSuffix\newcommand\R*{\R[*]}
\WithSuffix\newcommand\C*{\C[*]}
\WithSuffix\newcommand\Q+{\Q[+]}
\WithSuffix\newcommand\R+{\R[+]}
\WithSuffix\newcommand\Q-{\Q[-]}
\WithSuffix\newcommand\R-{\R[-]}
\WithSuffix\newcommand\R>{\R[+*]}
\WithSuffix\newcommand\R<{\R[-*]}
%    \end{macrocode}
% \begin{macro}{\R/}
% \changes{v1.3}{2009/03/12}{Ajout des commandes \cs{R/} et \cs{R/+}} 
%    \begin{macrocode}
\DeclareRobustCommand{\TdSM@Rcomplet}{\ensuremath{\overline{\R}}}
\WithSuffix\newcommand\TdSM@Rcomplet+{\ensuremath{\overline{\R+}}}
\WithSuffix\newcommand\R/{\TdSM@Rcomplet}
%    \end{macrocode}
% \end{macro}
% 
% \iffalse
%</package>
% \fi
% 
% \iffalse
%<*taupe>
% \fi
% Commen�ons par nous pr�senter puisque c'est la premi�re fois que
% l'on rencontre ce fichier auxiliaire: 
%    \begin{macrocode}
\ProvidesFile{taupe.sto}%
[\filedate\space\fileversion\space Pour tdsfrmath -- option taupe]
%    \end{macrocode}
% 
%    \begin{macrocode}
\newcommandx\K[2][1=1,2=X]%
     {\EnsembleDeNombre{K}{#1}{#2}{\TdSMReculParenthese}}
\WithSuffix\newcommand\K*{\K[*]}
%    \end{macrocode}
% \iffalse
%</taupe>
% \fi
%
%\subsection{Couples, paires, triplets etc.}
%\label{SSECcouples}
%
% Il s'agit maintenant de d�finir les macros qui permettent d'obtenir,
% \PX, \nuplet{a b c} avec \verb*|\nuplet{a b c}|. On aura not� que
% la d�limitation des arguments est obtenue avec des espaces.
% 
% L� encore, je commence par une macro auxiliaire. Elle a pour t�che
% de r�cup�rer une liste d'arguments d�limit�s par des espaces et de
% fournir une liste de ces m�mes arguments s�par�s par le s�parateur
% fix� par \Optioncle{nupletsep}. Elle est bas�e sur une macro que
% Manuel \textsc{P�gouri�-Gonnard}, l'auteur de \Pkg{xargs}, m'a, tr�s
% aimablement, fourni en r�ponse � une mienne question sur \fctt.
% 
% La seule \og astuce\fg est l'utilisation de \verb*|#1#2 #3|, ou
% l'�quivalent ensuite, pour r�cup�rer ce que je veux. Comme |#1| est 
% imm�diatement suivi de |#2|, \TeX\ le consid�re comme non-d�limit�
% et, quand on utilise la macro, il prendra le premier lex�me
% \emph{diff�rent d'un espace}. Le |#2| se chargera de r�cup�rer alors
% tout ce qui suit jusqu'� l'espace suivant. Et s'il n'y a rien �
% r�cup�rer il restera vide. Avec cette man�uvre, je permets de coder
% \verb*|\nuplet{ a b}| pour obtenir \nuplet{ a  b}.
% 
% \iffalse
%<*package>
% \fi
%    \begin{macrocode}
\newcommand\TdSMnuplet[1]{\TdSM@nuplet #1 \@nil}
%    \end{macrocode}
% 
%    \begin{macrocode}
\def\TdSM@nuplet #1#2 #3{%
  \ifx\@nil #3%
  #1#2%
  \else
  #1#2\TdSM@separateur%
  \TdSM@nupletaux #3\fi}
%    \end{macrocode}
%    \begin{macrocode}
\def\TdSM@nupletaux#1\fi{
  \fi\TdSM@nuplet#1}
%    \end{macrocode}
% 
% \begin{macro}{\EncloreExtensible}
% \changes{v1.3}{2008/11/26}{Ajout de \cs{mathopen} et
% % \cs{mathclose} pour r�gler les distances ext�rieures.}
% \changes{v1.3}{2009/06/03}{Changement de noms internes:
% \cs{@v@nt} et \cs{@pr@s} deviennent \cs{TdS@v@nt} et \cs{TdS@pr@s}}  
% Pour \emph{passer} le mode � l'int�rieur de la macro, en vue de
% prendre la bonne d�finition des d�limiteurs, j'ai besoin d'un
% bool�en. 
%    \begin{macrocode}
\newboolean{TdSM@horstexterequis} 
\setboolean{TdSM@horstexterequis}{false}
\newcommandx{\EncloreExtensible}[4][1=1]{%
  \ifthenelse{#1=0}%
  {\setboolean{TdSM@horstexterequis}{true}}%
  {\setboolean{TdSM@horstexterequis}{false}}%
%    \end{macrocode}
% J'ai r�gl� le cas de l'argument optionnel. Il faut voir si on ne
% serait pas en mode math�matique (\cs{ifmmode}) interne
% (\cs{ifinner}) \CAD math�matique en ligne, ou, au contraire en mode
% math�matique hors-texte o� il faut faire quelque chose: 
%    \begin{macrocode}
  \ifmmode\ifinner\else
    \setboolean{TdSM@horstexterequis}{true}%
  \fi\else\fi
%    \end{macrocode}
% On ouvre un groupe et on s'assure d'�tre en mode math�matique et on
% agit en accord avec la valeur du bool�en
% \texttt{TdSM@horstexterequis} qui contient le renseignement
% n�cessaire:  
%    \begin{macrocode}
  {\ensuremath{%
      \ifthenelse{\boolean{TdSM@horstexterequis}}%
      {\displaystyle\def\TdS@v@nt{\left #2}\def\TdS@pr@s{\right #3}}%
%    \end{macrocode}
% En hors-texte \TO naturel ou forc�\TF on a des d�limiteurs
% extensibles,  
%    \begin{macrocode}
      {\ifthenelse{\equal{#2}{.}}%
        {\def\TdS@v@nt{\relax}}%
        {\def\TdS@v@nt{\mathopen#2}}%
       \ifthenelse{\equal{#3}{.}}%
         {\def\TdS@pr@s{\relax}}
         {\def\TdS@pr@s{\mathclose#3}}}%
%    \end{macrocode}
% il n'en est rien en mode en ligne mais il faut tenir compte du
% d�limiteur fantome donn� par le point. 
% 
% Et, pour finir, on compose le texte attendu.   
%    \begin{macrocode}
      \TdS@v@nt #4 \TdS@pr@s}}}
%    \end{macrocode}
% \end{macro}
% 
% Avec \cs{EncloreExtensible}, je d�finis maintenant plusieurs macros
% usuelles. 
%    \begin{macrocode}
\newcommandx{\parent}[2][1=1]{\EncloreExtensible[#1]{(}{)}{#2}}
\newcommandx{\accol}[2][1=1]{\EncloreExtensible[#1]{\{}{\}}{#2}}
\newcommandx{\crochet}[2][1=1]{\EncloreExtensible[#1]{[}{]}{#2}}
\newcommandx{\varabs}[2][1=1]{%
  \EncloreExtensible[#1]{\lvert}{\rvert}{#2}}
\newcommandx{\norme}[2][1=1]{\EncloreExtensible[#1]{\lVert}{\rVert}{#2}}
\newcommand{\nuplet}[2][1]{\parent[#1]{\TdSMnuplet{#2}}}
\newcommand{\anuplet}[2][1]{\accol[#1]{\TdSMnuplet{#2}}}
%    \end{macrocode}
% 
% \begin{macro}{\TdSMReculParenthese}
%    \begin{macrocode}
\newcommand\TdSMReculParenthese{-2}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\rnuplet}
%    \begin{macrocode}
\newcommandx\rnuplet[3][1=1,3=\TdSMReculParenthese]{%
  \mspace{#3mu}\nuplet[#1]{#2}} 
%    \end{macrocode}
% \end{macro}
%
%\subsection{Vecteurs, bases et rep�res}
%\label{SSECvecteurs}
%
% \begin{macro}{\definirvecteur}
%    \begin{macrocode}
\newcommand{\definirvecteur}[4][***]{%
  \ifthenelse{\equal{#1}{***}}%
  {\@ifundefined{vect#2}%
    {\expandafter\def\csname vect#2\endcsname{%
        \TdSM@fairevecteur{#2}{#3}{#4}\xspace}}%
    {\PackageError{tdsfrmath}%
      {Erreur il y a un vecteur de nom << #2 >>}%
      {Vous pouvez utiliser la macro << redefinivecteur >>
       \MessageBreak
       si c'est bien le nom que vous vouliez}}}%
  {\@ifundefined{vect#1}%
    {\expandafter\def\csname vect#1\endcsname{%
        \TdSM@fairevecteur{#2}{#3}{#4}\xspace}}%
    {\PackageError{tdsfrmath}%
      {Erreur il y a un vecteur de nom << #1 >>}%
      {Vous pouvez utiliser la macro << redefinivecteur >>
       \MessageBreak
       si c'est bien le nom que vous vouliez}}}}
\newcommand{\redefinirvecteur}[4][***]{%
  \ifthenelse{\equal{#1}{***}}%
  {\@ifundefined{vect#2}%
    {\PackageError{tdsfrmath}%
      {Erreur il n'y a pas de vecteur de nom << #2 >>}%
      {Vous pouvez utiliser la macro << definivecteur >>
       \MessageBreak
       si c'est bien le nom que vous vouliez}}
    {\expandafter\let\csname vect#1\endcsname=\relax%
     \definirvecteur[#1]{#2}{#3}{#4}}}%
  {\@ifundefined{vect#1}%
    {\PackageError{tdsfrmath}%
      {Erreur il n'y a pas de vecteur de nom << #1 >>}%
      {Vous pouvez utiliser la macro << definivecteur >>
       \MessageBreak
       si c'est bien le nom que vous vouliez}}
    {\expandafter\let\csname vect#1\endcsname=\relax%
     \definirvecteur[#1]{#2}{#3}{#4}}}}
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
\definirvecteur[i]{\imath}{-1}{3}
\definirvecteur[j]{\jmath}{0}{5}
\definirvecteur{k}{-1}{1}
\definirvecteur{u}{0}{3}
\definirvecteur{v}{0}{3}
%    \end{macrocode}
% La macro suivante fait le travail de
% composition.\mlabel{TdSMAfairevecteur}   
%    \begin{macrocode}
\newcommand\TdSM@fairevecteur[3]{%
  \ensuremath{\overrightarrow{\mspace{#2mu}{#1}\mspace{#3mu}}}}
%    \end{macrocode}
% 
% \begin{macro}{\vecteur}
%   J'utilise \Pkg{suffix} pour d�finir la commande \cs{vecteur*}
%   apr�s avoir d�fini \cs{vecteur}.
% 
%   \cs{vecteur} et \cs{vecteur*} b�n�ficient eux aussi de
%   \cs{newcommandx} qui permet l'utilisation de plusieurs arguments
%   optionnels.
%    \begin{macrocode}
\newcommandx\vecteur[3][1=1,3=5]{\TdSM@fairevecteur{#2}{#1}{#3}}
%    \end{macrocode}
% 
% Nous voyons que le code suivant est plac� sous l'�gide de
% \textsc{Parmentier}: r�utilisation des restes \Sourire
% 
%    \begin{macrocode}
\WithSuffix\newcommandx\vecteur*[3][1=1,3=5]{\vecteur{\text{#2}}}
%    \end{macrocode}
% \end{macro}
% 
% \begin{macro}{\V}
%    \begin{macrocode}
\newcommand{\V}{\vecteur}
%    \end{macrocode}
% \end{macro}
% 
% La macro suivante g�re les erreurs dans la macro d'apr�s. C'est en
% fran�ais puisque cette extension est au bon gout de chez nous
% \Sourire La seule difficult� c'est de ne pas mettre de lettre
% accentu�e dans le message sinon �a donne des hy�roglyphes \TO enfin,
% presque\TF lors de l'affichage tant dans le fichier \texttt{.log}
% qu'� l'�cran. Petit exercice de style! 
%    \begin{macrocode}
\newcommand\TdSM@ErreurArgBase{%
  \PackageError{tdsfrmath}{Argument optionnel hors limites}{%
    L'argument optionnel vaut 2 par defaut\MessageBreak
    mais ne prend que les valeurs 1, 2 ou 3.}}
%    \end{macrocode}
% 
% \begin{macro}{\base}
% La macro \cs{base} admet un seul argument, s'il est nul ou s'il est
% plus grand que \(3\) la macro se plaint � l'aide de la macro
% pr�c�dente.  
%    \begin{macrocode}
\newcommand{\base}[1][2]{%
  \ifcase #1\TdSM@ErreurArgBase\or 
  \nuplet{\vecti}\or
  \nuplet{\vecti{} \vectj}\or          
  \nuplet{\vecti{} \vectj{} \vectk}\or
  \TdSM@ErreurArgBase\fi\xspace}
%    \end{macrocode}
% \end{macro}
% 
% \begin{macro}{\repere}
% Reprend en le modifiant le code de \cs{base}. 
%    \begin{macrocode}
\newcommandx{\repere}[2][1=2,2=O]{%
  \ifcase #1\TdSM@ErreurArgBase\or 
  \nuplet{#2 \vecti}\or 
  \nuplet{#2 \vecti{} \vectj}\or 
  \nuplet{#2 \vecti{} \vectj{} \vectk}\or 
  \TdSM@ErreurArgBase\fi\xspace}
%    \end{macrocode}
% \end{macro}
% 
% Viennent maintenant des macros qui servent essentiellement
% d'abr�viations. Comme je ne sais quel sera le codage choisi pour le
% document final, je place les accents � la \TeX, ce qui assure la
% \emph{portabilit�}.
%    \begin{macrocode}
\newcommand{\rog}{rep\`ere orthogonal \repere}
\newcommand{\ron}{rep\`ere orthonormal \repere}
\newcommand{\rond}{rep\`ere orthonormal direct \repere}
\newcommand{\repcom}{\nuplet{O \vectu{} \vectv}\xspace}
\newcommand{\roncom}{rep\`ere orthonormal \repcom}
\newcommand{\rondcom}{rep\`ere orthonormal direct \repcom}
%    \end{macrocode}
% 
% \begin{macro}{\Repere}
% Pour la forme �toil�e je reprends \cs{WithSuffix}. 
%    \begin{macrocode}
\newcommand{\Repere}{\nuplet{O I J}}
\WithSuffix\newcommand\Repere*{\nuplet{\text{O} \text{I} \text{J}}}
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
\newcommand{\Rog}{rep\`ere orthogonal \Repere}
\newcommand{\Ron}{rep\`ere orthonormal \Repere}
\newcommand{\Rond}{rep\`ere orthonormal direct \Repere}
%    \end{macrocode}
% 
% \subsection{L'exponentielle}
% \label{SSECfonctions}
% \begin{macro}{\E}
% On peut penser que un \cs{DeclareMathOperator} pourrait suffire ici
% mais avec la d�finition choisie on peut utiliser la m�me macro dans
% le texte autant qu'en mode math�matique, sans passer explicitement
% en mode math, cela me semble suffisant pour justifier l'effort de
% codage \TO si tant est que ce soit un effort \Sourire
%    \begin{macrocode}
\newcommand*\E{\ensuremath{\textup{e}}\xspace}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\eu}
% et la fonction
%    \begin{macrocode}
\newcommand*\eu[1]{\ensuremath{\E^{#1}}}
%    \end{macrocode}
% \end{macro}
% 
% \subsection{Le nombre i}
% \begin{macro}{\I}
% M�me op�ration qu'avec \cs{E}. 
%    \begin{macrocode}
\newcommand\I{\ensuremath{\textup{i}}\xspace}
%    \end{macrocode}
% \end{macro}
%
% \subsection{Int�grales}
% \label{SSECintegrales}
%
% Je commence par d�finir des registres de dimensions math�matiques
% \TO dont on ne peut pas dire qu'on en abuse dans les diff�rentes
% extensions de \LaTeX\TF pour r�gler des distances � l'int�rieur des
% int�grales. Leurs noms me semblent assez parlants.
%    \begin{macrocode}
\newmuskip\TdSM@reculintegrande
\newmuskip\TdSM@avancedx
\TdSM@reculintegrande=6mu
\TdSM@avancedx=4mu
%    \end{macrocode}
%
% Je donne � l'utilisateur de quoi les modifier globalement.
%    \begin{macrocode}
\newcommand\FixeReculIntegrande[1]{\TdSM@reculintegrande=#1mu}
\newcommand\FixeAvanceDx[1]{\TdSM@avancedx=#1mu}
%    \end{macrocode}
% 
% Je fournis la macro \cs{D} avec un \cs{providecommand} \Voir{D} pour
% la raison. 
%    \begin{macrocode}
\providecommand*\D{\textup{d}}
%    \end{macrocode}
% 
% \begin{macro}{\intgen}
% Vient ensuite la macro la plus g�n�rale. 
%    \begin{macrocode}
\newcommandx{\intgen}[5][1=1,2=\the\TdSM@reculintegrande]{%
  \ensuremath{%
  \ifnum #1=0\displaystyle\fi
  \int_{#3}^{#4}\mspace{-#2}{#5}}}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\integrer}
%    \begin{macrocode}
\newcommandx{\integrer}[7]%
[1=1,2=\the\TdSM@reculintegrande,7=\the\TdSM@avancedx]{%
  \ensuremath{%
  \ifnum #1=0\displaystyle\fi
  \int_{#3}^{#4}{\mspace{-#2}{#5}\mspace{#7}\D{#6}}}}
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
\newcommandx{\integrale}[7]%
[1=1,2=\the\TdSM@reculintegrande,7=\the\TdSM@avancedx]{%
  \integrer[#1][#2]{#3}{#4}{#5(#6)}{#6}[#7]}
\newcommandx{\intabfx}[3]%
[1=1,2=\the\TdSM@reculintegrande,3=\the\TdSM@avancedx]{%
  \integrale[#1][#2]{a}{b}{f}{x}[#3]\xspace}
%    \end{macrocode}
%
% \subsection{Au bonheur du math�maticien, bazar}
% \label{SSECbazar}
%
%    \begin{macrocode}
\newcommand{\plusinf}{\ensuremath{+\infty}\xspace}
\newcommand{\moinsinf}{\ensuremath{-\infty}\xspace}
%    \end{macrocode}
% 
% La macro qui suit est une macro de service, elle place le texte �
% l'int�rieur des d�limiteurs des intervalles et assimil�s. 
%    \begin{macrocode}
\newcommand{\TdSM@dedans}[3]{\mspace{#1mu}\TdSMnuplet{#2}\mspace{#3mu}}
%    \end{macrocode}
% Je m'en sers dans les quatre macros suivantes. 
% 
% \begin{macro}{\interff}
% La version pr�c�dente des macros \cs{inter..} �tait erron�e car la
% valeur par d�faut du premier argument, optionnel, �tait fix�e �
% |0|. Il faut |1| car, par d�faut, on ne veut pas forcer le style
% hors texte. 
% \changes{v1.2}{2008/09/17}{Correction de la valeur par d�faut du
% 1\ier argument.}
%    \begin{macrocode}
\newcommandx{\interff}[4][1=1,2=1,4=0]%
  {\crochet[#1]{\TdSM@dedans{#2}{#3}{#4}}}
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
\newcommandx{\interoo}[4][1=1,2=1,4=0]{%
  \EncloreExtensible[#1]{]}{[}{\TdSM@dedans{#2}{#3}{#4}}}
\newcommandx{\interof}[4][1=1,2=1,4=0]{%
  \EncloreExtensible[#1]{]}{]}{\TdSM@dedans{#2}{#3}{#4}}}
\newcommandx{\interfo}[4][1=1,2=1,4=0]{%
  \EncloreExtensible[#1]{[}{[}{\TdSM@dedans{#2}{#3}{#4}}}
\newcommandx{\intferab}[2][1=1,2=0]{\interff[#1]{a b}[#2]}
%    \end{macrocode}
% 
% Et maintenant quelque chose de compl�tement diff�rent: 
%    \begin{macrocode}
\newcommand{\mdfrac}[2]{\ensuremath{\dfrac{#1}{#2}}}
\newcommand{\mfrac}[2]{\ensuremath{\frac{#1}{#2}}}
%    \end{macrocode}
% 
% Les fameuses polices: 
%    \begin{macrocode}
\newcommand*{\manus}[1]{%
  \ensuremath{\TdSM@MathCalPol{\MakeUppercase{#1}}}}
\newcommand*{\grastab}[1]{%
  \ensuremath{\TdSM@MathGdTPol{#1}}}
%    \end{macrocode}
% Des abr�viations qu'elles sont utiles: 
%    \begin{macrocode}
\newcommand*{\cnp}[2]{\ensuremath{\binom{#1}{#2}}}
\newcommand*{\dans}{\longrightarrow}
\newcommand*{\donne}{\longmapsto}
\newcommand*{\vide}{\ensuremath{\varnothing}\xspace}
\newcommand*{\ppq}{\ensuremath{\leqslant}}
\newcommand*{\pgq}{\ensuremath{\geqslant}}
%    \end{macrocode}
% et pour �crire les d�finitions des ensembles
%    \begin{macrocode}
\newcommand*{\TdSMsepdefens}{/}
\ifTdSM@SepDefEnsExt
\newcommandx*{\ensemble}[4][1=3,4=3]{%
  \accol{{#2}%
    \mspace{#1mu}%
    \ifthenelse{\boolean{TdSM@horstexterequis}}{\middle}{}%
    \TdSMsepdefens
    \mspace{#4mu}%
    {#3}}}
\else
\newcommandx*{\ensemble}[4]{%
  \accol{{#2}\mspace{#1mu}\TdSMsepdefens\mspace{#4mu}{#3}}}
\fi
%    \end{macrocode}
% \iffalse
%</package>
% \fi
%
% \subsection{Le fichier \texttt{taupe.sto}}
% \label{SSECtaupesto}
%
% Ce qui suit n'est charg�, et donc d�fini, que si l'on a pass�
% la valeur \Optionval{true}{taupe} � la cl� \Optioncle{taupe}.
% \iffalse
%<*taupe>
% \fi
%    \begin{macrocode}
\newcommandx{\prodscal}[4][1=1,2=1,4=1]{%
  \EncloreExtensible[#1]{\langle}{\rangle}{\TdSM@dedans{#2}{#3}{#4}}}
%    \end{macrocode}
% 
% On pourra r�utiliser l'astuce: pour red�finir une macro cr��e avec
% des moyens \LaTeX iens, il faut d'abord la rendre �quivalente \TO
% par \cs{let}\TF � \cs{relax}. La red�finition devient alors possible
% avec les moyens \LaTeX iens classiques. 
% 
% Ici, cependant, pour me faciliter la t�che, j'�cris une macro
% auxiliaire \cs{TdSM}\BOP|@Re|\BOP|Declare|\BOP|Math|\BOP|Operator|  
% qui fait bien ce que je demande avec toutefois un l�ger d�savantage:
% elle ne v�rifie pas que la macro \og red�finie\fg existe bien au
% pr�alable. Du fait de ce fonctionnement pas tr�s canonique, elle
% restera cach�e \Sourire 
% 
%    \begin{macrocode}
\newcommand{\TdSM@ReDeclareMathOperator}{%
  \@ifstar{\@redeclmathop m}{\@redeclmathop o}}
\long\def\@redeclmathop#1#2#3{%
  \let#2=\relax%
  \DeclareRobustCommand{#2}{\qopname\newmcodes@#1{#3}}}
%    \end{macrocode}
% et je m'en sers
%    \begin{macrocode}
\TdSM@ReDeclareMathOperator{\cosh}{ch}
\TdSM@ReDeclareMathOperator{\sinh}{sh}
\TdSM@ReDeclareMathOperator{\tanh}{th}
\TdSM@ReDeclareMathOperator{\cot}{cotan}
%    \end{macrocode}
% et ensuite uniquement si \Optioncle{ArgArcMaj} vaut
% \Optionval{true}{ArgArcMaj} 
%    \begin{macrocode}
\ifTdSM@ArgArcMaj
\TdSM@ReDeclareMathOperator{\arccos}{Arccos}
\TdSM@ReDeclareMathOperator{\arcsin}{Arcsin}
\TdSM@ReDeclareMathOperator{\arctan}{Arctan}
\fi
%    \end{macrocode}
% et j'ajoute de nouvelles d�finitions. 
%    \begin{macrocode}
\ifTdSM@ArgArcMaj
\DeclareMathOperator{\argch}{Argch}
\DeclareMathOperator{\argsh}{Argsh}
\DeclareMathOperator{\argth}{Argth}
\else
\DeclareMathOperator{\argch}{argch}
\DeclareMathOperator{\argsh}{argsh}
\DeclareMathOperator{\argth}{argth}
\fi
%    \end{macrocode}
% 
%    \begin{macrocode}
\DeclareMathOperator{\Ker}{Ker}
\DeclareMathOperator{\Img}{Im}
%    \end{macrocode}
% 
%    \begin{macrocode}
\newcommand*{\tendversen}[1]{\xrightarrow[#1]\relax}
%    \end{macrocode}
% 
%    \begin{macrocode}
\newcommand*{\devlim}[2][0]{\ensuremath{\text{DL}_{#2}{\parent{#1}}}}
%    \end{macrocode}
% 
%    \begin{macrocode}
\newcommand*{\parties}[2][-2]{%
  \ensuremath{\manus{p}\mspace{#1mu}\parent{{#2}}}}
%    \end{macrocode}
% \begin{macro}{\drv}
% \changes{v1.3}{2008/11/26}{R��criture avec un argument optionnel.}
%    \begin{macrocode}
\newcommand{\drv}[3][***]{\ensuremath{%
    \frac{\D\ifthenelse{\equal{#1}{***}}{}{^{#1}}#2}%
    {\D#3\ifthenelse{\equal{#1}{***}}{}{^{#1}}}}}
\newcommand{\ddrv}[3][***]{\ensuremath{\displaystyle\drv[#1]{#2}{#3}}}
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
\newcommandx{\interent}[4][1=1,2=2,4=2]{%
  \EncloreExtensible[#1]{\llbracket}{\rrbracket}%
                        {\TdSM@dedans{#2}{#3}{#4}}}
\newcommandx{\interzn}[3][1=1,2=2,3=2]{\interent{0 n}\xspace}
%    \end{macrocode}
%
% \subsection{D�riv�es partielles}
% \label{SSECderpart}
% 
% \begin{macro}{\TdSMDerPartSepar}
% Cette macro contient ce qui s�pare, \PX, un \(\partial x^{2}\) du
% \(\partial y\) qui le suit. Par d�faut, elle est d�finie comme �tant
% �gale � |\,| ce qui, � mon sens, am�liore le rendu. Mais on peut la
% red�finir avec un coup de \cs{renewcommand}. 
%    \begin{macrocode}
\newcommand\TdSMDerPartSepar{\,}
%    \end{macrocode}
% \end{macro}
% 
% 
% % \begin{macro}{\derpart}
% Je vais maintenant tenter d'expliquer clairement la construction de
% la macro \cs{derpart}. 
% 
% \textsf{Attention}: je n'ai aucune pr�tention � fournir ici un code
% optimis�. Je l'ai test�, il fait ce que je veux qu'il fasse et \og
% sam suffi\fg.
% 
% \textsf{Remarque}: ce code est bas� une fois encore sur celui
% fourni par Manuel \textsc{P�gouri�-Gonnard} pour traiter les noms de
% fichiers.  
% 
% Pour commencer, on notera que la d�finition de \cs{derpart} est
% entour�e d'une double paire de parenth�ses |{{...}}|. Cela assure
% que les macros d�finies � l'int�rieur resteront inconnues au niveau
% du document et que les compteurs utilis�s retrouveront leur �tat
% ant�rieur au sortir de la macro. Bref on utilise la capacit� de
% \TeX\ � \og localiser\fg d�finitions et modifications de compteurs
% et macros. 
% 
% J'utilise \cs{count@} et \cs{count0} parce qu'ils existent d�j� et
% que �a m'�vite d'en cr�er deux expr�s. On pourra se reporter � la
% documentation sur le noyau de \LaTeXe, \texttt{source2e.pdf}
% disponible avec toutes les bonnes distributions de \TeX. 
% 
% \cs{count0} contient le nombre de lettres identiques successives
% trouv�es � l'it�ration consid�r�e. \cs{count@} vaut � la fin le
% nombre total de caract�res contenus dans la chaine constituant le
% 2\ieme argument de la macro \cs{derpart}. 
% 
% La macro \cs{TdSM@sentinelle} a la valeur |@@| et la garde tout le
% temps. La macro \cs{TdSM@precedent} commence l'aventure avec la m�me
% valeur. Cela permet de tester le d�but de la lecture du 2\ieme
% argument que j'appelerai d�sormais \emph{la chaine}. 
% 
% Au d�but du jeu, les macros \cs{TdSM@DenomAux} et \cs{TdSM@Denom}
% sont vides. � la fin \cs{TdSM@Denom} contient le d�nominateur de la
% d�riv�e partielle, pass� en 2\ieme argument de \cs{frac}. La macro
% \cs{TdSM@DenomAux}, quant � elle, permet de construire
% \cs{TdSM@Denom} en me facilitant la t�che � la fin de la chaine. 
%    \begin{macrocode}
\newcommand\derpart[2]{{%
    \count@=1
    \def\TdSM@sentinelle{@@}%
    \def\TdSM@precedent{@@}%
    \def\TdSM@DenomAux{}%
    \def\TdSM@Denom{}%
%    \end{macrocode}
% 
% \cs{TdSM@Puissance} place un exposant \TO il viendra derri�re le
% caract�re\TF si cet exposant est sup�rieur �~\(1\). 
%    \begin{macrocode}
    \def\TdSM@Puissance{%
      \ifnum\count0>1 ^{\the\count0}\fi}%
%    \end{macrocode}
% 
% \cs{TdSM@FaireDenom} sert � cr�er le d�nominateur. Comme sa
% d�finition est donn�e � l'int�rieur d'une d�finition \TO celle de
% \cs{derpart}\TF il faut doubler les \emph{di�ses} |#| d�notant les 
% arguments. J'utilise \cs{edef} pour forcer le d�veloppement imm�diat
% de \cs{TdSM@Denom} dans la d�finition m�me de
% \cs{TdSM@Denom}. Supposons, pour faire simple, que \cs{TdSM@Denom}
% contienne \texttt{tralala} au moment o� \TeX\ arrive sur 
% \cs{TdSM@FaireDenom}\BOP|{truc}|. Apr�s l'ex�cution de cette
% commande, \cs{TdSM@Denom} se d�veloppe en
% |tralala |\BOP|\mathchar"140 |\BOP|truc|. 
% 
% En utilisant un simple \cs{def} � la place du \cs{edef}, on partait
% dans une de ces boucles infinies dont \TeX\ se sort en invoquant la
% finitude de sa m�moire. 
%    \begin{macrocode}
    \def\TdSM@FaireDenom##1{%
      \edef\TdSM@Denom{\TdSM@Denom \partial ##1}}
%    \end{macrocode}
% 
% Voici maintenant la macro \cs{TdSM@derpartaux} qui fait la plus
% grosse partie du boulot. 
%    \begin{macrocode}
    \def\TdSM@derpartaux##1##2{%
      \ifx\@nil##2%
%    \end{macrocode}
% Voici ce qui arrive lorsque le 2\ieme argument vaut \cs{@nil} \CAD
% lorsque l'on arrive � la fin de la chaine: on place la valeur du
% 1\ier argument |##1| dans \cs{TdSM@actuel}.
%    \begin{macrocode}
      \def\TdSM@actuel{##1}%
%    \end{macrocode}
% On regarde s'il a la m�me valeur que le pr�c�dent, plac� dans
% \cs{TdSM@precedent}.   
%    \begin{macrocode}
        \ifx\TdSM@actuel\TdSM@precedent
%    \end{macrocode}
% Si oui, on incr�mente le compteur \(0\) et on doit tenir compte de
% la puissance
%    \begin{macrocode}
          \advance\count0 by 1
          \TdSM@FaireDenom{\TdSM@precedent\TdSM@Puissance}%
        \else
%    \end{macrocode}
% sinon on regarde si la valeur pr�c�dente est �gale � la sentinelle
%    \begin{macrocode}
          \ifx\TdSM@precedent\TdSM@sentinelle
%    \end{macrocode}
% auquel cas \cs{TdSM@actuel} contient l'unique lettre de la chaine et
% on peut �crire le d�nominateur.
%    \begin{macrocode}
            \TdSM@FaireDenom{\TdSM@actuel}%
          \else
%    \end{macrocode}
% Si ce n'est pas le cas il faut placer la lettre pr�c�dente avec la
% bonne puissance puis placer l'actuelle: 
%    \begin{macrocode}
            \TdSM@FaireDenom{%
              \TdSM@precedent\TdSM@Puissance
              \TdSMDerPartSepar\partial\TdSM@actuel}%
          \fi
        \fi
%    \end{macrocode}
% Dans le cas o� le 2\ieme argument ne vaut pas \cs{@nil} c'est que
% l'on n'est pas encore au bout.  
%    \begin{macrocode}
      \else
      \def\TdSM@actuel{##1}%
%    \end{macrocode}
% On tient compte du cas o� le \cs{TdSM@precedent} est �gal � la
% sentinelle, auquel cas on met le compteur � \(0\).
%    \begin{macrocode}
      \ifx\TdSM@precedent\TdSM@sentinelle
        \count0=1      
      \else
%    \end{macrocode}
% Sinon, soit la lettre actuelle est �gale � la pr�c�dente et on
% incr�mente le compteur~\(0\)
%    \begin{macrocode}
        \ifx\TdSM@actuel\TdSM@precedent
           \advance\count0 by 1
        \else
%    \end{macrocode}
% soit elle ne l'est pas et on place dans le d�nominateur la lettre
% pr�c�dente � la bonne puissance et on remet le compteur~\(0\) �
% z�ro.  
%    \begin{macrocode}
          \TdSM@FaireDenom{%
            \TdSM@precedent\TdSM@Puissance\TdSMDerPartSepar}%
          \count0=1
        \fi
      \fi
%    \end{macrocode}
% Enfin, on incr�mente le compteur |@| g�n�ral, on place la lettre
% actuelle dans \cs{TdSM@precedent} et on appelle la macro
% \cs{TdSM@derpart@continue} sur le 2\ieme argument. L'astuce ici est
% que le \cs{fi} ferme le premier \cs{if} et que, dans le m�me temps,
% il d�limite l'argument de la macro \cs{TdSM@derpart@continue}
%    \begin{macrocode}
      \advance\count@ by 1
      \let\TdSM@precedent\TdSM@actuel%
      \TdSM@derpart@continue##2%
    \fi}%
%    \end{macrocode}
% comme on le voit dans sa d�finition qui consiste � replacer un
% \cs{fi} et rappeler \cs{TdSM@derpartaux} sur ce qui suit: 
%    \begin{macrocode}
\def\TdSM@derpart@continue##1\fi{\fi\TdSM@derpartaux##1}%
%    \end{macrocode}
% Maintenant que \cs{TdSM@derpartaux} est d�finie, on s'en sert sur le
% 2\ieme argument de \cs{derpart} en pla�ant le \cs{@nil} qui signale
% la fin de la chaine puis on compose la fraction en assurant le mode
% math�matique.
%    \begin{macrocode}
\TdSM@derpartaux#2\@nil%
\ensuremath{\frac%
              {\partial\ifnum\count@>1^{\the\count@}\fi #1}%
              {\TdSM@Denom}}%
}}
%    \end{macrocode}
% \end{macro}
% \iffalse
%</taupe>
% \fi
% \iffalse
%<*suite>
% \fi
%    \begin{macrocode}
\ProvidesFile{suite.sto}%
[\filedate\space\fileversion\space Pour tdsfrmath -- option suite]
%    \end{macrocode}
% \begin{macro}{\suite}
% \changes{v1.3}{2009/01/07}{Ajout de \cs{xspace} dans le code de
% \cs{suite} et \cs{suite*} pour �viter que la macro mange l'espace
% derri�re} 
%    \begin{macrocode}
\ifTdSM@suitedeco
\newcommandx\suite[2][1=\N,2=u]{\ensuremath{\parent{{#2}_{n}}_{#1}}\xspace}
\newcommandx\suitar[6][1=\N,2=u,4=0,6={}]{%
  \suite[#1][#2]#6 la suite arithm\'etique de raison %
  $r = #3$ et de premier terme $#2_{#4}=#5$}
\newcommandx\suitgeo[6][1=\N,2=u,4=0,6={}]{%
  \suite*[#1][#2]#6 la suite g\'eom\'etrique de raison %
  $q = #3$ et de premier terme $#2_{#4}=#5$}
\WithSuffix\newcommand\suite*[1][u]{\parent{{#1}_{n}}\xspace}
\WithSuffix\newcommandx\suitar*[5][1=u,3=0,5={}]{%
  \suite*[#1]#5 la suite arithm\'etique de raison %
  $r = #2$ et de premier terme $#1_{#3}=#4$}
\WithSuffix\newcommandx\suitgeo*[5][1=u,3=0,5={}]{%
  \suite*[#1]#5 la suite g\'eom\'etrique de raison %
  $q = #2$ et de premier terme $#1_{#3}=#4$}
\else
\newcommand\suite[1][u]{\parent{{#1}_{n}}\xspace}
\newcommandx\suitar[5][1=u,3=0,5={}]{%
  \suite[#1]#5 la suite arithm\'etique de raison %
  $r = #2$ et de premier terme $#1_{#3}=#4$}
\newcommandx\suitgeo[5][1=u,3=0,5={}]{%
  \suite[#1]#5 la suite g\'eom\'etrique de raison %
  $q = #2$ et de premier terme $#1_{#3}=#4$}
\WithSuffix\newcommandx\suite*[2][1=\N,2=u]{%
  \ensuremath{\suite[#2]_{#1}}\xspace}
\WithSuffix\newcommandx\suitar*[6][1=\N,2=u,4=0,6={}]{%
  \suite*[#1][#2]#6 la suite arithm\'etique de raison %
  $r = #3$ et de premier terme $#2_{#4}=#5$}
\WithSuffix\newcommandx\suitgeo*[6][1=\N,2=u,4=0,6={}]{%
  \suite*[#1][#2]#6 la suite g\'eom\'etrique de raison %
  $q = #3$ et de premier terme $#2_{#4}=#5$}
\fi
%    \end{macrocode}
% \end{macro}
% 
% Et ici se termine l'extension \texttt{tdsfrmath}. 
% 
% Scripsit TdS.
% \iffalse
%</suite>
% \fi
% \vspace{2\baselineskip}
% \begin{center}
%   \large Remerciements
% \end{center}
% Je tiens � remercier Maxime \textsc{Chupin} pour l'aide qu'il m'a
% apport�e pour am�liorer \Pkg{tdsfrmath}. 
% 
% Je remercie �galement Manuel \textsc{P�gouri�-Gonnard} pour les
% diverses r�ponses intelligentes et utiles � mes questions qui ne le
% furent pas toujours et Christian \textsc{Tellechea} dont j'utilise
% le \Pkg{xstring} et dont je n'oublie pas qu'il m'a envoy� du code
% qui fera son apparition dans la prochaine version.
%  
% \vspace{2\baselineskip}
% 
% \Finale \PrintChanges\PrintIndex
\endinput
%%% Local Variables: 
%%% mode: doctex
%%% coding: iso-8859-15
%%% fill-column: 70
%%% End: