From 0dcbd08d9eda88bf5a9bf9166c44b2a2577362df Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Thu, 10 Jul 2008 00:30:23 +0000 Subject: new french latex package tdsfrmath (8jul08) git-svn-id: svn://tug.org/texlive/trunk@9414 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/source/latex/tdsfrmath/Makefile | 135 + .../source/latex/tdsfrmath/tdsfrmath.dtx | 2698 ++++++++++++++++++++ .../source/latex/tdsfrmath/tdsfrmath.ins | 59 + 3 files changed, 2892 insertions(+) create mode 100755 Master/texmf-dist/source/latex/tdsfrmath/Makefile create mode 100755 Master/texmf-dist/source/latex/tdsfrmath/tdsfrmath.dtx create mode 100755 Master/texmf-dist/source/latex/tdsfrmath/tdsfrmath.ins (limited to 'Master/texmf-dist/source/latex/tdsfrmath') 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» +% ------------------------------------------------------------------ +% +% 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 +%\NeedsTeXFormat{LaTeX2e}[1999/12/01] +%\def\PackageName{tdsfrmath} +%\def\fileversion{v1} +%\def\filedate{2008/07/08} +%\def\fileinfo{macros pour les maths +% par Le TeXnicien de surface} +%\ProvidesPackage{tdsfrmath} +% [\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} +% +% \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 <> ne connait pas + <<\val>>\MessageBreak <> 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 <> ne connait pas + <<\TdSM@DecoChoix>>\MessageBreak <> 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 <> ne connait pas + <<\TdSM@PlaSiChoix>>\MessageBreak <> 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 +% +% \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 +% +% \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 +% +% \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 +% +% \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 +% +% \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» +%% +%% 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» + +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 -- cgit v1.2.3