% Fichier CARNOT.MAC % % +------------------------------------------------------------------------+ % | | % | Macros publiques du Lycee Carnot | % | | % +------------------------------------------------------------------------+ % % Compatible avec les formats Plainf, Plain-mt et Plain-lb % M.Quercia 02/10/95 %------------------------------------------------------------------ Securite % Le code qui suit permet de ne charger les macros que la premiere fois % en cas d'appels multiples : \ifx\carnotcharge\undefined\let\next\relax\else\let\next\endinput\fi\next \def\carnotcharge{Carnot charge} %--------------------------------------------------------------------------- % autorise @ dans les noms \catcode 64=11 %------------------------------------------------------- Detection du format % Les tests \ifplainmt et \ifplainlb indiquent si le format utilise est % PLAIN-MT ou PLAIN-LB. Les definitions de CARNOT.MAC sont adaptees en % fonction de ces indicateurs, les formats non reconnus etant supposes % compatibles (au niveau des fontes) avec PLAIN. % Par securite, pour le cas ou un autre fichier de macros aurait deja defini % \ifplainmt et \ifplainlb, ces tests ne sont definis que s'ils n'existent pas. \ifx\ifplainmt\undefined \csname newif\endcsname\ifplainmt \def\temp{plain-mt} \csname ifx\endcsname\fmtname\temp\plainmttrue\else\plainmtfalse\fi \fi \ifx\ifplainlb\undefined \csname newif\endcsname \ifplainlb \def\temp{plain-lb} \csname ifx\endcsname\fmtname\temp\plainlbtrue\else\plainlbfalse\fi \fi %---------------------------------------------------------------------- Fontes \ifplainmt \input fontes.mt % Times-Helvetica-Courier \else\ifplainlb \input fontes.lb % Lucida \else \input fontes.cm % fontes accentues \fi\fi %\language=1 % cesures francaises \input accents.tex %-------------------------------------------------------------- Mise en page \hsize = 18 cm % dimensions d'une page \vsize = 25 cm \hoffset = -1.04 cm % positionnement absolu \voffset = -0.19 cm \headline={\hfil} % rien en haut de page \footline={\footlinefont\hfil-- \folio\ --\hfil} % numero en bas de page \def \sv{\vskip 4mm plus 2mm minus 2mm} % petit saut vertical \def \SV{\vskip 12mm plus 6mm minus 6mm} % grand saut vertical \normallineskiplimit=\normallineskip % variation continue d'espacement \normalbaselines %----------------------------------------------------------- Reduction A4 -> A5 \def\reduction{ \magnification 707 % ceci assure la reduction \hsize = 12.73 true cm % redefinit les dimensions \vsize = 17.68 true cm \hoffset =-0.83 true cm \voffset =-0.82 true cm \special{landscape} % tourner la feuille svp \def\reduction{} % \reduction ne marche qu'une fois (!) \csname newbox\endcsname\@gauche % la demi-page gauche \csname newbox\endcsname\@droite % sa voisine \def\makepage##1{% % constitue une demipage -> \box#1 \global\setbox##1=\vbox{ % assemblage vertical \makeheadline % titre superieur \pagebody % la demi-page \makefootline % titre inferieur }} \def\plainoutput{% % nouvelle routine de sortie \ifodd\pageno % demi-page impaire \makepage\@gauche % elle va a gauche \ifnum\outputpenalty>-20000 % sort la page incomplete \let\test=0\else\let\test=1\fi % en cas de \supereject \else % demi-page impaire \makepage\@droite % elle va a droite \let\test=1% % sort les deux demi-pages \fi \if1\test % sort une page physique \advance\pageno 1 % calcule le numero de page physique \divide\pageno 2 % pour le DVI \shipout\hbox{\box\@gauche\kern1true cm\box\@droite}% assemble les dp \multiply\pageno 2 % restaure le numero de demi-page \fi \advancepageno % mise a jour numero de page } } % fin de la definition de reduction %---------------------------------------------------------------- Marge gauche \newdimen\currmarge % marge en cours depuis le debut de la ligne \def\marge#1{\setbox0=\hbox{#1}\@marge} % texte libre \def\@marge{% % suite des deux macros \advance\leftskip\wd0 % avance la marge gauche \ifvmode\leavevmode\currmarge=\wd0 % debut de ligne -> init \currmarge \else\advance\currmarge\wd0\fi % sinon, cumule la marge en cours \dimen0=\hsize\advance\dimen0\currmarge % augmente la longueur de la 1ere ligne \parshape=2 -\currmarge\dimen0 0pt\hsize% indente negativement la 1ere ligne \box0\ignorespaces} % place le texte dans la marge % texte dans la marge \def\enmarge#1{\leavevmode\hbox to 0pt{\hss#1}\ignorespaces} %------------------------------------------- Desactive les caracteres speciaux \def\inactivespeciaux{% \catcode 34=12 % " \catcode 35=12 % # \catcode 36=12 % $ \catcode 37=12 % % \catcode 38=12 % & \catcode 39=12 % ' \catcode 64=12 % @ \catcode 91=12 % [ \catcode 92=12 % \ \catcode 93=12 % ] \catcode 94=12 % ^ \catcode 95=12 % _ \catcode 96=12 % ` \catcode 123=12 % { \catcode 125=12 % } \catcode 126=12 % ~ } %--------------------------------------------- Listing de code TeX en verbatim {\obeyspaces\global\let =\ } % espace actif -> espace normal \def\beginverbatim {\begingroup \tt \inactivespeciaux % inactive les caracteres speciaux \catcode123=\active % sauf { \obeyspaces % les espaces comptent \obeyaccents % conversion des caracteres accentues \def\par{\leavevmode\endgraf}\obeylines} {% modifications locale des catcodes \catcode 47=0 % / remplace \ \catcode 60=1 % < remplace { \catcode 62=2 % > remplace } \catcode123=\active % { \catcode125=\active % } \catcode 39=12 % ' \catcode 96=12 % ` \catcode 94=12 % ^ \catcode 34=12 % " \catcode 92=12 % \ /global/def/obeyaccents<% /def{##1%} /def/suiteaccent##1##2##3<% /let/next/relax% /ifx##1'/accent19##2/else% /ifx##1`/accent18##2/else% /ifx##1^/accent94##2/else% /ifx##1"/accent127##2/else% /ifx##1c/ifx##2 /accent24##3/let/next/@eat/else/def/next/fi/else% /def/next/fi/fi/fi/fi/fi/next>% /def/@eat##1<>% /def}>% > % fin des modifications de catcode %} % verbatim avec caractere escape : % % \verbatim? ... ?endverbatim -> compose ... en mode verbatim. % Le caractere suivant \verbatim (ici ?) remplace \ dans le corps de ... {\catcode96=12\gdef\verbatim#1{\beginverbatim\catcode`#1=0}} \let\endverbatim=\endgroup % verbatim delimite par deux caracteres : % % \defverbatimchars[][] -> les crochets ouvrent et ferment le mode verbatim % % les delimiteurs doivent etre des caracteres, et il faut les repeter car % la definition est faite en deux temps : changement de \catcode puis % definition. {\catcode96=12 \gdef\defverbatimchars#1#2{% \catcode`#1=\active \catcode`#2=\active \suitedefverbatimchars} \gdef\suitedefverbatimchars#1#2{% \def#1{\beginverbatim\catcode`#2=\active}% \let#2\endverbatim}} % listing d'un fichier \def\listing#1{\beginverbatim\input#1\endverbatim} %----------------------------------------------------------------- Encadrement % \cadrefin{...} -> filet fin (0.4pt) % \cadredouble{...} -> double filet fin % \cadreepais{...} -> filet epais (1.5pt) % \cadrepoint{...} -> filet pointille % \cadreombre{...} -> filet fin et ombre decalee (3pt) % \cadrerond{...} -> filet fin et coins arrondis % Toutes ces macros entourent {...} d'un blanc de 1mm puis encadrent % l'ensemble. La ligne de base du resultat est celle de {...}. % options : on peut inserer entre "\cadrexxx" et "{..}" une suite de commandes % de la forme : % \w = : fixe la largeur interne du cadre % \h = : fixe la hauteur interne du cadre % \d = : fixe la profondeur interne du cadre % \m = : fixe la marge a utiliser % Multilignage : Le texte du cadre est compose par "\halign{\hfil#\hfil\cr ...}" % donc il suffit de separer les differentes lignes par \cr, et d'inserer des % \hfill eventuellement pour compenser le centrage. % On peut modifier l'interligne par "\openup ..." dans la chaine d'options \def\cadreinterne#1#{% #1 = chaine d'options \bgroup \dimendef\w=255 \w=0pt % largeur interne \dimendef\h=254 \h=0pt % hauteur interne \dimendef\d=253 \d=0pt % profondeur interne \dimendef\m=252 \m=1mm % marge #1% % execute les options \suitecadreinterne} \long\def\suitecadreinterne#1{% #1 = texte a encadrer \setbox0=\hbox{\vtop{\halign{\hfil##\hfil\cr#1\crcr}}}% % le met en boite \ifdim\w=0pt \w=\wd0\advance\w2\m\fi % prend en compte les dimensions \ifdim\h=0pt \h=\ht0\advance\h\m \fi \ifdim\d=0pt \d=\dp0\advance\d\m \fi \ht0=\h\dp0=\d % ajuste la hauteur et la profondeur \setbox0=\hbox to \w{\hss\box0\hss}% % centrage horizontal \fincadreinterne % trace le cadre \egroup} % restaure \w,\h,\d,\m,\box0 \def\cadrefin {\let\fincadreinterne=\fincadrefin \cadreinterne} \def\cadredouble {\let\fincadreinterne=\fincadredouble \cadreinterne} \def\cadreepais {\let\fincadreinterne=\fincadreepais \cadreinterne} \def\cadrepoint {\let\fincadreinterne=\fincadrepoint \cadreinterne} \def\cadreombre {\let\fincadreinterne=\fincadreombre \cadreinterne} \def\cadrerond {\let\fincadreinterne=\fincadrerond \cadreinterne} \def\fincadrefin{% \vbox{\hrule\vtop{\hbox{\vrule\box0\vrule}\hrule}}} \def\fincadredouble{% \setbox0=\hbox{\kern 1mm\fincadrefin\kern 1mm}% \dimen0=\ht0\advance\dimen0 1mm\ht0=\dimen0 \dimen0=\dp0\advance\dimen0 1mm\dp0=\dimen0 \fincadrefin} \def\fincadreepais{% \vbox{\hrule height 1.5pt\vtop{\hbox{\vrule width 1.5pt\box0\vrule width 1.5pt}\hrule depth 1.5pt}}} \def\fincadrepoint{% \setbox1=\vbox to 2pt{\vss\hbox to 2pt{\hss.\hss}\vss}% % motif a repeter \setbox2=\hbox to \wd0{\xleaders\copy1\hfil}% % traits horizontaux \offinterlineskip % empilement exact \setbox0=\vbox{\copy2\vtop{\box0\box2}}% % texte + traits hor. \dimen0=\ht0\advance\dimen0\dp0 % mesure hauteur totale \setbox2=\hbox{\lower\dp0\vbox{\xleaders\box1\vskip\dimen0}}% traits verticaux \hbox{\copy2\box0\box2}} % texte + traits \def\fincadreombre{% \setbox0=\hbox{\fincadrefin} % encadre le texte \offinterlineskip % empilement exact \hbox{\vtop{% % assemblage \copy0 % texte encadre \hbox{\hskip3pt\vrule height3pt width\wd0\hskip-3pt}}% % trait horizontal \lower3pt\hbox{\vrule height\ht0 depth\dp0 width3pt}}} % trait vertical \def\fincadrerond{% \setbox0=\hbox{\vrule\box0\vrule}% % texte et traits v \offinterlineskip % empilement exact \font\qc=lcircle10\qc % fonte 1/4 cercle \setbox1=\hbox{\char7}\dimen0=\wd1\divide\dimen0by2 % mesure le rayon \dimen1=\wd0\advance\dimen1\wd1\advance\dimen1-0.4pt % correction de largeur \setbox2=\hbox to\dimen1{% % trace superieur \char7\hskip-\dimen0 % 1/4 sud->est \hrulefill % trait \hskip\dimen0\char4}% % 1/4 ouest->sud \wd2=\wd0 % correction de largeur \setbox3=\hbox to\dimen1{% % trace inferieur \char6\hskip-\dimen0 % 1/4 nord->est \hrulefill % trait \hskip\dimen0\char5}% % 1/4 ouest->nord \wd3=\wd0 % correction de largeur \vbox{\vskip-\ht1\box2\vtop{\box0\box3\vskip-\dp1}}} % assemblage final %--------------------------------------------------------- Tableau de variation % \tabvar{...} -> tableau de variation encadre avec un trait de separation % entre les colonnes 1 et 2. Les cellules du tableau sont % composees en mode mathematique. La ligne de base du tableau % est celle de la ligne 1. La derniere ligne du tableau doit % obligatoirement se terminer par \cr % Dans l'environnement \tabvar, on dispose des macros suivantes : % \cr : interligne normale % \l : espace + demi-interligne % \L : espace + interligne normale avec trait horizontal % \d : fleche descendante % \u : fleche montante % \v : trait vertical centre % \V : double trait vertical centre % \Vd : double trait vertical cadre a droite % \Vg : double trait vertical cadre a gauche % \q : cale de largeur (\qquad) \def\tabvar#1{{% % macros locales \def\L{\ \cr\noalign{\hrule}}% % trait horizontal \def\l{\ \cr\noalign{\vskip -7pt}}% % trait vertical \def\d{\searrow}% % fleche descendante \def\u{\nearrow}% % fleche montante \def\v{\vrule}% % trait vertical \def\V{\vrule\hskip2pt\vrule}% % double trait vertical \def\Vg{\V\hfill}% % double trait a gauche \def\Vd{\hfill\V}% % double trait a droite \def\q{\qquad}% % cale de largeur % \leavevmode % mode horizontal \hbox{\vrule % cadre (trait gauche) \vbox{\hrule % cadre (trait haut) \vtop{\offinterlineskip % lignes jointives \halign{\vbox to 10pt{}\vtop to 4pt{}% % cale de hauteur \ \hfil$##$\hfil\ % colonne 1 \vrule\ % separation 1-2 &&\hfil$##$\hfil\cr % colonnes 2,3,.. #1% % contenu du tableau \noalign{\hrule}% % cadre (trait bas) }}}\vrule}}} % cadre (trait droit) %-------------------------------------------------- Texte en mode mathematique \def\text#1{% \relax \ifmmode\mathchoice {\hbox{\tenrm #1}}% % mode display {\hbox{\tenrm #1}}% % mode textstyle {\hbox{\sevenrm #1}}% % mode scriptstyle {\hbox{\fiverm #1}}% % mode scriptscriptstyle \else #1\fi} % mode texte \let\@d=\d\def\d@{{\text{d}}} \let\@o=\o\def\o@{\mathop{\text{o}}\limits} \let\@O=\O\def\O@{\mathop{\text{O}}\limits} \def\d{\relax\ifmmode\let\next=\d@\else\let\next=\@d\fi\next} \def\o{\relax\ifmmode\let\next=\o@\else\let\next=\@o\fi\next} \def\O{\relax\ifmmode\let\next=\O@\else\let\next=\@O\fi\next} \def \fct#1{\mathop{\text{#1}}\nolimits} \def \argch {\fct{argch}} \def \argsh {\fct{argsh}} \def \argth {\fct{argth}} \def \card {\fct{card}} \def \ch {\fct{ch}} \def \cotan {\fct{cotan}} \def \id {{\fct{id}}} \def \Im {\fct{Im}} \def \Ker {\fct{Ker}} \def \pgcd {\fct{pgcd}} \def \ppcm {\fct{ppcm}} \def \Re {\fct{Re}} \def \rg {\fct{rg}} \def \sh {\fct{sh}} \def \th {\fct{th}} \def \tr {\fct{tr}} %------------------------------------------ Caracteres speciaux des polices AMS \def\Bbb#1{{\fam\msbfam#1}} % Police Blackboard \def\N{{\Bbb N}} \def\Z{{\Bbb Z}} \def\R{{\Bbb R}} \def\Q{{\Bbb Q}} \def\C{{\Bbb C}} \def\K{{\Bbb K}} \def\U{{\Bbb U}} \def\hexnumber@#1{% % conversion decimal -> hexadecimal \ifnum#1<10 \number#1\else \ifnum#1=10 A\else \ifnum#1=11 B\else \ifnum#1=12 C\else \ifnum#1=13 D\else \ifnum#1=14 E\else \ifnum#1=15 F\fi\fi\fi\fi\fi\fi\fi} \def\msa@{\hexnumber@\msafam} \def\msb@{\hexnumber@\msbfam} \def\gt{>} \def\lt{<} \ifplainmt \let\vide=\emptyset \else\ifplainlb \mathchardef\ge ="31E1 \mathchardef\le ="31E0 \mathchardef\succeq ="31E5 \mathchardef\preceq ="31E4 \let\vide=\emptyset \else \mathchardef\ge ="3\msa@3E \mathchardef\le ="3\msa@36 \mathchardef\succeq ="3\msa@3C \mathchardef\preceq ="3\msa@34 \mathchardef\vide ="0\msb@3F \fi\fi %------------------------------------------------------------ Lettres cursives \let\@c=\c\def\c@{{\cal C}} \let\@L=\L\def\L@#1{{{\cal L}(#1)}} \def\c{\relax\ifmmode\let\next=\c@\else\let\next=\@c\fi\next} \def\L{\relax\ifmmode\let\next=\L@\else\let\next=\@L\fi\next} \def \M#1#2{{{\cal M}_{#1}(#2)}} % M_1(2) %------------------------------------------------ Operateurs de taille variable \def \dcap {\bigcap\limits} % intersection \def \dcup {\bigcup\limits} % union \def \dlim {\lim\limits} % limite (lim) \def \dprod {\prod\limits} % produit \def \dsum {\sum\limits} % somme \def \dint {\displaystyle\int} % integrale % integrale multiple #1 = nb d'integrales \def\Dint#1{{\count0=#1 \ifplainlb\dimen0=1mm\else\dimen0=2mm\fi \loop \hbox{$\displaystyle\int$\kern-\dimen0} \ifnum\count0>1 \advance\count0 by -1 \repeat}} %------------------------------------------------------------- Doubles crochets {\catcode91=\active\catcode93=\active \gdef\doublecrochets{% % % [[ et ]] en mode mathematique -> deux crochets imbriques \catcode91=\active \def[{\ifmmode\let\next=\@crochet\else\char91\let\next=\relax\fi\next}% \def\@crochet{\lbrack\futurelet\next\@@crochet}% \def\@@crochet{\ifx\next[\mskip\ifplainlb-5mu\else-3mu\fi\fi}% \def\ilbrack{[[}% % \catcode93=\active \def]{\ifmmode\let\next=\crochet@\else\char93\let\next=\relax\fi\next}% \def\crochet@{\rbrack\futurelet\next\crochet@@}% \def\crochet@@{\ifx\next]\mskip\ifplainlb-5mu\else-3mu\fi\fi}% \def\irbrack{]]}% % % \litdeuxdelim place le delimiteur suivant dans \@delim en detectant even- % tuellement les crochets doubles. Le traitement continue avec la macro % \findelim qui doit etre initialisee avant l'appel. % \def\litdeuxdelim{\afterassignment\litundelim\let\@delim=}% \def\litundelim{% \ifx\@delim[\let\next=\litunautredelim \else\ifx\@delim]\let\next=\litunautredelim \else\let\next=\findelim \fi\fi\futurelet\@@delim\next}% \def\litunautredelim{% \ifx\@delim\@@delim \def\next{\afterassignment\findelim\let\@@delim=}% \ifx\@delim[\let\@delim=\ilbrack\else\let\@delim=\irbrack\fi \else \let\next=\findelim \ifx\@delim[\let\@delim=\lbrack\else\let\@delim=\rbrack\fi \fi\next}% % % Modification de \left et \right pour accepter les crochets doubles % \let\@left=\left \let\@right=\right % \def\left{\bgroup\let\findelim=\suiteleft\litdeuxdelim}% \def\suiteleft{\setbox0=\hbox\bgroup$}% % \def\right{% $\egroup \ifx\@delim\ilbrack \setbox1=\hbox{$\@left\lbrack\vphantom{\copy0}\@right.$}% \setbox0=\hbox{$\copy1\hskip-\wd1\mskip3mu\box1\box0$}% \else \ifx\@delim\irbrack \setbox1=\hbox{$\@left\rbrack\vphantom{\copy0}\@right.$}% \setbox0=\hbox{$\copy1\hskip-\wd1\mskip3mu\box1\box0$}% \else \setbox0=\hbox{$\@left\@delim\box0\@right.$}% \fi\fi \let\findelim=\suiteright\litdeuxdelim}% % \def\suiteright{% \ifx\@delim\ilbrack \setbox1=\hbox{$\@left.\vphantom{\copy0}\@right\lbrack$}% \box0\copy1\hskip-\wd1\mskip3mu\box1 \else \ifx\@delim\irbrack \setbox1=\hbox{$\@left.\vphantom{\copy0}\@right\rbrack$}% \box0\copy1\hskip-\wd1\mskip3mu\box1 \else \@left.\box0\@right\@delim \fi\fi\egroup}% % % Modification des macros \big pour accepter les doubles crochets % Les variantes orientees \bigl, \bigm et \bigr passent par \big et n'ont pas % besoin d'etre redefinies % \def\@big##1{\bgroup\setbox0=\vbox to##1{}\let\findelim=\suiteright\litdeuxdelim}% \def\big{\@big{8.5pt}}% \def\Big{\@big{11.5pt}}% \def\bigg{\@big{14.5pt}}% \def\Bigg{\@big{17.5pt}}% % }} % fin de la definition de \doublecrochets %---------------------------------------------------- parentheses horizontales \def\upparfill{{% \font\qc=lcircle1\qc \smash{\char2}\kern-2pt \leaders\vrule height0.4pt depth 0pt\hfill\kern 2pt \smash{\char1}\kern-3pt}} \def\downparfill{{% \font\qc=lcircle1\qc \smash{\char3}\kern-2pt \leaders\vrule height0.4pt depth 0pt\hfill\kern 2pt \smash{\char0}\kern-3pt}} \def\overpar#1{\mathop{\vbox{\m@th\ialign{##\crcr \downparfill\crcr\noalign{\kern3\p@\nointerlineskip} $\hfil\displaystyle{#1}\hfil$\crcr}}}\limits} \def\underpar#1{\mathop{\vtop{\m@th\ialign{##\crcr $\hfil\displaystyle{#1}\hfil$\crcr\noalign{\kern3\p@\nointerlineskip} \upparfill\crcr}}}\limits} %--------------------------------------------------------------------- Fraction \def \dfrac#1#2{\mathchoice {{\displaystyle#1\over\displaystyle#2}}% % mode = display {{\textstyle#1\over\textstyle#2}}% % mode = texte {#1/#2}% % mode = indice {#1/#2}} % mode = indice d'indice \def\frac#1#2{\mathchoice % petite fraction {{\textstyle #1\over\textstyle#2}}% % mode = display {{#1\over#2}}% % mode = texte {#1/#2}% % mode = indice {#1/#2}} % mode = indice d'indice % derivees partielles : % % df d2f d2f % \dd fx -> -- \dd2 fxy -> ---- \dd2 fxx -> --- % dx dxdy dx2 % % \def\dd#1#2{\bgroup \def\a{#1}\def\test{2}% \ifx\a\test \def\next{\suitedd{#2}} \else \def\next{\dfrac{\partial#1}{\partial#2}\egroup} \fi\next} \def\suitedd#1#2#3{ \def\a{#2}\def\b{#3} % compare les variables \ifx\a\b \dfrac{\partial^2#1}{\partial\a^2} % d2f/dx2 \else \dfrac{\partial^2#1}{\partial\a\partial\b} % d2f/dxdy \fi\egroup} %-------------------------------------------------------------------- Matrices \newdimen\uh \uh = 4pt % espacement points \newdimen\uv \uv = 3pt \def\matrice#1{% % matrice avec cadrage a droite \hskip-4pt \vcenter{% \halign{&\hskip6pt\hfil$##$\cr #1\crcr }}\hskip2pt} \def\smatrice#1{% % petite matrice avec cadrage a droite \hskip-3pt \vcenter{% \baselineskip =7pt \lineskiplimit=1pt \lineskip =1pt \uh=3pt \uv=2pt \halign{&\hskip4pt\hfil$\scriptstyle ##$\cr #1\crcr }}\hskip1pt} \def\smatrix#1{% % petite matrice avec centrage \hskip-3pt \vcenter{% \baselineskip =7pt \lineskiplimit=1pt \lineskip =1pt \uh=3pt \uv=2pt \halign{&\hskip4pt\hfil$\scriptstyle ##$\hfil\cr #1\crcr }}\hskip1pt} \def\pointh{\hbox to 0pt{\hss\smash{\raise \uv\hbox{.}}\hss}} \def\pointm{\hbox to 0pt{\hss\hbox{.}\hss}} \def\pointb{\hbox to 0pt{\hss\raise -\uv\hbox{.}\hss\vtop to2\uv{}}} \def\ldots{\hskip0.5\uh\pointm\hskip\uh\pointm\hskip\uh\pointm\hskip0.5\uh} \def\vdots{\hskip0.5\uh\pointh\pointm\pointb\hskip0.5\uh} \def\ddots{\hskip0.5\uh\pointh\hskip\uh\pointm\hskip\uh\pointb\hskip0.5\uh} \def\adots{\hskip0.5\uh\pointb\hskip\uh\pointm\hskip\uh\pointh\hskip0.5\uh} \def \vmatrix #1{\left|\matrix{#1}\right|} % determinants \def \vmatrice #1{\left|\matrice{#1}\right|} \def \vsmatrice #1{\left|\smatrice{#1}\right|} \def \vsmatrix #1{\left|\smatrix{#1}\right|} \def \pmatrix #1{\left(\matrix{#1}\right)} % matrices avec parentheses \def \pmatrice #1{\left(\matrice{#1}\right)} \def \psmatrice #1{\left(\smatrice{#1}\right)} \def \psmatrix #1{\left(\smatrix{#1}\right)} %--------------------------------------------------------------------- Systemes \def \syst#1{% % systeme %} \left\{\,% % accolade ouvrante \vcenter % centre ce qui suit {\normalbaselines % interligne normale \m@th % pas d'espace entre formules \ialign{&\hfil$##$\hfil\ \crcr % alignement #1 \crcr}% % ce qu'il faut aligner }% % fin de \vcenter \right.% % pas de symbole de fermeture } %-------------------------------------------------------------------- Fleches \let\@egal=\= \def \egal@#1{\if >#1\let\arg@=\Longrightarrow\fleche@ % => \else\overline{#1}\fi} \def\={\relax\ifmmode\let\next=\egal@\else\let\next=\@egal\fi\next} \def \-#1{\if >#1\let\arg@=\longrightarrow % -> \let\next@=\fleche@ \else \if -#1\let\next@=\limite@ % -- ... -> \else \let\next@=\disc@ \let\arg@=#1\fi\fi % trait de fin de ligne \next@} \def \<#1{\if =#1\let\arg@=\Longleftrightarrow % <=> \let\arg@@=\Longleftarrow % <= \let\next@=\fleche@@ \else \if -#1\let\arg@=\longleftrightarrow % <-> \let\arg@@=\longleftarrow % <- \let\next@=\fleche@@ \else \let\next@=\relax % erreur \errmessage{commande inconnue}\fi\fi \next@} \def \I->{\let\arg@=\longmapsto\fleche@} % I-> \def \fleche@{\mathop{\,\arg@\,}\limits} % dessine une fleche \def \fleche@@#1{\if >#1\fleche@ % fleche double \else \let\arg@=\arg@@ % ou simple \fleche@#1\fi} \def \limite@#1->{% % limite avec indice \setbox0=\hbox{ $\scriptstyle #1$ }% % embo{\^\i}te l'indice \mathop{\,\hbox to\wd0{\rightarrowfill}\,}% % place la fleche \limits_{\box0}} % met l'indice \def \disc@{\discretionary{-}{}{}\arg@} % trait de fin de ligne %----------------------------------------------------------- Symboles speciaux \def \interieur #1{{\mathop{#1}\limits^{\circ}}} % interieur de 1 \def \modulo #1{\ \left[ #1 \right]} % modulo \def \eqv{\mathop{\sim}\limits} % equivalence \def \vct#1{\hskip1pt\overrightarrow{\hskip-1pt#1\hskip1pt}\hskip-1pt} % vecteur \def \rac#1#2{\root {\scriptstyle #1} \of {#2}} % racine % Indices multilignes \def\empile#1{{\vtop{\baselineskip =7pt \lineskiplimit=1pt \lineskip =1pt \halign{\hfil$\scriptstyle ##$\hfil\cr#1\crcr}}}} \def\Empile#1{{\vbox{\baselineskip =7pt \lineskiplimit=1pt \lineskip =1pt \halign{\hfil$\scriptstyle ##$\hfil\cr#1\crcr}}}} \def\Sb#1{_{\empile{#1}}} \def\Sp#1{^{\Empile{#1}}} %---------------------------------------------------------------- Applications % % 1 : 2 ----> 3 % \def \app #1#2#3{{#1}\,: {#2} \longrightarrow {#3}\ } % % 1: | 2 ----> 3 % | 4 |---> 4' % | 4" |---> 4"' % etc. % \def \appmult #1#2#3#4{% {#1}:\; % nom de l'application \left\{\,%} % accolade \vcenter{% % empiler par le bas \normalbaselines % interligne normale \m@th % pas d'espace entre les formules \ialign{\hfil$##$ % cadre a droite, &$\hskip 3mm \longmapsto \hskip 3mm % bequillon ##$\hfil % cadre a gauche &\hskip 3mm $##$\hfil\cr % condition #2 % ensemble de depart &\omit\hskip 3mm$\longrightarrow\hskip 3mm % fleche sans bequillon #3$\hfil\cr % ensemble d'arrivee \noalign{\vskip 1mm}% % petit espace vertical #4}% % elements et images }\,\right.} % petit espace final % % 1: | 2 ----> 3 % | 4 |---> 5 % \def\application#1#2#3#4#5{\appmult {#1}{#2}{#3}{#4\cr}} %-------------------------------------------------- Date et jour de la semaine \def\date{{% \leavevmode % \countdef\M=0\M=\month % \M = mois \countdef\Y=1\Y=\year % \Y = annee \countdef\D=2\D=\day % \D = jour \countdef\aux=3 % \advance\M by -3 % fait commencer l'annee ... \ifnum\M < 0 \advance\M by 12\advance\Y by -1 \fi % ... au 1er mars \advance\Y by -1980 % origine des temps = 1980 \multiply\Y by 5\divide\Y by 4 % decalage de 5j par 4ans \multiply\M by 26\advance\M by 5\divide\M by 10 % decalage de 2.6j par mois \advance\D by \M\advance\D by\Y % cumule les decalages \aux=\D\divide\aux by 7\multiply\aux by 7\advance\D by -\aux % reduit modulo 7 % \ifcase\D vendredi % ecrit le jour de la semaine \or samedi % Tous calculs faits, le 0 mars 1980 est un vendredi ... \or dimanche \or lundi \or mardi \or mercredi \or jeudi \fi \number\day % ecrit le quantieme du mois \ifnum\day=1er\fi\ % 1er et non 1 \ifcase\month % ecrit le mois \or janvier \or f{\'e}vrier \or mars \or avril \or mai \or juin \or juillet \or ao{\^u}t \or septembre \or octobre \or novembre \or d{\'e}cembre \fi \number\year % ecrit l'annee }} \def\heure{\hbox{% % heure:minutes \count0=\time \count1=\count0 \divide\count1 by 60 \number\count1h% \multiply\count1 by 60 \advance\count0 by -\count1 \ifnum\count0<10{0}\fi \number\count0}} %----------------------------------------------------------------------- Divers % souligne un texte \def \souligne#1{\leavevmode\hbox{$\underline{\vphantom y\hbox{#1}}$}} % guillemets francaises \ifplainmt \chardef\og=171 \chardef\fg=187 \else\ifplainlb \chardef\og=171 \chardef\fg=187 \else \def\og{\leavevmode\lower0.2ex\hbox{\lasy\char40\kern-0.5ex\char40}\ignorespaces} \def\fg{\leavevmode\lower0.2ex\hbox{\lasy\char41\kern-0.5ex\char41}} \fi\fi {\catcode34=\active\gdef\guillemets{% \catcode34=\active \def\@og{\og~\global\let"=\@fg}% \def\@fg{~\fg\global\let"=\@og}% \let"=\@og}} % no, No \ifplainmt \def\no{\text{n\char235}} \def\No{\text{N\char235}} \else\ifplainlb \def\no{\text{n\char186}} \def\No{\text{N\char186}} \else \def\no{\text{n$^\circ$}} \def\No{\text{N$^\circ$}} \fi\fi %--------------------------------------------------------------------- Termine \catcode64=\active