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