summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/tdsfrmath
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2008-07-10 00:30:23 +0000
committerKarl Berry <karl@freefriends.org>2008-07-10 00:30:23 +0000
commit0dcbd08d9eda88bf5a9bf9166c44b2a2577362df (patch)
treebd51aab81d701736a8eab0eae4cde993bb812b0c /Master/texmf-dist/source/latex/tdsfrmath
parentf9fe5c477bc64bd2c079adfa92768a935a736cdf (diff)
new french latex package tdsfrmath (8jul08)
git-svn-id: svn://tug.org/texlive/trunk@9414 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/tdsfrmath')
-rwxr-xr-xMaster/texmf-dist/source/latex/tdsfrmath/Makefile135
-rwxr-xr-xMaster/texmf-dist/source/latex/tdsfrmath/tdsfrmath.dtx2698
-rwxr-xr-xMaster/texmf-dist/source/latex/tdsfrmath/tdsfrmath.ins59
3 files changed, 2892 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/tdsfrmath/Makefile b/Master/texmf-dist/source/latex/tdsfrmath/Makefile
new file mode 100755
index 00000000000..f37b2182feb
--- /dev/null
+++ b/Master/texmf-dist/source/latex/tdsfrmath/Makefile
@@ -0,0 +1,135 @@
+# ---------------------------------------------------------------
+# Makefile for the modroman package by Y. Henel
+# modified version of the Makefile of the kerntest package
+# many thanks to Harald Harders whose kerntest.xml I have also
+# hacked to obtain my modroman.xml
+# ---------------------------------------------------------------
+PKGNAME = tdsfrmath
+VERSION=1 # Première édition
+
+TEX= \
+ $(PKGNAME).sty \
+ taupe.sto \
+ suite.sto
+
+DOC= \
+ $(PKGNAME).pdf \
+ LISEZMOI \
+ README
+
+SOURCE= \
+ Makefile \
+ $(PKGNAME).dtx \
+ $(PKGNAME).ins \
+
+PRODUITS = \
+ $(PKGNAME).sty \
+ $(PKGNAME).pdf \
+ taupe.sto \
+ suite.sto
+
+DECHETS = \
+ $(PKGNAME).glo \
+ $(PKGNAME).gls \
+ $(PKGNAME).idx \
+ $(PKGNAME).ilg \
+ $(PKGNAME).ind \
+ $(PKGNAME).aux \
+ $(PKGNAME).log \
+ $(PKGNAME).toc \
+ $(PKGNAME).lof \
+ $(PKGNAME).lot \
+ $(PKGNAME).out
+
+REPERTS = \
+ doc \
+ tex \
+ source
+
+# ---------------------------------------------------------------
+
+.SUFFIXES: .sty .ins .dtx .dvi .ps .pdf .sto
+
+# ---------------------------------------------------------------
+.ins.sty:
+ latex $<
+
+.dtx.sto:
+ pdflatex $<
+
+.dtx.pdf:
+ pdflatex $<
+ makeindex -s gind.ist $(*D)/$(*F)
+ makeindex -s gglo.ist -o $(*D)/$(*F).gls $(*D)/$(*F).glo
+ pdflatex $<
+ pdflatex $<
+
+.tex.pdf:
+ pdflatex $<
+
+
+# ---------------------------------------------------------------
+
+all: $(PKGNAME).sty $(PKGNAME).pdf taupe.sto suite.sto
+
+
+help:
+ @-echo "************************************************************"
+ @-echo "* *"
+ @-echo "* Choisir une des options : *"
+ @-echo "* 'all' -> Tdsfrmath.sty *"
+ @-echo "* 'doc' pour la documentation *"
+ @-echo "* 'doc' for the documentation *"
+ @-echo "* 'sty' -> Tdsfrmath.sty *"
+ @-echo "* 'dist'-> Tdsfrmath.sty & doc *"
+ @-echo "* 'clean' petit nettoyage *"
+ @-echo "* 'distclean' (encore plus propre) *"
+ @-echo "* *"
+ @-echo "************************************************************"
+
+dist: all clean
+
+# ---------------------------------------------------------------
+
+clean:
+ @-rm -f $(DECHETS)
+ @-rm -f *~
+
+distclean: clean
+ @-rm -f $(PRODUITS)
+
+# ---------------------------------------------------------------
+
+texlive: all clean
+ @-rm -rf $(REPERTS)
+ @-mkdir -p tex/latex/$(PKGNAME)
+ @-mkdir -p doc/latex/$(PKGNAME)
+ @-mkdir -p source/latex/$(PKGNAME)
+ @-cp $(TEX) tex/latex/$(PKGNAME)
+ @-cp $(DOC) doc/latex/$(PKGNAME)
+ @-cp $(SOURCE) source/latex/$(PKGNAME)
+ @-mkdir -p $(PKGNAME)
+ @-cp $(DOC) ./$(PKGNAME)
+ @-cp $(SOURCE) ./$(PKGNAME)
+
+# ---------------------------------------------------------------
+
+zip: texlive
+ @-rm -f $(PKGNAME).zip
+ @-zip -r $(PKGNAME) $(REPERTS)
+ @-rm -rf $(REPERTS)
+ @mv $(PKGNAME).zip $(PKGNAME).tds.zip
+ @zip -r $(PKGNAME) $(PKGNAME)
+ @zip -r $(PKGNAME) $(PKGNAME).tds.zip
+ @-rm -rf $(PKGNAME)
+ @-rm -f $(PKGNAME).tds.zip
+
+# ---------------------------------------------------------------
+
+$(PKGNAME).sty: $(PKGNAME).ins $(PKGNAME).dtx
+suite.sto: $(PKGNAME).dtx
+taupe.sto: $(PKGNAME).dtx
+doc: $(PKGNAME).ins $(PKGNAME).pdf
+# ---------------------------------------------------------------
+# echu e an abaden
+# Le \TeX nicien de surface 2008-05-04
diff --git a/Master/texmf-dist/source/latex/tdsfrmath/tdsfrmath.dtx b/Master/texmf-dist/source/latex/tdsfrmath/tdsfrmath.dtx
new file mode 100755
index 00000000000..04b7c13d865
--- /dev/null
+++ b/Master/texmf-dist/source/latex/tdsfrmath/tdsfrmath.dtx
@@ -0,0 +1,2698 @@
+% \iffalse meta-comment
+% -*- mode: LaTeX; coding: iso-8859-15 -*-
+% Time-stamp: <2008-07-08T15:12:42 (cest) [yvon sur hypatie]>
+% Copyright (C) 2008 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}
+%<package|suite|taupe>\def\filedate{2008/07/08}
+%<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=true,suite=true]{tdsfrmath}[2008/07/08]
+\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}}
+%%% fin de la personalisation
+\begin{document}
+ \settowidth{\xttlarge}{\texttt{x}}
+ \DocInput{tdsfrmath.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{1007}
+%
+% \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.}
+%
+% \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.
+% Édition du cinquantenaire.}}
+% \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 an
+% 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} et
+% \texttt{amssymb} qu'il requiert. On n'aura donc pas besoin de les
+% charger avec un \cs{usepackage} si l'on utilise \texttt{tdsfrmath}.
+%
+% \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{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 par défaut 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}|
+%
+% \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 qui vaut
+% \Optionval{false}{ArgArcMaj} par défaut 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} à 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. Par défaut, \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}, 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{euscal}.
+%
+% 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{euscal} 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.
+%
+% \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} 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[gdtpack=dsfont,| |gdtoptn=sans,|\\
+% \Alinea |gdtcomd=mathds]{tdsfrmath}|%
+%
+% \noindent et \cs{grastab} donnera ce que l'on voit dans
+% \texttt{symbols-a4.pdf}.
+%
+% \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{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 ammené à 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{ecart}
+%
+% \noindent le seul argument nouveau est \meta{ecart} 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{ecart} 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 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 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*+}, 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.
+% 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\), est un entier supérieur à \(1\), un entier strictement
+% négatif ou l'une de ces sept chaines de caractères |*|, |+|, |-|,
+% \DescribeMacro{\N}
+% |*+|, |+*|, |-*| et |-*| \TO 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 être un nombre négatif; 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 la largeur d'un M dans la fonte
+% courante.
+%
+% La macro opère un certain controle car, en dehors de |*|, |+|, |-|,
+% |*+|, |+*|, |-*| et |-*|, le 2\ieme argument doit être un entier
+% relatif. Attention, on peut saisir |\R[--4]| mais ça donne \R[--4]!
+%
+% 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[+*]| ou |\R[*+]| donne \R[+*];
+% \item |\R[-*]| ou |\R[*-]| donne \R[-*];
+% \item |\R[5]| donne \R[5];
+% \item |\R[-6]| donne \R[-6];
+% \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
+%
+% \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.
+%
+% \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!
+%
+% \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 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.
+%
+% \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}. Lorsque l'on passe la valeur
+% \Optionval{true}{suitedeco} à 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| 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!
+%
+% ^^A ICI
+%
+%\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},
+% \texttt{xspace},
+% \texttt{xargs},
+% \texttt{suffix}
+% et \texttt{stmaryrd} si la clé \Optioncle{taupe} a la valeur
+% \Optionval{true}{taupe}.
+%
+% 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} >{\ttfamily}l l}\hline
+% clé & type & valeur&\multicolumn{1}{l}{référence} \\
+% \multicolumn{1}{l}{}&\multicolumn{1}{l}{}&par défaut&voir page\\ \hline\hline
+% taupe & booléen & false & \pageref{cletaupe} \\
+% ArgArcMaj & booléen & false & \pageref{cleArgArcMaj} \\ \hline
+% suite & booléen & false & \pageref{clesuite} \\
+% suitedeco & booléen & false & \pageref{clesuitedeco} \\ \hline
+% SepDefEnsExt& booléen & true & \pageref{cleSepDefEnsExt} \\ \hline
+% CharPoCal & booléen & true& \pageref{cleCharPoCal} \\
+% calpack & texte & mathrsfs& \pageref{clecalpack} \\
+% calcomd & texte \TeX & mathscr& \pageref{clecalcomd} \\
+% caloptn & texte \TeX & ***& \pageref{clecaloptn} \\ \hline
+% CharPoGdT & booléen & false& \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
+% \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}
+%
+% \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.
+%
+% \begin{macrocode}
+\define@choicekey*+[TdSM]{tdsfrmath.sty}{nupletsep}[\val\nr]%
+ {virgule,pointvirgule}{%
+ \ifcase\nr\relax
+ \newcommand{\TdSM@separateur}{\string,\,}\or
+ \newcommand{\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 devrait contenir la valeur par défaut mais, dans
+% le cadre de la définition des options d'une extension, ce mécanisme
+% ne fonctionne pas comme il semble le devoir d'après le manuel. Je
+% dois avouer qu'ici quelque chose m'échappe.
+% \begin{macrocode}
+\define@boolkey+[TdSM]{tdsfrmath.sty}[TdSM@]{CharPoCal}[]{}%
+ {\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}[]{}
+% \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}[]{}
+% \end{macrocode}
+% Clé fixant l'aspect des fonctions circulaires et hyperboliques
+% réciproques.
+% \begin{macrocode}
+\define@boolkey[TdSM]{tdsfrmath.sty}[TdSM@]{ArgArcMaj}[]{}
+% \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}[]{}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\define@boolkey[TdSM]{tdsfrmath.sty}[TdSM@]{suitedeco}[]{}
+% \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}[]{}
+% \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 quelques
+% macros qui n'ont plus d'usage.
+% \begin{macrocode}
+\ExecuteOptionsX[TdSM]{%
+ 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, amssymb}
+\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}
+%
+% 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.
+% \begin{macrocode}
+ {\PackageWarningNoLine{tdsfrmath}{Extension \TdSM@calpack\space
+ pas vue sur la machine !}}
+% \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
+% \end{macrocode}
+% Si on a |CharPoGdT=true|, on s'occupe de la police calligraphique 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{***}:
+% \begin{macrocode}
+\ifTdSM@CharPoGdT
+% \end{macrocode}
+% \texttt{TdSM@CharPoGdT} est \OptionvalPresent{true}.
+% \begin{macrocode}
+ \IfFileExists{\TdSM@gdtpack.sty}
+% \end{macrocode}
+% L'extension passée à \Optioncle{gdtpack} existe. Première branche du
+% \cs{IfFileExists}.
+% \begin{macrocode}
+ {%
+% \end{macrocode}
+% On traite l'option éventuelle pour \cs{RequirePackage}.
+% \begin{macrocode}
+ \ifthenelse{\equal{\TdSM@gdtoptn}{***}}%
+ {\RequirePackage{\TdSM@gdtpack}}
+ {\RequirePackage[\TdSM@gdtoptn]{\TdSM@gdtpack}}
+% \end{macrocode}
+% On traite la commande éventuelle.
+% \begin{macrocode}
+ \ifthenelse{\equal{\TdSM@gdtcomd}{***}}%
+ {\def\TdSM@MathGdTPol{\mathbb}}
+% \end{macrocode}
+% On n'est pas dans le cas banal, on vérifie que la commande demandée
+% est bien définie.
+% \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}
+% L'extension passée à \Optioncle{gdtpack} n'est pas trouvée. Seconde
+% branche du \cs{IfFile}\BOP|Ex|\BOP|ists|.
+% \begin{macrocode}
+ {\PackageWarningNoLine{tdsfrmath}{Extension \TdSM@gdtpack\space
+ pas vue sur la machine !}}}
+\else
+% \end{macrocode}
+% \texttt{TdSM@CharPoGdT} est \OptionvalPresent{false}.
+% \begin{macrocode}
+ \def\TdSM@MathGdTPol{\mathbb}
+\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}{\TdSM@MangeMoins}
+% Son unique but est de tranformer, p.~ex. |-3| en |3|, bref, elle
+% mange le moins. Cela dit, cette macro utilise une définition \og à
+% la \TeX\ \fg car j'ai besoin de délimiter les arguments. Quand je
+% l'utilise par la suite, je lui passe un argument qui a pour forme
+% |-|\meta{N}\cs{@nil} ce qui fait que |#1| est exactement \meta{N}.
+% \begin{macrocode}
+\@ifdefinable\TdSM@MangeMoins{\def\TdSM@MangeMoins-#1\@nil{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\EnsembleDeNombre}
+% La suivante fait le boulot de composition.
+% \begin{macrocode}
+\newcommandx\EnsembleDeNombre[4]{%
+ \ensuremath{%
+ \grastab{#1}%
+ \ifthenelse{\equal{#2}{*}}{^{\ast}}{%
+ \ifthenelse{\equal{#2}{+}}{\TdSM@PlaceSigne{+}}{%
+ \ifthenelse{\equal{#2}{-}}{\TdSM@PlaceSigne{-}}{%
+ \ifthenelse{\equal{#2}{+*}\or\equal{#2}{*+}}{%
+ \TdSM@Decoration{\ast}{+}}{%
+ \ifthenelse{\equal{#2}{-*}\or\equal{#2}{*-}}{%
+ \TdSM@Decoration{\ast}{-}}{%
+ \ifthenelse{#2=1}{}{%
+ \ifthenelse{#2>1}{^{#2}}{%
+ \ifthenelse{#2<0}{%
+ _{\TdSM@MangeMoins#2\@nil}\mspace{#4mu}\left[#3\right]}{%
+ [\string?\string?\string?]%
+ }}}}}}}}}\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}
+% \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}
+%
+% 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\@v@nt{\left #2}\def\@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\@v@nt{\relax}}{\def\@v@nt{#2}}%
+ \ifthenelse{\equal{#3}{.}}{\def\@pr@s{\relax}}{\def\@pr@s{#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}
+ \@v@nt #4 \@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:
+% \begin{macrocode}
+\newcommandx{\interff}[4][1=0,2=1,4=0]%
+ {\crochet[#1]{\TdSM@dedans{#2}{#3}{#4}}}
+\newcommandx{\interoo}[4][1=0,2=1,4=0]{%
+ \EncloreExtensible[#1]{]}{[}{\TdSM@dedans{#2}{#3}{#4}}}
+\newcommandx{\interof}[4][1=0,2=1,4=0]{%
+ \EncloreExtensible[#1]{]}{]}{\TdSM@dedans{#2}{#3}{#4}}}
+\newcommandx{\interfo}[4][1=0,2=1,4=0]{%
+ \EncloreExtensible[#1]{[}{[}{\TdSM@dedans{#2}{#3}{#4}}}
+\newcommandx{\intferab}[2][1=0,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{macrocode}
+\newcommand{\drv}[2]{\ensuremath{\frac{\D#1}{\D#2}}}
+\newcommand{\ddrv}[2]{\ensuremath{\dfrac{\D#1}{\D#2}}}
+% \end{macrocode}
+%
+% \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{macrocode}
+\ifTdSM@suitedeco
+\newcommandx\suite[2][1=\N,2=u]{\ensuremath{\parent{{#2}_{n}}_{#1}}}
+\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}}}
+\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}}}
+\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}}}
+\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}
+%
+% Et ici se termine l'extension \texttt{tdsfrmath}.
+%
+% Scripsit TdS.
+% \iffalse
+%</suite>
+% \fi
+% \Finale \PrintChanges\PrintIndex
+\endinput
+%%% Local Variables:
+%%% mode: doctex
+%%% fill-column: 70
+%%% End:
diff --git a/Master/texmf-dist/source/latex/tdsfrmath/tdsfrmath.ins b/Master/texmf-dist/source/latex/tdsfrmath/tdsfrmath.ins
new file mode 100755
index 00000000000..c4c959a5b4c
--- /dev/null
+++ b/Master/texmf-dist/source/latex/tdsfrmath/tdsfrmath.ins
@@ -0,0 +1,59 @@
+%%% 2004-05-22
+%%
+%% Copyright (C) 2004, 2008 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.
+%%
+\input docstrip.tex
+\keepsilent
+\preamble
+This is a generated file.
+
+Copyright (C) 2008 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.
+\endpreamble
+\askforoverwritefalse
+\generate{
+ \file{tdsfrmath.sty}{\from{tdsfrmath.dtx}{package}}
+ \file{taupe.sto}{\from{tdsfrmath.dtx}{taupe}}
+ \file{suite.sto}{\from{tdsfrmath.dtx}{suite}}
+ }
+
+\obeyspaces
+\Msg{**********************************************************************}
+\Msg{* Pour finir l'installation vous devez placer *}
+\Msg{* le fichier suivant dans un dossier parcouru par TeX. *}
+\Msg{* *}
+\Msg{* tdsfrmath.sty *}
+\Msg{* *}
+\Msg{* Pour produire la documentation faire : *}
+\Msg{* pdflatex tdsfrmath.dtx *}
+\Msg{* makeindex -s gind tdsfrmath *}
+\Msg{* makeindex -s gglo -o tdsfrmath.gls tdsfrmath.glo *}
+\Msg{* pdflatex tdsfrmath.dtx *}
+\Msg{* *}
+\Msg{* puis placez tdsfrmath.pdf dans un dossier de documentation *}
+\Msg{* comme par exemple texmf-local/doc/latex/tdsmath *}
+\Msg{* *}
+\Msg{* TeXez dans la joie ! *}
+\Msg{**********************************************************************}
+\endbatchfile