% \iffalse meta-comment
%
% smflatex package version 1.6-20210418
% Copyright (c) 1999-2021 Societe mathematique de France
%
% Ce fichier contient classes, paquetages et documentation pour
% les publications de la Societe mathematique de France (SMF).
%
% Ces classes utilisent du code des classes amsart et amsbook de
% l'American Mathematical Society (AMS).
%
% Leur modification est interdite \`a moins de modifier le nom de
% la classe.
%
% \fi
% \CheckSum{11858}
%% \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         \~}
%
% \changes{v0.2}{1997/01/02}{Utilisation de \texttt{doc.sty} et cr\'eation
%     d'une documentation}
%  \changes{v0.3}{1997/05/20}{Diverses options pour les th\'eor\`emes}
%  \changes{v0.3}{1997/05/21}{Ajout du manuel}
%  \changes{v0.3}{1997/05/28}{Fin de l'\'etat 1 du manuel (v.f.)}
%  \changes{v0.4}{1997/07/01}{Manuel dans un fichier s\'epar\'e,
%      au format smfart}
%  \changes{v0.5}{1997/07/10}{Packages auxiliaires pour les revues}
%  \changes{v0.5}{1997/07/10}{Package de th\'eor\`emes}
%  \changes{v0.6}{1997/07/15}{Package smfmulti}
%
%  \changes{v1.2}{1999/11/17}{Use \cs{GetFileInfo}}
%  \changes{v1.3}{1999/11/20}{Remise \`a jour de la documentation}
%  \changes{v1.3a}{2000/02/15}{Modification des styles revues}
%
%  \changes{v1.3b}{2001/09/26}{Am\'elioration des commentaires et
%  meilleure utilisation de \textsf{docstrip}}
%  \changes{v1.3b}{2001/10/04}{Les labels de biblio s'ajustent
%  automatiquement}
% \changes{v1.3b}{2001/10/04}{babel est charg\'e en dernier}
% \changes{v1.3b}{2001/10/04}{Pr\'evision de polices pour l'Euro}
% \changes{v1.3b}{2001/10/04}{Introuduction de \cs{emergencyhyphenate}}
% \changes{v1.3c}{2001/10/10}{Corrections mineures}
% \changes{v1.3c}{2001/10/10}{Introduction de \cs{smfmulti@protect}}
% \changes{v1.3d}{2002/07/02}{Remise \`a jour des environnements de preuve}
% \changes{v1.3e}{2003/01/13}{Modification d'un bug dans les environnements
% de figures et tables; rajout des env. figure* et table*}
% \changes{v1.3f}{2003/10/28}{Ajout d'une p\'enalit\'e n\'egative avant
% les \'enonc\'es de th\'eor\`emes}
% \changes{v1.4f}{2010/11/07}{Mise \`a jour suite \`a une s\'erie 
% d'incompatibilit\'es avec hyperref (sections, th\'eor\`emes)}
% \changes{v1.5}{2012/09/26}{Mise à jour sérieuse (théorèmes, sections)}
% \changes{v1.5a}{2012/09/29}{Modifications supplémentaires en lien avec hyperref}
% \changes{v1.5b}{2014/01/11}{Réparation d'un bug ayant fait disparaître les titres de sections dans les titres courants}
% \changes{v1.5c}{2015/09/02}{Réparation d'un petit bug dans les environnements de théorèmes}
% \changes{v1.5d}{2018/05/30}{Ajout de option 14pt}
% \changes{v1.5e}{2019/07/11}{Ajout de appendixname (détecté par @KpanRambles)}
% \changes{v1.5f}{2020/11/05}{Remplacement de latin1 par utf8 et réparation de GetFileInfo}
% \changes{v1.6}[2021/03/28]{Ajout de préfixes smf aux noms de fichiers}
% \changes{v1.6}[2021/03/28]{Incorporation de upitparen dans smfgen}
% \changes{v1.6}[2021/04/18]{Correction de smfhyperref (backref)}
%
%
% \DoNotIndex{\@,\@@par,\@beginparpenalty,\@empty}
% \DoNotIndex{\@flushglue,\@gobble,\@input}
% \DoNotIndex{\@makefnmark,\@makeother,\@maketitle}
% \DoNotIndex{\@namedef,\@ne,\@spaces,\@tempa}
% \DoNotIndex{\@tempb,\@tempswafalse,\@tempswatrue}
% \DoNotIndex{\@thanks,\@thefnmark,\@topnum}
% \DoNotIndex{\@@,\@elt,\@forloop,\@fortmp,\@gtempa,\@totalleftmargin}
% \DoNotIndex{\",\/,\@ifundefined,\@nil,\@verbatim,\@vobeyspaces}
% \DoNotIndex{\|,\~,\ ,\active,\advance,\aftergroup,\begingroup,\bgroup}
% \DoNotIndex{\mathcal,\csname,\def,\documentstyle,\dospecials,\edef}
% \DoNotIndex{\egroup}
% \DoNotIndex{\else,\endcsname,\endgroup,\endinput,\endtrivlist}
% \DoNotIndex{\expandafter,\fi,\fnsymbol,\futurelet,\gdef,\global}
% \DoNotIndex{\hbox,\hss,\if,\if@inlabel,\if@tempswa,\if@twocolumn}
% \DoNotIndex{\ifcase}
% \DoNotIndex{\ifcat,\iffalse,\ifx,\ignorespaces,\index,\input,\item}
% \DoNotIndex{\jobname,\kern,\leavevmode,\leftskip,\let,\llap,\lower}
% \DoNotIndex{\m@ne,\next,\newpage,\nobreak,\noexpand,\nonfrenchspacing}
% \DoNotIndex{\obeylines,\or,\protect,\raggedleft,\rightskip,\rm,\sc}
% \DoNotIndex{\setbox,\setcounter,\small,\space,\string,\strut}
% \DoNotIndex{\strutbox}
% \DoNotIndex{\thefootnote,\thispagestyle,\topmargin,\trivlist,\tt}
% \DoNotIndex{\twocolumn,\typeout,\vss,\vtop,\xdef,\z@}
% \DoNotIndex{\,,\@bsphack,\@esphack,\@noligs,\@vobeyspaces,\@xverbatim}
% \DoNotIndex{\`,\catcode,\end,\escapechar,\frenchspacing,\glossary}
% \DoNotIndex{\hangindent,\hfil,\hfill,\hskip,\hspace,\ht,\it,\langle}
% \DoNotIndex{\leaders,\long,\makelabel,\marginpar,\markboth,\mathcode}
% \DoNotIndex{\mathsurround,\mbox,\newcount,\newdimen,\newskip}
% \DoNotIndex{\nopagebreak}
% \DoNotIndex{\parfillskip,\parindent,\parskip,\penalty,\raise,\rangle}
% \DoNotIndex{\section,\setlength,\TeX,\topsep,\underline,\unskip,\verb}
% \DoNotIndex{\vskip,\vspace,\widetilde,\\,\%,\@date,\@defpar}
% \DoNotIndex{\[,\{,\},\]}
% \DoNotIndex{\count@,\ifnum,\loop,\today,\uppercase,\uccode}
% \DoNotIndex{\baselineskip,\begin,\tw@}
% \DoNotIndex{\a,\b,\c,\d,\e,\f,\g,\h,\i,\j,\k,\l,\m,\n,\o,\p,\q}
% \DoNotIndex{\r,\s,\t,\u,\v,\w,\x,\y,\z,\A,\B,\C,\D,\E,\F,\G,\H}
% \DoNotIndex{\I,\J,\K,\L,\M,\N,\O,\P,\Q,\R,\S,\T,\U,\V,\W,\X,\Y,\Z}
% \DoNotIndex{\1,\2,\3,\4,\5,\6,\7,\8,\9,\0}
% \DoNotIndex{\!,\#,\$,\&,\',\(,\),\+,\.,\:,\;,\<,\=,\>,\?,\_}
% \DoNotIndex{\discretionary,\immediate,\makeatletter,\makeatother}
% \DoNotIndex{\meaning,\newenvironment,\par,\relax,\renewenvironment}
% \DoNotIndex{\repeat,\scriptsize,\selectfont,\the,\undefined}
% \DoNotIndex{\arabic,\do,\makeindex,\null,\number,\show,\write,\@ehc}
% \DoNotIndex{\@author,\@ehc,\@ifstar,\@sanitize,\@title,\everypar}
% \DoNotIndex{\if@minipage,\if@restonecol,\ifeof,\ifmmode}
% \DoNotIndex{\lccode,\newtoks,\onecolumn,\openin,\p@,\SelfDocumenting}
% \DoNotIndex{\settowidth,\@resetonecoltrue,\@resetonecolfalse,\bf}
% \DoNotIndex{\clearpage,\closein,\lowercase,\@inlabelfalse}
% \DoNotIndex{\selectfont,\mathcode,\newmathalphabet,\rmdefault}
% \DoNotIndex{\bfdefault}
%
% \iffalse
%    \begin{macrocode}
%<*doc>
\NeedsTeXFormat{LaTeX2e}
\ProvidesFile{smfdoc.tex}[2020/11/05 v1.5f
   Documentation LaTeX pour les classes et styles SMF]
\documentclass{ltxdoc}
\GetFileInfo{smfdoc.tex}
\usepackage{amssymb,amstext}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[frenchb]{babel}
%    \end{macrocode}
% On veut un index avec les num\'eros de ligne
% ainsi qu'une liste des changements.
%    \begin{macrocode}
 % \DisableCrossrefs  if index is ready
 % Say \EnableCrossrefs if index is not ready
\EnableCrossrefs
\RecordChanges
\CodelineIndex
\setlength\hfuzz{15pt}  % dont make so many
\hbadness=7000          % over and under full box warnings

\IndexPrologue{\section*{Index} Les nombres en \usage{italique}
d\'esignent les pages o\`u l'entr\'ee correspondante est d\'ecrite,
ceux \main{soulign\'es} leur d\'efinition, et les autres signalent
les endroits o\`u l'entr\'ee est utilis\'ee.}

\begin{document}
 \let\oldsection\section
 \def\section{\clearpage\oldsection}
 \DocInput{smflatex.dtx}
\end{document}
%    \end{macrocode}
%</doc>
% \fi
%
% \title{Classes \LaTeXe\ pour les publications de la SMF}
% \author{A.\ Chambert-Loir \&\ SMF}
% \date{\today --- Version \fileversion{}, dat\'ee du \filedate{}.}
%
% \maketitle
%%
% \let\paquet\textsf
% \let\classe\textsf
% \def\paquetoption#1{{\sffamily\itshape #1}}
%
% Les classes \classe{smfbook} et \classe{smfart} ont
% \'et\'e d\'evelopp\'ees pour permettre la composition automatique de
% documents conform\'ement aux sp\'ecifications de la Soci\'et\'e
% math\'ematique de France.
% Les quelques pages qui suivent ont
% pour but de donner quelques informations sur leur utilisation.
% Ces classes ont \'et\'e con\c{c}ues pour \^etre le plus possible
% compatible avec les
% classes d\'evelopp\'ees par l'AMS \classe{amsart} et \classe{amsbook}.
%
% Pour les utiliser, il faut disposer~:
% \begin{itemize}
% \item de \LaTeXe, si possible une version r\'ecente. La classe
% ne fonctionne pas avec l'ancienne version \LaTeX 2.09,
% obsol\`ete depuis plusieurs ann\'ees~;
% \item des divers {\em package}s {AMS-\LaTeX} fournis par l'AMS~;
% il est pr\'ef\'erable de disposer de la version de novembre 1996,
% mais cela devrait fonctionner avec celle de 1995.
% \end{itemize}
% Pour mettre en page un \'eventuel index,
% il est de plus souhaitable de disposer du {\em package}
% \paquet{multicol}.
%
% D'autre part, il est important de composer le document de la mani\`ere
% le plus standard possible, en limitant le nombre de macros
% {\og maison\fg} suppl\'ementaires,
% d'autant que de nombreux {\em package}s apportent
% de nouvelles fonctionnalit\'es \`a \LaTeXe. Nous sugg\'erons ainsi
% d'utiliser~:
% \begin{itemize}
% \item \paquet{xypic}, pour les diagrammes~;
% \item \paquet{epsfig}, pour l'inclusion de dessins r\'ealis\'es
% en {\scshape PostScript} (encapsul\'e)~;
% \item \paquet{babel},
% qui permet des documents multilingues (c\'esure, etc.). Sont
% g\'er\'ees les options \paquetoption{frenchb} et
% \paquetoption{english}.
% \end{itemize}
%
% Nous avons aussi d\'evelopp\'e un certain nombres de packages :
% \begin{itemize}
% \item \paquet{smfthm} d\'efinit quelques envionnements
% de th\'eor\`emes et permet de
% g\'erer leur apparence de mani\`ere (un peu) transparente.
% \item \paquet{smfenum} am\'eliore les param\`etres des listes.
% J'esp\`ere l'inclure
% dans les classes un jour ou l'autre.
% \item \paquet{smfmulti} permet de composer un document
% en plusieurs morceaux
% (cha\^i nage automatique, etc.).
% \end{itemize}
% Les revues ont chacune leurs bidouillages propres, d'o\`u des
% paquetages aux noms transparents : \paquet{asterisque}, etc.
% Ce qui est commun \`a chaque revue est fait dans \texttt{smfgen}.
% Un certain nombre de donn\'ees volatiles (directeur de
% publication, prix, etc.) sont entr\'ees dans le paquetage
% \paquet{smfvar}. Celui-ci n'est pas inclus dans ce qui
% suit.
%
% Enfin, pour faciliter la gestion des bases de donn\'ees
% internes \`a la SMF, le paquet \paquet{smfbib} fabrique des
% notices bibliographiques normalis\'ees.
%
% \StopEventually
%
% \tableofcontents
%
% \section{Ent\^etes}
%    \begin{macrocode}
%<article|book>\NeedsTeXFormat{LaTeX2e}
%<*article>
\ProvidesClass{smfart}[2021/03/28 v1.6
  Classe LaTeX pour les articles publies par la SMF]
\def\@classname{smfart}
%</article>
%<*book>
\ProvidesClass{smfbook}[2021/03/28 v1.6
  Classe LaTeX pour les monographies editees par la SMF]
\def\@classname{smfbook}
%</book>
%    \end{macrocode}
% \section{Mise en page}
%    \begin{macrocode}
%<*article|book>
\RequirePackage{amsgen}
%    \end{macrocode}
% \subsection{Majuscules}
% \begin{macro}{\uppercasenonmath}
% Ces macros sont pomp\'ees de l'AMS. Bizarrement, l'ancienne version s'est
% mise \`a bugger r\'ecemment ! Elles servent \`a mettre un texte en majuscules
% en \'evitant les maths.
% Si \verb|\toto| s'expande en \texttt{Salut}, apr\`es
% \verb|\uppercasenonmath\toto|, \verb|\toto| s'expande en \texttt{SALUT}.
%    \begin{macrocode}
\newcommand{\uppercasenonmath}[1]{\toks@\@emptytoks
  \@xp\@skipmath\@xp\@empty#1$$%
  \edef#1{\@nx\@upprep\the\toks@}%
}
\newcommand{\@upprep}{%
  \spaceskip1.3\fontdimen2\font plus1.3\fontdimen3\font
  \upchars@}
\newcommand{\upchars@}{%
  \def\ss{SS}\def\i{I}\def\j{J}\def\ae{\AE}\def\oe{\OE}%
  \def\o{\O}\def\aa{\AA}\def\l{\L}\def\Mc{M{\scshape c}}}
\newcommand{\@skipmath}{}
\long\def\@skipmath#1$#2${%
  \@xskipmath#1\(\)%
  \@ifnotempty{#2}{\toks@\@xp{\the\toks@$#2$}\@skipmath\@empty}}%
\newcommand{\@xskipmath}{}
\long\def\@xskipmath#1\(#2\){%
  \uppercase{\toks@\@xp\@xp\@xp{\@xp\the\@xp\toks@#1}}%
  \@ifnotempty{#2}{\toks@\@xp{\the\toks@\(#2\)}\@xskipmath\@empty}}%
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\MakeUppercase}
% On red\'efinit |\MakeUppercase| afin qu'il utilise |\uppercasenonmath| et
% qu'il ne mette pas les math\'ematiques en majuscules.
% \DescribeMacro{\@smfprotect}
% La macro |\@smfprotect| permet de prot\'eger les |\\|.
%    \begin{macrocode}
\def\@smfprotect{\let\smfcr\\\def\\{\protect\smfcr}}
\DeclareRobustCommand{\MakeUppercase}[1]{{%
    \@smfprotect\upchars@
    \protected@edef\reserved@a{#1}\uppercasenonmath\reserved@a\reserved@a}}
\protected@edef\MakeUppercase#1{\MakeUppercase{#1}}
%    \end{macrocode}
% \end{macro}
% \subsection{Date (anglaise)}
% \DescribeMacro{\today}
%    \begin{macrocode}
\newcommand{\today}{%
  \relax\ifcase\month\or
  January\or February\or March\or April\or May\or June\or
  July\or August\or September\or October\or November\or December\fi
  \space\number\day, \number\year}
%    \end{macrocode}
% \subsection{Commandes de caract\`eres pr\'e-NFSS}
% \DescribeMacro{\rm}
% \DescribeMacro{\sf}
% \DescribeMacro{\tt}
% \DescribeMacro{\bf}
% \DescribeMacro{\it}
% \DescribeMacro{\it}
% \DescribeMacro{\sl}
% \DescribeMacro{\sc}
% Avant d'avoir l'effet escompt\'e, ces macros reviennent en |\normalfont|,
% comme autrefois dans \LaTeX 2.09 (avant NFSS).
% Ces commandes sont rajout\'ees par AMS-\LaTeX, il faut bien avouer
% qu'elles peuvent \^etre salvatrices face \`a certains fichiers d\'emod\'es,
% alors je les laisse~!
%    \begin{macrocode}
\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}
%    \end{macrocode}
% \subsection{Changements de casse}
% \DescribeMacro{\larger}
% \DescribeMacro{\smaller}
% Ce code est emprunt\'e \`a \texttt{amsbook.cls}, il serait donc de bon ton de
% demander l'avis de l'$\mathcal{AMS}$ avant de publier cette classe, ou
% alors de tout r\'ecrire.
%    \begin{macrocode}
\newcommand{\larger}[1][1]{%
  \count@\@currsizeindex \advance\count@#1\relax
  \ifnum\count@<\z@ \count@\z@
    \else\ifnum\count@>12 \count@12 \fi\fi
  \ifcase\count@
    \Tiny\or\Tiny\or\tiny\or\SMALL\or\Small\or\small
    \or\normalsize
    \or\large\or\Large\or\LARGE\or\huge\or\Huge\else\Huge
  \fi
}
\newcommand{\smaller}[1][1]{\larger[-#1]}
\def\@adjustvertspacing{%
  \bigskipamount.7\baselineskip plus.7\baselineskip
  \medskipamount\bigskipamount \divide\medskipamount\tw@
  \smallskipamount\medskipamount \divide\smallskipamount\tw@
  \abovedisplayskip\medskipamount
  \belowdisplayskip \abovedisplayskip
  \abovedisplayshortskip\abovedisplayskip
  \advance\abovedisplayshortskip-1\abovedisplayskip
  \belowdisplayshortskip\abovedisplayshortskip
  \advance\belowdisplayshortskip 1\smallskipamount
  \jot\baselineskip \divide\jot 4 \relax
}
%    \end{macrocode}
% On d\'efinit les macros usuelles pour changer de tailles.
% C'est la macro |\@setfontsize| qui fera le travail. Elle utilise
% |\@typesizes| qui est d\'efini plus bas.
%    \begin{macrocode}
\renewcommand\normalsize{\@xsetfontsize\normalsize 6%
  \@adjustvertspacing \let\@listi\@listI}
\newcommand\Tiny{\@xsetfontsize\Tiny 1}
\newcommand\tiny{\@xsetfontsize\tiny 2}
\newcommand\SMALL{\@xsetfontsize\SMALL 3}
\newcommand\Small{\@xsetfontsize\Small 4%
  \@adjustvertspacing
  \def\@listi{\topsep\smallskipamount \parsep\z@skip
     \itemsep\z@skip}}
\newcommand\small{\@xsetfontsize\small 5\@adjustvertspacing}
\def\footnotesize{\Small}
\def\scriptsize{\SMALL}
\newcommand\large{\@xsetfontsize\large 7\@adjustvertspacing}
\newcommand\Large{\@xsetfontsize\Large 8\@adjustvertspacing}
\newcommand\LARGE{\@xsetfontsize\LARGE 9}
\newcommand\huge{\@xsetfontsize\huge{10}}
\newcommand\Huge{\@xsetfontsize\Huge{11}}
\def\@xsetfontsize#1#2{%
  \chardef\@currsizeindex#2\relax
  \edef\@tempa{\@nx\@setfontsize\@nx#1%
    \@xp\ifcase\@xp\@currsizeindex\@typesizes
      \else{99}{99}\fi}%
  \@tempa
}
%    \end{macrocode}
% \subsection{Param\`etres}
% Je ne comprends pas tous ces param\`etres, il faudra les \'etudier un par
% un.
%
% Le premier r\'ef\`ere la taille courante (|\normalsize|).
%    \begin{macrocode}
\chardef\@currsizeindex=6
%    \end{macrocode}
% Les veuves, orphelines et c\'esures sont proscrites en bas de page.
%    \begin{macrocode}
\widowpenalty=10000
\clubpenalty=10000
\brokenpenalty=10000
%    \end{macrocode}
% La macro |\linespacing| est utilis\'ee \`a plusieurs endroits~:
% elle vaut essentiellement |\baselineskip|.
% Ces param\`etres servent aussi  pour la gestion
% des formules math\'ematiques dans
% les packages {\em amsmath} et {\em amstex}.
%    \begin{macrocode}
\newdimen\linespacing
\lineskip=1pt      \normallineskip=1pt
\lineskiplimit=1pt \normallineskiplimit=1pt
%    \end{macrocode}
% Le texte me para\^{\i}trait  plus lisible un peu plus espac\'e  que la
% normale, je mais tout de m\^eme un |\baselinestretch| de |{1}|.
%    \begin{macrocode}
\def\baselinestretch{1}  %% 1.1 is better
%    \end{macrocode}
% Les sp\'ecifications g\'en\'eriques de la SMF pour le format des pages~:
% \begin{itemize}
% \item un cadre de $13\times 21{,}5\,\text{cm}$, titres courants et pied de
% page compris~;
% \item Un espace de $1\,\text{cm}$ entre la premi\`ere ligne du texte et le
% titre courant~;
% \item un espace de $1\,\text{cm}$, voire $1{,}5\,\text{cm}$
% entre le pied de page et la derni\`ere ligne du texte.
% \end{itemize}
%    \begin{macrocode}
\textheight 21.5cm
\textwidth 13cm
\headheight=10pt
\headsep 10mm
\footskip 10mm       % was .7
\columnsep=10pt \columnseprule=0pt
\marginparsep=10pt
\marginparpush=5pt
\marginparwidth=90pt
\newskip\normaltopskip
%    \end{macrocode}
%    \begin{macrocode}
\skip\footins=12pt plus12pt
\skip\@mpfootins=\skip\footins

\fboxsep=3pt \fboxrule=.4pt

\arrayrulewidth=.4pt    \doublerulesep=2pt
\labelsep=5pt           \arraycolsep=\labelsep
\tabcolsep=\labelsep    \tabbingsep=\labelsep

\floatsep=15pt plus 12pt    \dblfloatsep=15pt plus 12pt
\textfloatsep=\floatsep  \dbltextfloatsep=15pt plus 12pt
\intextsep=\floatsep

\@fptop=0pt plus1fil     \@dblfptop=0pt plus1fil
\@fpbot=0pt plus1fil     \@dblfpbot=0pt plus1fil
\@fpsep=10pt plus2fil     \@dblfpsep=10pt plus2fil\relax
%    \end{macrocode}
% Aucun espacement entre deux paragraphes. Sinon, comme |\@parboxrestore|
% supprime l'alin\'ea dans des notes de bas de page, on utilise l'astuce de
% {\em amsart} pour la r\'etablir~; |\normalparindent| est la largeur de
% l'alin\'ea standard.
%    \begin{macrocode}
\parskip=0pt

\newdimen\normalparindent
\normalparindent=12pt
\parindent=\normalparindent

\parsep 0pt
\partopsep=0pt \relax \parsep=0pt \relax \itemsep=0pt \relax

\@lowpenalty=51         \@medpenalty=151        \@highpenalty=301
\@beginparpenalty=-\@lowpenalty
\@endparpenalty=-\@lowpenalty
\@itempenalty=-\@lowpenalty
%    \end{macrocode}
% \subsection{Calculs}
% \begin{macro}{\calclayout}
% Dans cette impl\'ementation, la partie imprim\'ee de la feuille
% est centr\'ee aussi bien verticalement qu'horizontalement.
%    \begin{macrocode}
\def\calclayout{\normalsize
  \topskip\normaltopskip
  \settoheight{\footnotesep}{\normalfont\footnotesize M$^1$}%
  \@tempdima=\textheight
  \advance\textheight -\headheight
  \advance\textheight -\headsep
  \advance\textheight -\footskip
  \advance\textheight -\topskip
    \divide\textheight\baselineskip\@tempcnta\textheight
  \textheight\@tempcnta\baselineskip
    \advance\textheight \topskip
  \headsep\@tempdima
    \advance\headsep -\textheight   \advance\headsep -\headheight
  \footskip=.5\headsep\advance\footskip .5\baselineskip
  \advance\headsep by -\footskip

  \oddsidemargin\paperwidth
  \advance\oddsidemargin -\textwidth
  \divide\oddsidemargin\tw@
  \ifdim\oddsidemargin<.5truein \oddsidemargin.5truein \fi
  \advance\oddsidemargin -1truein

  \evensidemargin\oddsidemargin

  \topmargin\paperheight \advance\topmargin -\textheight
   \advance\topmargin -\headheight \advance\topmargin -\headsep
   \advance\topmargin -\footskip
   \divide\topmargin\tw@
  \ifdim\topmargin<.5truein \topmargin.5truein \fi
  \advance\topmargin -1truein\relax
}
%    \end{macrocode}
% \end{macro}
% \subsection{Ent\^etes et pieds de page}
% \subsubsection{empty}
% \begin{macro}{\ps@empty}
% Rien du tout sur la page\dots
%    \begin{macrocode}
\def\ps@empty{\let\@mkboth\@gobbletwo
  \let\@oddhead\@empty \let\@evenhead\@empty
  \let\@oddfoot\@empty \let\@evenfoot\@empty
  \global\topskip\normaltopskip}
%    \end{macrocode}
% \end{macro}
% \subsubsection{plain}
% \begin{macro}{\ps@plain}
% Ent\^etes vierges, num\'eros de pages centr\'es en bas de page.
%    \begin{macrocode}
\def\ps@plain{\ps@empty
  \def\@oddfoot{\normalfont\scriptsize \hfil\thepage\hfil}%
  \let\@evenfoot\@oddfoot}
%</article|book>
%    \end{macrocode}
% \end{macro}
% \subsubsection{headings}
% \begin{macro}{ps@headings}
% C'est le style standard, les num\'eros de pages sont en haut, en gras,
% avec le texte des |\mark|, le pied de page est vierge.
%    \begin{macrocode}
%<*article>
\def\ps@headings{\ps@empty
  \def\@oddfoot{}%
  \def\@evenfoot{}%
  \def\@evenhead{\normalfont\scriptsize
     \rlap{\bfseries\thepage}\hfil \leftmark{}{}\hfil}%
  \def\@oddhead{\normalfont\scriptsize
     \hfil \rightmark{}{}\hfil \llap{\bfseries\thepage}}%
  \let\@mkboth\@gobbletwo}
%</article>
%<*book>
\def\ps@headings{\ps@empty
  \def\@oddfoot{}%
  \def\@evenfoot{}%
  \def\@evenhead{\normalfont\scriptsize
     \rlap{\bfseries\thepage}\hfil \leftmark{}{}\hfil}%
  \def\@oddhead{\normalfont\scriptsize
     \hfil \rightmark{}{}\hfil \llap{\bfseries\thepage}}%
  \let\@mkboth\org@markboth
  \def\partmark    {\@secmark\markboth\partrunhead\partname}%
  \def\chaptermark {\@secmark\markboth\chapterrunhead\chaptername}%
  \def\sectionmark {\@secmark\markright\sectionrunhead\sectionname}%
  \def\indexmark   {\@secmark\markboth\indexrunhead\indexname}%
}
%</book>
%    \end{macrocode}
% \end{macro}
% \subsubsection{copyright}
% Vierge en standard.
%    \begin{macrocode}
%<*article|book>
\let\ps@copyright\ps@empty
%    \end{macrocode}
% \subsubsection{myheadings}
% C'est le style \texttt{headings} sauf que les marques droite et gauche
% sont d\'ecid\'ees par l'utilisateur.
%    \begin{macrocode}
\def\ps@myheadings{\ps@headings \let\@mkboth\@gobbletwo}
%    \end{macrocode}
% \subsection{Marques}
%    \begin{macrocode}
\def\leftmark{\expandafter\@firstoftwo\topmark{}{}}
\def\rightmark{\expandafter\@secondoftwo\botmark{}{}}
\long\def\@nilgobble#1\@nil{}
\def\@secmark#1#2#3#4{%
  \begingroup \let\protect\@unexpandable@protect
  \edef\@tempa{\endgroup \toks@{\protect#2{#3}{\@secnumber}}}%
  \@tempa
  \toks@\@xp{\the\toks@{#4}}%
  \afterassignment\@nilgobble\@temptokena\@themark{}\@nil
  \edef\@tempa{\@nx\@mkboth{%
    \ifx\markright#1\the\@temptokena\else\the\toks@\fi}{\the\toks@}}%
  \@tempa}
\let\@secnumber\@empty
\def\markboth#1#2{%
  \begingroup
    \@temptokena{{#1}{#2}}\xdef\@themark{\the\@temptokena}%
    \mark{\the\@temptokena}%
  \endgroup
  \if@nobreak\ifvmode\nobreak\fi\fi}
\let\org@markboth\markboth
%    \end{macrocode}
% Avant de d\'ecider le style d'ent\^ete utilis\'e, pas de marques.
%    \begin{macrocode}
\let\partmark\@gobble
\let\tocmark\@gobble
\let\sectionmark\@gobble
\let\subsectionmark\@gobble
\let\subsubsectionmark\@gobble
\let\paragraphmark\@gobble
%    \end{macrocode}
% \subsection{Red\'efinition de \texttt{cleardoublepage}}
% En effet, la page saut\'ee lorsque par exemple un chapitre commence sur
% la page de droite doit \^etre vierge de tout ent\^ete/pied de page.
%    \begin{macrocode}
\def\cleardoublepage{\clearpage\if@twoside \ifodd\c@page\else
    \thispagestyle{empty}\hbox{}\newpage
    \if@twocolumn\hbox{}\newpage\fi\fi\fi}
%    \end{macrocode}
% \section{Options}
% \subsection{Taille du papier}
% La taille par d\'efaut sera la taille A4 (\texttt{a4paper}) mais l'option
% \texttt{letterpaper} est conserv\'ee pour que la classe se comporte bien
% aux \'E.U.
%    \begin{macrocode}
\DeclareOption{a4paper}{\paperheight 297mm\paperwidth 210mm}
\DeclareOption{letterpaper}{\paperheight 11in\paperwidth 8.5in }
%    \end{macrocode}
% \subsection{Recto-verso}
% Cette option est appel\'ee \`a dispara\^{\i}tre.
%    \begin{macrocode}
\DeclareOption{oneside}{\@twosidefalse \@mparswitchfalse}
\DeclareOption{twoside}{\@twosidetrue  \@mparswitchtrue}
%    \end{macrocode}
% \subsection{Version pr\'eliminaire}
% L'option \texttt{draft} correspond aux versions pr\'eliminaires, les
% barres noires d'{\itshape overfull hbox} sont visibles.
% Dans les packages additionnels smf, cela supprime les pages de
% couverture.
%    \begin{macrocode}
\newif\if@draft
\DeclareOption{draft}{\@drafttrue\overfullrule5\p@ }
\DeclareOption{final}{\@draftfalse\overfullrule\z@ }
%    \end{macrocode}
% \subsection{Une ou deux colonnes}
%    \begin{macrocode}
\DeclareOption{onecolumn}{\@twocolumnfalse}
\DeclareOption{twocolumn}{\@twocolumntrue}
%    \end{macrocode}
% \subsection{Num\'eros d'\'equations}
%    \begin{macrocode}
\newif\iftagsleft@
\DeclareOption{leqno}{%
  \tagsleft@true \PassOptionsToPackage{leqno}{amsmath}}
\DeclareOption{reqno}{%
  \tagsleft@false \PassOptionsToPackage{reqno}{amsmath}}
%    \end{macrocode}
% \subsection{Alignement des \'equations \`a gauche}
%    \begin{macrocode}
\DeclareOption{fleqn}{%
  \def\[{\relax
    \ifmmode\@badmath
    \else
      \begin{trivlist}%
      \@beginparpenalty\predisplaypenalty
      \@endparpenalty\postdisplaypenalty
      \item[]\leavevmode
      \hbox to\linewidth\bgroup$\displaystyle
      \hskip\mathindent\bgroup
    \fi}%
  \def\]{\relax
    \ifmmode
      \egroup \m@th$\hfil \egroup
      \end{trivlist}%
    \else \@badmath
    \fi}%
  \renewenvironment{equation}{%
    \@beginparpenalty\predisplaypenalty
    \@endparpenalty\postdisplaypenalty
    \refstepcounter{equation}%
    \@topsep\abovedisplayskip \trivlist
    \item[]\leavevmode
    \hbox to\linewidth\bgroup\hskip\mathindent$\displaystyle
  }{%
    \m@th$\hfil \displaywidth\linewidth \hbox{\@eqnnum}\egroup
    \endtrivlist
  }%
  \renewenvironment{eqnarray}{%
    \stepcounter{equation}\let\@currentlabel\theequation
    \global\@eqnswtrue \global\@eqcnt\z@ \tabskip\mathindent
    \let\\=\@eqncr \abovedisplayskip\topsep
    \ifvmode \advance\abovedisplayskip\partopsep \fi
    \belowdisplayskip\abovedisplayskip
    \belowdisplayshortskip\abovedisplayskip
    \abovedisplayshortskip\abovedisplayskip
    $$\everycr{}\halign to\linewidth\bgroup
      \hskip\@centering
      $\displaystyle\tabskip\z@skip####\m@th$&%
      \@eqnsel \global\@eqcnt\@ne
      \hfil${}####{}\m@th$\hfil&%
      \global\@eqcnt\tw@
      $\displaystyle ####\m@th$\hfil\tabskip\@centering&%
      \global\@eqcnt\thr@@
      \hbox to \z@\bgroup\hss####\egroup\tabskip\z@skip\cr
    }{%
      \@@eqncr \egroup \global\advance\c@equation\m@ne$$%
      \global\@ignoretrue
    }%
  \newdimen\mathindent \mathindent\leftmargini
}
%    \end{macrocode}
% \subsection{Math\'ematiques grasses}
% Cette option est faite pour que les math\'ematiques soient
% grasses dans des titres gras.
%    \begin{macrocode}
\let\smf@boldmath\relax
\DeclareOption{boldmath}{%
  \def\smf@boldmath{\mathversion{bold}}}
%    \end{macrocode}
% \subsection{Choix de la langue}
% Le choix de cette option est n\'ecessaire \`a la bonne marche de la
% classe, mais par d\'efaut, on choisit {\tt francais}.
%    \begin{macrocode}
\DeclareOption{french}{%
  \global\def\smf@language{french}}
\DeclareOption{francais}{%
  \global\def\smf@language{french}}
\DeclareOption{english}{%
  \global\def\smf@language{english}}
%    \end{macrocode}
% \subsection{Options de tailles de caract\`eres}
% Pour l'instant, l'option par d\'efaut est d'imprimer en 10 points mais il
% est possible de revenir \`a 11 ou 12 points, voire de laisser le choix
% \`a l'auteur. Il y a aussi une option 14 points.
%    \begin{macrocode}
\def\@xxxpt{29.86}
\DeclareOption{10pt}{\def\@mainsize{10}\def\@ptsize{0}%
  \normaltopskip=10pt \relax
  \def\@typesizes{%
    \or{5}{6}\or{6}{7}\or{7}{8}\or{8}{10}\or{9}{11}%
    \or{10}{12}% normalsize
    \or{\@xipt}{13}\or{\@xiipt}{14}\or{\@xivpt}{17}%
    \or{\@xviipt}{20}\or{\@xxpt}{24}}%
  \normalsize \linespacing=\baselineskip }

\DeclareOption{11pt}{\def\@mainsize{11}\def\@ptsize{1}%
  \normaltopskip=11pt \relax
  \def\@typesizes{%
    \or{6}{7}\or{7}{8}\or{8}{10}\or{9}{11}\or{10}{12}%
    \or{\@xipt}{13}% normalsize
    \or{\@xiipt}{14}\or{\@xivpt}{17}\or{\@xviipt}{20}%
    \or{\@xxpt}{24}\or{\@xxvpt}{30}}%
  \normalsize \linespacing=\baselineskip }

\DeclareOption{12pt}{\def\@mainsize{12}\def\@ptsize{2}%
  \normaltopskip=12pt \relax
  \def\@typesizes{%
    \or{7}{8}\or{8}{10}\or{9}{11}\or{10}{12}\or{\@xipt}{13}%
    \or{\@xiipt}{14}% normalsize
    \or{\@xivpt}{17}\or{\@xviipt}{20}\or{\@xxpt}{24}%
    \or{\@xxvpt}{30}\or{\@xxxpt}{36}}%
  \normalsize \linespacing=\baselineskip }

\DeclareOption{14pt}{\def\@mainsize{14}\def\@ptsize{3}%
  \normaltopskip=14pt \relax
  \def\@typesizes{%
    \or{8}{10}\or{9}{11}\or{10}{12}\or{\@xipt}{13}%
    \or{\@xiipt}{14}\or{\@xivpt}{17}% normalsize
    \or{\@xviipt}{20}\or{\@xxpt}{24}%
    \or{\@xxvpt}{30}\or{\@xxxpt}{36}\or{\@xxxpt}{36}}%
  \normalsize \linespacing=\baselineskip }

\DeclareOption{8pt}{\def\@mainsize{8}\def\@ptsize{8}%
  \normaltopskip=8pt \relax
  \def\@typesizes{%
    \or{5}{6}\or{5}{6}\or{5}{6}\or{6}{7}\or{7}{8}%
    \or{8}{10}% normalsize
    \or{9}{11}\or{10}{12}\or{\@xipt}{13}%
    \or{\@xiipt}{14}\or{\@xivpt}{17}}%
  \normalsize \linespacing=\baselineskip }

\DeclareOption{9pt}{\def\@mainsize{9}\def\@ptsize{9}%
  \normaltopskip=9pt \relax
  \def\@typesizes{%
    \or{5}{6}\or{5}{6}\or{6}{7}\or{7}{8}\or{8}{10}%
    \or{9}{11}% normalsize
    \or{10}{12}\or{\@xipt}{13}\or{\@xiipt}{14}%
    \or{\@xivpt}{17}\or{\@xviipt}{20}}%
  \normalsize \linespacing=\baselineskip }
%    \end{macrocode}
% \subsection{\'Ex\'ecution des options}
%    \begin{macrocode}
\ExecuteOptions{leqno,centertags,%
  a4paper,portrait,%
  10pt,twoside,onecolumn,%
  final,francais}
\ProcessOptions\relax
\@ifundefined{numberwithin}%
  {\let\@tempa\relax}%
  {\let\@tempa\@gobbletwo}
\@tempa
\ifx\relax\mathfrak \@xp\@gobbletwo
  \else \let\mathfrak\relax \fi
\RequirePackage{amsfonts}\relax
\RequirePackage{amsmath}\relax
%    \end{macrocode}
% Il faut aussi supprimer l'espacement avant et apr\`es
% les points de suspension...
%    \begin{macrocode}
\def\tdots@{$\m@th\ldots$}
%    \end{macrocode}
% \section{Titre, premi\`eres pages}
% \subsection{Titre}
% \DescribeMacro{\title}
% Usage~: |\title[|\meta{titre courant}|]{|\meta{titre}|}|. C'est
% \meta{titre} qui va en table des mati\`eres et \meta{titre courant}
% sur chaque haut de page.
%
% \DescribeMacro{\alttitle}
% La commande |\alttitle{|\meta{titre dans l'autre langue}|}| sert \`a
% introduire le titre de l'article dans l'autre langue (anglais/fran\c cais).
%    \begin{macrocode}
\renewcommand{\title}[2][]{\gdef\shorttitle{#1}\gdef\@title{#2}}
\edef\title{\@nx\@dblarg
  \@xp\@nx\csname\string\title\endcsname}
\let\@title\@empty \let\shorttitle\@empty
\def\alttitle#1{\gdef\@alttitle{#1}}
\let\@alttitle\@empty
%    \end{macrocode}
% \subsection{Auteur(s)}
% \DescribeMacro{\author}
% \DescribeMacro{\shortauthor}
%    \begin{macrocode}
\renewcommand{\author}[2][]{%
  \ifx\@empty\authors
    \gdef\shortauthors{#1}\gdef\authors{#2}%
  \else
    \g@addto@macro\shortauthors{\and#1}%
    \g@addto@macro\authors{\and#2}%
  \fi
  \g@addto@macro\addresses{\author{#1}}%
}
\edef\author{\@nx\@dblarg
  \@xp\@nx\csname\string\author\endcsname}
%    \end{macrocode}
% Initialisation des listes
%    \begin{macrocode}
\let\shortauthors\@empty   \let\authors\@empty
%    \end{macrocode}
% Quelques macros piqu\'ees encore \`a l'AMS pour g\'erer les listes d'auteurs.
%    \begin{macrocode}
\newcommand{\xandlist}[4]{\@andlista{{#1}{#2}{#3}}#4\and\and}
\def\@andlista#1#2\and#3\and{\@andlistc{#2}\@ifnotempty{#3}{%
  \@andlistb#1{#3}}}
\def\@andlistb#1#2#3#4#5\and{%
  \@ifempty{#5}{%
    \@andlistc{#2#4}%
  }{%
    \@andlistc{#1#4}\@andlistb{#1}{#3}{#3}{#5}%
  }}
\let\@andlistc\@iden
\newcommand{\nxandlist}[4]{%
  \def\@andlistc##1{\toks@\@xp{\the\toks@##1}}%
  \toks@{\toks@\@emptytoks \@andlista{{#1}{#2}{#3}}}%
  \the\@xp\toks@#4\and\and
  \edef#4{\the\toks@}%
  \let\@andlistc\@iden}
%    \end{macrocode}
% \DescribeMacro{\andify}
% Les auteurs sont s\'epar\'es par des virgules et le dernier est introduit
% par |\smfandname| (qui vaut \texttt{et} ou \texttt{and} suivant la langue
% du texte).
%    \begin{macrocode}
\newcommand{\andify}{%
  \nxandlist{\unskip, }{\unskip{} \smfandname~}{\unskip{} \smfandname~}}
\def\and{\unskip{} \smfandname\ \ignorespaces}
%    \end{macrocode}
% \subsection{Adresses}
% \DescribeMacro{\address}
% La macro |\address| contient l'adresse de l'auteur,
% \DescribeMacro{\curraddr}
% la macro |\curraddr| son adresse courante (inutilis\'ee).
% \DescribeMacro{\urladdr}
% La macro |\urladdr| contient son URL et
% \DescribeMacro{\email}
% la macro |\urladdr| son adresse m\'el.
% Ce sont les m\^emes noms que dans les classes AMS.
% Ces macros se contentent de rajouter ce qu'il faut \`a la macro
% |\addresses|.
%    \begin{macrocode}
\let\addresses\@empty      \let\thankses\@empty
\newcommand{\address}[2][]{\g@addto@macro\addresses{\address{#1}{#2}}}
\newcommand{\curraddr}[2][]{\g@addto@macro\addresses{\curraddr{#1}{#2}}}
\newcommand{\email}[2][]{\g@addto@macro\addresses{\email{#1}{#2}}}
\newcommand{\urladdr}{\bgroup\catcode`\:=12\catcode`\~=12\@urladdr}
\newcommand{\@urladdr}[2][]{\g@addto@macro\addresses{\urladdr{#1}{#2}}\egroup}
%    \end{macrocode}
%  \DescribeMacro{\addresses}
%  \DescribeMacro{\@setaddresses}
% Suivant la classe, on compose l'addresse. Dans les articles, elle est en
% fin de texte, ligne par ligne.
%    \begin{macrocode}
%<*article>
\def\@setaddresses{\par\nobreak
  \begingroup
  \parindent-2em\leftskip2em
  \rightskip=0pt plus 20pt
  \emergencystretch .5\textwidth
  \exhyphenpenalty=-100
  \interlinepenalty\@M
  \def\baselinestretch{1}\normalfont\footnotesize
  \def\\{\unskip, \penalty-10\ignorespaces}%
  \def\cond@bullet {{\setbox0\hbox{\quad$\bullet$\quad}%
         \hskip 0pt plus 3cm\penalty -30\hskip 0pt plus -3cm
         \cleaders \copy0 \hskip\wd0 }}%
  \def\author##1{\ifhmode\par\nobreak \vskip\smallskipamount\fi
      {\scshape ##1}\let\address\firstaddress}%
  \def\firstaddress##1##2{\unskip, \let\address\otheraddress
         \penalty-20\ignorespaces##2}%
  \def\otheraddress##1##2{\cond@bullet \ignorespaces##2}%
  \def\curraddr{\address}%
  \let\address\firstaddress
  \def\email##1##2{\@ifnotempty{##2}%
        {\cond@bullet
         \hbox{\itshape E-mail~:}~{\ttfamily\ignorespaces ##2}}}%
  \def\urladdr##1##2{\@ifnotempty{##2}%
        {\cond@bullet
         {\itshape Url~:}~{\ttfamily\ignorespaces ##2}\par}}%
  \addresses
  \par\endgroup
}
%</article>
%    \end{macrocode}
% Dans les livres, elle est plus a\'er\'ee.
%    \begin{macrocode}
%<*book>
\def\@setaddresses{\par\nobreak
  \begingroup
  \raggedright
  \interlinepenalty\@M
  \def\baselinestretch{1}\par
  \normalfont
  \def\\{\unskip, \penalty-5\ignorespaces}%
  \def\author##1{\nobreak \bigskip
      {\itshape ##1}\par}%
  \def\address##1##2{\smallskip\nobreak
       \ignorespaces##2\unskip.\par}%
  \let\curraddr\address
  \def\email##1##2{\@ifnotempty{##2}{\smallskip\nobreak
       {\itshape E-mail~:} {\ttfamily\ignorespaces##2}\par}}%
  \def\urladdr##1##2{\@ifnotempty{##2}{\smallskip\nobreak
       {\itshape Url~:} {\ttfamily\ignorespaces##2}\par}}%
  \addresses
  \endgroup
}
%</book>
%    \end{macrocode}
% \subsection{Remerciements}
% \DescribeMacro{\thanks}
% Pour les reconnaissances de dettes\dots
%    \begin{macrocode}
\renewcommand{\thanks}[1]{\g@addto@macro\thankses{\thanks{#1}}}
\def\@setthanks{\def\thanks##1{\par##1\@addpunct{{\upshape.}}}\thankses}
%    \end{macrocode}
% \subsection{Date}
% \DescribeMacro{\date}
%    \begin{macrocode}
\let\@date\@empty
\def\@setdate{{\itshape\@date\@@par}} %% enleve le \@addpunct. avant \@@par
%    \end{macrocode}
% \subsection{D\'edicace}
%    \begin{macrocode}
\def\dedicatory#1{\def\@dedicatory{#1}}
\let\@dedicatory\@empty
%</article|book>
%<*article>
\def\dedicatoryfont{\normalfont\footnotesize\itshape}
\def\@setdedicatory{%
    \begingroup
      \def\signature##1{\nobreak\hskip 2em plus 1fil
        \penalty-5\hbox{}\nobreak\hfil\parfillskip=0pt
        \mbox{\upshape ##1}\par}
      \raggedleft
      \dedicatoryfont
      \@dedicatory\par
    \endgroup}
%</article>
%    \end{macrocode}
% Dans les livres, elle est mise en page sur une page seule (normalement,
% une page droite).
%    \begin{macrocode}
%<*book>
\def\dedicatoryfont{\normalfont\itshape}
\def\@setdedicatory{%
    \ifx\@dedicatory\@empty\else
    \begingroup
     \def\signature##1{\nobreak\hskip 2em plus 1fil
        \penalty-5\hbox{}\nobreak\hfil\parfillskip=0pt
        \mbox{\upshape ##1}\par}
     \clearpage\thispagestyle{empty}
     \hbox{}\vfil
     \leftskip=.2\textwidth
     \dedicatoryfont
     \@dedicatory
     \par\vfil
     \cleardoublepage
    \endgroup
    \fi}
%</book>
%    \end{macrocode}
% \subsection{Mots-clefs}
% \DescribeMacro{\keywords}
% La macro |\keywords| prend une liste de mots clefs dans la langue
% principale de l'article.
%    \begin{macrocode}
%<*article|book>
\def\keywords#1{\def\@keywords{#1}}
\let\@keywords=\@empty
\def\@setkeywords{%
  \abstractfont
  {\abstractheadfont\keywordsname\MakePointrait}\enspace\ignorespaces
  \@keywords\@addpunct{{\upshape.}}}
%    \end{macrocode}
% \DescribeMacro{\keywords}
% La macro |\altkeywords| prend une liste de mots clefs dans la langue
% secondaire de l'article.
%    \begin{macrocode}
\def\altkeywords#1{\def\@altkeywords{#1}}
\let\@altkeywords=\@empty
\def\@setaltkeywords{%
  \abstractfont
  {\abstractheadfont\altkeywordsname\MakePointrait}\enspace\ignorespaces
  \@altkeywords\@addpunct{{\upshape.}}}
%    \end{macrocode}
% \subsection{Classification AMS}
%    \begin{macrocode}
\def\subjclass#1{\def\@subjclass{#1}}
\let\@subjclass=\@empty
\def\@setsubjclass{%
  \abstractfont
  {\abstractheadfont\subjclassname\MakePointrait}\enspace\ignorespaces
  \@subjclass\@addpunct{{\upshape.}}}
%    \end{macrocode}
% \subsection{Traducteur(s)}
%    \begin{macrocode}
\def\translator#1{%
  \ifx\@empty\@translators
     \gdef\@translators{#1}\else
     \g@addto@macro\@translators{\and#1}\fi}
\let\@translators\@empty
\def\@settranslators{\par
  \begingroup
  \translatedby\ \andify\@translators
  {\itshape \ignorespaces\@translators} \@@par
  \endgroup}
%    \end{macrocode}
% \subsection{ISBN, ISSN}
%    \begin{macrocode}
\def\ISBN#1{\def\@isbn{#1}}
\def\ISSN#1{\def\@issn{#1}}
\let\@isbn\@empty
\let\@issn\@empty
%    \end{macrocode}
% \subsection{R\'esum\'es}
% \DescribeMacro{\abstractheadfont}
% \DescribeMacro{\abstractfont}
% \DescribeMacro{\abstractmargin}
% Quelques param\`etres g\'en\'eraux pour commencer.
% |\abstractheadfont| et |\abstractfont| sont des macros qui sp\'ecifient la
% police utilis\'ee pour les ent\^etes de r\'esum\'es et les r\'esum\'es.
%    \begin{macrocode}
\def\abstractheadfont{\bfseries\smf@boldmath\itshape}
%<article>\def\abstractfont{\def\baselinestretch{1}\footnotesize}
%<book>\def\abstractfont{\normalfont}
%    \end{macrocode}
% Le r\'esum\'e est mis en page avec des marges \'elargies de |\abstractmargin|.
%    \begin{macrocode}
\newdimen\abstractmargin
%<article>\abstractmargin1cm
%<book>\abstractmargin0pt
%    \end{macrocode}
% \subsubsection{Une macro tordue}
% \DescribeEnv{@genabstract}
% L'environnement |@genabstract| est un peu compliqu\'e. Son but premier est
% d'attrapper tout ce qui se trouve entre un |\begin{abstract}| et un
% |\end{abstract}| dans une macro |\@abstract|.
% Mais je ne sais plus pourquoi j'ai invent\'e \c ca !!!
% Actuellement, cela permet \`a |\abstract| et |\altabstract| d'avoir des
% d\'efinitions plus courtes.
% C'est aussi r\'eutilis\'e pour les r\'esum\'es courts.
%    \begin{macrocode}
\newtoks\@genabs\newtoks\@genabstokb
\newenvironment{@genabstract}[1]{%
   \gdef\@genabstext{}\def\smf@tempb{#1}\@getgenabstext
}{%
  \@xp\@xp\global\@xp\let\csname @\smf@tempb\endcsname \@genabstext}

\long\def\@getgenabstext#1\end #2{%
  \@genabs=\expandafter{\@genabstext}
  \def\@tempa{#2}\ifx\@tempa\smf@tempb
     \@genabstokb={#1}%
     \edef\@next{\noexpand\end{@genabstract}\noexpand\end{\smf@tempb}}%
  \else
     \@genabstokb={#1\end{#2}}%
     \let\@next\@getgenabstext
  \fi
  \global\edef\@genabstext {\the\@genabs \the\@genabstokb}%
  \@next}

\def\@setgenabstract#1{%
\@xp\ifx\csname @#1\endcsname\@empty\else
  \vbox\bgroup
  \abstractfont
  \list{}{\labelwidth\z@
    \leftmargin\abstractmargin \rightmargin\leftmargin
    \listparindent\normalparindent
    \itemindent\z@
  %    \itemindent\normalparindent %  \advance\itemindent\labelsep
    \parsep\z@ \@plus\p@
    \let\fullwidthdisplay\relax}%
  \sbox\@tempboxa{\csname @set#1head\endcsname}%
  \ifdim\wd\@tempboxa>.7\textwidth \smf@skippttrue\fi
  \item\relax
  {\csname @set#1head\endcsname
  \ifsmf@skippt
      \global\smf@skipptfalse
      \@@par\nobreak
  \else
      \pointrait\nobreak
  \fi}
  \ignorespaces
  \csname @#1language\endcsname
  \csname @#1\endcsname
  \endlist
  \egroup
\fi}
%    \end{macrocode}
% \subsubsection{R\'esum\'e principal}
%    \begin{macrocode}
\def\@abstract{}
\def\@abstractlanguage{\@smflanguage}
\newenvironment{abstract}{%
  \ifx\maketitle\relax
    \ClassWarning{\@classname}{Abstracts should precede
      \protect\maketitle\space in SMF documentclasses; reported}%
  \fi
  \begin{@genabstract}{abstract}%
}{%
%    \end{macrocode}
% Si |\@setabstract| est |\relax|, cela signifie que |\maketitle| est pass\'e
% par l\`a. Dans ce cas, on met tout de suite le r\'esum\'e
% principal.
%    \begin{macrocode}
  \ifx\@setabstract\relax \@setabstracta\par\bigskip \fi
}
%    \end{macrocode}
% Enfin, la macro |\@setabstracthead| pr\'ecise comment composer l'ent\^ete du
% r\'esum\'e.
%    \begin{macrocode}
\def\@setabstracthead{\abstractheadfont\abstractname}
%    \end{macrocode}
% On introduit |\ifsmfabstracta| qui conditionne l'affichage du r\'esum\'e
% dans la langue de l'article : dans des ouvrages collectifs notamment, on
% peut vouloir mettre les r\'esum\'es ensemble.
%    \begin{macrocode}
\newif\ifsmfabstracta\smfabstractatrue
\def\@setabstract{\ifsmfabstracta
    \@setabstracta
    \global\let\@setabstract\relax
    \fi}
\def\@setabstracta{\@setgenabstract{abstract}}
%    \end{macrocode}
% \subsubsection{R\'esum\'e dans l'autre langue}
%    \begin{macrocode}
\def\@altabstract{}
\def\@altabstractlanguage{\@smfaltlanguage}
\newenvironment{altabstract}{%
  \ifx\maketitle\relax
    \ClassWarning{\@classname}{Abstracts should precede
      \protect\maketitle\space in SMF documentclasses; reported}%
  \fi
  \begin{@genabstract}{altabstract}%
}{%
%    \end{macrocode}
% Si |\@setaltabstract| est |\relax|, on met tout de suite le resum\'e dans
% l'autre langue
%    \begin{macrocode}
  \ifx\@setaltabstract\relax \@setaltabstracta\par\bigskip \fi
}
%    \end{macrocode}
% Enfin, la macro |\@setaltabstracthead| pr\'ecise comment composer l'ent\^ete du
% r\'esum\'e alternatif.
%    \begin{macrocode}
\def\@setaltabstracthead{\abstractheadfont \altabstractname
  \ifx\@alttitle\@empty\else\ 
     {\@altabstractlanguage\textup(\emph{\@alttitle}\textup)}\fi}
%    \end{macrocode}
% On introduit |\ifsmfaltabstracta| qui est le pendant de
% |\ifsmfabstracta|.
%    \begin{macrocode}
\newif\ifsmfaltabstracta\smfaltabstractatrue
\def\@setaltabstract{\ifsmfaltabstracta
   \@setaltabstracta
   \global\let\@setaltabstract\relax
   \fi}
\def\@setaltabstracta{\@setgenabstract{altabstract}}
%    \end{macrocode}
% \subsection{Page de titre~?}
%    \begin{macrocode}
\def\titlepage{%
  \cleardoublepage
  \thispagestyle{empty}\setcounter{page}{0}}
\def\endtitlepage{\newpage}
%    \end{macrocode}
% \subsection{Affichage de la page de titre}
% L'option |draft| ou une option |notitlepage| devrait permettre
% d'all\'eger cette pr\'esentation, notamment lorsqu'on ne pr\'epare pas la
% version finale.
% \DescribeMacro{\maketitle}
% \DescribeMacro{\@maketitlehook}
% Cette macro est g\'en\'eriques. Elles se contente de s\'electionner un symbole
% de note vide et appelle |\@maketitle|. Pour finir, elle appelle
% |\@endmaketitlehook|.
%    \begin{macrocode}
\def\maketitle{\par \@topnum\z@
    % this prevents figures from falling at the top of page 1
  \begingroup
  \let\@makefnmark\relax  \let\@thefnmark\relax
  \@maketitle
  \@endmaketitlehook
  \endgroup
  \c@footnote\z@
  \let\maketitle\relax \let\@maketitle\relax }
\def\@endmaketitlehook{}
%</article|book>
%    \end{macrocode}
% \subsection{Dans les articles}
% \DescribeMacro{\smf@journalhead}
% |\smf@journalhead| est vide dans les classes standard. Dans la version
% finale, c'est une macro qu'appelle |\@maketitle| pour  afficher
% les r\'ef\'erences de l'article en haut
% de la premi\`ere page.
%    \begin{macrocode}
%<*article>
\def\smf@journalhead{}
\def\smf@authorfont{}
\def\@maketitle{\cleardoublepage\thispagestyle{copyright}
 \begingroup
 \uppercasenonmath\shorttitle
 \ifx\@empty\shortauthors \let\shortauthors\shorttitle
  \else \uppercasenonmath\shortauthors \andify\shortauthors \fi
  \toks@\@xp{\shortauthors}\@temptokena\@xp{\shorttitle}%
  \edef\@tempa{\@nx\markboth{\the\toks@}{\the\@temptokena}}\@tempa
 \topskip\z@skip
 \vtop to 55 mm{%
 \parindent=0pt
 \hrule
 \medskip
 {\abstractfont\smf@journalhead\par}\vfil
 \begin{center}
 \def\baselinestretch{1.2}\large\vfil
   {\bfseries\smf@boldmath\MakeUppercase\@title\par}
 \vfil
   \ifx\@empty\smfbyname\else
     {\smf@byfont\smfbyname\ifsmf@byauthor\par\vfil\else\ \fi}%
   \fi
   {\smf@authorfont
    \edef\smfandname{{\noexpand\normalfont \smfandname}}
    \andify\authors\authors\par}
 \vfil \vrule height .4pt width .3\textwidth \vfil
 \end{center}}
 \@maketitlehook
 \par\bigskip
 \ifx\@empty\@dedicatory\else\@setdedicatory\medskip\fi
 \@setabstract\par\smallskip\@setaltabstract\par
 \bigskip\bigskip
 \endgroup}
%    \end{macrocode}
% \DescribeMacro{\ifsmf@byauthor}
% \DescribeMacro{\smf@byfont}
% |\ifsmf@byauthor| est vrai ou faux, suivant que l'on veut que dans
% le titre, les auteurs soient pr\'ec\'ed\'es  d'un {\og par\fg}.
%    \begin{macrocode}
\newif\ifsmf@byauthor\smf@byauthortrue
\def\smf@byfont{\normalfont\itshape}
%    \end{macrocode}
% \DescribeMacro{\@maketitlehook}
% Pour que les styles auxiliaires puissent facilement ins\'erer des choses
% dans le titre. Par d\'efaut, c'est l'affichage de la classification,
% des mots-clefs et des subventions.
%    \begin{macrocode}
\def\@maketitlehook{%
 \ifx\@empty\@subjclass\else\@footnotetext{\@setsubjclass}\fi
 \ifx\@empty\@keywords\else\@footnotetext{\@setkeywords}\fi
 \ifx\@empty\thankses\else\def\par{\let\par\@par}\@footnotetext{\@setthanks}\fi
}
%    \end{macrocode}
% \DescribeMacro{\smf@enddoc}
% Adresses, date, traducteurs sont report\'ees en fin d'article,
% lorsque la macro |\smf@enddoc| est ex\'ecut\'ee.
%    \begin{macrocode}
\def\smf@enddoc{%
  \par\vskip 2\bigskipamount
  \bgroup
  \def\baselinestretch{1}\normalfont\footnotesize
  \raggedright
  \hrule width .2\textwidth\par\bigskip
  \ifx\@empty\@date       \else \@setdate\medskip        \fi
  \ifx\@empty\@translators\else \@settranslators\medskip \fi
  \ifx\@empty\addresses   \else \@setaddresses             \fi
  \par\egroup}
\AtEndDocument{\smf@enddoc}
%</article>
%    \end{macrocode}
% \subsection{Dans les livres}
% C'est plus compliqu\'e car les pages de titre sont au nombre de 4.
% La premi\`ere contient titre et auteurs.
%    \begin{macrocode}
%<*book>
\def\smf@titlei{\clearpage\thispagestyle{empty}
  \vspace*{-2cm}\enlargethispage{2cm}
  \topskip\z@skip
  \vfil
  \begin{raggedleft}
  \Large \bfseries
  \def\and{\par\medskip}\authors\par
  \end{raggedleft}
  \vfil
  \hrule height 1pt
  \vfil
  \begin{raggedright}
  \huge\bfseries\smf@boldmath
  \MakeUppercase\@title\par
  \vfil
  \hrule height 1pt
  \vfil\vfil
  \end{raggedright}
  \vfilneg
}
%    \end{macrocode}
% La seconde contient adresses, classification, mots-clefs,
% traducteurs, remerciements et la date.
%    \begin{macrocode}
\def\smf@titleii{\clearpage
  \thispagestyle{empty}
  \ifx\@empty\addresses\else \@setaddresses\fi
  \vfill
  \ifx\@empty\@subjclass
     \ifx\@empty\@keywords\else
        \hrule\medskip\@setkeywords\medskip\hrule\vfill\fi
  \else
     \hrule\medskip\@setsubjclass\par\medskip
     \ifx\@empty\@keywords\else\@setkeywords\par\medskip\fi
     \hrule\vfill
  \fi
  \ifx\@empty\@translators\else\@settranslators\bigskip\fi
  \ifx\@empty\thankses\else\@setthanks\par\fi
  \ifx\@empty\@date\else\@setdate\fi
  \vfilneg
}
%    \end{macrocode}
% La troisi\`eme reprend le titre et les auteurs et affiche les deux r\'esum\'es.
% J'avais pr\'evu qu'on puisse ins\'erer une image en haut de la page, comme
% dans le \emph{Panoramas et Synth\`eses} de th\'eorie de Hodge.
%    \begin{macrocode}
\def\smf@titleiii{%
  \clearpage\thispagestyle{copyright}
  \markboth{\@nx\shortauthors}{\@nx\shorttitle}
  %% INSERER UNE IMAGE
  \null
  \vskip 12\medskipamount plus 8\medskipamount
  \begin{center}\Large\bfseries\smf@boldmath
  {\MakeUppercase\@title\par}
  \vskip 4\medskipamount plus 2\medskipamount
  \def\and{,\ \penalty-1}\authors\par
  \end{center}
  \vskip 8\medskipamount plus 4 \medskipamount
  \@setabstract\par
  \vskip 1\medskipamount plus 1\medskipamount
     \penalty-100
  \@setaltabstract\par
}
%    \end{macrocode}
% \DescribeMacro{\@maketitle}
% Et le titre est constitu\'e des pages 1 et 2, puis d'une d\'edicace
% (cf. |\@setdedicatory|) et de la page 3.
%    \begin{macrocode}
\def\@maketitle{\cleardoublepage
  \begingroup
     \parindent\z@
     \smf@titlei \smf@titleii \@setdedicatory \smf@titleiii \cleardoublepage
  \endgroup}
%</book>
%    \end{macrocode}
% \section{Environnements}
% \subsection{trivlist}
% \DescribeEnv{trivlist}
% L'environnement \texttt{trivlist} est \`a peu pr\`es standard.
%    \begin{macrocode}
%<*article|book>
\def\trivlist{\parsep\parskip\@nmbrlistfalse
  \@trivlist \labelwidth\z@ \leftmargin\z@
  \itemindent\z@
  \let\@itemlabel\@empty
  \def\makelabel##1{\upshape##1}}
%    \end{macrocode}
% \subsection{list}
% \DescribeEnv{list}
% Il me para\^{\i}t souhaitable de supprimer |\listI| (manque de sym\'etrie
% surprenant).
%    \begin{macrocode}
\newskip\listisep \listisep\smallskipamount
\def\@listi{\leftmargin\leftmargini \parsep\z@skip
  \topsep\listisep \itemsep\z@skip
  \listparindent\normalparindent}
\def\@listii{\leftmargin\leftmarginii
  \labelwidth\leftmarginii \advance\labelwidth-\labelsep
  \topsep\z@skip \parsep\z@skip \partopsep\z@skip \itemsep\z@skip}
\def\@listiii{\leftmargin\leftmarginiii
  \labelwidth\leftmarginiii \advance\labelwidth-\labelsep}
\def\@listiv{\leftmargin\leftmarginiv
  \labelwidth\leftmarginiv \advance\labelwidth-\labelsep}
\def\@listv{\leftmargin\leftmarginv
  \labelwidth\leftmarginv \advance\labelwidth-\labelsep}
\def\@listvi{\leftmargin\leftmarginvi
  \labelwidth\leftmarginvi \advance\labelwidth-\labelsep}
%    \end{macrocode}
% Pour compatibilit\'e, avant de voir~:
%    \begin{macrocode}
\let\@listI\@listi
%    \end{macrocode}
% \subsection{enumerate}
% \DescribeEnv{enumerate}
%    \begin{macrocode}
\def\enumerate{\ifnum \@enumdepth >3 \@toodeep\else
      \advance\@enumdepth \@ne
      \edef\@enumctr{enum\romannumeral\the\@enumdepth}\list
      {\csname label\@enumctr\endcsname}{\usecounter
        {\@enumctr}\def\makelabel##1{\hss\llap{\upshape##1}}}\fi}
\def\labelenumi{\theenumi.}
\def\theenumi{\@arabic\c@enumi}
\def\labelenumii{(\theenumii)}
\def\theenumii{\@alph\c@enumii}
\def\p@enumii{\theenumi}
\def\labelenumiii{(\theenumiii)}
\def\theenumiii{\@roman\c@enumiii}
\def\p@enumiii{\theenumi(\theenumii)}
\def\labelenumiv{(\theenumiv)}
\def\theenumiv{\@Alph\c@enumiv}
\def\p@enumiv{\p@enumiii\theenumiii}
%    \end{macrocode}
% \subsection{itemize}
% \DescribeEnv{itemize}
%    \begin{macrocode}
\def\itemize{%
  \ifnum\@itemdepth>3 \@toodeep
  \else \advance\@itemdepth\@ne
    \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
    \list{\csname\@itemitem\endcsname}%
      {\def\makelabel##1{\hss\llap{\upshape##1}}}%
  \fi}
\def\labelitemi{\bfseries --}% \upshape already done by \itemize
\def\labelitemii{$\m@th\bullet$}
\def\labelitemiii{$\m@th\ast$}
\def\labelitemiv{$\m@th\cdot$}
%    \end{macrocode}
% \subsection{verse}
% \DescribeEnv{verse}
% Le texte est compos\'e avec des marges augment\'ees de 1.5\textit{em} et un
% alin\'ea n\'egatif de $-1.5$\textit{em}.
%    \begin{macrocode}
\def\verse{\let\\\@centercr
  \list{}{\itemsep\z@ \itemindent -1.5em\listparindent\itemindent
  \rightmargin\leftmargin \advance\leftmargin 1.5em\relax}\item[]}
\let\endverse=\endlist
%    \end{macrocode}
% \subsection{quotation}
% \DescribeEnv{quotation}
% Les marges droites et gauches sont fix\'ees \`a 3\textit{pc}, l'espacement
% entre paragraphes quasiment nul. Les alin\'eas ne changent pas.
%    \begin{macrocode}
\def\quotation{\list{}{%
    \leftmargin3pc \listparindent\normalparindent
    \itemindent\z@
    \rightmargin\leftmargin \parsep\z@ \@plus\p@}%
  \item[]}
\let\endquotation=\endlist
%    \end{macrocode}
% \DescribeEnv{quote}
% Marges droites et gauches sont \'egales \`a la valeur fix\'ee par
% le niveau de profondeur de l'environnement \texttt{list}.
%    \begin{macrocode}
\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
\let\endquote=\endlist
%    \end{macrocode}
% \subsection{description}
% \DescribeEnv{description}
% Il est hideux : c'est une liste, le label est en gras suivi d'un
% deux-points. Les marges sont augment\'ees et le premier alin\'ea est n\'egatif.
% Je ne suis pas s\^ur que les param\`etres soient robustes.
%    \begin{macrocode}
\newcommand{\descriptionlabel}[1]{\hspace\labelsep
    \upshape\bfseries\smf@boldmath #1\unskip\ :}
\newcommand{\description}{\list{}{%
  \advance\leftmargini6\p@ \itemindent-12\p@
  \labelwidth\z@ \let\makelabel\descriptionlabel}}
\let\enddescription=\endlist
%    \end{macrocode}
% \subsection{Ajustement des param\`etres}
% Ainsi, les marges sont ajust\'ees au d\'ebut de la mise en page du
% document (suivant les polices, casses utilis\'ees).
%    \begin{macrocode}
\AtBeginDocument{%
  \labelsep=5pt
  \settowidth\leftmargini{\labelenumi\hskip\labelsep}%
  \advance\leftmargini by \normalparindent
  \settowidth\leftmarginii{\labelenumii\hskip\labelsep}%
  \advance\leftmarginii by 15pt
  \settowidth\leftmarginiii{\labelenumiii\hskip\labelsep}%
  \advance\leftmarginiii by 12pt
  \settowidth\leftmarginiv{\labelenumiv\hskip\labelsep}%
  \advance\leftmarginiv by 10pt
  \leftmarginv=10pt
  \leftmarginvi=10pt
  \leftmargin=\leftmargini
  \labelwidth=\leftmargini \advance\labelwidth-\labelsep
  \@listi}
%    \end{macrocode}
% \section{Chapitres et sections}
% \subsection{Macros g\'en\'erales}
% \DescribeMacro{\@startsection}
% La macro |\@startsection| prend 6 arguments.
% \begin{enumerate}
% \item
% Si |#1| vaut \texttt{section}, on utilise le compteur |\c@section|, les
% marques |\sectionmark|, etc.
% \item
% |#2| contient le niveau de profondeur de la section. S'il
% est sup\'erieur \`a |\c@secnumdepth|, il n'y pas de num\'eros, s'il est
% sup\'erieur \`a |\c@tocdepth|, l'entr\'ee ne va pas dans la toc.
% \item
% |\#3| est le d\'ecalage horizontal avant l'affichage du titre.
% \item
% |#4| est l'espacement vertical avant  l'affichage de la section.
% \item
% Si |#5| est positif, il contient l'espacement vertical apr\`es la section,
% s'il est n\'egatif, sa valeur absolue est l'espacement horizontal et le
% titre n'est pas suivi d'un retour \`a la ligne.
% \item
% |#6| permet les changements de polices. Il peut se terminer par
% |\MakeUppercase| afin que le titre soit en majuscules.
% \end{enumerate}
% Les environnements standard (|\section|, etc., voir plus bas) d\'efinissent
% ces 6 premiers param\`etres.
%
% Si ces six arguments sont suivis d'une ast\'erisque \texttt{*}, le
% param\`etre |#2| est mis \`a |\@m| (1000). Cela a l'effet de supprimer la
% num\'erotation et l'entr\'ee de table des mati\`eres.
%
%    \begin{macrocode}
\def\@startsection#1#2#3#4#5#6{%
 \if@noskipsec \leavevmode \fi
 \par \@tempskipa #4\relax
 \@afterindenttrue
 \ifdim \@tempskipa <\z@ \@tempskipa -\@tempskipa \@afterindentfalse\fi
 \if@nobreak \everypar{}\else
     \addpenalty\@secpenalty\addvspace\@tempskipa\fi
 \@ifstar{\@dblarg{\@sect{#1}{\@m}{#3}{#4}{#5}{#6}}}%
         {\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}%
}
%    \end{macrocode}
% \DescribeMacro{\@seccntformat}
%    \begin{macrocode}
\def\@seccntformat#1{%
  \protect\textup{\protect\@secnumfont
    \csname the#1\endcsname
    \protect\@secnumpunct
  }%
}
%    \end{macrocode}
% \DescribeMacro{\@secnumfont}
%    \begin{macrocode}
\def\@secnumfont{\bfseries}
%</article|book>
%    \end{macrocode}
%    \DescribeMacro{\@sect}
% Nouvelle version de |\@sect|, reprise des classes Ams. 
% Cependant, il a fallu faire trois adaptations pour traiter le point-trait,
% permettre de compsoer des titres de section en capitales, 
% et se débrouiller pour que  hyperref fonctionne.
% 
%
% |\ifsmf@ee| (\emph{empty eight}) dira si l'argument |#8| est vide ou non. 
% Le souci est qu'hyperref le rend toujours non vide.
%  Le test se fera en le composant dans la boîte |\smf@eebox|.
% Enfin, le compteur |\smf@sf| contient le |\spacefactor| après la composition
% du titre de section (avant passage éventuel en capitales).
%    \begin{macrocode}
%<*article|book>
\newif\ifsmf@ee
\newbox\smf@eebox
\newcount\smf@sf
%    \end{macrocode}
%    \begin{macrocode}
\def\@sect#1#2#3#4#5#6[#7]#8{%
  \edef\@toclevel{\ifnum#2=\@m 0\else\number#2\fi}%
  \ifnum #2>\c@secnumdepth \let\@secnumber\@empty
  \else \@xp\let\@xp\@secnumber\csname the#1\endcsname\fi
  \@tempskipa #5\relax
%    \end{macrocode}
% C'est ici qu'on décide une fois pour toute de la vacuité de |#8|.
% Pour gérer le point-trait après des titres qui se terminent par un
% signe de ponctuation, 
% on garde aussi une trace du |\spacefactor| après |#8|.
%    \begin{macrocode}
   \setbox\smf@eebox\hbox{#8\global\smf@sf\the\spacefactor}%
   \ifdim\wd\smf@eebox>\z@\smf@eefalse\else\smf@eetrue\fi
%    \end{macrocode}
% On reprend le fil de la macro de l'Ams.
%    \begin{macrocode}
  \ifnum #2>\c@secnumdepth
    \let\@svsec\@empty
  \else
    \refstepcounter{#1}%
    \edef\@secnumpunct{%
      \ifdim\@tempskipa>\z@ % not a run-in section heading
        \ifsmf@ee\else .\@nx\enspace\fi 
      \else
        \ifsmf@ee \else .\@nx\enspace\fi
      \fi}%
    \ifsmf@ee
      \ifnum #2=\tw@ \def\@secnumfont{\bfseries}\fi
    \fi
    \protected@edef\@svsec{%
      \ifnum#2<\@m
        \@ifundefined{#1name}{}{%
          \ignorespaces\csname #1name\endcsname\space
        }%
      \fi
      \@seccntformat{#1}%
    }%
  \fi
  \ifdim \@tempskipa>\z@ % then this is not a run-in section heading
%    \end{macrocode}
% On reprend l'ancienne formulation qui permet que |#6| se termine
% par |\MakeUppercase|.
%    \begin{macrocode}
     \begingroup #6{\relax
     \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty\@M #8\@@par}}%
     \endgroup
%    \end{macrocode}
% Dans la classe article de l'AMS, 
% les titres de section n'apparaissent pas dans les titres courants ;
% ici, on supprime cette particularité,
% il est toujours possible de rendre |\sectionmark| égal à |\@gobble|.
%    \begin{macrocode}
  \csname #1mark\endcsname{#7}%
%    \end{macrocode}
%    \begin{macrocode}
    \ifnum#2>\@m \else \@tocwrite{#1}{#8}\fi
  \else
%    \end{macrocode}
%  Lorsque |#8| n'est pas vide, on rétablit le |\spacefactor|
% qui pourrait avoir été perturbé par le passage en capitales.
%    \begin{macrocode}
   \ifsmf@ee
     \def\@svsechd{#6{\hskip #3\@svsec\unskip}\MakePointrait 
                      \ifnum#2>\@m \else \@tocwrite{#1}{#8}\fi }%
  \else
     \def\@svsechd{#6{\hskip #3\@svsec\ignorespaces #8}\unskip
       \spacefactor\smf@sf\MakePointrait%
       \ifnum#2>\@m \else \@tocwrite{#1}{#8}\fi }%
  \fi
\fi
  \global\@nobreaktrue
  \@xsect{#5}}
%    \end{macrocode}
% \subsection{Profondeur de num\'erotation}
%    \begin{macrocode}
\setcounter{secnumdepth}{5}
%    \end{macrocode}
% \subsection{D\'efinition des compteurs de sections}
%    \begin{macrocode}
\newcounter{part}
%<book>\newcounter{chapter}
%<book>\newcounter{section}[chapter]
%<article>\newcounter{section}
\newcounter{subsection}[section]
\newcounter{subsubsection}[subsection]
\newcounter{paragraph}[subsubsection]
%    \end{macrocode}
% ... et leur style par d\'efaut.
%    \begin{macrocode}
\renewcommand\thepart      {\Roman{part}}
%<book>\renewcommand\thechapter {\arabic{chapter}}
%<book>\renewcommand\thesection {\thechapter.\arabic{section}}
%<article>\renewcommand\thesection {\arabic{section}}
\renewcommand\thesubsection{\thesection.\arabic{subsection}}
\renewcommand\thesubsubsection
                {\thesubsection.\arabic{subsubsection}}
\renewcommand\theparagraph {\thesubsubsection.\arabic{paragraph}}
%</article|book>
%    \end{macrocode}
% \subsection{Partie}
%    \begin{macrocode}
%<*article>
\def\part{\@startsection{part}{1}%
  \z@{3\linespacing\@plus\linespacing}{2\linespacing}%
  {\centering\normalfont\bfseries\smf@boldmath\MakeUppercase}}
%</article>
%<*book>
\def\part{\cleardoublepage \thispagestyle{empty}%
  \null\vfil  \markboth{}{}\secdef\@part\@spart}
\def\@part[#1]#2{%
  \ifnum \c@secnumdepth >-2\relax \refstepcounter{part}%
    \addcontentsline{toc}{part}{\partname\ \thepart.
        \protect\enspace\protect\noindent#1}%
  \else
    \addcontentsline{toc}{part}{#1}\fi
  \begingroup
    \centering
    \ifnum \c@secnumdepth >-2\relax
       {\huge\bfseries\smf@boldmath
         \MakeUppercase{\partname\ \thepart}}
      \vfil \fi
    \huge\bfseries\smf@boldmath
      \MakeUppercase{#1}\par
    \vfil\vfil
  \endgroup
  \newpage\thispagestyle{empty}}

\def\@spart#1{\addcontentsline{toc}{part}{\protect\noindent#1}%
  \begingroup
    \centering
    \huge\bfseries\smf@boldmath
      \MakeUppercase{#1}\par
     \vfil\vfil
   \endgroup
   \newpage\thispagestyle{empty}}
%    \end{macrocode}
% \subsection{Chapitre}
% \DescribeMacro{\chapter}
% \DescribeMacro{\chapterspace}\DescribeMacro{\chapterheight}
% La dimension \texttt{chapterheight} ou la macro |\chapterspace|
% permettent de diminuer l'espace d'un chapitre la taille de l'ent\^ete de
% ce chapitre. C'est cens\'e \^etre utile avant les tables des mati\`eres
% notamment, pour \'eviter manuellement quelques orphelines.
% Si l'on tape |\chapterspace{-1}|, cela permet de gagner une ligne sur la
% page, on peut aussi taper |\chapterheight -1cm|.
%    \begin{macrocode}
\newdimen\chapterheight\chapterheight\z@
\def\chapterspace#1{\global\chapterheight=#1\baselineskip\relax}
\def\chapter{\cleardoublepage
  \thispagestyle{empty}\global\@topnum\z@
  \@afterindenttrue
  \@ifstar{\@schapter}{\@dblarg\@chapter}}
\def\@chapter[#1]#2{\refstepcounter{chapter}%
  \ifnum\c@secnumdepth<\z@ \let\@secnumber\@empty
  \else \let\@secnumber\thechapter \fi
  \typeout{\chaptername\space\@secnumber}%
  \def\@toclevel{0}%
  \ifx\chaptername\appendixname
     \@tocwriteb\tocappendix{chapter}{#2}%
  \else \@tocwriteb\tocchapter{chapter}{#2}\fi
  \chaptermark{#1}%
  \addtocontents{lof}{\protect\addvspace{10\p@}}%
  \addtocontents{lot}{\protect\addvspace{10\p@}}%
  \@makechapterhead{#2}\@afterheading}
\def\@schapter#1{\typeout{#1}%
  \let\@secnumber\@empty
  \def\@toclevel{0}%
  \ifx\chaptername\appendixname
     \@tocwriteb\tocappendix{chapter}{#1}%
  \else \@tocwriteb\tocchapter{chapter}{#1}\fi
  \chaptermark{#1}%
  \addtocontents{lof}{\protect\addvspace{10\p@}}%
  \addtocontents{lot}{\protect\addvspace{10\p@}}%
  \@makeschapterhead{#1}\@afterheading}
\def\@makechapterhead#1{\global\topskip 0pt\relax
  \advance\chapterheight 6cm
  \vbox to \chapterheight{\Large\bfseries\smf@boldmath\centering
    \vskip 0pt plus 0.7fil\relax
    \ifnum\c@secnumdepth>\m@ne
    \uppercase\@xp{\chaptername}\enspace\thechapter\par\vskip2pc\fi
    \MakeUppercase{#1}\par
    \vfil}\global\chapterheight\z@\relax}
\def\@makeschapterhead#1{\global\topskip 0pt\relax
  \advance\chapterheight 6cm
  \vbox to \chapterheight{\Large\bfseries\smf@boldmath\centering
  \vskip0pt plus 0.7fil\relax
  \MakeUppercase{#1}\par
  \vfil}\global\chapterheight\z@\relax}
%    \end{macrocode}
% \subsection{Chapitre sp\'ecial}
% \DescribeMacro{\specialchapter}
% Permet un chapitre sans titre num\'erot\'e automatiquement du genre
% `Appendice A' ou `Chapitre 2'.
%    \begin{macrocode}
\def\specialchapter{\refstepcounter{chapter}%
  \chapter*{\chaptername\space\thechapter}}
%</book>
%    \end{macrocode}
% \subsection{Appendices}
%    \begin{macrocode}
%<*article>
\def\appendix{\par
  \begingroup
    \def\@elt##1{\global\csname c@##1\endcsname\z@\relax
      \csname cl@##1\endcsname}
    \global\c@section\z@
    \cl@section
  \endgroup
 \let\sectionname\appendixname
 \def\thesection{\@Alph\c@section}}
%</article>
%<*book>
\def\appendix{\par
  \begingroup
    \def\@elt##1{\global\csname c@##1\endcsname\z@\relax
      \csname cl@##1\endcsname}
    \global\c@chapter\z@
    \cl@chapter
  \endgroup
  \let\chaptername\appendixname
  \renewcommand\thechapter{\Alph{chapter}}}
%</book>
%    \end{macrocode}
% \subsection{Section sp\'eciale}
% \DescribeMacro{\specialsection}
% Dans AMS\LaTeX, cette section sp\'eciale permet une s\'eparation non
% num\'erot\'ee englobant des sections.
% L\`a, c'est une section usuelle, un peu plus espac\'ee du texte et
% dont le titre est en majuscules.
%    \begin{macrocode}
%<*article|book>
\def\specialsection{\@startsection{section}{1}%
  \z@{2\linespacing\@plus\linespacing}{.5\linespacing}%
  {\centering\normalfont\bfseries\smf@boldmath\MakeUppercase}}
%</article|book>
%    \end{macrocode}
% \subsection{Section}
%    \begin{macrocode}
%<*article>
\def\section{\@startsection{section}{1}%
  \z@{1.5\linespacing\@plus\linespacing}{.5\linespacing}%
  {\normalfont\bfseries\smf@boldmath\centering}}
%</article>
%<*book>
\def\section{\@startsection{section}{1}%
  \z@{1.5\linespacing\@plus\linespacing}{.5\linespacing}%
  {\normalfont\bfseries\smf@boldmath}}
%</book>
%<*article|book>
\let\sectionname\@empty
%    \end{macrocode}
% \subsection{Sous-section}
% On d\'efinit deux sous-sections : |\subsection|, pour laquelle le texte
% continue, et |\Subsection| pour laquelle le texte est renvoy\'e \`a la
% ligne.
%    \begin{macrocode}
\def\subsection{\@startsection{subsection}{2}%
  \z@{.7\linespacing\@plus.7\linespacing}{-.5em}%
  {\normalfont\bfseries\smf@boldmath}}
\def\Subsection{\@startsection{subsection}{2}%
  \z@{.7\linespacing\@plus.7\linespacing}{.3\linespacing}
  {\normalfont\bfseries\smf@boldmath}}
\let\subsectionname\@empty
%    \end{macrocode}
% \subsection{Sous-sous-section}
% L\`a encore, il y en a deux.
%    \begin{macrocode}
\def\subsubsection{\@startsection{subsubsection}{3}%
  \z@{.4\linespacing}{-.5em}%
  {\normalfont\itshape}}
\def\Subsubsection{\@startsection{subsubsection}{3}%
  \z@{.4\linespacing}{.2\linespacing}%
  {\normalfont\itshape}}
\let\subsubsectionname\@empty
%    \end{macrocode}
% \subsection{Paragraphe}
%    \begin{macrocode}
\def\paragraph{\@startsection{paragraph}{4}%
  \z@{.4\linespacing}{-\fontdimen2\font}%
  {\normalfont\itshape}}
\let\paragraphname\@empty % ACL
%    \end{macrocode}
% \subsection{Sous-paragraphe}
%    \begin{macrocode}
\def\subparagraph{\@startsection{subparagraph}{5}%
  \z@{.3\linespacing}{-\fontdimen2\font}%
  \normalfont}
%    \end{macrocode}
% \subsection{Hauts de pages provoqu\'es par les sections}
%    \begin{macrocode}
 \def\partrunhead#1#2#3{%
   \@ifnotempty{#2}
      {\MakeUppercase{#1 #2}\@ifnotempty{#3}{.\ }}%
   \@ifnotempty{#3}{\MakeUppercase{#3}}}
%</article|book>
%<*book>
 \let\chapterrunhead\partrunhead
 \def\indexrunhead#1#2#3{%
      \@xp\MakeUppercase{#3}}
%</book>
%<*article|book>
\let\sectionrunhead\partrunhead
%    \end{macrocode}
% \subsection{Re-d\'efinition de \texttt{@Roman}}
%    \begin{macrocode}
\def\@Roman#1{\@xp\@slowromancap \romannumeral#1@}
\def\@slowromancap#1{\ifx @#1% then terminate
  \else
    \if i#1I\else\if v#1V\else\if x#1X\else\if l#1L\else\if
    c#1C\else\if m#1M\else#1\fi\fi\fi\fi\fi\fi
    \@xp\@slowromancap
  \fi }
%</article|book>
%    \end{macrocode}
% \subsection{Exercices}
% L'AMS pr\'evoyait des macros particuli\`eres pour les exercices,
% diff\'erentes suivant que les exercices sont dans le cours du texte ou
% bien en fin de chapitre. Pour l'instant, rien n'est fait hors quelques
% macros de style `th\'eor\`emes'.
% \subsection{Subdivisions d'un livre}
% Cela me para\^{\i}t inutile pour l'instant, mais est standard en
% \LaTeXe. Il faut ou d\'evelopper l'id\'ee, ou la supprimer.
%    \begin{macrocode}
%<*book>
\def\frontmatter{\cleardoublepage\pagenumbering{roman}}
\def\mainmatter{\cleardoublepage
  \setcounter{page}{1}\def\baselinestretch{1.1}\normalfont
  \pagenumbering{arabic}}
\def\backmatter{\cleardoublepage
  \def\baselinestretch{1}\normalfont}
%</book>
%<*article>
\def\frontmatter{}
\def\mainmatter{\def\baselinestretch{1.1}\normalfont}
\def\backmatter{\def\baselinestretch{1}\normalfont}
%</article>
%    \end{macrocode}
% \section{Tables des mati\`eres}
% \subsection{Param\`etres}
%    \begin{macrocode}
%<*article|book>
\newcommand{\@pnumwidth}{1.6em}
\newcommand{\@tocrmarg}{2.6em}
\setcounter{tocdepth}{1}
%</article|book>
%    \end{macrocode}
% \subsection{Macro g\'en\'erale}
% Une nouveaut\'e est qu'on \'ecrit la toc dans tous les cas, m\^eme quand
% elle n'est pas incluse dans la document. C'est important pour
% \texttt{smfmulti}.
%    \begin{macrocode}
%<*article>
\def\@starttoc#1#2{\begingroup
  \par\removelastskip\vskip\z@skip
  \@startsection{toc}\@M\z@{\linespacing\@plus\linespacing}%
    {.5\linespacing}{\centering\normalfont\bfseries}{#2}%
  \ifx\contentsname#2%
  \else \addcontentsline{toc}{section}{#2}\fi
  \list{}{\labelwidth\z@
    \leftmargin\abstractmargin \rightmargin\leftmargin
    \listparindent\z@
    \itemindent\z@
    \parsep\z@ \@plus\p@
    \def\baselinestretch{1}\normalfont
    \let\fullwidthdisplay\relax}%
  \item\relax
  \makeatletter
  \@input{\jobname.#1}%
  \def\@tempa{toc}\def\@tempb{#1}\ifx\@tempa\@tempb\else
  \if@filesw
    \@xp\newwrite\csname tf@#1\endcsname
    \immediate\@xp\openout\csname tf@#1\endcsname \jobname.#1\relax
  \fi\fi\par
  \endlist
  \global\@nobreakfalse \endgroup
  \addvspace{32\p@\@plus14\p@}%
}
%</article>
%<*book>
\def\@starttoc#1#2{\begingroup
  \cleardoublepage
  \thispagestyle{empty}\global\@topnum\z@
  \@afterindenttrue
  \let\@secnumber\@empty % for \@tocwrite and \chaptermark
  \ifx\contentsname#2%
  \else \@tocwrite{chapter}{#2}\fi
  \typeout{#2}\@xp\chaptermark\@xp{#2}%
  \@makeschapterhead{#2}\@afterheading
  \makeatletter
  \@input{\jobname.#1}%
  \def\@tempa{toc}\def\@tempb{#1}\ifx\@tempa\@tempb\else
  \if@filesw
    \@xp\newwrite\csname tf@#1\endcsname
    \immediate\@xp\openout\csname tf@#1\endcsname \jobname.#1\relax
  \fi\fi
  \global\@nobreakfalse \endgroup
  \newpage }
%</book>
%    \end{macrocode}
% \subsection{D\'efinitions particuli\`eres}
%    \begin{macrocode}
%<*article|book>
\def\tableofcontents{\@starttoc{toc}\contentsname
  \let\tableofcontents\relax}
\def\listoffigures{\@starttoc{lof}\listfigurename}
\def\listoftables{\@starttoc{lot}\listtablename}
%    \end{macrocode}
% \subsection{Ajustement de param\`etres}
% J'ai cru d\'eceler un bug dans les macros originales d'amsbook. En effet,
% si |\tocindent| augmente, il ne semble pas pouvoir rediminuer
% apr\`es\dots
%    \begin{macrocode}
\AtBeginDocument{%
  \@for\@tempa:=-1,0,1,2,3,4,5,10000\do{%
    \@ifundefined{r@tocindent\@tempa}{%
      \@xp\gdef\csname r@tocindent\@tempa\endcsname{0pt}}{}%
  }%
}
\def\@writetocindents{%
  \begingroup
  \@for\@tempa:=-1,0,1,2,3,4,5,10000\do{%
    \immediate\write\@auxout{%
      \string\newlabel{tocindent\@tempa}{%
        \csname r@tocindent\@tempa\endcsname}}%
  }%
  \endgroup}
\AtEndDocument{\@writetocindents}
\AtEndDocument{%
  \if@filesw
    \@xp\newwrite\csname tf@toc\endcsname
    \immediate\@xp\openout\csname tf@toc\endcsname \jobname.toc\relax
  \fi}
%    \end{macrocode}
% \subsection{Fabrication d'une ligne dans la table}
%    \begin{macrocode}
\let\indentlabel\@empty
\def\@tochangmeasure#1{\sbox\z@{#1}%
  \ifdim\wd\z@>\csname r@tocindent\@toclevel\endcsname\relax
    \@xp\xdef\csname r@tocindent\@toclevel\endcsname{\the\wd\z@}%
  \fi
}
%    \end{macrocode}
% Les arguments sont les suivants :
% \begin{enumerate}
% \item degr\'e de profondeur ;
% \item espacement avant la ligne ;
% \item indentation \`a gauche ;
% \item espacement suppl\'ementaire \`a gauche. S'il est vide, les macros
% |\r@tocindent?| le calculent ;
% \item polices ;
% \item entr\'ee de tdm proprement dite ;
% \item num\'ero de page.
% \end{enumerate}
% Il y a aussi une p\'enalit\'e \cs{tochyphenpenalty} de c\'esure dans
% TdM. Par d\'efaut, elle vaut \cs{@M}=10\,000.
%    \begin{macrocode}
\newcount\tochyphenpenalty
\tochyphenpenalty\@M
\def\@tocline#1#2#3#4#5#6#7{\relax
  \ifnum #1>\c@tocdepth % then omit
  \else
    \par \addpenalty\@secpenalty\addvspace{#2}%
    \begingroup \hyphenpenalty\tochyphenpenalty
    \@ifempty{#4}{%
      \@tempdima\csname r@tocindent\number#1\endcsname\relax
    }{%
      \@tempdima#4\relax
    }%
    \parindent\z@ \leftskip#3\relax
      \advance\leftskip\@tempdima\relax
    \advance\rightskip\@pnumwidth % plus1em
    \parfillskip-\@pnumwidth
    {#5{\leavevmode\hskip-\@tempdima #6}}%
    \nobreak
    \xleaders\hbox to1ex{\normalfont\hss.\hss}\hfil\nobreak
    \hbox to\@pnumwidth{\@tocpagenum{#7}}\par
    \nobreak
    \endgroup
  \fi}
\def\@tocpagenum#1{\hss{\mdseries #1}}
\def\@tocwrite#1{\@xp\@tocwriteb\csname toc#1\endcsname{#1}}
\def\@tocwriteb#1#2#3{\begingroup
  \def\@tocline##1##2##3##4##5##6{\ifnum##1>\c@tocdepth
    \else \sbox\z@{##5\let\indentlabel\@tochangmeasure##6}\fi}%
   \csname l@#2\endcsname
     {#1{\csname#2name\endcsname}{\@secnumber}{}}%
 \endgroup
 \addcontentsline{toc}{#2}%
   {\protect#1{\csname#2name\endcsname}{\@secnumber}{#3}}}
%    \end{macrocode}
% \subsection{Affichage des sections dans la table}
%    \begin{macrocode}
\newcommand{\tocpart}[3]{%
  \indentlabel{\@ifnotempty{#2}{\ignorespaces#1 #2.\kern1ex}}#3}
%</article|book>
%<*book>
\newcommand{\tocchapter}[3]{%
  \indentlabel{\@ifnotempty{#2}{\ignorespaces #2.\kern1ex}}#3}
\let\tocappendix\tocchapter
%</book>
%<*article|book>
\let\tocsection\tocpart
\let\tocsubsection\tocsection
\let\tocsubsubsection\tocsection
\let\tocparagraph\tocsection

\def\l@part{\@tocline{-1}{12pt plus2pt}{0pt}{}{\bfseries\smf@boldmath}}
%</article|book>
%<*book>
\def\l@chapter{\@tocline{0}{8pt plus1pt}{0pt}{}{\bfseries\smf@boldmath}}
\def\l@section{\@tocline{1}{0pt}{1pc}{}{}}
\def\l@subsection{\@tocline{2}{0pt}{2pc}{}{}}
\def\l@subsubsection{\@tocline{3}{0pt}{3pc}{}{}}
\def\l@paragraph{\@tocline{5}{0pt}{4pc}{}{}}
%</book>
%<*article>
\def\l@section{\@tocline{1}{0pt}{0pc}{}{}}
\def\l@subsection{\@tocline{2}{0pt}{1pc}{}{}}
\def\l@subsubsection{\@tocline{3}{0pt}{2pc}{}{}}
\def\l@paragraph{\@tocline{5}{0pt}{3pc}{}{}}
%</article>
%<*article|book>
\def\l@figure{\@tocline{0}{3pt plus2pt}{0pt}{}{}}
\let\l@table\l@figure
%    \end{macrocode}
% \section{Bibliographie}
% La bibliographie est une section usuelle, dont le titre n'est finalement
% plus en majuscules (03/10/97).
% La taille du plus grand label est calcul\'ee automatiquement
% et est sauv\'ee dans \cs{r@maxlabelwd}, via le \texttt{.aux}.
% Il peut y a plusieurs environnements \texttt{thebibliography},
% chacun a son \cs{r@maxlabelwd} (ils sont num\'erot\'es via \cs{smf@nthebib}).
%    \begin{macrocode}
\newcount\smf@nthebib
\newdimen\smf@tempwidtha
\newdimen\smf@tempwidthb
%<article>\let\bibliosection\section
%<book>\let\bibliochapter\chapter
%<article>\def\bibliofont{\def\baselinestretch{1}\small}
%<book>\def\bibliofont{}
\newenvironment{thebibliography}[1]{%
  \global\advance\smf@nthebib1
%<article>  \bibliosection*{\refname}%
%<book>  \bibliochapter*{\bibname}%
  \normalfont\labelsep .5em\relax
  \renewcommand\theenumiv{\arabic{enumiv}}\let\p@enumiv\@empty
  \list{\@biblabel{\theenumiv}}{%
    \global\smf@tempwidtha 0pt
    \expandafter\ifx
        \csname r@maxlabelwd\the\smf@nthebib\endcsname
        \relax
        \settowidth\labelwidth{\@biblabel{#1}}%
    \else
         \expandafter\expandafter\expandafter\labelwidth
         \csname r@maxlabelwd\the\smf@nthebib\endcsname
    \fi
    \leftmargin\labelwidth \advance\leftmargin\labelsep
    \usecounter{enumiv}%
    \itemindent 0pt
%<article>   \itemsep 0.1\baselineskip plus0.1\baselineskip
%<article>       minus0.1\baselineskip
%<book>    \itemsep .7\baselineskip plus0.1\baselineskip
%<book>          minus0.2\baselineskip
    }
    \bibliofont
    \sloppy \clubpenalty\@M \widowpenalty\clubpenalty
    \sfcode`\.=\@m
}{%
  \def\@noitemerr{%
     \@latex@warning{Empty `thebibliography' environment}}% ' (hack)
  \endlist
  \immediate\write\@auxout
     {\string\newlabel{maxlabelwd\the\smf@nthebib}{\the\smf@tempwidtha}}
}
\def\bysame{\leavevmode\hbox to3em{\hrulefill}\thinspace}
\def\newblock{}
\def\@biblabel#1{\@ifnotempty{#1}{[#1]}}
\def\@cite#1#2{{%
 \m@th\upshape\mdseries[{\bfseries #1}{\if@tempswa, #2\fi}]}}
\@ifundefined{cite }{%
  \expandafter\let\csname cite \endcsname\cite
  \edef\cite{\@nx\protect\@xp\@nx\csname cite \endcsname}%
}{}
%    \end{macrocode}
% On red\'efinit |\bibitem|, etc. pour calculer la longueur du plus grand
% label.
%    \begin{macrocode}
\def\bibitem{\@ifnextchar[\@lbibitem\@bibitem}
\def\smf@lbibitem[#1]#2{\item[\@biblabel{#1}\hfill]%
       \settowidth\smf@tempwidthb{\@biblabel{#1}}%
       \ifdim\smf@tempwidthb>\smf@tempwidtha
          \global\smf@tempwidtha=\smf@tempwidthb
       \fi
       \if@filesw
      {\let\protect\noexpand
       \immediate
       \write\@auxout{\string\bibcite{#2}{#1}}}\fi\ignorespaces}
\def\smf@bibitem#1{\item\if@filesw \immediate\write\@auxout
       {\string\bibcite{#1}{\the\value{\@listctr}}}\fi
        \settowidth\smf@tempwidthb{\@biblabel{\theenumiv}}%
        \ifdim\smf@tempwidthb>\smf@tempwidtha
           \global\smf@tempwidtha=\smf@tempwidthb
        \fi\ignorespaces}
\let\@lbibitem\smf@lbibitem\let\@bibitem\smf@bibitem
%    \end{macrocode}
% \section{Index}
% L'index est en deux colonnes. Si le package |multicol| existe, on
% l'utilise, car il \'equilibre automatiquement les colonnes en fin
% d'index.
%    \begin{macrocode}
\newif\ifhave@multicol
\IfFileExists{multicol.sty}%
  {\ClassInfo{\@classname}{Loading multicol.sty}%
   \RequirePackage{multicol}\have@multicoltrue}%
  {\ClassInfo{\@classname}%
    {multicol.sty is unavailable, using LaTeX's twocolumn}}
\newcommand\printindex{\@input{\jobname.ind}}%
\newif\if@restonecol
% \def\indexchap{\@startsection{chapter}{1}{\z@}{92pt}{10pc}%
%   {\centering\fontsize{\@xivpt}{18}\bfseries}}%
%<article>\let\indexsection\section
%<book>\let\indexchapter\chapter
\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
  \columnseprule0pt \columnsep 35\p@
%</article|book>
%<*article>
  \ifhave@multicol
    \begin{multicols}{2}[\indexsection*{\indexname}]%
  \else
    \twocolumn[\indexsection*{\indexname}]%
  \fi
%</article>
%<*book>
  \ifhave@multicol
    \begin{multicols}{2} [\indexchapter*{\indexname}]
  \else
    \twocolumn [\indexchapter*{\indexname}]
  \fi
  \@xp\indexmark\@xp{\indexname}%
  \thispagestyle{empty}%
%</book>
%<*article|book>
  \let\item\@idxitem
  \parindent\z@  \parskip\z@\@plus.3\p@\relax
  \footnotesize}
\def\@idxitem{\par\hangindent 2em}
\def\subitem{\par\hangindent 2em\hspace*{1em}}
\def\subsubitem{\par\hangindent 3em\hspace*{2em}}
%</article|book>
%<*article>
\def\endtheindex{\ifhave@multicol
    \end{multicols}%
  \else
    \if@restonecol\onecolumn\fi
  \fi}
%</article>
%<*book>
\def\endtheindex{\ifhave@multicol
    \end{multicols}\clearpage
  \else
    \if@restonecol\onecolumn\else\clearpage\fi
  \fi}
%</book>
%<*article|book>
\def\indexspace{\par}
%</article|book>
%    \end{macrocode}
% \section{Notes de bas de page}
%    Suivant le message pr-tools/2664 de Frank Mittelbach, on revient \`a la
%    d\'efinition originelle de \LaTeXe.
%    \begin{macrocode}
%<book>\@addtoreset{footnote}{chapter}
%<*article|book>
\def\footnoterule{\kern-.4\p@
        \hrule\@width 5pc\kern10\p@\kern-\footnotesep}
\def\@makefnmark{\hbox{$\m@th^{(\@thefnmark)}$}}
\def\@makefntext{\parindent0pt\sloppy\indent\@makefnmark}
%    \end{macrocode}
% \section{Figures}
% \subsection{Param\`etres}
%    \begin{macrocode}
\hfuzz=1pt \vfuzz=\hfuzz
\def\sloppy{\tolerance9999 \emergencystretch 3em\relax}
\setcounter{topnumber}{4}
\setcounter{bottomnumber}{4}
\setcounter{totalnumber}{4}
\setcounter{dbltopnumber}{4}
\renewcommand{\topfraction}{.97}
\renewcommand{\bottomfraction}{.97}
\renewcommand{\textfraction}{.03}
\renewcommand{\floatpagefraction}{.9}
\renewcommand{\dbltopfraction}{.97}
\renewcommand{\dblfloatpagefraction}{.9}
\setlength{\floatsep}{12pt plus 6pt minus 4pt}
\setlength{\textfloatsep}{15pt plus 8pt minus 5pt}
\setlength{\intextsep}{12pt plus 6pt minus 4pt}
\setlength{\dblfloatsep}{12pt plus 6pt minus 4pt}
\setlength{\dbltextfloatsep}{15pt plus 8pt minus 5pt}
\setlength{\@fptop}{0pt}% removed ``plus 1fil''
\setlength{\@fpsep}{8pt}% removed ``plus 2fil''
\setlength{\@fpbot}{0pt plus 1fil}
\setlength{\@dblfptop}{0pt}% removed ``plus 1fil''
\setlength{\@dblfpsep}{8pt}% removed ``plus 2fil''
\setlength{\@dblfpbot}{0pt plus 1fil}
\newcommand{\fps@figure}{tbp}
\newcommand{\fps@table}{tbp}
%</article|book>
%<*article>
\newcounter{figure}
\newcounter{table}
%</article>
%<*book>
\newcounter{figure}[chapter]
\newcounter{table}[chapter]
%</book>
%<*article|book>
\def\ftype@figure{1}
\def\ext@figure{lof}
\def\fnum@figure{\figurename\ \thefigure}
\newenvironment{figure}{\@float{figure}}{\end@float}
\newenvironment{figure*}{\@dblfloat{figure}}{\end@dblfloat}
\def\ftype@table{2}
\def\ext@table{lot}
\def\fnum@table{\tablename\ \thetable}
\newenvironment{table}{\@float{table}}{\end@float}
\newenvironment{table*}{\@dblfloat{table}}{\end@dblfloat}
%    \end{macrocode}
% \subsection{L\'egende}
%    \begin{macrocode}
\newskip\abovecaptionskip \abovecaptionskip=12pt \relax
\newskip\belowcaptionskip \belowcaptionskip=12pt \relax
\newdimen\captionindent \captionindent=3pc
%% \def\captionheadfont@{\scshape}
%% \def\captionfont@{\normalfont}
\def\@captionheadfont{\normalfont\scshape\small}
\def\@captionfont{\normalfont\small}
\long\def\smf@makecaption#1#2{%
  \ifdim\captionindent>.1\hsize \captionindent.1\hsize \fi
  \setbox\@tempboxa\vbox{\color@setgroup
    \advance\hsize-2\captionindent\noindent
    \@captionfont\@captionheadfont#1\@xp\@ifnotempty\@xp
        {\@cdr#2\@nil}{\@addpunct{.}\@captionfont\rmfamily\upshape\enspace#2}%
    \unskip\kern-2\captionindent\par
    \global\setbox\@ne\lastbox\color@endgroup}%
  \ifhbox\@ne % the normal case
    \setbox\@ne\hbox{\unhbox\@ne\unskip\unskip\unpenalty\unkern}%
  \fi
  \ifdim\wd\@tempboxa=\z@ % this means caption will fit on one line
    \setbox\@ne\hbox to\columnwidth{\hss\kern-2\captionindent\box\@ne\hss}%
    \@tempdima\wd\@ne\advance\@tempdima-\captionindent
    \wd\@ne\@tempdima
  \else % tempboxa contained more than one line
    \setbox\@ne\vbox{\rightskip=0pt plus\captionindent\relax
        \unvbox\@tempboxa\parskip\z@skip
        \noindent\unhbox\@ne\advance\hsize-2\captionindent\par}%
  \fi
  \ifnum\@tempcnta<64 % if the float IS a figure...
    \addvspace\abovecaptionskip
    \noindent\kern\captionindent\box\@ne
  \else % if the float IS NOT a figure...
    \noindent\kern\captionindent\box\@ne
    \nobreak
    \vskip\belowcaptionskip
  \fi
\relax
}
\let\@makecaption\smf@makecaption
%    \end{macrocode}
% \section{Th\'eor\`emes}
% On utilise le package AMS, actuellement, des environnements sont
% d\'efinis dans la classe, cela me para\^{\i}t souhaitable (comparer avec
% ce que font Springer, Kluwer and co).
% Malheureusement, la nouvelle version de {\tt amsthm.sty} n'est pas
% compatible avec l'ancienne\dots
%    \begin{macrocode}
\def\@upn{}
\RequirePackage{amsthm}
\@ifundefined{@restorelabelsep}{\let\@restorelabelsep\relax}{}
\@ifundefined{thm@headfont}{%
  \let\thm@indent\theoremindent
  \let\thm@headfont\theoremheadfont
  \let\thm@notefont\theoremnotefont
  \let\thm@preskip\theorempreskipamount
  \let\thm@postskip\theorempostskipamount
  \let\thm@headpunct\theoremheadpunct}{}
\def\@swapped#1#2{#2\@ifnotempty{#1}{\@addpunct{{\upshape.}}\quad#1\unskip}}
%    \end{macrocode}
% Et il y a encore une nouvelle version [2000/06/02] de {\tt amsthm.sty}
% qui change la num\'erotation. Il faudra comparer et \'elaguer...
%    \begin{macrocode}
\def\swappedhead#1#2#3{%
  \thmnumber{#2.}%
  \thmname{\@ifnotempty{#2}{~}#1}%
  \thmnote{ {\the\thm@notefont(#3)}}}
%    \end{macrocode}
% On inclut la macro |\@thmheadnl| qui sauvegarde ce qu'a d\'ecid\'e l'AMS
% lorsqu'un \'enonc\'e de th\'eor\`eme d\'ebute \`a la ligne au lieu de continuer apr\`es
% son titre.
%    \begin{macrocode}
\def\@thmheadnl{%
  \@noskipsectrue
  \everypar{\global\@minipagefalse \global\@newlistfalse
  \global\@inlabelfalse \global\@nobreakfalse
  {\setbox\z@\lastbox}\box\@labels
  {\parskip0pt\par}\global\@nobreaktrue
   \everypar{}\indent}}%
%    \end{macrocode}
% On red\'efinit |\@begintheorem| 
% en reprenant une version récente de l'AMS.
% Pour régler le problème des noms de th\'eor\`emes trop longs ; si la
% longueur du nom dépasse 70\%\ de la largeur du texte, l'énoncé passe
% à la ligne.
% De plus, le système de l'AMS pose un problème lorsqu'un environnement de liste
% suit un entête de théorème qui passe à la ligne.
% La solution est donnée par David Carlisle dans tex.stackexchange.
% On doit définir |\thmnewline| qui rend |true| le test |\ifsmf@thmnewline|,
% et modifier l'environnement |\@trivlist| pour qu'il s'en serve.
%    \begin{macrocode}
\newif\ifsmf@thmnewline
\def\thmnewline{\newline\global\smf@thmnewlinetrue}
\def\@begintheorem#1#2[#3]{%
  \global\smf@thmnewlinefalse
  \def\@theoremhead{\the\thm@headfont \thm@indent
    \@ifempty{#1}{\let\thmname\@gobble}{\let\thmname\@iden}%
    \@ifempty{#2}{\let\thmnumber\@gobble}{\let\thmnumber\@iden}%
    \@ifempty{#3}{\let\thmnote\@gobble}{\let\thmnote\@iden}%
    \thm@swap\swappedhead\thmhead{#1}{#2}{#3}%
    \the\thm@headpunct
    \thmheadnl % possibly a newline.
    \hskip\thm@headsep
  }%
  \ifsmf@skippt\else
    {\thm@headpunct{.}\sbox\@labels{\@theoremhead}%
    \ifdim\wd\@labels>.7\linewidth\skippointrait\fi}\fi
  \ifsmf@skippt\def\thmheadnl{\newline\indent\global\smf@thmnewlinetrue}\fi
  \deferred@thm@head{\@theoremhead}%
  \ignorespaces}
%    \end{macrocode}
% La rédéfinition de |\@trivlist|.
%    \begin{macrocode}
\let\smf@org@trivlist\@trivlist
\def\@trivlist{%
  \if@inlabel\ifsmf@thmnewline
    \mbox{}\par\nobreak
    \vskip\glueexpr-\parskip-\baselineskip+3pt\relax
    \hrule\@height\z@
    \global\smf@thmnewlinefalse
  \fi\fi
  \smf@org@trivlist}
%    \end{macrocode}
% Pour regler le probleme des noms de demonstrations trop longs ; si la
% longueur du nom depasse 70\%\ de la largeur du texte, la demonstration
% est sur la ligne suivante.
% On s'adapte aussi \`a la nouvelle version de \textsf{amsthm} qui offre une
% macro \cs{qedhere} plus efficace que l'ancien \cs{MakeQed}.
%    \begin{macrocode}
\newif\ifx@pushQED
\@ifundefined{pushQED}{\x@pushQEDfalse}{\x@pushQEDtrue}
\renewenvironment{proof}[1][\proofname]{\par
  \ifx@pushQED \pushQED{\qed}\fi
  \normalfont
% \topsep6\p@\@plus6\p@
  \topsep0pt
  \trivlist \itemindent\z@ %% \normalparindent
  \def\@proofhead{\normalfont\itshape #1}%
  \sbox\@tempboxa{\@proofhead}%
  \ifdim\wd\@tempboxa>0.7\linewidth \smf@skippttrue\fi
  \ifsmf@skippt
%    \penalty-\@medpenalty
    \global\smf@skipptfalse
    \item[]{\@proofhead\@@par}
    \nobreak
  \else
    \item[\hskip\labelsep
          \unhbox\@tempboxa\pointrait]%
  \fi
  \ignorespaces
}{%
  \MakeQed
  \endtrivlist
  \@endpefalse
  \medskip
}
\def\MakeQed{\ifsmf@qed
     \ifx@pushQED\popQED\else\qed\fi
     \fi\global\smf@qedtrue}
\newif\ifsmf@qed\smf@qedtrue
\def\skipqed{\global\smf@qedfalse}
%    \end{macrocode}
% \subsection{Styles g\'en\'eraux}
%    \begin{macrocode}
\def\th@plain{%
  \let\thm@indent\noindent
  \thm@headfont{\bfseries\smf@boldmath\itshape}%
  \thm@notefont{\bfseries\smf@boldmath\upshape}%
  \thm@preskip 0pt %% was: .5\linespacing \@plus .5\linespacing
  \thm@postskip\thm@preskip
  \thm@headpunct{\MakePointrait}
  \itshape }
\def\th@definition{\th@plain \upshape }
\def\th@remark{\th@definition }
%    \end{macrocode}
% \section{Compatibilit\'e avec \emph{babel.sty}}
% Tout doit \^etre fait pour que la classe puisse \^etre multilingue.
% Le probl\`eme est toutefois que \emph{babel} n'existe pas partout,
% et que je ne veux pas forcer son utilisation (par exemple pour un
% texte anglais...)
% \subsection{Anglais}
%    \begin{macrocode}
\def\smf@captionsenglish{%
 \def\abstractname{Abstract}%
 \def\contentsname{Contents}%
 \def\partname{Part}%
 \def\chaptername{Chapter}%
 \def\refname{References}%
 \def\bibname{Bibliography}%
 \def\indexname{Index}%
 \def\altabstractname{R\'esum\'e}%
 \def\appendixname{Appendix}%
 \def\tablename{Table}%
 \def\listtableename{List of tables}%
 \def\figurename{Figure}%
 \def\listfigurename{List of figures}%
 \def\seename{see also}%
 \def\keywordsname{Key words and phrases}%
 \def\altkeywordsname{Mots clefs}%
 \def\translatedby {Translated by}%
 \def\subjclassname
    {\textup{2000} Mathematics Subject Classification}%
 \def\proofname{Proof}%
 \def\definame{Definition}%
 \def\propname{Proposition}%
 \def\theoname{Theorem}%
 \def\conjname{Conjecture}%
 \def\coroname{Corollary}%
 \def\exemname{Example}%
 \def\lemmname{Lemma}%
 \def\remaname{Remark}%
 \def\smfbyname{by}\def\smfandname{\&}%
 \def\smfedbyname{edited by}%
 \def\smfedname{ed.}\def\smfedsname{eds.}%
 \def\smfphdthesisname{Ph.D. Thesis}%
 \def\smfmastersthesisname{Master's Thesis}%
 \let\@makecaption\smf@makecaption
}
%    \end{macrocode}
% \subsection{Fran\c cais}
%    \begin{macrocode}
\def\smf@captionsfrench{%
 \def\abstractname{R\'esum\'e}%
 \def\contentsname{Table des mati\`eres}%
 \def\partname{Partie}%
 \def\chaptername{Chapitre}%
 \def\bibname{Bibliographie}%
 \def\indexname{Index}%
 \def\refname{R\'ef\'erences}%
 \def\altabstractname{Abstract}%
 \def\appendixname{Appendice}%
 \def\figurename{Figure}%
 \def\listfigurename{Liste des figures}%
 \def\tablename{Table}%
 \def\listtablename{Liste des tables}%
 \def\seename{voir}%
 \def\keywordsname{Mots clefs}%
 \def\altkeywordsname{Key words and phrases}%
 \def\subjclassname
    {Classification math\'ematique par sujets \textup{(2000)}}%
 \def\translatedby {Traduit par}%
 \def\proofname{D\'emonstration}%
 \def\definame{D\'efinition}%
 \def\propname{Proposition}%
 \def\theoname{Th\'eor\`eme}%
 \def\conjname{Conjecture}%
 \def\coroname{Corollaire}%
 \def\exemname{Exemple}%
 \def\lemmname{Lemme}%
 \def\remaname{Remarque}%
 \def\smfbyname{par}\def\smfandname{\&}%
 \def\smfedbyname{\'edit\'e par}%
 \def\smfedname{\'ed.}\def\smfedsname{\'eds.}%
 \def\smfphdthesisname{Th\`ese}%
 \def\smfmastersthesisname{M\'emoire}%
 \csname bbl@nonfrenchlistspacing\endcsname
 \let\@makecaption\smf@makecaption
}
%    \end{macrocode}
% \subsection{Int\'egration dans {\em babel}}
% Cela doit se faire au |\begin{document}| car \textit{babel} repousse
% jusque l\`a la plupart de ses d\'eclarations.
%    \begin{macrocode}
\AtBeginDocument{%
  \expandafter\csname smf@captions\smf@language\endcsname
  \ifx\ldf@quit\@undefined  % babel n'est pas charge
    \let\@smflanguage\relax
    \let\@smfaltlanguage\relax
  \else
    \expandafter\main@language\expandafter{\smf@language}
%    \end{macrocode}
% Si le dialecte babel \texttt{frenchb} n'est pas charg\'e,
% on teste le dialecte \texttt{french} :
% En fait, les versions r\'ecentes de \textit{babel/frenchb} utilisent
% \verb'captionsfrench'.
%    \begin{macrocode}
    \ifx\captionsfrenchb\@undefined\else
       \addto\captionsfrenchb{\smf@captionsfrench}\fi
    \ifx\captionsfrench\@undefined\else
       \addto\captionsfrench{\smf@captionsfrench}\fi
    \ifx\captionsfrancais\@undefined\else
       \addto\captionsfrancais{\smf@captionsfrench}\fi
%    \end{macrocode}
% On regarde si le dialecte babel \texttt{english} est charg\'e
%    \begin{macrocode}
    \ifx\captionsenglish\@undefined\else
       \addto\captionsenglish{\smf@captionsenglish}%
    \fi
    \def\@temp{french}%
    \ifx\smf@language\@temp
            \def\@smflanguage{\smf@silentselectlanguage{french}}%
            \def\@smfaltlanguage{\smf@silentselectlanguage{english}}%
    \else
            \def\@smflanguage{\smf@silentselectlanguage{english}}%
            \def\@smfaltlanguage{\smf@silentselectlanguage{french}}%
    \fi
 \fi }
\def\smf@silentselectlanguage#1{%
  \def\smf@tmp{}%
  \expandafter\ifx\csname date#1\endcsname\relax\else
   \def\smf@tmp{\selectlanguage{#1}}\fi\smf@tmp}
%    \end{macrocode}
% \subsection{Guillemets fran\c cais}
% {\LaTeXe} a des macros pr\'evues pour tout cela qui sont
% parfaits lorsque l'{\em encoding} des caract\`eres est {\tt T1},
% il est peut-\^etre utile de les red\'efinir pour qu'ils soient bien quand
% l'auteur n'a pas tap\'e |\usepackage{T1}{fontenc}|.
%    \begin{macrocode}
\ProvideTextCommandDefault{\guillemotleft}%
  {\leavevmode\hbox{\fontencoding{U}\fontfamily{lasy}%
                    \fontseries{m}\fontshape{n}\selectfont
    (\kern-0.20em(\kern+0.20em}\nobreak}
\ProvideTextCommandDefault{\guillemotright}%
  {\nobreak\leavevmode
   \hbox{\fontencoding{U}\fontfamily{lasy}%
         \fontseries{m}\fontshape{n}\selectfont
   \kern+0.20em)\kern-0.20em)}}
%    \end{macrocode}
% \subsection{Espace ins\'ecable, tiret}
% Je ne sais plus d'o\`u viennent ces deux lignes. Le point-trait est
% introduit pour \'eviter les incoh\'erences.
%    \begin{macrocode}
\def\nonbreakingspace{\unskip\nobreak\ \ignorespaces}
\def~{\protect\nonbreakingspace}
%    \end{macrocode}
% Les titres de sections qui sont imm\'ediatement suivies du texte sont
% affubli\'es d'un point--trait, conform\'ement \`a certains usages en
% typographie fran\c caise. Seulement, il faut pouvoir le supprimer lorsque
% le texte qui suit va tout de m\^eme \`a la ligne (c'est par exemple le
% cas si le paragraphe d\'ebute par une liste). La commande
% |\skippointrait| supprime l'affichage du prochain point--trait.
%    \begin{macrocode}
\newif\ifsmf@skippt \smf@skipptfalse
\def\skippointrait{\global\smf@skippttrue}
\DeclareRobustCommand{\@pointrait}{%
   \unskip
   \ifnum\spacefactor>\@m \hskip1ex\hbox{---}\else
        {\upshape.\hskip 1ex\hbox{---}}\fi}
\DeclareRobustCommand{\MakePointrait}{%
    \ifsmf@skippt\global\smf@skipptfalse \else\nobreak\@pointrait\fi}
\let\pointrait\MakePointrait
%    \end{macrocode}
% \subsection{Divers}
%    \begin{macrocode}
\def\fullwidthdisplay{\displayindent\z@ \displaywidth\columnwidth}
\edef\@tempa{\noexpand\fullwidthdisplay\the\everydisplay}
\everydisplay\expandafter{\@tempa}
\newcommand\see[2]{{\em \seename\/} #1}%
%    \end{macrocode}
% Pour que \emph{hyperref} fonctionne, on charge \emph{smfhyperref.sty}
% au |\begin{document}|.
%    \begin{macrocode}
\AtBeginDocument{%
  \csname @ifpackageloaded\endcsname{hyperref}{\RequirePackage{smfhyperref}}{}}
%    \end{macrocode}
% \section{Initialisation}
%    \begin{macrocode}
\calclayout % initialize
\pagenumbering{arabic}
\pagestyle{headings}
\thispagestyle{plain}
%    \end{macrocode}
% La variable |\emergencystretch| est initialis\'ee \`a \texttt{2em} pour
% \'eviter des \emph{Overfull hbox}es trop fr\'equentes.
%    \begin{macrocode}
\emergencystretch 2em
%</article|book>
%    \end{macrocode}
% \section{Pour qu'\texttt{hyperref} fonctionne}
%<*hyperref>
%   \begin{macrocode}
\ProvidesPackage{smfhyperref}[2021/04/18 v1.6
  Adaptations pour faire cohabiter hyperref et les classes smf]
%    \end{macrocode}
% Redéfinition des macros d'index.
%    \begin{macrocode}
\def\@@wrindex#1|#2|#3\\{%
    \ifx\\#2\\%
        \protected@write\@indexfile{}{%
          \string\indexentry{#1}{\thepage}%
        }%
    \else
        \def\Hy@temp@A{#2}%
        \ifx\Hy@temp@A\HyInd@ParenLeft
          \protected@write\@indexfile{}{%
             \string\indexentry{#1|#2}{\thepage}%
          }%
        \else
          \protected@write\@indexfile{}{%
            \string\indexentry{#1|#2}{\thepage}%
          }%
        \fi
      \fi
      \endgroup
      \@esphack
    }%
%    \end{macrocode}
% Redéfinition des macros de bibliographie.
%    \begin{macrocode}
\ltx@IfUndefined{NAT@parse}{%
  \def\@lbibitem[#1]#2{%
    \@skiphyperreftrue
    \H@item[%
      \ifx\Hy@raisedlink\@empty
        \hyper@anchorstart{cite.#2\@extra@b@citeb}%
          \@BIBLABEL{#1}%
        \hyper@anchorend
      \else
        \Hy@raisedlink{%
          \hyper@anchorstart{cite.#2\@extra@b@citeb}\hyper@anchorend
        }%
        \@BIBLABEL{#1}%
      \fi
      \hfill
    ]%
    \settowidth\smf@tempwidthb{\@biblabel{#1}}%
    \ifdim\smf@tempwidthb>\smf@tempwidtha
          \global\smf@tempwidtha=\smf@tempwidthb
    \fi
    \@skiphyperreffalse
    \if@filesw
      \begingroup
        \let\protect\noexpand
        \immediate\write\@auxout{%
          \string\bibcite{#2}{#1}%
        }%
      \endgroup
    \fi
    \ignorespaces
  }%
  \def\@bibitem#1{%
    \@skiphyperreftrue\H@item\@skiphyperreffalse
    \Hy@raisedlink{%
      \hyper@anchorstart{cite.#1\@extra@b@citeb}\relax\hyper@anchorend
    }%
    \if@filesw
      \begingroup
        \let\protect\noexpand
        \immediate\write\@auxout{%
          \string\bibcite{#1}{\the\value{\@listctr}}%
        }%
     \endgroup
    \fi
    \settowidth\smf@tempwidthb{\@biblabel{\theenumiv}}%
    \ifdim\smf@tempwidthb>\smf@tempwidtha
           \global\smf@tempwidtha=\smf@tempwidthb
    \fi
    \ignorespaces
  }%
}{}
%    \end{macrocode}
%</hyperref>
% \section{Package de th\'eor\`emes}
%    \begin{macrocode}
%<*smfthm>
\ProvidesPackage{smfthm}[1999/03/05 v1.0.h
  Environnements predefinis de theoremes]
%    \end{macrocode}
% \subsection{Options laiss\'ees au choix de l'utilisateur}
% Ici se pose un probl\`eme~: il faut arbitrer entre la libert\'e de
% l'auteur
% et l'uniformit\'e du style. Dans un recueil d'articles, il faudra
% permettre
% de changer d'options d'un article \`a l'autre, c'est pourquoi ce choix
% est constitu\'e d'une option par d\'efaut et de macros qui permettent de
% changer l'apparence --- malheureusement en cours de texte,
% mais il ne faut pas le dire --- au choix de l'auteur. \'Eventuellement,
% de nouvelles options pourraient \^etre rajout\'ees plus tard au fur et
% \`a
% mesure de l'apparition des besoins, si bien que de
% nombreuses solutions devraient \^etre possibles.
% Dans tous les cas, pour plus de lisibilit\'e,
% il me semble que tous les \'enonc\'es doivent \^etre num\'erot\'es
% \`a la suite (Th\'eor\`eme 1~; Lemme 2; % Proposition 3; Lemme 4).
% Il y a plusieurs options, qui doivent \^etre entr\'ees \emph{avant} le
% |\begin{document}|.
% \begin{itemize}
% \item
% |\NumberTheoremsIn{|\meta{nom de compteur}|}| \par
% on peut pr\'eciser le niveau de profondeur
% auquel les num\'eros d'\'enonc\'es sont remis \`a z\'ero
% (|section| me para\^it le mieux)
% \item
% |\NumberTheoremsAs{|\meta{nom de compteur}|}|\par
% on utilise un d\'ecoupage en paragraphes, dont les th\'eor\`emes sont des
% cas
% particuliers (|paragraph| me para\^it le plus adapt\'e dans ce cas).
% \item
% |\SwapTheoremNumbers|\par
% on met le num\'ero avant le type d'\'enonc\'e,
% comme dans \og 1.~Th\'eor\`eme\fg ;
% \item
% |\NoSwapTheoremNumbers|\par
% on met le type d'\'enonc\'e avant son num\'ero, exemple~: \og
% Th\'eor\`eme\fg.
% \end{itemize}
% En standard, je propose\par
% |\NumberTheoremsIn{section}\NoSwapTheoremNumbers|.
%    \begin{macrocode}
\newif\ifsmf@thmsin\smf@thmsintrue
\def\NumberTheoremsIn#1{\@ifempty{#1}%
     {\smf@thmsinfalse}%
     {\@ifundefined{c@#1}{\@nocounterr{#1}}%
       {\smf@thmsintrue\def\@NumberTheorems{#1}}}}
  \NumberTheoremsIn{section}
\def\NumberTheoremsAs#1{\@ifempty{#1}%
     {\smf@thmsintrue}%
     {\@ifundefined{c@#1}{\@nocounterr{#1}}%
       {\smf@thmsinfalse\def\@NumberTheorems{#1}}}}
  \NumberTheoremsAs{}
\def\SwapTheoremNumbers{\def\thm@swap{S}}
\def\NoSwapTheoremNumbers{\def\thm@swap{N}}
  \NoSwapTheoremNumbers
%    \end{macrocode}
% \subsection{D\'efinition de th\'eor\`emes}
% L\`a sont d\'efinies d\'efinitions, th\'eor\`emes, corollaires, etc. Il
% n'y a qu'un seul compteur (\texttt{defi}),
% tout est donc num\'erot\'e \`a la suite, ce qui pourrait \^etre
% modifi\'e.
%    \begin{macrocode}
\def\smf@thmdefs{%
  \theoremstyle{plain}
  \ifsmf@thmsin
%   \ClassInfo{Theoremes numerotes dans les \@NumberTheorems}
    \newcounter{smfthm}[\@NumberTheorems]
    \xdef\thesmfthm
        {\expandafter\noexpand\csname the\@NumberTheorems\endcsname
        .\noexpand\arabic{smfthm}}%
    \gdef\smf@thm{smfthm}
  \else
%   \ClassInfo{Theoremes numerotes comme les \@NumberTheorems}
    \xdef\smf@thm{\@NumberTheorems}
  \fi
  \newtheorem{theo}[\smf@thm]{\theoname}%
  \newtheorem{prop}[\smf@thm]{\propname}%
  \newtheorem{conj}[\smf@thm]{\conjname}%
  \newtheorem{coro}[\smf@thm]{\coroname}%
  \newtheorem{lemm}[\smf@thm]{\lemmname}%
%
  \theoremstyle{definition}%
  \newtheorem{defi}[\smf@thm]{\definame}%
%
  \theoremstyle{remark}%
  \newtheorem{rema}[\smf@thm]{\remaname}%
  \newtheorem{exem}[\smf@thm]{\exemname}%
  \theoremstyle{plain}}
%    \end{macrocode}
% \subsection{Th\'eor\`eme g\'en\'erique}
% L'environnement \texttt{enonce} permet un th\'eor\`eme g\'en\'erique dont
% le nom change \`a la demande, par exemple~:\par
% |\begin{enonce}{Formulaire}| \meta\dots |\end{enonce}|\par
% \noindent provoque l'affichage d'un `Formulaire', num\'erot\'e comme il
% se doit.
% L'environnement \texttt{enonce*} est le pendant de l'environnement
% \texttt{enonce}, mais sans num\'erotation.
%    \begin{macrocode}
\def\smf@enoncedef{%
 \newenvironment{enonce}[2][plain]%
    {\let\smfenonce\relax \theoremstyle{##1}%
     \newtheorem{smfenonce}[\smf@thm]{##2}%
     \begin{smfenonce}}%
    {\end{smfenonce}}%
 \newenvironment{enonce*}[2][plain]%
    {\let\smfenonce\relax \theoremstyle{##1}%
     \newtheorem*{smfenonce}{##2}%
     \begin{smfenonce}}%
    {\end{smfenonce}}%
}
%    \end{macrocode}
% \subsection{Mise en place des th\'eor\`emes}
% Lors du |\begin{document}|, on met tout en place, suivant les options
% choisies.
%    \begin{macrocode}
\AtBeginDocument{%
     \smf@thmdefs\smf@enoncedef}
%</smfthm>
%    \end{macrocode}
% \section{Am\'elioration des param\`etres de listes}
% Ce package est pour l'instant \`a part. \`A terme, j'esp\`ere l'inclure
% totalement dans \texttt{smfart} et \texttt{smfbook}.
%
%    \begin{macrocode}
%<*smfenum>
\ProvidesPackage{smfenum}[2002/02/07 v1.2b
  Nouvelle version des parametres d'enumerations]
%    \end{macrocode}
% Il faut pour l'instant charger \paquet{smfenum} AVANT \paquet{babel}.
%    \begin{macrocode}
\ifx\captionsfrenchb\@undefined\else
  \PackageError{smfenum}
       {Il vaut mieux charger smfenum avant la langue frenchb de babel!}
\fi
\def\enumerate{\ifnum \@enumdepth >3 \@toodeep\else
      \advance\@enumdepth \@ne
      \edef\@enumctr{enum\romannumeral\the\@enumdepth}\list
      {\csname label\@enumctr\endcsname}{\usecounter
        {\@enumctr}\def\makelabel##1{{\upshape##1}}}\fi}

\def\itemize{%
  \ifnum \@itemdepth >\thr@@\@toodeep\else
    \advance\@itemdepth\@ne
    \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
    \expandafter
    \list
      \csname\@itemitem\endcsname
      {\def\makelabel##1{{\upshape ##1}}}%
  \fi}

\def\quote{\list{}%
      {\advance\leftmargin2\normalparindent
       \rightmargin\leftmargin
         \labelwidth\z@
         \itemindent\z@}%
 \item[]}

\def\@genlists{%
  \itemsep\z@skip
  \partopsep\z@skip
  \topsep\z@skip
  \parsep\z@skip
  \labelwidth-\labelsep
  \listparindent\normalparindent
  \itemindent\normalparindent}

\def\@listi  {\@genlists \leftmargin\leftmargini   \topsep\listisep}
\let\@listI\@listi
\def\@listii {\@genlists \leftmargin\leftmarginii  \topsep\listiisep}
\def\@listiii{\@genlists \leftmargin\leftmarginiii \topsep\listiiisep}
\def\@listiv {\@genlists \leftmargin\leftmarginiv  \topsep\listivsep}
\def\@listv  {\@genlists \leftmargin\leftmarginv   \topsep\listvsep}
\def\@listvi {\@genlists \leftmargin\leftmarginvi  \topsep\listvisep}

\def\labelitemi{--}
\def\labelenumi{(\theenumi)}
\def\theenumi{\@arabic\c@enumi}
\expandafter\ifx\csname listisep\endcsname\relax
  \newskip\listisep
\fi
\listisep \smallskipamount

\let\labelitemii\labelitemi
\def\p@enumii{\theenumi}
\def\labelenumii{(\theenumii)}
\def\theenumii{\@alph\c@enumii}
\newdimen\listiisep
\listiisep \smallskipamount

\let\labelitemiii\labelitemi
\def\labelenumiii{(\theenumiii)}
\def\theenumiii{\@roman\c@enumiii}
\def\p@enumiii{\theenumi(\theenumii)}
\newdimen\listiiisep
\listiiisep \smallskipamount

\let\labelitemiv\labelitemi
\def\labelenumiv{(\theenumiv)}
\def\theenumiv{\@Alph\c@enumiv}
\def\p@enumiv{\p@enumiii\theenumiii}
\newdimen\listivsep
\listivsep \smallskipamount

\AtBeginDocument{%
\labelsep=1ex
\leftmargini 0pt
\leftmarginii 2\normalparindent
\leftmarginiii 4\normalparindent
\leftmarginiv 6\normalparindent
\leftmarginv 8\normalparindent
\leftmarginvi 10\normalparindent
\leftmargin=\leftmargini
\@listi}
%    \end{macrocode}
% Pour d\'esamorcer la gestion des espacements des listes dans Babel.
%    \begin{macrocode}
\AtBeginDocument{%
 \csname FrenchItemizeSpacingfalse\endcsname
 \csname FrenchListSpacingfalse\endcsname
}
%</smfenum>
%    \end{macrocode}
% \section{Packages suppl\'ementaires pour chaque revue}
% Ces packages sont priv\'es (c'est-\`a-dire ne seront pas
% diffus\'es) et permettent d'adapter la pr\'esentation de chaque
% revue, sur la base des styles \texttt{smfbook} et \texttt{smfart}.
% \subsection{Parties communes}
%    \begin{macrocode}
%<*smfgen>
\ProvidesPackage{smfgen}[2012/10/03 v1.9b
  Fichier additionnel pour les Publications de la SMF]
%    \end{macrocode}
% Un certain nombre de packages doivent \^etre charg\'es syst\'ematiquement
% (babel, amssymb, amscd et XY).  Tant pis pour l'efficacit\'e.
% On met une option \texttt{nopackage} pour que
% ceux-ci ne soient pas charg\'es .
%    \begin{macrocode}
  \newif\ifsmf@nopackage
  \DeclareOption{nopackage}{\smf@nopackagetrue}
%    \end{macrocode}
% Viennent ensuite quelques options concernant le contr\^ole de polices.
% Avec l'option \texttt{ec}, les polices EC sont charg\'ees.
% Avec l'option \texttt{ae}, on charge le package \texttt{ae.sty} en
% prenant en outre les guillemets dans la police \textit{Times}.
% Enfin, l'option \texttt{mltex} utilise un moteur Ml\TeX.
%    \begin{macrocode}
\newif\ifsmf@ec
\newif\ifsmf@ae
\newif\ifsmf@bask
  \DeclareOption{ec}{\smf@ectrue\smf@aefalse}
  \DeclareOption{mltex}{\smf@ecfalse\smf@aefalse}
  \DeclareOption{ae}{\smf@ecfalse\smf@aetrue}
  \DeclareOption{bask}{\smf@ecfalse\smf@aefalse\smf@basktrue}
\newif\ifsmf@upitparen
  \DeclareOption{upitparen}{\smf@upitparentrue}
  \DeclareOption{noupitparen}{\smf@upitparenfalse}
\newif\ifsmf@xy
  \DeclareOption{xy}{\smf@xytrue}
  \DeclareOption{noxy}{\smf@xyfalse}
%    \end{macrocode}
%    \begin{macrocode}
  \DeclareOption{euro}{\def\@FrenchCurrency{\texteuro}}
  \DeclareOption{FF}{\def\@FrenchCurrency{FF}}
%    \end{macrocode}
% Maintenant, on ex\'ecute les options. Par d\'efaut, on choisit l'option
% \texttt{ae} afin de pouvoir faire des PDF corrects. \`A terme, il
% faudrait peut-\^etre se payer les polices EM. Il y aura aussi le passage en
% \texttt{smfbask} \`a incorporer.
% Depuis le premier janvier 2002,  on paie en euros.
%    \begin{macrocode}
\ExecuteOptions{ae,xy,euro,noupitparen}
\ProcessOptions\relax
%    \end{macrocode}
% Il y a l'option \texttt{nopackage} pour ne rien faire de ce qui suit.
%    \begin{macrocode}
\ifsmf@nopackage\else
%    \end{macrocode}
% Avec l'option \texttt{ec}, on charge juste \paquet{fontenc}, option
% \texttt{T1}. Cela appelle les polices EC (probl\`eme pour le PDF puisque
% ces polices ne sont pas en Type~1 --- s*@\#?! de bug d'Acrobat!).
%    \begin{macrocode}
  \ifsmf@ec\RequirePackage[T1]{fontenc}\else
%    \end{macrocode}
% Avec l'option \texttt{ae}, on charge le paquet du m\^eme nom et on met les
% guillemets en Times. (Pour les guillemets, il faut le faire au
% |\begin{document}|.)
%% \changes{v1.7b}{2001/10/10}{D\'efinition des guillemets retard\'ee au
%% begin document}
%    \begin{macrocode}
  \ifsmf@ae
      \RequirePackage{ae}
      \AtBeginDocument{%
	  \def\selectguillfont{\fontencoding{T1}\fontfamily{ptm}\selectfont}
	  \def\guillemotleft{{\selectguillfont\symbol{19}}}
	  \def\guillemotright{{\selectguillfont\symbol{20}}}}
  \else
%    \end{macrocode}
% Option \texttt{bask}: on charge \paquet{smfbask}. Mais il resterait sans
% doute des choses \`a arranger ici.
%    \begin{macrocode}
  \ifsmf@bask
      \RequirePackage{smfbask}
%    \end{macrocode}
% Plus rien \`a faire, sinon Ml\TeX...
%    \begin{macrocode}
  \else
      \PackageWarning{smfgen}{Requiring MlTeX...}
      \RequirePackage{mltex}
  \fi\fi\fi
%    \end{macrocode}
% Pour l'Euro, il y a deux solutions: soit la police d'Adobe (mod\`ele
% officiel par exemple), soit avec le paquetage \paquet{textcomp}, mais ce
% ne sera pas en Type~1 (\emph{refrain}...).
%    \begin{macrocode}
  \ifsmf@ec
    \RequirePackage{textcomp} % T1...
  \else
    \RequirePackage{europs}
    \let\texteuro\EURofc % Adobe, modele officiel de la CE
  \fi
%    \end{macrocode}
% presque \`a la fin, \paquet{babel} !
%    \begin{macrocode}
  \RequirePackage[english,frenchb]{babel}
%    \end{macrocode}
% Avec l'option \texttt{upitparen}, on fait en sorte que parenth\`eses et
% ponctuation haute soient syst\'ematiquement imprim\'ees en romain.
% Les macros de \paquet{upitparen} requi\`erent que \paquet{babel} soit
% charg\'e.
% Cela a une cons\'equence sur les |\catcode| et on doit y faire attention
% plus tard au chargement de~\paquet{xy}.
%    \begin{macrocode}
  \ifsmf@upitparen 
\declare@shorthand{french}{;}{%
    \ifhmode
      \ifdim\lastskip>\z@\unskip\penalty\@M\thinspace\else\FDP@thinspace\fi
    \fi
    \ifmmode\string;\else\textup{\string;}\fi}
\declare@shorthand{french}{!}{%
    \ifhmode
      \ifdim\lastskip>\z@\unskip\penalty\@M\thinspace\else\FDP@thinspace\fi
    \fi
    \ifmmode\string!\else\textup{\string!}\fi}
\declare@shorthand{french}{?}{%
    \ifhmode
      \ifdim\lastskip>\z@\unskip\penalty\@M\thinspace\else\FDP@thinspace\fi
    \fi
    \ifmmode\string?\else \textup{\string?}\fi}
\declare@shorthand{french}{:}{%
    \ifhmode
      \ifdim\lastskip>\z@\unskip\penalty\@M\Fcolonspace\else\FDP@colonspace\fi
    \fi
    \ifmmode\string:\else\textup{\string:}\fi}
\initiate@active@char{(}
\initiate@active@char{)}
\declare@shorthand{french}{(}{%
    \ifmmode\string(\else\textup{\string(}\penalty\@M\fi}
\declare@shorthand{french}{)}{%
    \ifmmode\string)\else\penalty\@M\textup{\string)}\fi}
\declare@shorthand{system}{(}{\string(}
\declare@shorthand{system}{)}{\string)}
\addto\extrasfrench{\bbl@activate{(}\bbl@activate{)}}
\addto\noextrasfrench{\bbl@deactivate{(}\bbl@deactivate{)}}
  \fi
%    \end{macrocode}
% On charge enfin plus ou moins automatiquement \paquet{xy}.
% Normalement, la red\'efinition de |\xymatrixcompile|  permet de compiler
% les matrices: \paquet{xy} est charg\'e avec tous les |\catcode| \`a~12,
% et ils y sont remis...
%    \begin{macrocode}
  \ifsmf@xy
  \makeatother
  \RequirePackage[all,ps,cmtip]{xy}\def\labelstyle{\textstyle}
  \makeatletter
  \let\old@xymatrixcompile\xymatrixcompile
  \xdef\xymatrixcompile{% 
   \catcode`!=12 \catcode`;=12 \catcode`:=12 \catcode`?=12
   \ifsmf@upitparen \catcode`)=12 \catcode`(=12\fi
   \noexpand \old@xymatrixcompile}
  \fi
%    \end{macrocode}
% On a aussi besoin des paquetage \paquet{url}, \paquet{xspace},
% \paquet{amssymb} et \paquet{amscd} (ces derniers pour des raisons
% obscures). L\`a encore, il faut faire gaffe aux |\catcode|s.
%    \begin{macrocode}
  \ifsmf@upitparen \catcode`)=13 \catcode`(=13 \fi
  \catcode`!=13 \catcode`;=13 \catcode`:=13 \catcode`?=13
  \RequirePackage{url,xspace}
  \RequirePackage{amssymb,amscd}
  \ifsmf@upitparen \catcode`)=12 \catcode`(=12 \fi
  \catcode`!=12 \catcode`;=12 \catcode`:=12 \catcode`?=12
%    \end{macrocode}
% Fin du chargement des divers paquetages...
%    \begin{macrocode}
\fi
%    \end{macrocode}
% Pour garder des traces des polices CM.
%    \begin{macrocode}
\def\smf@restorecmr{%
  \renewcommand{\rmdefault}{cmr}
  \renewcommand{\sfdefault}{cmss}
  \renewcommand{\ttdefault}{cmtt}}
%    \end{macrocode}
% Auteurs/\'editeurs
%    \begin{macrocode}
\newif\ifsmf@editor
\def\editor{\global\smf@editortrue\author}
%    \end{macrocode}
% Informations de la page de garde, comit\'e de r\'edaction, prix, num\'ero
% de t\'el\'ephone, etc.
%    \begin{macrocode}
\newif\ifsubventionCNRS\subventionCNRSfalse
\newif\ifsubventionMCC\subventionMCCfalse
\newif\ifsubventionCNRSMCC\subventionCNRSMCCfalse
\def\smf@year{}
\def\smfyear#1{\def\smf@year{#1}\year#1\relax}
\def\@setyear{\ifx\smf@year\@empty\number\year\else\smf@year\fi}
\def\comitedered#1{\def\@comitedered{#1}}
\let\@comitedered\@empty
\def\comitedir#1{\def\@comitedir{#1\unskip\ (dir.)}}
\let\@comitedir\@empty
\let\smf@commparitaire\@empty
\newif\ifEDP
\def\tarifAbo#1#2#3{%            %% Europe, Hors Europe (euros), Hors Europe ($)
  \def\@tarifAboEurope{#1}%
  \def\@tarifAboHors{#2}%
  \def\@tarifAboDolHors{#3}}
\let\@tarifAboEurope\@empty
\newif\ifsmf@tarifs
\def\tarifNum#1#2{%              %% Euro, $
  \smf@tarifstrue
  \def\@tarifNum{#1}%
  \def\@tarifNumDol{#2}}
\let\@tarifNum\@empty
\let\@tarifNumDol\@empty
\def\secretariatSMF#1{\def\@secretariatSMF{#1}}
\let\@secretariatSMF\@empty
\def\telSMF#1{\def\@telSMF{#1}}
\let\@telSMF\@empty
\def\emailSMF#1{\def\@emailSMF{#1}}
\let\@emailSMF\@empty
\def\ISBN#1{\def\@isbn{#1}}
\let\@isbn\@empty
\def\ISSN#1{\def\@issn{#1}}
\let\@issn\@empty
\def\smf@Directeur{Directeur\xspace}
%    \end{macrocode}
% Logos, commandes de volumes, etc.
%    \begin{macrocode}
\def\smf@logo{Soci\'et\'e Math\'ematique de France}
\def\smf@LOGO{SOCI\'ET\'E MATH\'EMATIQUE DE FRANCE}
\def\ps@copyright{\ps@empty
  \def\@oddfoot{\normalfont\Small\hfil {\smf@copyright}}}
\def\smfvolume#1{\gdef\smf@volume{#1}}
\def\smffascicule#1{\gdef\smf@fascicule{#1}}
\def\smffirstpage#1{\gdef\smf@firstpage{#1}}
\def\smflastpage#1{\gdef\smf@lastpage{#1}}
\def\smf@volume{}
\def\smf@fascicule{}
\def\smf@firstpage{}
\def\smf@lastpage{}
\def\smf@journalhead{{\normalfont\itshape \smf@titrecourt\/}\\
 \ifx\smf@volume\@empty \else {\bfseries\smf@volume}\unskip \fi
 \ifx\smf@fascicule\@empty \else {\ (\smf@fascicule\unskip)}\fi
 , \@setyear
 \ifx\smf@firstpage\@empty \else
 , p.\ \smf@firstpage --\smf@lastpage\fi}
%    \end{macrocode}
% Si la classe est \texttt{smfbook}, on modifie la page de titre et les
% hauts de pages en cons\'equence. On cr\'ee aussi une page de garde.
%    \begin{macrocode}
\def\@tempb{smfbook}
\ifx\@classname\@tempb
 \def\smf@frontpages{}
 \def\smf@pages{\ifx\smf@frontpages\@empty\else\smf@frontpages+\fi\smf@lastpage}
 \def\mainmatter{\cleardoublepage
   {\advance\c@page -1\xdef\smf@frontpages{\roman{page}}}%
   \setcounter{page}{1}\def\baselinestretch{1.1}\normalfont
   \pagenumbering{arabic}}
 \def\ps@headings{\ps@empty
  \def\@oddfoot{\normalfont\Tiny\hfil
     {\smf@LOGO\ \@setyear}}%
  \def\@evenfoot{\normalfont\tiny
     {\MakeUppercase\smf@titrecourt
      \ifx\smf@volume\@empty\else{\unskip\ \smf@volume}\fi\hfil}}%
  \def\@evenhead{\normalfont\scriptsize
     \rlap{\bfseries\thepage}\hfil \leftmark{}{}\hfil}%
  \def\@oddhead{\normalfont\scriptsize
     \hfil \rightmark{}{}\hfil \llap{\bfseries\thepage}}%
  \let\@mkboth\org@markboth
  \def\partmark    {\@secmark\markboth\partrunhead\partname}%
  \def\chaptermark {\@secmark\markboth\chapterrunhead\chaptername}%
  \def\sectionmark {\@secmark\markright\sectionrunhead\sectionname}%
  \def\indexmark   {\@secmark\markboth\indexrunhead\indexname}%
}
%    \end{macrocode}
% \subsubsection{R\'esum\'e court}
% A priori, il ne sert qu'\`a la derni\`ere page de couverture, et encore,
% dans le cas o\`u le r\'esum\'e principal est jug\'e trop long.
%
%    \begin{macrocode}
\def\@shortabstract{}
\def\@shortabstractlanguage{\@smflanguage}
\newenvironment{shortabstract}{%
  \begin{@genabstract}{shortabstract}%
}{}
%    \end{macrocode}
% La macro |\@setshortabstracthead| pr\'ecise comment composer l'ent\^ete du
% r\'esum\'e.
%    \begin{macrocode}
\def\@setshortabstracthead{}
%    \end{macrocode}
%    \begin{macrocode}
\def\@setshortabstract{%
  \ifx\@shortabstract\@empty\let\@shortabstract\@abstract\fi
  \ifx\@shortabstract\@empty
      \PackageWarning{smfgen}{An abstract is missing for the last page.}%
    \else
      \skippointrait
      \@setgenabstract{shortabstract}
  \fi
  \global\let\@setshortabstract\relax}
%    \end{macrocode}
% \subsubsection{R\'esum\'e court dans l'autre langue}
% Comme le pr\'ec\'edent, mais dans la langue secondaire du texte.
%    \begin{macrocode}
\def\@shortaltabstract{}
\def\@shortaltabstractlanguage{\@smfaltlanguage}
\newenvironment{shortaltabstract}{%
  \begin{@genabstract}{shortaltabstract}%
}{}
%    \end{macrocode}
% La macro |\@setshortaltabstracthead| pr\'ecise comment composer l'ent\^ete du
% r\'esum\'e.
%    \begin{macrocode}
\def\@setshortaltabstracthead{}
%    \end{macrocode}
%    \begin{macrocode}
\def\@setshortaltabstract{%
  \ifx\@shortaltabstract\@empty\let\@shortaltabstract\@altabstract\fi
  \ifx\@shortaltabstract\@empty
      \PackageWarning{smfgen}{An alt-abstract is missing for the last page.}%
    \else
      \skippointrait
      \@setgenabstract{shortaltabstract}
  \fi
  \global\let\@setshortaltabstract\relax}
%    \end{macrocode}
% Si l'option \texttt{draft} est utilis\'ee, on n'affiche pas les pages de
% couverture.
%    \begin{macrocode}
\if@draft\else
\def\AMS{$\mathcal{AMS}$}
\def\@maketitle{\cleardoublepage
  \begingroup
    \smf@restorecmr
     \parindent\z@
     \c@page-1
     \smf@gardei\smf@gardeii
     \smf@titlei \smf@titleii \@setdedicatory \smf@titleiii
     \cleardoublepage
  \endgroup}
%    \end{macrocode}
% Page exterieure de titre
%    \begin{macrocode}
\def\smf@gardei{\clearpage\thispagestyle{empty}\bgroup
  \vspace*{-2cm}\enlargethispage{2cm}
  \topskip\z@skip
  \begin{raggedleft}
  \bfseries
  \ifsmf@editor{\Large \smfedbyname \par\medskip}\fi
  \huge
  \def\and{\par\medskip}\authors\par
  \end{raggedleft}
  \vfil
  \hrule height 1pt
  \vfil
  \begin{raggedright}
  \huge\bfseries\smf@boldmath
  \baselineskip=1.2\baselineskip
  \MakeUppercase\@title\par
  \vfil
  \hrule height 1pt
  \vfil
  {\large \MakeUppercase\smf@titre\nobreak
    \ifx\smf@volume\@empty\else{\unskip\ \smf@volume}\fi\par}%
  \end{raggedright}
  \vfil\vfil
  {\centering\large\bfseries \smf@logo\ \@setyear\par}
  \vfilneg\egroup}
%    \end{macrocode}
% Deuxi\`eme de couverture (adresses, ISBN, etc.)
%    \begin{macrocode}
\def\smf@gardeii{\clearpage\thispagestyle{empty}\bgroup
\vspace*{-2cm}\enlargethispage{2cm}
\sffamily
\multicolsep0pt
\ifx\smf@commparitaire\@empty\else
  {\hrule height1pt\vfil
   \leftskip .1\textwidth plus 1fil minus .1\textwidth
   \rightskip\leftskip\parfillskip0pt\relax
   \smf@commparitaire\par\vfil}
\fi
\hrule height 1pt\vfil
\begin{center}
  {\bfseries\itshape Comit\'e de r\'edaction}\\ \bigskip
   \begin{multicols}{2} \@comitedered \end{multicols}\par
   \@comitedir\par
  \vfil
  {\bfseries\itshape Diffusion}\par\bigskip
  \mbox {%
   \vbox{\hsize=\ifEDP.32\else.5\fi\textwidth
     Maison de la SMF \\ B.P. 67 \\ 13274 Marseille Cedex 9 \\ France \\
     \texttt{smf@smf.univ-mrs.fr}}
   \hss
   \vbox{\hsize=\ifEDP.28\else.5\fi\textwidth
     AMS \\ P.O. Box 6248 \\ Providence RI 02940 \\ USA \\
     \texttt{www.ams.org}}
   \ifEDP
   \hss
   \vbox{\hsize=.4\textwidth
     EDP Sciences\\ 17, avenue du Hoggar\\ 91944 les Ulis cedex A\\ France\\
     \texttt{www.edpsciences.com}}
   \fi }\\
  \vfil
  {\bfseries\itshape Tarifs \@setyear}\par\medskip
    {\itshape Vente au num\'ero :} \@tarifNum~\@FrenchCurrency\space
                 (\$\,\@tarifNumDol)\\
    \ifx\@tarifAboEurope\@empty\else
    {\itshape Abonnement}
      \quad Europe : \@tarifAboEurope~\@FrenchCurrency,
            hors Europe : \@tarifAboHors~\@FrenchCurrency\space
                  (\$\,\@tarifAboDolHors)\\\fi
    \smallskip
    Des conditions sp\'eciales sont accord\'ees aux membres de la SMF.\\
  \vfil
  {\bfseries\itshape Secr\'etariat
   \ifx\@secretariatSMF\@empty\else : \@secretariatSMF\fi} \\
   \smallskip
   \smf@titre  \\
   Soci\'et\'e Math\'ematique de France \\
   Institut Henri Poincar\'e, 11, rue Pierre et Marie Curie \\
   75231 Paris Cedex 05, France \\
   \begin{tabular}{ccc}
     T\'el : \@telSMF & $\bullet$& Fax : (33) 01 40 46 90 96\\
     \texttt{\@emailSMF}& $\bullet$&\url{http://smf.emath.fr/}
  \end{tabular}
  \vfil
  {\itshape
   {\normalfont\copyright}\ \smf@logo\ \@setyear}\\
\end{center}
\medskip
{\itshape\footnotesize\noindent
   Tous droits r\'eserv\'es (article L~122--4 du Code de la propri\'et\'e
   intellectuelle). Toute repr\'esentation ou reproduction int\'egrale ou
   partielle faite sans le consentement de l'\'editeur est illicite.
   Cette repr\'esentation ou reproduction par quelque proc\'ed\'e que ce soit
   constituerait une contrefa\c con sanctionn\'ee par les articles L~335--2
   et suivants du CPI. \par}
\vfil
\begin{center}
  \ifx\@issn\@empty\else ISSN \@issn \\ \medskip\fi
  \ifx\@isbn\@empty\else ISBN \@isbn \\ \fi
\vfil
  \smf@Directeur de la publication : \@dirpub\\
\end{center}
\vfil\hrule height 1pt
\vfilneg\egroup}
%    \end{macrocode}
% Page de titre int\'erieure
%    \begin{macrocode}
\def\smf@titlei{\clearpage\thispagestyle{empty}
\vspace*{-2cm}\enlargethispage{2cm}
\bgroup
\begin{center}\bfseries\smf@boldmath
  {\Large \MakeUppercase\smf@titre\nobreak\ \smf@volume\par}
  \vfil\vfil
  {\huge\MakeUppercase\@title\par}
  \vfil
  \ifsmf@editor{\large \smfedbyname\par\medskip}\fi
  \def\and{\par\medskip}\centering
  {\LARGE\authors\par}
  \vfil\vfil
  {\Large \smf@logo\ \@setyear\par}
  \ifsubventionCNRS
     \smallskip{\small
      Publi\'e avec le concours du Centre National
      de la Recherche Scientifique\par}\fi
  \ifsubventionMCC
     \smallskip{\small
     Publi\'e avec le concours du Minist\`ere de la
     Culture et de la Communication\par}\fi
  \ifsubventionCNRSMCC
     \smallskip{\small
     Publi\'e avec le concours du Centre National
     de la Recherche Scientifique\\
     et du Minist\`ere de la Culture et de
     la Communication\par}\fi
\end{center}
\vfilneg
\egroup}
\def\smf@titleiii{\clearpage\thispagestyle{copyright}
  \markboth{\@nx\shortauthors}{\@nx\shorttitle}
  %% INSERER UNE IMAGE
  \null
  \vskip 12\medskipamount plus 8\medskipamount
  \begin{center}\Large\bfseries\smf@boldmath
  {\MakeUppercase\@title\par}
  \vskip 4\medskipamount plus 2\medskipamount
  \ifsmf@editor{\smfedbyname\ }\fi
  \def\and{,\ \penalty-1}\authors\par
  \end{center}
  \vskip 8\medskipamount plus 4 \medskipamount
  \@setabstract\par
  \vskip 1\medskipamount plus 1\medskipamount
     \penalty-100
  \@setaltabstract\par
}
%    \end{macrocode}
% Troisi\`eme de courverture, instructions aux auteurs.
%    \begin{macrocode}
\def\smf@gardeiii{%
  \thispagestyle{empty}\bgroup
  \vspace*{-2cm}\enlargethispage{2cm}
  \smf@restorecmr
  \sffamily\footnotesize
  \columnseprule.4pt\multicolsep\z@
  \hrule height 1pt\vfil
  {\centering\itshape\bfseries Instructions aux auteurs\par}
  \bigskip
  \begin{multicols}{2}
  \selectlanguage{french}
  \texteplaquettefrancais\par \medskip
  \instructionsfrancais\par
  \end{multicols}
  \vfil\hrule\vfil
  {\centering \itshape\bfseries Instructions to Authors\par}
  \bigskip
  \begin{multicols}{2}
  \selectlanguage{english}
  \texteplaquetteenglish \par\medskip
  \instructionsenglish\par
  \end{multicols}
  \vfil\hrule height 1pt\vfilneg\egroup}
%    \end{macrocode}
% Quatri\`eme de couverture, r\'esum\'es (\'eventuellement raccourcis).
%    \begin{macrocode}
\def\smf@gardeiv{\clearpage\thispagestyle{empty}\bgroup\large
  \smf@restorecmr
  \mbox{}\vfil
  \@setshortabstract
  \bigskip
  \@setshortaltabstract
  \vfil\egroup}
%    \end{macrocode}
%  \DescribeMacro{\specialaddress}
%  \DescribeMacro{\specialaddresses}
%  \DescribeMacro{\@setspecialaddresses}
% Pour \emph{Documents} et \emph{Cours Sp\'ecialis\'es}, l'adresse est 
% mise en page diff\'eremment des autres s\'eries: sur la quatri\`eme de
% couverture. On utilise pour cela la macro |\specialaddress| qui contient
% tout le texte qu'on veut afficher, un par auteur en th\'eorie.
%    \begin{macrocode}
\let\specialaddresses\@empty      
\newcommand{\specialaddress}[2][]
   {\g@addto@macro\specialaddresses{\specialaddress{#1}{#2}}}
\def\@setspecialaddresses{\par\nobreak
  \begingroup
  \normalfont
  \def\author##1{\par\bigskip}%
  \long\def\address##1##2{\par
       \begin{quote}\itshape
       \ignorespaces##2\par\end{quote}}%
  \def\curraddr##1##2{}%
  \let\email\curraddr
  \let\urladdr\curraddr
  \addresses
  \endgroup
}
%    \end{macrocode}
% Macros g\'en\'eriques pour la liste des revues
%    \begin{macrocode}
\def\smf@curyear{0}
\def\smf@curvol{0}
\def\smf@printvol[#1/#2/#3]{#1#2}
\def\smflabel#1{%          %%%  exemple : {241/***}, ou {68}
  \setbox0=\hbox{\smf@printvol[#1//].\ }\leftskip=\wd0}
\def\smf@revue #1#2#3#4{%
%% {annee}{numero/etoiles}{auteur}{titre}
   \def\smf@newyear{#1}\def\smf@newvol{#2}%
   \ifx\smf@curyear\smf@newyear\else
        \smallskip \penalty -100
        {\centering {\bfseries #1\par\nobreak\smallskip\nobreak}}
   \fi
   \ifx\smf@curvol\smf@newvol\else
       \leavevmode\llap{\smf@printvol [#2//].\ }\fi
   \@ifempty{#3}{#4}{#3~--\ {\itshape #4}}
   \par\nobreak
   \def\smf@curyear{#1}\def\smf@curvol{#2}}
\def\smf@liste{}
\def\smf@pubfinale{}
%    \end{macrocode}
% Ce qu'il faut pour qu'\`a la fin, on ait les listes, etc.
%    \begin{macrocode}
\def\smf@endbook{\smf@restorecmr
  \clearpage
  {\advance\c@page -1\xdef\smf@lastpage{\thepage}}%
  \cleardoublepage \c@page 997
        \smf@liste
  \cleardoublepage \c@page 999
        \smf@pubfinale
  \cleardoublepage \c@page 1001
        \smf@gardeiii \smf@gardeiv}
\AtEndDocument{\smf@endbook}
%    \end{macrocode}
% Le texte des instructions.
%    \begin{macrocode}
\def\smf@combien{double}\def\smf@howmany{Two}
\def\instructionsfrancais{%
Le manuscrit doit \^etre envoy\'e en {\itshape \smf@combien} exemplaire au
secr\'etariat des publications en pr\'ecisant le nom de la revue.

Le fichier \emph{source} \TeX\ (un seul fichier par article ou
monographie) peut aussi \^etre envoy\'e par courrier \'electronique ou
ftp, \emph{sous r\'eserve} que sa compilation par le secr\'etariat SMF
soit possible. Contacter le secr\'etariat \`a l'adresse \'electronique
\texttt{\@emailSMF} pour obtenir des pr\'ecisions.

La SMF recommande \emph{vivement} l'utilisation d'\AMS-\LaTeX\ avec les
classes \texttt{smfart} ou \texttt{smfbook}, disponibles ainsi que leur
documentation sur le serveur \url{http://smf.emath.fr/} ou sur demande au
secr\'etariat des publications SMF.

Les fichiers \AMS-\LaTeX\ au format \texttt{amsart} ou \texttt{amsbook},
ainsi que les fichiers \LaTeX\ au format \texttt{article} ou
\texttt{book} sont aussi les bienvenus. Ils seront saisis suivant
les normes suivantes:
\begin{itemize}
\item taille des caract\`eres \'egale \`a 10~points (option \texttt{10pt});
\item largeur du texte (\texttt{textwidth}) de 13~cm;
\item hauteur du texte (\texttt{textheight}) \'egale \`a 21.5~cm;
\item le texte \'etant en outre centr\'e sur une feuille A4
(option \texttt{a4paper}).
\end{itemize}

Les autres formats \TeX\ et les autres types de traitement de texte
ne sont pas utilisables par le secr\'etariat et sont \emph{fortement}
d\'econseill\'es.

Avant de saisir leur texte, les auteurs sont invit\'es \`a prendre
connaissance du document \emph{Recommandations aux auteurs\/} disponible
au secr\'etariat des publications de la SMF ou sur le serveur de la SMF.}

\def\instructionsenglish{%
{\itshape \smf@howmany} copies of the original ma\-nu\-script
should be sent to the
editorial board of the SMF, indicating to which publication the paper is
being submitted.

The \TeX\ \emph{source} file (a single file for each article or monograph)
may also be sent by electronic mail or ftp, in a format suitable for
typsesetting by the secretary.
Please, send an email to \texttt{\@emailSMF} for precise information.

The SMF has a \emph{strong} preference for \AMS-\LaTeX\ together with
the documentclasses \texttt{smfart} or \texttt{smfbook}, available with
their user's guide at \url{http://smf.emath.fr/} (Internet) or on request
from the editorial board of the SMF.

The \AMS-\LaTeX\ files using the documentclasses \texttt{amsart} or
\texttt{amsbook}, or the \LaTeX\ files using the documentclasses
\texttt{article} or \texttt {book} are also encouraged.
They will be prepared  following the rules below:
\begin{itemize}
\item font size equal to 10~points (\texttt{10pt} option);
\item text width (\texttt{textwidth}): 13~cm;
\item text height (\texttt{textheight}): 21.5~cm;
\item the text being centered on a A4 page (\texttt{a4paper} option).
\end{itemize}

Files prepared with other \TeX\ dialects or other word processors cannot be
used by the editorial board and are \emph{not} encouraged.

Before preparing their electronic manuscript, the authors should read the
\emph{Advice to authors\/}, available on request from the
editorial board of the SMF or from the  web site of the SMF.}
\fi
\else
%    \end{macrocode}
% Et sinon, c'est que la classe est \texttt{smfart}\dots
%    \begin{macrocode}
\def\@tempb{smfart}\ifx\@classname\@tempb
\def\ps@headings{\ps@empty
  \def\@oddfoot{\normalfont\Tiny\hfil
     {\smf@LOGO\ {\@setyear}}}%
  \def\@evenfoot{\normalfont\tiny
     {\MakeUppercase\smf@titrecourt
      \ifx\smf@volume\@empty\else{\unskip\ \smf@volume}\fi\hfil}}%
  \def\@evenhead{\normalfont\scriptsize
     \rlap{\bfseries\thepage}\hfil \leftmark{}{}\hfil}%
  \def\@oddhead{\normalfont\scriptsize
     \hfil \rightmark{}{}\hfil \llap{\bfseries\thepage}}%
  \let\@mkboth\@gobbletwo}
\AtBeginDocument{\smf@getfirstpage}
\AtEndDocument{\smf@getlastpage}
\def\smf@getfirstpage{\gdef\smf@firstpage{1}}
\def\smf@getlastpage{\clearpage
  {\advance\c@page-1 \xdef\smf@lastpage{\arabic{page}}}}
\def\smf@pages{\smf@firstpage-\smf@lastpage}
\fi\fi
\ps@headings
%    \end{macrocode}
% Le gras italique est pris dans la police times.
%    \begin{macrocode}
\def\th@plain{%
  \let\thm@indent\noindent
  \thm@headfont{\fontfamily{ptm}\bfseries\itshape}%
  \thm@notefont{\fontfamily{ptm}\bfseries\upshape}%
  \thm@preskip.5\linespacing \@plus .5\linespacing
  \thm@postskip\thm@preskip
  \thm@headpunct{\MakePointrait}
  \let\thmheadnl\relax
  \itshape }
\def\abstractheadfont{\fontfamily{ptm}\bfseries\itshape}
%    \end{macrocode}
% \subsection{Table des mati\`eres et c\'esures}
% \DescribeMacro{\emergencyhyphenate}
%    \begin{macrocode}
\def\@savehyphenpenalty{\xdef\@tmphyphpenalty{\the\hyphenpenalty}}
\def\@restorehyphenpenalty{%
  \expandafter\expandafter\global\expandafter\hyphenpenalty\@tmphyphpenalty}
\DeclareRobustCommand{\emergencyhyphenate}{\global\hyphenpenalty9999\relax}
\def\@tocline#1#2#3#4#5#6#7{\relax
  \@savehyphenpenalty
  \ifnum #1>\c@tocdepth % then omit
  \else
    \par \addpenalty\@secpenalty\addvspace{#2}%
    \begingroup \hyphenpenalty\tochyphenpenalty
    \@ifempty{#4}{%
      \@tempdima\csname r@tocindent\number#1\endcsname\relax
    }{%
      \@tempdima#4\relax
    }%
    \parindent\z@ \leftskip#3\relax
      \advance\leftskip\@tempdima\relax
    \advance\rightskip\@pnumwidth % plus1em
    \parfillskip-\@pnumwidth
    {#5{\leavevmode\hskip-\@tempdima #6}}%
    \hskip 1ex\nobreak
    \xleaders\hbox to1ex{\normalfont\hss.\hss}\hfil\nobreak
    \hbox to\@pnumwidth{\@tocpagenum{#7}}\par
    \nobreak
    \endgroup
  \fi
  \@restorehyphenpenalty}
% \subsection{Indication de changements}
%    \begin{macrocode}
\def\smfmargin#1{\if@draft\marginpar{\ ? #1}\else\fi}
\def\smfchange#1#2{\if@draft{\boldmath\bfseries #1}\smfmargin{#2}\else {#1}\fi}
\def\smfredac#1#2{\smfmargin{R\'edaction de \og #1 \dots #2\fg}}
\def\smfok{\smfmargin{OK}}
%%\let\smfchangen\@firstoftwo
%%\let\smfchangeo\@secondoftwo
\def\smfchangen#1#2{#1}
\def\smfchangeo#1#2{#2}
%    \end{macrocode}
% \subsection{Macros diverses}
%    \begin{macrocode}
\let\ldots\dots
\let\emptyset\varnothing
\let\skpt\skippointrait
\let\dpl\displaystyle
\def\sfrac#1#2{{#1}/{#2}}
%    \end{macrocode}
% Pour que les arguments des |\bibitem| servent de labels.
%    \begin{macrocode}
\def\manualbibitems{%
  \let\oldbibitem\bibitem
  \def\bibitem##1{\oldbibitem[##1]{##1}}}
%    \end{macrocode}
% Pour que les arguments des |\bibitem| servent de labels.
%    \begin{macrocode}
\def\manualbibitems{%
  \let\oldbibitem\bibitem
  \def\bibitem##1{\oldbibitem[##1]{##1}}}
%    \end{macrocode}
% Finalement, on requiert \texttt{smfbib}.
%    \begin{macrocode}
  \RequirePackage{smfbib}
%</smfgen>
%    \end{macrocode}
% \subsection{Ast\'erisque}
%    \begin{macrocode}
%<*asterisque>
\ProvidesPackage{smfasterisque}[2001/01/05 v1.4
  Fichier additionnel pour Asterisque]
\RequirePackageWithOptions{smfgen}
\def\smf@plaintitre{asterisque}
\def\smf@titre {Ast\'erisque}
\let\smf@titrecourt\smf@titre
\def\smf@copyright{\copyright\ \smf@titre
  \ifx\smf@volume\@empty\else{\ \smf@volume\unskip}\fi
  , SMF\ \@setyear}
\def\smf@commparitaire{%
\smf@titre\ est un p\'eriodique
\mbox{de la Soci\'et\'e math\'ematique de France.} \par\medskip
Num\'ero~\smf@volume,
\ifcase\month\or janvier\or f\'evrier\or mars\or avril\or mai\or juin\or
juillet\or ao\^ut\or septembre\or octobre\or novembre\or
d\'ecembre\fi~\@setyear}

\RequirePackage[asterisque]{smfvar}

\secretariatSMF{Nathalie Christia\"en}
\telSMF{(33) 01 44 27 67 99}
\emailSMF{revues@smf.ens.fr}
\ISSN{0303-1179}
\EDPfalse
\subventionCNRStrue

\def\texteplaquettefrancais{%
Revue internationale de haut niveau, \textit{Ast\'erisque} publie
en fran\c cais et en anglais des monographies de qualit\'e, des
s\'eminaires prestigieux, ou des comptes-rendus de grands colloques
internationaux. Les textes sont choisis pour leur contenu original ou
pour la nouveaut\'e de la pr\'esentation qu'ils donnent d'un domaine
de recherche. Chaque volume est consacr\'e \`a un seul sujet, et tout
le spectre des math\'ematiques est en principe couvert.}
\def\texteplaquetteenglish{%
\textit{Ast\'erisque} is a high level international journal which publishes
excellent research monographs in French or in English, and proceedings of
prestigious seminars or of outstanding international meetings. The texts
are selected for the originality of their contents or the new presentation
they give of some area of research. Each volume is devoted to a single
topic, chosen, in principle, from the whole spectrum of mathematics.}

\def\smf@liste{\cleardoublepage \pagestyle{empty}\bgroup
  \parindent=0pt\sffamily \footnotesize
  \begin{center}\bfseries\uppercase{Ast\'erisque}\end{center}
  \medskip
  \pretolerance2000\tolerance4000
  \rightskip=0pt plus 10pt
  \let\aster\smf@revue
  \input asterisque.lst
  \par\egroup}

\def\smf@pubfinale{\cleardoublepage \pagestyle{empty}\bgroup
   \parindent=0pt
   \InputIfFileExists{pubfinale.tex}{}{}
   \par\egroup}

\def\smf@gardeiv{\clearpage\thispagestyle{empty}\bgroup
  \large\centering
  \smf@restorecmr
  \null \vfil
  \fboxsep 1cm
  \fbox{\begin{minipage}[t]{11cm}{\@setshortabstract}\end{minipage}}
%%  \vfil
%%  \fbox{\begin{minipage}[t]{11cm}{\@setshortaltabstract}\end{minipage}}
  \egroup}
%</asterisque>
%    \end{macrocode}
% \subsection{Bulletin de la SMF}
%    \begin{macrocode}
%<*bulletin>
\ProvidesPackage{smfbulletin}[2002/02/07 v1.6b
  Fichier additionnel pour le Bulletin de la SMF]
\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{smfgen}}
\DeclareOption{master}{\PassOptionsToPackage{master}{smfmulti}}
\DeclareOption{slave}{\PassOptionsToPackage{slave}{smfmulti}}
\ProcessOptions\relax
\RequirePackage{smfgen}
\RequirePackage{smfmulti}
  \ifsmf@slave
    \def\frontmatter{}\def\mainmatter{}\def\backmatter{}
  \else
    \setcounter{tocdepth}{0}
    \addto\smf@captionsfrench{\def\contentsname{Sommaire}}
  \fi
\def\smf@plaintitre{bulletin}
\def\smf@titre {Bulletin de la Soci\'et\'e math\'ematique de France}
\def\smf@titrecourt{Bull.\ Soc.\ math.\ France}
\def\smf@copyright{\copyright\ \smf@titre
  \ifx\smf@volume\@empty\else{\ \smf@volume\unskip}\fi,\ \@setyear}
\def\smf@commparitaire{%
\mbox{Le \smf@titre}\ est un p\'eriodique
trimestriel \mbox{de la Soci\'et\'e math\'ematique de France.} \par\medskip
Fascicule~\smf@fascicule, tome~\smf@volume,
\ifcase\month\or janvier\or f\'evrier\or mars\or avril\or mai\or juin\or
juillet\or ao\^ut\or septembre\or octobre\or novembre\or
d\'ecembre\fi~\@setyear}

\let\ps@copyright\ps@empty

\textheight 18cm
\textwidth 12cm
\addtolength{\oddsidemargin}{.5cm}
\addtolength{\evensidemargin}{.5cm}
\addtolength{\topmargin}{.5cm}
\headheight=10pt
\headsep 7mm
\footskip 7mm
\arraycolsep 1.5pt
\abstractmargin\normalparindent

\RequirePackage[bulletin]{smfvar}

\secretariatSMF{Nathalie Christia\"en et Raymond S\'eroul}
\telSMF{(33) 01 44 27 67 99}
\emailSMF{revues@smf.ens.fr}
\ISSN{0037-9484}
\EDPfalse
\subventionCNRStrue

\def\texteplaquettefrancais{%
Le Bulletin est un p\'eriodique \`a vocation internationale, couvrant
l'ensemble des math\'ematiques, comme en t\'emoignent le choix des articles
publi\'es en fran\c cais et en anglais, ainsi que la composition du
Comit\'e de r\'edaction. Par une politique scientifique rigoureuse, il
entend \^etre parmi les meilleures revues internationales, tout en
r\'eservant une large place aux travaux de jeunes chercheurs.}

\def\texteplaquetteenglish{The subjects treated by the \textit{Bulletin}
cover the whole of mathematics. The articles, written in French or English,
are submitted to an editor who is chosen from among the best international
specialists in the area. Articles submitted are original and the results
are thoroughly demonstrated.}

\def\instructionsfrancais{%
Le manuscrit doit \^etre envoy\'e en {\itshape \smf@combien} exemplaire au
secr\'etariat des publications en pr\'ecisant le nom de la revue.

Le fichier \emph{source} \TeX\ (un seul fichier par article) peut aussi
\^etre envoy\'e par courrier \'electronique ou
ftp, \emph{sous r\'eserve} que sa compilation par le secr\'etariat SMF
soit possible. Contacter le secr\'etariat \`a l'adresse \'electronique
\texttt{\@emailSMF} pour obtenir des pr\'ecisions.

La SMF recommande \emph{vivement} l'utilisation d'\AMS-\LaTeX\ avec sa
classe \texttt{smfart} et le paquet \texttt{bull.sty}, disponibles ainsi
que leur documentation sur le serveur \url{http://smf.emath.fr/} ou sur demande
au secr\'etariat des publications SMF.

Les fichiers \AMS-\LaTeX\ au format \texttt{amsart},
ainsi que les fichiers \LaTeX\ au format \texttt{article} sont aussi les
bienvenus. Ils seront saisis suivant
les normes suivantes:
\begin{itemize}
\item taille des caract\`eres \'egale \`a 10~points (option \texttt{10pt});
\item largeur du texte (\texttt{textwidth}) de 12~cm;
\item hauteur du texte (\texttt{textheight}) \'egale \`a 18~cm;
\item le texte \'etant en outre centr\'e sur une feuille A4
(option \texttt{a4paper}).
\end{itemize}

Les autres formats \TeX\ et les autres types de traitement de texte
ne sont pas utilisables par le secr\'etariat et sont \emph{fortement}
d\'econseill\'es.

Avant de saisir leur texte, les auteurs sont invit\'es \`a prendre
connaissance du document \emph{Recommandations aux auteurs\/} disponible
au secr\'etariat des publications de la SMF ou sur le serveur de la SMF.}

\def\instructionsenglish{%
{\itshape \smf@howmany} copies of the original manu\-script should be sent to
the
editorial board of the SMF, indicating to which publication the paper is
being submitted.

The \TeX\ \emph{source} file (a single file for each article)
may also be sent by electronic mail or ftp, in a format suitable for
typsesetting by the secretary.
Please, send an email to \texttt{\@emailSMF} for precise information.

The SMF has a \emph{strong} preference for \AMS-\LaTeX\ together with
the documentclass \texttt{smfart} and the package \texttt{bull.sty},
available with their user's guide at \url{http://smf.emath.fr/} (Internet)
or on request from the editorial board of the SMF.

The \AMS-\LaTeX\ files using the documentclass \texttt{amsart}
or the \LaTeX\ files using the documentclass
\texttt{article} are also encouraged.
They will be prepared  following the rules below:
\begin{itemize}
\item font size equal to 10~points (\texttt{10pt} option);
\item text width (\texttt{textwidth}): 12~cm;
\item text height (\texttt{textheight}): 18~cm;
\item the text being centered on a A4 page (\texttt{a4paper} option).
\end{itemize}

Files prepared with other \TeX\ dialects or other word processors cannot be
used by the editorial board and are \emph{not} encouraged.

Before preparing their electronic manuscript, the authors should read the
\emph{Advice to authors\/}, available on request from the
editorial board of the SMF or from the  web site of the SMF.}

\def\smf@combien{triple}\def\smf@howmany{Three}
\def\th@plain{%
  \let\thm@indent\noindent
  \thm@headfont{\normalfont\scshape}%
  \thm@notefont{\normalfont}%
  \thm@preskip.5\linespacing \@plus .5\linespacing\relax
  \thm@postskip\thm@preskip
  \thm@headpunct{\MakePointrait}
  \let\thmheadnl\relax
  \itshape }
\def\abstractheadfont{\normalfont\scshape}

\def\bibliofont{\normalfont}
\def\specialsection{\@startsection{section}{1}%
  \z@{2\linespacing\@plus\linespacing}{.5\linespacing}%
  {\centering\normalfont\MakeUppercase}}
\def\bibliosection{\let\refname\bibname\specialsection}
\def\@cite#1#2{{%
 \m@th\upshape\mdseries[{#1}{\if@tempswa, #2\fi}]}}

\def\smf@enddoc{}
\renewcommand{\author}[2][]{%
  \ifx\@empty\authors
    \gdef\shortauthors{#1}\gdef\authors{#2}%
  \else
    \g@addto@macro\shortauthors{\and#1}%
    \g@addto@macro\authors{\and#2}%
  \fi
  \g@addto@macro\addresses{\author{#2}}%
}
\def\@setaddresses{\begingroup
  \rightskip=0pt plus 1cm
  \emergencystretch .5\textwidth
  \exhyphenpenalty=-100
  \interlinepenalty\@M
  \def\baselinestretch{1}% \normalfont\footnotesize
  \def\\{\unskip, \penalty-10\ignorespaces}%
  \def\cond@bullet {{\setbox0\hbox{\quad$\bullet$\quad}%
         \hskip 0pt plus 3cm\penalty -30\hskip 0pt plus -3cm
         \cleaders \copy0 \hskip\wd0 }}%
  \def\firstauthor##1{{\scshape ##1}\let\address\firstaddress
        \let\author\otherauthor}%
  \def\otherauthor##1{\par\nobreak
      {\scshape ##1}\let\address\firstaddress}%
  \def\firstaddress##1##2{\unskip, \let\address\otheraddress
         \penalty-20\ignorespaces##2}%
  \def\otheraddress##1##2{\cond@bullet \ignorespaces##2}%
  \let\author\firstauthor
  \let\address\firstaddress
  \def\curraddr{\address}%
  \def\email##1##2{\@ifnotempty{##2}%
        {\cond@bullet
         \hbox{\itshape E-mail~:}~{\ttfamily\ignorespaces ##2}}}%
  \def\urladdr##1##2{\@ifnotempty{##2}%
        {\cond@bullet
         {\itshape Url~:}~{\ttfamily\ignorespaces ##2}\par}}%
  \addresses
  \endgroup}
\def\smf@boldmath{\mathversion{bold}}
\def\@setdate{{\itshape\@date}} %% enleve le \@@par
\def\smf@byfont{\scshape}
\csname smf@byauthorfalse\endcsname %% ``par'' et auteur sur la meme ligne
\def\smf@authorfont{\scshape}
\def\@endmaketitlehook{}%
\def\@maketitlehook{\bgroup
 \normalparindent0pt
 \footnotetext{%
 \ifx\@empty\@date\else\@setdate\par\smallskip\fi
 \@setaddresses\par\smallskip
 \def\abstractheadfont{}
 \ifx\@empty\@subjclass\else\@setsubjclass\par\smallskip\fi
 \ifx\@empty\@keywords\else\@setkeywords\par\smallskip\fi
 \ifx\@empty\thankses\else \@setthanks\par\smallskip\fi
 \par\bigskip\tiny
   {\MakeUppercase\smf@titre}\hfil\nobreak
    \hbox{\@issn/\@setyear/\smf@firstpage/$\$\,5.00$}{\parfillskip=0pt\par}
    \copyright\ \smf@logo\par}
 \egroup}
\def\ps@headings{\ps@empty
\def\@oddfoot{\quad\normalfont\tiny{\MakeUppercase\smf@titre}\hfil}%
  \def\@evenfoot{\quad\normalfont\tiny\scshape
     tome\ifx\smf@volume\@empty\else{\unskip\ \smf@volume}\fi
     \ --\
     \@setyear
     \ --\
     n\textsuperscript{\normalfont o} \smf@fascicule\hfil}%
  \def\@evenhead{\normalfont\scriptsize
     \rlap{\bfseries\thepage}\hfil \leftmark{}{}\hfil}%
  \def\@oddhead{\normalfont\scriptsize
     \hfil \rightmark{}{}\hfil \llap{\bfseries\thepage}}%
}
\ps@headings

\ifsmf@slave\else
\def\@maketitle{\cleardoublepage
  \begingroup
    \smf@restorecmr
     \parindent\z@
     \c@page-1
     \smf@gardei\smf@gardeii
     \smf@titlei \smf@titleii \@setdedicatory \smf@titleiii
     \cleardoublepage
  \endgroup}

% \def\smf@gardei{\clearpage\thispagestyle{empty}\bgroup
%   \vspace*{-2cm}\enlargethispage{2cm}
%   \topskip\z@skip
%   \begin{raggedright}
%   \bfseries
%   \Huge Bulletin \\
%   \large de la SOCI\'ET\'E MATH\'EMATIQUE DE FRANCE\\
%   \vfil
%   \LARGE
%   Tome \smf@volume\\
%   Fascicule \smf@fascicule\\
%   \vfil
%   \@setyear
%   \end{raggedright}
%   \vfil
%   \gdef\SMF@first{}\xdef\SMF@last{}
%   \smftableofcontents
%   \vfilneg\egroup}

\def\smf@gardei{\clearpage\thispagestyle{empty}\bgroup
  \vspace*{-2cm}\enlargethispage{2cm}%
  \topskip\z@skip
  \vfil
  \gdef\SMF@first{}\xdef\SMF@last{}%
  \def\odo@smftoc ##1{%
  \ifx\smf@fascicule\smf@compilefascicule
  \smf@read {##1}%
  \def\@pnumwidth{3em}%
  \makeatletter
  \@tocline{-2}{6pt plus 2pt}{2em}{0pt}{}{%%%%% MODIF 12pt -> 6pt
  {\def\smfandname{\&}\andify\smf@shortauthors
   \bfseries\MakeUppercase{\smf@shortauthors}}
   ---
   {\let\\\relax\ignorespaces\smf@title\unskip\ }}%
   {\smf@firstpage}%
   \ifx\SMF@first\@empty\xdef\SMF@first{\smf@firstpage}\fi
   \xdef\SMF@last{\smf@lastpage}
  \fi}%
  \def\contentsname{}\fontfamily{ptm}%
  \emergencystretch3em
  \renewcommand{\baselinestretch}{.9}\normalfont
   \smftableofcontents
  \vfilneg\egroup}

\def\smftableofcontents{\let\do@smftoc\odo@smftoc\@starttoc{toc}{}}
\def\smftableofarticles{\let\do@smftoc\odo@smftoc\@starttoc{toc}\contentsname}
\def\smftableofpapers{\bgroup
   \english
   \let\do@smftoc\edo@smftoc\@starttoc{toc}\contentsname
   \egroup}

% smf@gardeii est OK

\def\@starttoc#1#2{\begingroup
  \@afterindenttrue
  \let\@secnumber\@empty % for \@tocwrite and \chaptermark
  \ifx\contentsname\@empty\else
     {\centering\bfseries\huge
      \MakeUppercase{\contentsname}\par}%
  \bigskip\bigskip
  \fi
  \advance\rightskip2em
  \advance\textwidth-1em \advance\hsize-1em
  \makeatletter
  \@input{\jobname.#1}%
  \def\@tempa{toc}\def\@tempb{#1}\ifx\@tempa\@tempb\else
  \if@filesw
    \@xp\newwrite\csname tf@#1\endcsname
    \immediate\@xp\openout\csname tf@#1\endcsname \jobname.#1\relax
  \fi\fi
  \global\@nobreakfalse \endgroup
}

\def\odo@smftoc #1{%
  \ifx\smf@fascicule\smf@compilefascicule
  \smf@read {#1}
  \def\@pnumwidth{3em}
  \makeatletter
  \@tocline{-2}{12pt plus 2pt}{2em}{0pt}{}{%
  {\def\smfandname{\&}\andify\smf@shortauthors
   \bfseries\MakeUppercase{\smf@shortauthors}}
   ---
   {\let\\\relax\ignorespaces\smf@title\unskip\ }}%
   {\smf@firstpage}%
   \ifx\SMF@first\@empty\xdef\SMF@first{\smf@firstpage}\fi
   \xdef\SMF@last{\smf@lastpage}
   \fi}

\def\edo@smftoc #1{%
  \ifx\smf@fascicule\smf@compilefascicule
  \smf@read {#1}
  \def\@pnumwidth{3em}
  \makeatletter
  \@tocline{-2}{12pt plus 2pt}{2em}{0pt}{}{%
  {\def\smfandname{\&}\andify\smf@shortauthors
   \bfseries\MakeUppercase{\smf@shortauthors}}
   ---
   {\let\\\relax\ignorespaces\smf@etitre\unskip\ }}%
   {\smf@firstpage}%
   \ifx\SMF@first\@empty\xdef\SMF@first{\smf@firstpage}\fi
   \xdef\SMF@last{\smf@lastpage}
  \fi}

\def\smf@titlei{%
  \cleardoublepage\thispagestyle{empty}
  \parindent=0pt
  \hrule height 1pt
  \bigskip
  \vbox to 0pt{\edef\smf@firstpage{\SMF@first}\edef\smf@lastpage{\SMF@last}%
               \noindent\@xp\ifx\csname smf@journalhead\endcsname\relax
                \else \smf@journalhead\fi
               \par\vss}%
  \vfill
  \smftableofarticles
  \vfill\hbox{}
}

\def\smf@titleii{%
  \clearpage\thispagestyle{empty}
  \parindent=0pt
  \hrule height 1pt
  \bigskip
  \vbox to 0pt{\edef\smf@firstpage{\SMF@first}\edef\smf@lastpage{\SMF@last}%
               \noindent\@xp\ifx\csname smf@journalhead\endcsname\relax
                \else \smf@journalhead\fi
               \par\vss}%
  \vfill
  \smftableofpapers
  \vfill\hbox{}
}

\def\smf@titleiii{}

\def\smf@fasciculefinal{4}                                                      
\def\smf@tableannuelle{%
    \cleardoublepage
    \thispagestyle{empty}\pagestyle{empty}
    \bgroup
    \begin{center}
      {\LARGE
      BULLETIN DE LA\par
      \vskip3mm
      SOCI\'ET\'E MATH\'EMATIQUE DE FRANCE\par}
      \vskip8mm
      Tome \smf@volume, ann\'ee \@setyear, fascicules 1 \`a 4\par
      \vskip8mm
      {\large\bfseries TABLE ANNUELLE\par}
      \vskip8mm
      ---------\par
      \vskip12mm
    \end{center}
    \def\@pnumwidth{2.5em}
    \def\do@smftoc ##1{\bgroup
        \smf@read {##1}%
        \makeatletter
        \@tocline{-2}{6pt plus 1pt minus 1pt}{0pt}{0pt}{}{%
           {\def\smfandname{\&}\andify\smf@shortauthors
          \scshape\smf@shortauthors}
           ---
          {\itshape\let\\\relax\ignorespaces\smf@title\unskip\ }}%
         {\smf@firstpage}
         \egroup}
     \makeatletter\input{\jobname.tocan}
   \egroup
}

\def\smf@printvol[#1/#2/#3]{#1\@ifnotempty{#2}{/#2}}
\def\smf@liste{%
  \ifx\smf@compilefascicule\smf@fasciculefinal
    \tochyphenpenalty9999
    \smf@tableannuelle
  \fi
  \cleardoublepage \pagestyle{empty}\bgroup
    \parindent=0pt\sffamily\footnotesize
    \begin{center}
    {\bfseries\MakeUppercase
      {M\'emoires de la Soci\'et\'e math\'ematique de France}}\par
    Nouvelle s\'erie
    \end{center}
  \bigskip
  \footnotesize
  \pretolerance2000\tolerance4000
  \rightskip=0pt plus 10pt
  \let\memoire\smf@revue
  \input memoires.lst
  \par\egroup}

\def\smf@pubfinale{\cleardoublepage \pagestyle{empty}\bgroup
   \parindent=0pt
   \InputIfFileExists{pubfinale.tex}{}{}
   \par\egroup}

\def\smf@gardeiv{\clearpage}

\def\currentfascicule#1{\def\smf@fascicule{#1}}
\def\smffascicule#1{\def\smf@fascicule{#1}\gdef\smf@compilefascicule{#1}}

\newif\if@makefasc

\newenvironment{fascicule}[1]{%
  \currentfascicule{#1}
  \addtocontents{toc}{\protect\currentfascicule{#1}}
  \ifx\smf@fascicule\smf@compilefascicule
     \@makefasctrue
  \else\@makefascfalse
  \fi
}{\global\c@page\the\c@page}

\fi
%</bulletin>
%    \end{macrocode}
% \subsection{Bulletin (fichier pour les auteurs)}
%    \begin{macrocode}
%<*bull>
\ProvidesPackage{smfbull}[2001/10/17 v1.0c
  Fichier additionnel pour la soumission des articles au Bulletin]

\let\ps@copyright\ps@empty

\textheight 18cm
\textwidth 12cm
\addtolength{\oddsidemargin}{.5cm}
\addtolength{\evensidemargin}{.5cm}
\addtolength{\topmargin}{.5cm}
\headheight=10pt
\arraycolsep 1.5pt
\headsep 7mm
\footskip 7mm
\abstractmargin\normalparindent

\def\th@plain{%
  \let\thm@indent\noindent
  \thm@headfont{\normalfont\scshape}%
  \thm@notefont{\normalfont}%
  \thm@preskip.5\linespacing \@plus .5\linespacing\relax
  \thm@postskip\thm@preskip
  \thm@headpunct{\MakePointrait}
  \let\thmheadnl\relax
  \itshape }
\def\abstractheadfont{\normalfont\scshape}
\def\smf@enddoc{}

\renewcommand{\author}[2][]{%
  \ifx\@empty\authors
    \gdef\shortauthors{#1}\gdef\authors{#2}%
  \else
    \g@addto@macro\shortauthors{\and#1}%
    \g@addto@macro\authors{\and#2}%
  \fi
  \g@addto@macro\addresses{\author{#2}}%
}
\edef\author{\@nx\@dblarg
  \@xp\@nx\csname\string\author\endcsname}
\def\@setaddresses{\begingroup
  \rightskip=0pt plus 1cm
  \emergencystretch .5\textwidth
  \exhyphenpenalty=-100
  \interlinepenalty\@M
  \def\baselinestretch{1}% \normalfont\footnotesize
  \def\\{\unskip, \penalty-10\ignorespaces}%
  \def\cond@bullet {{\setbox0\hbox{\quad$\bullet$\quad}%
         \hskip 0pt plus 3cm\penalty -30\hskip 0pt plus -3cm
         \cleaders \copy0 \hskip\wd0 }}%
  \def\firstauthor##1{{\scshape ##1}\let\address\firstaddress
        \let\author\otherauthor}%
  \def\otherauthor##1{\par\nobreak
      {\scshape ##1}\let\address\firstaddress}%
  \def\firstaddress##1##2{\unskip, \let\address\otheraddress
         \penalty-20\ignorespaces##2}%
  \def\otheraddress##1##2{\cond@bullet \ignorespaces##2}%
  \let\author\firstauthor
  \let\address\firstaddress
  \def\curraddr{\address}%
  \def\email##1##2{\@ifnotempty{##2}%
        {\cond@bullet
         \hbox{\itshape E-mail~:}~{\ttfamily\ignorespaces ##2}}}%
  \def\urladdr##1##2{\@ifnotempty{##2}%
        {\cond@bullet
         {\itshape Url~:}~{\ttfamily\ignorespaces ##2}\par}}%
  \addresses
  \endgroup}
\def\@setdate{{\itshape\@date}} %% enleve le \@addpunct. avant \@@par
\def\smf@boldmath{\mathversion{bold}}
\smf@byauthorfalse
\def\smf@byfont{\normalfont\scshape}
\def\smf@authorfont{\scshape}
\def\@maketitlehook{\bgroup
 \normalparindent 0pt
 \ifx\@empty\@date\else\footnotetext{\@setdate\smallskip}\fi
 \footnotetext{\@setaddresses\smallskip}%
 \def\abstractheadfont{}
 \ifx\@empty\@subjclass\else\footnotetext{\@setsubjclass\smallskip}\fi
 \ifx\@empty\@keywords\else\footnotetext{\@setkeywords\smallskip}\fi
 \ifx\@empty\thankses\else \footnotetext{\@setthanks\smallskip}\fi
 \egroup}

\def\bibliofont{\normalfont}
\def\specialsection{\@startsection{section}{1}%
  \z@{2\linespacing\@plus\linespacing}{.5\linespacing}%
  {\centering\normalfont\MakeUppercase}}
\def\bibliosection{\let\refname\bibname\specialsection}
\def\@cite#1#2{{%
 \m@th\upshape\mdseries[{#1}{\if@tempswa, #2\fi}]}}

\def\frontmatter{}
\def\mainmatter{}
\def\backmatter{}
%</bull>
%    \end{macrocode}
% \subsection{Cours Sp\'ecialis\'es}
%    \begin{macrocode}
%<*courspe>
\ProvidesPackage{smfcourspe}[2002/09/01 v1.4
  Fichier additionnel pour les Cours Specialises]
\RequirePackageWithOptions{smfgen}
\RequirePackage[courspe]{smfvar}
\RequirePackage[greekstraight]{smfbask}
\secretariatSMF{Nathalie Christia{\"e}n}
\telSMF{(33) 01 44 27 67 99}
\emailSMF{revues@smf.ens.fr}
\ISSN{1284-6090}
\EDPtrue

\def\smf@plaintitre{cours-spe}

%% POUR UTILISER SMFBASK%%
\def\smf@restorecmr{}
\def\th@plain{
  \let\thm@indent\noindent
  \thm@headfont{\bfseries\itshape}
  \thm@notefont{\bfseries\upshape}
  \thm@preskip.5\linespacing \@plus .5\linespacing
  \thm@postskip\thm@preskip
  \thm@headpunct{\MakePointrait}
  \let\thmheadnl\relax
  \itshape }
\def\abstractheadfont{\bfseries\itshape}
%%%%
\def\smf@logo{Soci\'et\'e Math\'ematique de France}
\def\smf@LOGO{SOCI\'ET\'E MATH\'EMATIQUE DE FRANCE}
\def\smf@titre {Cours Sp\'ecialis\'es}
\let\smf@titrecourt\smf@titre
\def\smf@copyright{\copyright\ \smf@titre
  \ifx\smf@volume\@empty\else{\unskip\ \smf@volume\unskip}\fi
  , SMF\ \@setyear}


\def\smf@titlei{\clearpage\thispagestyle{empty}
\vspace*{-2cm}\enlargethispage{2cm}
\bgroup
\begin{center}\bfseries\smf@boldmath
  \mbox{ }
  \vfil\vfil
  {\huge\MakeUppercase\@title\par}
  \vfil
  \ifsmf@editor{\large \smfedbyname\par\medskip}\fi
  \def\and{\par\medskip}\centering
  {\LARGE\authors\par}
  \vfil\vfil
 \mbox{ }
\end{center}
\vfilneg
\egroup}
\def\smf@titleii{\clearpage\thispagestyle{empty}\bgroup
\vspace*{-2cm}\enlargethispage{2cm}
\sffamily
\multicolsep0pt
\ifx\smf@commparitaire\@empty\else
  {\vfil
   \leftskip .1\textwidth plus 1fil minus .1\textwidth
   \rightskip\leftskip\parfillskip0pt\relax
   \smf@commparitaire\par\vfil}
\fi
\vfil
\begin{center}
  {\bfseries\itshape Comit\'e de r\'edaction}\\ \bigskip
   \begin{multicols}{2} \@comitedered \end{multicols}\par
   \@comitedir\par
  \vfil
  {\bfseries\itshape Diffusion}\par\bigskip
  \mbox {%
   \vbox{\hsize=\ifEDP.32\else.5\fi\textwidth
     Maison de la SMF \\ B.P. 67 \\ 13274 Marseille Cedex 9 \\ France \\
     \texttt{smf@smf.univ-mrs.fr}}
   \hss
   \vbox{\hsize=\ifEDP.28\else.5\fi\textwidth
     AMS \\ P.O. Box 6248 \\ Providence RI 02940 \\ USA \\
     \texttt{www.ams.org}}
   \ifEDP
   \hss
   \vbox{\hsize=.4\textwidth
     EDP Sciences\\ 17, avenue du Hoggar\\ 91944 les Ulis cedex A\\ France\\
     \texttt{www.edpsciences.com}}
   \fi }\\
  \vfil
  {\bfseries\itshape Tarifs \@setyear}\par\medskip
    {\itshape Vente au num\'ero :} \@tarifNum~\@FrenchCurrency\space
                 (\$\,\@tarifNumDol)\\
    \ifx\@tarifAboEurope\@empty\else
    {\itshape Abonnement}
      \quad Europe : \@tarifAboEurope~\@FrenchCurrency,
            hors Europe : \@tarifAboHors~\@FrenchCurrency\space
                  (\$\,\@tarifAboDolHors)\\\fi
    \smallskip
    Des conditions sp\'eciales sont accord\'ees aux membres de la SMF.\\
  \vfil
  {\bfseries\itshape Secr\'etariat
   \ifx\@secretariatSMF\@empty\else : \@secretariatSMF\fi} \\
   \smallskip
   \smf@titre  \\
   Soci\'et\'e Math\'ematique de France \\
   Institut Henri Poincar\'e, 11, rue Pierre et Marie Curie \\
   75231 Paris Cedex 05, France \\
   \begin{tabular}{ccc}
     T\'el : \@telSMF & $\bullet$& Fax : (33) 01 40 46 90 96\\
     \texttt{\@emailSMF}& $\bullet$&\url{http://smf.emath.fr/}
  \end{tabular}
  \vfil
  {\itshape
   {\normalfont\copyright}\ \smf@logo\ \@setyear}\\
\end{center}
\medskip
{\itshape\footnotesize\noindent
   Tous droits r\'eserv\'es (article L~122--4 du Code de la propri\'et\'e
   intellectuelle). Toute repr\'esentation ou reproduction int\'egrale ou
   partielle faite sans le consentement de l'\'editeur est illicite.
   Cette repr\'esentation ou reproduction par quelque proc\'ed\'e que ce soit
   constituerait une contrefa\c con sanctionn\'ee par les articles L~335--2
   et suivants du CPI. \par}
\vfil
\begin{center}
  \ifx\@issn\@empty\else ISSN \@issn \\ \medskip\fi
  \ifx\@isbn\@empty\else ISBN \@isbn \\ \fi
\vfil
  \smf@Directeur de la publication : \@dirpub\\
\end{center}
\vfil
\vfilneg\egroup}

\def\smf@titleiii{\clearpage\thispagestyle{empty}
\vspace*{-2cm}\enlargethispage{1cm}
\bgroup
\begin{center}\bfseries\smf@boldmath
  {\Large \MakeUppercase\smf@titre\nobreak\ \smf@volume\par}
  \vfil\vfil
  {\huge\MakeUppercase\@title\par}
  \vfil
  \ifsmf@editor{\large \smfedbyname\par\medskip}\fi
  \def\and{\par\medskip}\centering
  {\LARGE\authors\par}
  \vfil\vfil
  {\Large \smf@logo\ \@setyear\par}
  \ifsubventionCNRS
     \smallskip{\small
      Publi\'e avec le concours du Centre National
      de la Recherche Scientifique\par}\fi
  \ifsubventionMCC
     \smallskip{\small
     Publi\'e avec le concours du Minist\`ere de la
     Culture et de la Communication\par}\fi
  \ifsubventionCNRSMCC
     \smallskip{\small
     Publi\'e avec le concours du Centre National
     de la Recherche Scientifique\\
     et du Minist\`ere de la Culture et de
     la Communication\par}\fi
\end{center}
\vfilneg
\egroup}

\def\smf@gardeii{\clearpage\thispagestyle{empty}\mbox{ }}
\def\smf@gardeiii{\thispagestyle{empty}\mbox{ }}

\def\texteplaquettefrancais{%
La s\'erie \textit{Cours sp\'ecialis\'es} a pour vocation de publier des
ouvrages de niveau correspondant au troisi\`eme cycle et qui n'exigent
que les connaissances de base de la ma\^\i trise de math\'ematiques. Les
auteurs s'appuient en g\'en\'eral sur un cours enseign\'e dans le cadre
d'une formation doctorale. Le public vis\'e est celui des \'etudiants
de troisi\`eme cycle, doctorants et chercheurs d\'ebutants.}

\def\texteplaquetteenglish{%
The role of the series \textit{Cours sp\'ecialis\'es} is to publish books
of a moderately advanced (graduate) level, which only require a basic
knowledge of elementary mathematics (undergraduate level). They are aimed
at graduate students and beginners in mathematical research. Authors
usually rely on lectures given in a graduate course.}

\def\smf@liste{\cleardoublepage \pagestyle{empty}\bgroup
  \parindent=0pt\sffamily \footnotesize
  \begin{center}\bfseries\uppercase{Collection SMF}\end{center}
  \vspace{3cm}
  \begin{center}\bfseries
     S\'erie~~\uppercase{S\'eminaires et Congr\`es}
  \end{center}
  \medskip
  \pretolerance2000\tolerance4000
  \rightskip=0pt plus 10pt
  \let\collection\smf@revue
  \input seminaires.lst
  \vspace{1cm}
  \begin{center}\bfseries
     S\'erie~~\uppercase{Cours Sp\'ecialis\'es}
  \end{center}
  \medskip
  \input courspe.lst
  \par\egroup}
\def\smf@pubfinale{\cleardoublepage \pagestyle{empty}\bgroup
   \parindent=0pt
   \InputIfFileExists{pubfinale.tex}{}{}
   \par\egroup}
\def\smf@gardeiv{\clearpage\thispagestyle{empty}\bgroup\large
  \smf@restorecmr
  \mbox{}\vfil
  \@setshortabstract
  \vspace {1cm}
  \@setspecialaddresses
  \vfil\egroup}
%</courspe>
%    \end{macrocode}
% \subsection{M\'emoires de la SMF}
%    \begin{macrocode}
%<*memoires>
\ProvidesPackage{smfmemoires}[2003/08/28 v1.4
  Fichier additionnel pour les Memoires de la SMF]
\RequirePackageWithOptions{smfgen}
\def\smf@plaintitre{memoires}
\def\smf@titre {M\'emoires de la SMF}%
\let\smf@titrecourt\smf@titre
\def\smf@copyright{\copyright\
  M\'emoires de la Soci\'et\'e Math\'ematique de France
  \ifx\smf@volume\@empty\else{\unskip\ \smf@volume\unskip}\fi
  , SMF\ \@setyear}

\RequirePackage[memoires]{smfvar}
\secretariatSMF{Nathalie Christia\"en}
\telSMF{(33) 01 44 27 67 99}
\emailSMF{revues@smf.ens.fr}
\ISSN{0249-633-X}
\EDPfalse
\subventionCNRStrue

\def\texteplaquettefrancais{%
Les \textit{M\'emoires} de la SMF publient, en fran\c cais ou en
anglais, de longs articles de recherche, des monographies originales
ou des s\'eries d'articles centr\'es sur un m\^eme sujet. Les volumes
ont entre 100 et 150 pages environ.}
\def\texteplaquetteenglish{%
In the \textit{M\'emoires} of the SMF are published, in French or in
English, long research articles, original research monographs or series of
articles on the same topic of current research. Each volume should be
approximately 100-150 pages long.}

\def\th@plain{%
  \let\thm@indent\noindent
  \thm@headfont{\normalfont\sc}%
  \thm@notefont{\normalfont}%
  \thm@preskip.5\linespacing\@plus.5\linespacing
  \thm@postskip\thm@preskip
  \let\thmheadnl\relax
  \thm@headpunct{\MakePointrait}
  \itshape }

\def\smf@printvol[#1/#2/#3]{#1\@ifnotempty{#2}{/#2}}
\def\smf@liste{\cleardoublepage \pagestyle{empty}\bgroup
  \parindent=0pt\sffamily\footnotesize
  \begin{center}
  {\bfseries\uppercase
    {M\'emoires de la Soci\'et\'e math\'ematique de France}}\par
  Nouvelle s\'erie
  \end{center}
  \bigskip
  \footnotesize
  \pretolerance2000\tolerance4000
  \rightskip=0pt plus 10pt
  \let\memoire\smf@revue
  \input memoires.lst
  \par\egroup}
\def\smf@pubfinale{\cleardoublepage \pagestyle{empty}\bgroup
   \parindent=0pt
   \InputIfFileExists{pubfinale.tex}{}{}
   \par\egroup}
%</memoires>
%    \end{macrocode}
% \subsection{Cours Sp\'ecialis\'es (version EDP Sciences)}
%    \begin{macrocode}
%<*courspeedp>
\ProvidesPackage{smfcourspeedp}[2000/02/27 v1.3
  Fichier additionnel pour les Cours Specialises (EDP Sciences)]
\PassOptionsToPackage{ptmbf}{smfgen}
\RequirePackageWithOptions{smfgen}
\RequirePackage[courspe]{smfvar}
\RequirePackage[greekstraight]{smfbask}
\secretariatSMF{Nathalie Christia{\"e}n}
\telSMF{(33) 01 44 27 67 99}
\emailSMF{revues@smf.ens.fr}
\EDPtrue

\def\smf@plaintitre{cours-spe}

%% POUR UTILISER SMFBASK%%
\def\smf@restorecmr{}
\def\th@plain{
  \let\thm@indent\noindent
  \thm@headfont{\bfseries\itshape}
  \thm@notefont{\bfseries\upshape}
  \thm@preskip.5\linespacing \@plus .5\linespacing
  \thm@postskip\thm@preskip
  \thm@headpunct{\MakePointrait}
  \let\thmheadnl\relax
  \itshape }
\def\abstractheadfont{\bfseries\itshape}
%%%%

\def\smf@logo{Soci\'et\'e Math\'ematique de France \& EDP-Sciences}
\def\smf@LOGO{SOCI\'ET\'E MATH\'EMATIQUE DE FRANCE \& EDP-SCIENCES}
\def\smf@titre {Cours Sp\'ecialis\'es}
\let\smf@titrecourt\smf@titre
\def\smf@copyright{\copyright\ \smf@titre
  \ifx\smf@volume\@empty\else{\unskip\ \smf@volume\unskip}\fi
  , SMF \& EDP-Sciences\ \@setyear}

\def\texteplaquettefrancais{%
La s\'erie \textit{Cours sp\'ecialis\'es} a pour vocation de publier des
ouvrages de niveau correspondant au troisi\`eme cycle et qui n'exigent
que les connaissances de base de la ma\^\i trise de math\'ematiques. Les
auteurs s'appuient en g\'en\'eral sur un cours enseign\'e dans le cadre
d'une formation doctorale. Le public vis\'e est celui des \'etudiants
de troisi\`eme cycle, doctorants et chercheurs d\'ebutants.}

\def\texteplaquetteenglish{%
The role of the series \textit{Cours sp\'ecialis\'es} is to publish books
of a moderately advanced (graduate) level, which only require a basic
knowledge of elementary mathematics (undergraduate level). They are aimed
at graduate students and beginners in mathematical research. Authors
usually rely on lectures given in a graduate course.}
\def\smf@liste{\cleardoublepage \pagestyle{empty}\bgroup
  \parindent=0pt\sffamily \footnotesize
  \begin{center}\bfseries\uppercase{Collection SMF}\end{center}
  \vspace{3cm}
  \begin{center}\bfseries
     S\'erie~~\uppercase{S\'eminaires et Congr\`es}
  \end{center}
  \medskip
  \pretolerance2000\tolerance4000
  \rightskip=0pt plus 10pt
  \let\collection\smf@revue
  \input seminaires.lst
  \vspace{1cm}
  \begin{center}\bfseries
     S\'erie~~\uppercase{Cours Sp\'ecialis\'es}
  \end{center}
  \medskip
  \input courspe.lst
  \par\egroup}
\def\smf@pubfinale{\cleardoublepage \pagestyle{empty}\bgroup
   \parindent=0pt
   \InputIfFileExists{pubfinale.tex}{}{}
   \par\egroup}

\def\@setaddresses{\begingroup
  \rightskip=0pt plus 1cm
  \emergencystretch .5\textwidth
  \exhyphenpenalty=-100
  \interlinepenalty\@M
  \def\baselinestretch{1}% \normalfont\footnotesize
  \def\\{\unskip, \penalty-10\ignorespaces}%
  \def\cond@bullet {\unskip
         {\discretionary{}{}{\hbox{\ $\bullet$\ }}}}%
  \def\firstauthor##1{{\scshape ##1}\let\address\firstaddress
        \let\author\otherauthor}%
  \def\otherauthor##1{\par\nobreak
      {\scshape ##1}\let\address\firstaddress}%
  \def\firstaddress##1##2{\unskip, \let\address\otheraddress
         \penalty-20\ignorespaces##2}%
  \def\otheraddress##1##2{\cond@bullet \ignorespaces##2}%
  \let\author\firstauthor
  \let\address\firstaddress
  \def\email##1##2{\@ifnotempty{##2}%
        {\cond@bullet
         \hbox{\slshape E-mail~:}~{\ttfamily\ignorespaces ##2}}}%
  \def\urladdr##1##2{\@ifnotempty{##2}%
        {\cond@bullet
         {\slshape Url~:}~{\ttfamily\ignorespaces ##2}\par}}%
  \addresses
  \endgroup}
\def\@setdate{{\sl\@date}} %% enleve le \@@par


\def\smf@titleii{\clearpage
  \thispagestyle{empty}\mbox{ }
}
\def\smf@titleiii{%
  \clearpage\thispagestyle{copyright}
  \markboth{\@nx\shortauthors}{\@nx\shorttitle}
  %% INSERER UNE IMAGE
  \null
  \vskip 12\medskipamount plus 8\medskipamount
  \begin{center}\Large\bfseries\smf@boldmath
  {\MakeUppercase\@title\par}
  \vskip 4\medskipamount plus 2\medskipamount
  \def\and{,\ \penalty-1}\authors\par
  \end{center}
  \vskip 8\medskipamount plus 4 \medskipamount
  \@setabstract\par
  \vskip 1\medskipamount plus 1\medskipamount
     \penalty-100
  \@setaltabstract\par\vfill\nopagebreak
  \ifx\@empty\@subjclass
     \ifx\@empty\@keywords\else
        \hrule\medskip\ifx\@empty\addresses\else
                                             \@setaddresses\par\medskip\fi
                                \@setkeywords\par\medskip
             \ifx\@empty\@translators\else\@settranslators\medskip\fi
     \ifx\@empty\thankses\else\@setthanks\fi
    \ifx\@empty\@date\else\@setdate\fi
  \hrule\vfill
  \fi
  \else
     \hrule\medskip\ifx\@empty\addresses\else
                                  \@setaddresses\par\medskip\fi
                              \@setsubjclass\par\medskip
     \ifx\@empty\@keywords\else\@setkeywords\par\medskip\fi
     \ifx\@empty\@translators\else\@settranslators\medskip\fi
     \ifx\@empty\thankses\else\@setthanks\fi
    \ifx\@empty\@date\else\@setdate\fi
  \hrule\vfill
  \fi
    \vfilneg
 }
%</courspeedp>
%    \end{macrocode}
% \subsection{Documents math\'ematiques}
%    \begin{macrocode}
%<*documents>
\ProvidesPackage{smfdocuments}[2000/10/12 v1.3b
  Fichier additionnel pour Documents]
\RequirePackageWithOptions{smfgen}
\def\smf@plaintitre{documents}
\def\smf@titre {Documents Math\'ematiques}
\def\smf@titrecourt{Documents Math\'ematiques}
\def\smf@logo{Soci\'et\'e Math\'ematique de France}
\def\smf@LOGO{SOCI\'ET\'E MATH\'EMATIQUE DE FRANCE}
\def\smf@copyright{\copyright\ \smf@titre
  \ifx\smf@volume\@empty\else{\unskip\ \smf@volume\unskip}\fi
  , SMF\ \@setyear}
%%
\def\comitedir#1{\def\@comitedir{#1}}
\RequirePackage[documents]{smfvar}
%%
\secretariatSMF{Nathalie Christia\"en}
\telSMF{(33) 01 44 27 67 99}
\emailSMF{revues@smf.ens.fr}
\ISSN{1629-4939}
\EDPtrue
\subventionCNRSfalse
\def\smf@titleii{\clearpage\thispagestyle{empty}\enlargethispage{1cm}
\bgroup
\sffamily
\multicolsep0pt
\begin{center}
  {\bfseries\itshape \smf@titre\par\bigskip
  s\'erie dirig\'ee par \@comitedir}\par
  \vfill
   {\bfseries\itshape Secr\'etariat
   \ifx\@secretariatSMF\@empty\else : \@secretariatSMF\fi} \\
   \smallskip
   \smf@titre  \\
   Soci\'et\'e Math\'ematique de France \\
   Institut Henri Poincar\'e, 11, rue Pierre et Marie Curie \\
   75231 Paris Cedex 05, France \\
   \begin{tabular}{ccc}
     T\'el : \@telSMF & $\bullet$& Fax : (33) 01 40 46 90 96\\
     \texttt{\@emailSMF}& $\bullet$&\url{http://smf.emath.fr/}
  \end{tabular}
  \par\bigskip
  {\itshape
   {\normalfont\copyright}\ \smf@logo\ \@setyear}\\
\end{center}
\medskip
{\itshape\footnotesize\noindent
   Tous droits r\'eserv\'es (article L~122--4 du Code de la propri\'et\'e
   intellectuelle). Toute repr\'esentation ou reproduction int\'egrale ou
   partielle faite sans le consentement de l'\'editeur est illicite.
   Cette repr\'esentation ou reproduction par quelque proc\'ed\'e que ce soit
   constituerait une contrefa\c con sanctionn\'ee par les articles L~335--2
   et suivants du CPI. \par}
\par\bigskip
\begin{center}
  \ifx\@issn\@empty\else ISSN \@issn \\ \medskip\fi
  \ifx\@isbn\@empty\else ISBN \@isbn \\ \fi
\bigskip
  \smf@Directeur de la publication : \@dirpub\\
\end{center}
\vfilneg\egroup}
\def\smf@titlei{\clearpage\thispagestyle{empty}
\vspace*{-2cm}\enlargethispage{2cm}
\bgroup
\begin{center}\bfseries\smf@boldmath
  \mbox{ }
  \vfil\vfil
  {\huge\MakeUppercase\@title\par}
  \vfil
  \ifsmf@editor{\large \smfedbyname\par\medskip}\fi
  \def\and{\par\medskip}\centering
  {\LARGE\authors\par}
  \vfil\vfil
 \mbox{ }
\end{center}
\vfilneg
\egroup}
\def\smf@titleiii{\clearpage\thispagestyle{empty}
\vspace*{-2cm}\enlargethispage{2cm}
\bgroup
\begin{center}\bfseries\smf@boldmath
  {\Large \MakeUppercase\smf@titre\nobreak\ \smf@volume\par}
  \vfil\vfil
  {\huge\MakeUppercase\@title\par}
  \vfil
  \ifsmf@editor{\large \smfedbyname\par\medskip}\fi
  \def\and{\par\medskip}\centering
  {\LARGE\authors\par}
  \vfil\vfil
  {\Large \smf@logo\ \@setyear\par}
  \ifsubventionCNRS
     \smallskip{\small
      Publi\'e avec le concours du Centre National
      de la Recherche Scientifique\par}\fi
  \ifsubventionMCC
     \smallskip{\small
     Publi\'e avec le concours du Minist\`ere de la
     Culture et de la Communication\par}\fi
  \ifsubventionCNRSMCC
     \smallskip{\small
     Publi\'e avec le concours du Centre National
     de la Recherche Scientifique\\
     et du Minist\`ere de la Culture et de
     la Communication\par}\fi
\end{center}
\vfilneg
\egroup}
\def\smf@gardeii{\clearpage\thispagestyle{empty}\mbox{ }}
\def\smf@gardeiii{%
  \thispagestyle{empty}\mbox{ }}
\def\smf@gardeiv{\clearpage\thispagestyle{empty}\bgroup\large
  \smf@restorecmr
  \mbox{}\vfil
  \@setshortabstract
  \vspace {1cm}
  \@setspecialaddresses
  \vfil\egroup}
%</documents>
%    \end{macrocode}
% \subsection{S\'eminaires et congr\`es}
%    \begin{macrocode}
%<*seminaires>
\ProvidesPackage{smfseminaires}[2000/10/12 v1.3b
  Fichier additionnel pour Seminaires et Congres]
\RequirePackageWithOptions{smfgen}
\def\smf@plaintitre{seminaires}
\def\smf@titre {S\'eminaires et Congr\`es}
\def\smf@titrecourt{S\'eminaires \&\  Congr\`es}
\def\smf@copyright{\copyright\ \smf@titre
  \ifx\smf@volume\@empty\else{\unskip\ \smf@volume\unskip}\fi
  , SMF\ \@setyear}
%%
\RequirePackage[seminaires]{smfvar}
%%
\secretariatSMF{Nathalie Christia\"en}
\telSMF{(33) 01 44 27 67 99}
\emailSMF{revues@smf.ens.fr}
\ISSN{1285-2783}                                                                
\EDPfalse
\subventionCNRSfalse
\def\texteplaquettefrancais{%
La collection \textit{S\'eminaires \&\  Congr\`es} publie
\'electroniquement, apr\`es avis favorable de son comit\'e de
r\'edaction, les actes de manifestations scientifiques dans le domaine
des math\'ematiques (congr\`es, colloques, \'ecoles d'\'et\'e, \ldots).
L'essentiel du volume doit {\^e}tre compos{\'e} de textes originaux,
complets (donc avec des d{\'e}monstrations) et sous leur forme d{\'e}finitive.
Les textes de type \og survey \fg\ ou de synth{\`e}se sont admis {\`a}
condition d'{\^e}tre bien {\'e}crits et dans une proportion ne devant pas
d{\'e}passer le tiers du volume.
}
\def\texteplaquetteenglish{%
The series \textit{S\'eminaires \&\  Congr\`es} publishes electronically
proceedings of mathematical meetings (conferences, workshops, summer schools,
\ldots),
after acceptation by its editorial board.
Most of the volume should consist of original articles, in a final form.
Survey articles are accepted provided they are well written, but they should
not make up more than one third of the volume.}
\def\smf@liste{\cleardoublepage \pagestyle{empty}\bgroup
  \parindent=0pt\sffamily \footnotesize
\begin{center}\bfseries\uppercase{Collection SMF}\end{center}
  \vspace{3cm}
  \begin{center}\bfseries
     S\'erie~~\uppercase{S\'eminaires et Congr\`es}
  \end{center}
  \medskip
  \pretolerance2000\tolerance4000
  \rightskip=0pt plus 10pt
  \let\collection\smf@revue
  \input seminaires.lst
  \vspace{1cm}
  \begin{center}\bfseries
     S\'erie~~\uppercase{Cours Sp\'ecialis\'es}
  \end{center}
  \medskip
  \input courspe.lst
  \par\egroup}
\def\smf@pubfinale{\cleardoublepage \pagestyle{empty}\bgroup
   \parindent=0pt
   \InputIfFileExists{pubfinale.tex}{}{}
   \par\egroup}
%</seminaires>
%    \end{macrocode}
% \subsection{Panoramas et synth\`ese}
%    \begin{macrocode}
%<*panoramas>
\ProvidesPackage{smfpanoramas}[2000/10/13 v1.3b
  Fichier additionnel pour Panoramas et Syntheses]
\RequirePackageWithOptions{smfgen}
\def\smf@plaintitre{panoramas}
\def\smf@titre {Panoramas et Synth\`eses}
\def\smf@titrecourt{Panoramas \&\  Synth\`eses}
\def\smf@copyright{\copyright\ \smf@titre
  \ifx\smf@volume\@empty\else{\unskip\ \smf@volume\unskip}\fi
  , SMF\ \@setyear}
%%
\RequirePackage[panoramas]{smfvar}
%%
\secretariatSMF{Nathalie Christia\"en}
\telSMF{(33) 01 44 27 67 99}
\emailSMF{revues@smf.ens.fr}
\ISSN{1272-3835}
\EDPtrue
\subventionCNRStrue
\def\texteplaquettefrancais{%
La s\'erie \textit{Panoramas et Synth\`eses} publie, en fran\c cais ou en
anglais, des textes de 100 \`a 150 pages environ faisant le point sur
l'\'etat pr\'esent d'un sujet math\'ematique. Dans une pr\'esentation soign\'ee,
les auteurs s'attachent \`a mettre en \'evidence les difficult\'es, \`a donner
un parfum des d\'emonstrations et un aper\c cu de l'histoire r\'ecente du
sujet. Les textes, destin\'es \`a des math\'ematiciens professionnels non
sp\'ecialistes, doivent \^etre utilisables par des \'etudiants de doctorat.}
\def\texteplaquetteenglish{%
In the series \textit{Panoramas et Synth\`eses} are published
texts from 100 to 150 pages, in French or in English, which give an
account of the present state of some mathematical area.
The authors aim at explaining the main problems, while giving some
flavour of the proofs and an overview of the recent developments of their
subject. The texts, which are intended to be read by non-specialists,
should be accessible to graduate students.}
\def\smf@liste{\cleardoublepage \pagestyle{empty}\bgroup
  \parindent=0pt\sffamily \footnotesize
  \begin{center}\bfseries\uppercase{Panoramas et Synth\`eses}\end{center}
  \medskip
  \pretolerance2000\tolerance4000
  \rightskip=0pt plus 10pt
  \let\panoramas\smf@revue
  \input panoramas.lst
  \par\egroup}
\def\smf@pubfinale{\cleardoublepage \pagestyle{empty}\bgroup
   \parindent=0pt
   \InputIfFileExists{pubfinale.tex}{}{}
   \par\egroup}
%</panoramas>
%    \end{macrocode}
% \section{Package pour les ouvrages multi-auteurs}
% Ce package est fait pour g\'erer des ouvrages collectifs de sorte que
% table des mati\`eres, etc. soient automatis\'es, mais que chaque article
% soit compil\'e s\'epar\'ement. Les informations utiles sont \'ecrites
% dans des fichiers \texttt{.smf} cr\'e\'es automatiquement par le package.
%
% Il y a deux options : \paquetoption{master} pour le document principal et
% \paquetoption{slave} pour les articles individuels.
%
% \DescribeMacro{\smfinclude}
% Le fonctionnement g\'en\'eral est le suivant. Dans le document ma\^{\i}tre (celui
% avec l'option \paquetoption{master}), les fichiers \`a inclure
% virtuellement (esclaves, \paquetoption{slave} sous-entendue)
% sont appel\'es par la commande |\smfinclude|. Celle-ci met \`a
% jour la liste des fichiers inclus et cr\'ee pour le fichier esclave
% inclus un fichier \texttt{.smf} qui contient les informations dont
% celui-ci pourra avoir besoin : num\'ero de premi\`ere page, num\'ero de volume,
% etc. Ce fichier permet aussi aux fichiers esclaves de communiquer avec le
% ma\^{\i}tre : il renvoie notamment la derni\`ere page.
%    \begin{macrocode}
%<*multi>
\ProvidesPackage{smfmulti}[2000/11/20 v1.3
  Package SMF pour les ouvrages multi-auteurs]
\newif\ifsmf@slave
\DeclareOption{slave}{\smf@slavetrue}
\DeclareOption{master}{\smf@slavefalse}
\ExecuteOptions{slave}
\ProcessOptions\relax
\RequirePackage{url}
\newwrite\smf@out
\newread\smf@in
\newtoks\smf@toks
%    \end{macrocode}
%    \begin{macrocode}
\def\smf@newfiles{}
\def\smf@empty{}
{\catcode`\%=11\gdef\smf@pc{%}}
%    \end{macrocode}
% Ces macros sont communiqu\'ees entre le ma\^{\i}tre et les esclaves. Elles
% doivent exister pour que \c{c}a marche.
%    \begin{macrocode}
\def\authors{}\def\shortauthors{}\def\shorttitle{}
\def\@abstract{}\def\@altabstract{}\def\@alttitle{}
\def\smf@volume{}\def\smf@fascicule{}% \def\smf@year{}
%    \end{macrocode}
% \DescribeMacro{\do@volumerefs}
% Cette macro permet de transf\'erer les informations valables pour tous les
% esclaves. Les donn\'ees en question doivent \^etre entr\'ees dans le fichier
% ma\^{\i}tre.
% Le principe de ces \cs{do}\cs{maca}\cs{macb}
% est d'ins\'erer dans les \texttt{.smf}
% une ligne \cs{def}\cs{maca}|{|$\langle$valeur de |\macb|$\rangle$|}|.
% Rien n'interdit \emph{a priori} que \cs{maca}$=$\cs{macb}. Il faut quand m\^eme
% prendre garde \`a ce que le fichier esclave pourrait d\'efinir \cs{maca} !
%    \begin{macrocode}
\def\do@volumerefs{%
%    \end{macrocode}
% On transmet ainsi num\'eros de volume, de fascicule, ISBN et ISSN.
% Ainsi que l'ann\'ee
%    \begin{macrocode}
  \do\smf@year\smf@year
  \do\smf@volume\smf@volume
  \do\smf@fascicule\smf@fascicule
  \do\@isbn\@isbn
  \do\@issn\@issn}
%    \end{macrocode}
% \DescribeMacro{\do@paperrefs}
%    \begin{macrocode}
\ifsmf@slave
%    \end{macrocode}
% En mode esclave,
% cette macro sert \`a ins\'erer dans les \texttt{.smf} les informations
% venant des esclaves :
%    \begin{macrocode}
\def\do@paperrefs{%
%    \end{macrocode}
% fichier d'avant, premi\`ere page, derni\`ere page,
%    \begin{macrocode}
  \do\@precfile\@precfile
  \do\smf@firstpage\smf@firstpage
  \do\smf@lastpage\smf@lastpage
%    \end{macrocode}
% auteur(s)
%    \begin{macrocode}
  \do\smf@authors\authors
  \do\smf@shortauthors\shortauthors
%    \end{macrocode}
% langue de l'article, titre et titre court dans celle-ci,
%    \begin{macrocode}
  \do\smf@langue\smf@language
  \do\smf@title\@title
  \do\smf@shorttitle\shorttitle
%    \end{macrocode}
% titres en fran\c{c}ais, en anglais, r\'esum\'e (fran\c{c}ais) et abstract (anglais),
%    \begin{macrocode}
  \def\@tempa{french}\ifx\smf@language\@tempa
    \do\smf@ftitre\@title
    \do\smf@etitre\@alttitle
    \do\smf@resume\@abstract
    \do\smf@abstract\@altabstract
  \else
    \do\smf@ftitre\@alttitle
    \do\smf@etitre\@title
    \do\smf@resume\@altabstract
    \do\smf@abstract\@abstract\fi
}
\else
%    \end{macrocode}
% En mode \texttt{master}, on r\'ecup\`ere les informations correspondantes.
% C'est presque la m\^eme chose qu'avant sauf que les informations sont
% lues et r\'ecup\'er\'ees dans la m\^eme macro (afin de pouvoir les r\'ecrire
% \`a l'identique).
%    \begin{macrocode}
\def\do@paperrefs{%
%    \end{macrocode}
% fichier d'avant, premi\`ere page, derni\`ere page,
%    \begin{macrocode}
  \do\@precfile\@precfile
  \do\smf@firstpage\smf@firstpage
  \do\smf@lastpage\smf@lastpage
%    \end{macrocode}
% auteur(s)
%    \begin{macrocode}
  \do\smf@authors\smf@authors
  \do\smf@shortauthors\smf@shortauthors
%    \end{macrocode}
% langue et titre, titre court dans cette langue,
%    \begin{macrocode}
  \do\smf@langue\smf@langue
  \do\smf@title\smf@title
  \do\smf@shorttitle\smf@shorttitle
%    \end{macrocode}
% titres fran\c{c}ais, anglais, r\'esum\'e, abstract,
%    \begin{macrocode}
  \do\smf@ftitre\smf@ftitre
  \do\smf@etitre\smf@etitre
  \do\smf@resume\smf@resume
  \do\smf@abstract\smf@abstract
}
\fi
%    \end{macrocode}
% \DescribeMacro{\reset@paperrefs}
% On initialise \`a |{}| toutes les macros |\maca| des donn\'ees intervenant dans
% |\do@paperrefs|.
%    \begin{macrocode}
\def\reset@paperrefs{%
  \bgroup
  \def\do##1##2{\xdef##1{}}%
  \do@paperrefs
  \egroup
}
\reset@paperrefs
%    \end{macrocode}
% \DescribeMacro{\smfinclude}
% La macro pour inclure virtuellement un fichier,
%    \begin{macrocode}
\def\smfmulti@protect{\let\do\relax}
\def\smfinclude#1{%
%    \end{macrocode}
% On change de double page, ent\^etes vierges.
% Modif. 2002, on ajoute sur cette ligne le shortauteur
%    \begin{macrocode}
  \cleardoublepage\thispagestyle{empty}\markboth{}{}
%    \end{macrocode}
% On inclut le nom du fichier dans |\smf@newfiles|
%    \begin{macrocode}
  \bgroup
     \smfmulti@protect
     \xdef\smf@newfiles{\smf@newfiles\do{#1}}%
  \egroup
%    \end{macrocode}
% Puis on pr\'epare le fichier \texttt{.smf}
%    \begin{macrocode}
  \smf@read{#1}
%    \end{macrocode}
% La table des mati\`eres apprend
% l'existence du fichier via une entr\'ee
% |\do@smftoc{|$\langle$fichier$\rangle$|}|.
%    \begin{macrocode}
  \addtocontents{toc}%
     {{\protect\do@smftoc{#1}}\protect\@gobble{\smf@shortauthors}}
%    \end{macrocode}
% L'article d\'ebute sur la page \cs{c@page} et termine sur
% $\mbox{\cs{smf@lastpage}}-\mbox{\cs{smf@firstpage}}+\mbox{\cs{c@page}}$.
% Les |0| dans les lignes suivantes tiennent compte des cas o\`u
% |\smf@lastpage| ou |\smf@firstpage| sont vides.
%    \begin{macrocode}
  \edef\@@smf@firstpage{\smf@firstpage}
  \edef\smf@tempa{%
       \noexpand\advance\c@page 0\smf@lastpage\relax
       \noexpand\advance\c@page -0\smf@firstpage\relax}
  \edef\smf@firstpage{\arabic{page}}
  \smf@tempa
  \edef\smf@lastpage{\the\c@page}
  \ifx\smf@firstpage\@@smf@firstpage\else
    \PackageWarning{smfmulti}{Difference de premiere page}\fi
  \advance\c@page -1\relax
  \ifodd\c@page\else\advance\c@page 1\relax\fi
%    \end{macrocode}
% On affiche une page de titre pour le fichier |#1.smf|. Cela permet de
% contourner un ``bug'' qui fait que des |\write| sont ignor\'es si \TeX\
% n'a rien \`a |\ship|er apr\`es.
%    \begin{macrocode}
  \@makeincludetitle{#1}
%    \end{macrocode}
%    \begin{macrocode}
% Et on met \`a jour le fichier \texttt{.smf}.
  \smf@write{#1}}
%    \end{macrocode}
% \DescribeMacro{\@makeincludetitle}
% Les macros qui affichent l'ent\^ete de fichier virtuel. De toutes fa\c{c}ons,
% ces pages seront jet\'ees (voire m\^eme pas imprim\'ees!).
% On en profite quand m\^eme pour donner quelques informations.
%    \begin{macrocode}
\def\@makeincludetitle#1{%
 \vtop to 55 mm{%
 \parindent=0pt
 \hrule height 1pt
 \bigskip
 \vbox to 0pt{\noindent \url{#1}%
              \noindent\@xp\ifx\csname smf@journalhead\endcsname\relax
                  , p.\ \smf@firstpage --\smf@lastpage\else
                  \par\smf@journalhead\fi
               \par\vss}\bigskip
 \begin{center}
 \large\vfil
   {\bfseries\smf@boldmath\MakeUppercase\smf@title\par}
 \vfil
 {\edef\smfandname{{\noexpand\normalfont \smfandname}}
    \andify\smf@authors\smf@authors\par}
 \vfil \vrule height 1pt width .3\textwidth \vfil
 \end{center}}
 \vfil
 {\sffamily\centering
   Veuillez compiler ce fichier s\'epar\'ement et l'ins\'erer ici\par\medskip
   Please compile this file separately and insert it here\par }}
%    \end{macrocode}
% \DescribeMacro{\smf@read}
% Cette macro charge le contenu du fichier |#1.smf| s'il existe.
% S'il n'existe pas, les macros attendues sont initialis\'ees.
% (Dans ces fichiers, ceraines macros contiennent des |@| qui est
% ainsi une lettre.)
%    \begin{macrocode}
\def\smf@read#1{%
  \makeatletter
  \openin\smf@in=#1.smf
  \ifeof\smf@in
     \closein \smf@in
     \reset@paperrefs
  \else
     \closein \smf@in
     \input #1.smf
   \fi
   \makeatother
}
%    \end{macrocode}
% \DescribeMacro{\smf@write}
% R\'eciproquement, on \'ecrit \'ecrit dans le |#1.smf| les informations venant
% du volume et de l'article.
% (2001/10/24) On met des \% \`a la fin de chaque |\def| sinon, \c{c}a fait des
% espaces ind\'esirables lorsqu'on lit un fichier \texttt{.smf} en mode
% horizontal (\'eventuellement utile dans une biblio).
%    \begin{macrocode}
\def\smf@write#1{%
  \makeatletter
  \immediate\openout\smf@out=#1.smf
  \bgroup
    \def\do##1##2{\smf@toks=\expandafter{##2}%
    \immediate\write\smf@out
       {\string\def\string ##1\noexpand{\the\smf@toks\noexpand}\smf@pc}}%
    \do@volumerefs\do@paperrefs
  \egroup
  \immediate\closeout\smf@out
  \makeatother
}
%    \end{macrocode}
% \subsection{Macros Slave}
%    \begin{macrocode}
\ifsmf@slave
%    \end{macrocode}
% Met a jour la premiere page, utile qu'en version slave
% Correction d'un bug (2001/10/12) qui ne mettait pas \`a 1 la premi\`ere page
% si elle n'\'etait pas d\'efinie. La conclusion, c'\'etait une page blanche!
%    \begin{macrocode}
\def\smf@getfirstpage{%
  \smf@read \jobname
  \ifx\smf@firstpage\@empty
     \xdef\smf@firstpage{1}\else
     \c@page=\smf@firstpage\fi}
%    \end{macrocode}
% Met a jour la derni\`ere page, version slave
%    \begin{macrocode}
\def\smf@getlastpage{%
   \clearpage
   {\advance\c@page -1 \xdef\smf@lastpage{\arabic{page}}}%
   \ifodd\c@page\else\thispagestyle{empty}\hbox{}\fi
   \smf@write\jobname }
%    \end{macrocode}
% \subsection{Macros Master}
%    \begin{macrocode}
\else
%    \end{macrocode}
% On recupere la liste des fichiers
%    \begin{macrocode}
\def\smf@getfilelist {%
  \makeatletter
  \def\smf@files{}%
  \InputIfFileExists{\jobname.smf}{\def\smf@files{}}%
  \makeatother
}
%    \end{macrocode}
% R\'eciproquement, on ecrit ce qu'il faut dans |#1.smf|
%    \begin{macrocode}
\def\smf@writefilelist {%
  \makeatletter
  \immediate\openout\smf@out=\jobname.smf
  \smf@toks=\expandafter{\smf@newfiles}%
  \immediate\write\smf@out
     {\string\def\string \smf@files\noexpand{\the\smf@toks\noexpand}\smf@pc}%
  \ifx\smf@files\smf@newfiles\else
     \PackageWarning{smfmulti}{Difference dans la liste des fichiers !}
  \fi
  \makeatother
}
%    \end{macrocode}
% \'Ecrit la table des mati\`eres de l'ouvrage, seulement en version master
% En fait, inutile puisqu'on avait pris soin (eh oui...) de faire en sorte
% que |\tableofcontents| remplisse son r\^ole...
% On ajoute le fait que les parties sont en gras, centr\'ees.
%    \begin{macrocode}
\let\smftableofcontents\tableofcontents
\def\@ctocline#1#2#3#4#5{\relax
  \ifnum#1>\c@tocdepth % then omit
  \else
    \par \addpenalty\@secpenalty\addvspace{#2}%
    \begingroup \hyphenpenalty\@M
    \centering {#3{#4}}%
    \par\nobreak
    \endgroup
  \fi}
\def\l@part{\@ctocline{-1}{12pt plus 2pt}{\bfseries\smf@boldmath}}

%    \end{macrocode}
% \DescribeMacro{\do@smftoc}
% Ins\`ere les informations relatives au fichier |#1| dans
% la table des matieres de l'ouvrage
%    \begin{macrocode}
\def\do@smftoc #1{%
  \smf@read {#1}
  \makeatletter
  \@tocline{-2}{12pt plus 2pt}{0pt}{0pt}{}{%
  {\def\smfandname{\&}\andify\smf@shortauthors
   \scshape
   \smf@shortauthors}
   ---
   {\itshape\let\\\relax\ignorespaces\smf@title\unskip\ }}%
   {\smf@firstpage}
     \def\l@part{\@tocline{-1}{0pt}{12pt}{}{}}
     \def\l@section{\@tocline{1}{0pt}{12pt}{}{}}
     \def\l@subsection{\@tocline{2}{0pt}{24pt}{}{}}
     \def\l@subsubsection{\@tocline{3}{0pt}{36pt}{}{}}
     \def\l@paragraph{\@tocline{5}{0pt}{48pt}{}{}}
   \@input{#1.toc}}
%    \end{macrocode}
% Table des r\'esum\'es francais
%    \begin{macrocode}
\def\smftableofresumes{%%
  \chapter*{R\'esum\'es des articles}
  \def\do##1{{\do@smfresume{##1}}}\smf@files}
\def\do@smfresume #1{%
   \smf@read{#1}%
   \@tocline {-2}{12pt plus 2pt}{0pt}{0pt}{}{%
    {\itshape\let\\\relax\ignorespaces\smf@title\unskip}\\
    {\def\smfandname{\&}\andify \smf@authors
     \scshape
     \smf@authors }}%
    {\smf@firstpage}
    \begin{list}{}{\labelwidth\z@ \leftmargin1cm \rightmargin0pt
       \listparindent\normalparindent
       \itemindent\normalparindent \advance\itemindent\labelsep
       \parsep\z@ \@plus\p@
       \let\fullwidthdisplay\relax}%
    \item[] \smf@resume\end{list}}

%    \end{macrocode}
% Table des r\'esum\'es anglais
%    \begin{macrocode}
\def\smftableofabstracts{%%
  \chapter*{Abstracts}
  \def\do##1{{\do@smfabstract{##1}}}\smf@files}

\def\do@smfabstract #1{%
   \smf@read{#1}%
   \@tocline {-2}{12pt plus 2pt}{0pt}{0pt}{}{%
    {\itshape\let\\\relax\ignorespaces\smf@title\unskip}\\
    {\def\smfandname{\&}\andify\smf@authors
     \scshape\smf@authors }}%
    {\smf@firstpage}
    \begin{list}{}{\labelwidth\z@ \leftmargin1cm \rightmargin0pt
       \listparindent\normalparindent
       \itemindent\normalparindent \advance\itemindent\labelsep
       \parsep\z@ \@plus\p@
       \let\fullwidthdisplay\relax}%
    \item[] \smf@abstract\par\end{list}}
%    \end{macrocode}
% Mise \`a jour de la derni\`ere page : la version master .
%    \begin{macrocode}
\AtBeginDocument{\smf@getfilelist}
\AtEndDocument{\smf@writefilelist}
\fi
%</multi>
%    \end{macrocode}
% \section{Package pour l'automatisation des notices bibliographiques}
%    \begin{macrocode}
%<*smfbib>
\ProvidesPackage{smfbib}[2000/10/13 v1.3d
  Automatisation des notices biblio pour la SMF]

\AtEndDocument{\@makesmfbib}

\newwrite\smfbib@out
\newtoks\smfbib@toks

\bgroup
 \catcode`\%=11
 \catcode`\{=11\catcode`\}=11
 \catcode`\[=1\catcode`\]=2
 \global\def\smf@pc[%]
 \global\def\smf@com[%\smf@space\smf@space\smf@space]
 \global\def\smf@lb[{]
 \global\def\smf@rb[}]
\egroup

\def\@makesmfbib{%
\bgroup
  \def\smf@space{ }
  \def\smf@tab{\smf@space\smf@space\smf@space\smf@space}
  \def\do##1##2{\smfbib@toks=\@xp{##2}%
     \immediate\write\smfbib@out{%
     \smf@tab ##1 = \smf@lb\the\smfbib@toks\smf@rb,}}%
  \def\language{french}%
  \immediate\openout\smfbib@out=\jobname.smfbib

  \immediate\write\smfbib@out{%
\smf@pc&smfbib^^J%
\smf@com bib_file\smf@lb^^J%
\smf@com nom    =\smf@lb\jobname.smfbib\smf@rb,^^J%
\smf@com date   =\smf@lb\number\year/\number\month/\number\day\smf@rb,^^J%
\smf@com auteur =\smf@lb smfbib\smf@rb,^^J%
\smf@com note   =\smf@lb\smf@rb^^J%
\smf@com \smf@rb^^J^^J%
}
  \newif\ifsmf@article
  \def\smf@tempb{smfart}\ifx\@classname\smf@tempb \smf@articletrue\fi
  \ifsmf@article
  \immediate\write\smfbib@out {@Article%
\smf@lb\smf@plaintitre:\@setyear:\smf@volume:\smf@firstpage--\smf@lastpage,}
  \else
  \immediate\write\smfbib@out{@Book%
\smf@lb\smf@plaintitre:\@setyear:\smf@volume, }\fi
  \do{publisher }\smf@logo
    \ifsubventionCNRS
\do{sponsor   }{Centre National de la Recherche Scientifique}
    \else\ifsubventionMCC
\do{sponsor   }{Minist\`ere de la Culture et de la Communication}
    \else\ifsubventionCNRSMCC
\do{sponsor   }{Centre National de la Recherche Scientifique et
    Minist\`ere de la Culture et de la Communication}
    \else
\do{sponsor   }\@empty
    \fi\fi\fi
\ifsmf@article
  \do{type      }{article}\else
  \do{type      }{monographie}\fi
\ifx\smf@language\language
  \do{language  }{fre}
  \do{titre     }\@title
  \do{title     }\@alttitle
  \do{resume    }\@abstract
  \do{abstract  }\@altabstract
  \ifsmf@article\else
    \do{shortresume    }\@shortabstract
    \do{shortabstract  }\@shortaltabstract
  \fi
  \do{mots_clefs}\@keywords
  \do{keywords  }\@altkeywords
\else
  \do{language  }{eng}
  \do{titre 	}\@alttitle
  \do{title     }\@title
  \do{resume    }\@altabstract
  \do{abstract  }\@abstract
  \ifsmf@article\else
    \do{shortresume    }\@shortaltabstract
    \do{shortabstract  }\@shortabstract
  \fi
  \do{keywords  }\@keywords
  \do{mots_clefs}\@altkeywords
\fi
% \def\andify{\nxandlist{, }{ and }{ and }}%
% \andify\authors
\ifsmf@editor
  \do{editor    }\authors
\else
  \do{author    }\authors
\fi
\do{shortauthor}\shortauthors
\edef\tmp@year{\@setyear}
\do{year      }\tmp@year
\do{collection}\smf@titre
\do{volume    }\smf@volume
\do{number    }\smf@fascicule
\xdef\@pages{\smf@pages}
\do{pages     }\@pages
\do{class_math}\@subjclass
\do{issn      }\@issn
\do{isbn      }\@isbn
\xdef\@pseudodoi{smf:%
   \ifx\@issn\@empty\@isbn\else\@issn\ifx\@isbn\@empty\else/\@isbn\fi\fi:%
   \@setyear:%
   \smf@volume:%
   \smf@pages:}
\do{id        }\@pseudodoi
\immediate\write\smfbib@out{%
\smf@rb^^J%
}%
\ifsmf@tarifs
 \newcount\@prixmembre\@prixmembre \@tarifNum
 \newcount\@reductionmembre\@reductionmembre\@prixmembre
 \multiply\@reductionmembre by 30\divide\@reductionmembre by 100
 \advance\@prixmembre by -\@reductionmembre
 \immediate\write\smfbib@out{%
  \smf@com prix_public_euros  = \smf@lb \@tarifNum\smf@rb,  ^^J%
  \smf@com prix_membre_euros = \smf@lb \the\@prixmembre\smf@rb,
         \smf@com 70 \smf@pc\smf@space  du prix public%
 }%
\fi
\immediate\closeout\smfbib@out
\egroup}
%</smfbib>
%    \end{macrocode}
% \section{Bourbaki dans Ast\'erisque}
%    \begin{macrocode}
%<*asterki>
%    \end{macrocode}
% Ent\^ete.
%    \begin{macrocode}
\ProvidesClass{smfbourbaki}
     [2003/02/21 v2.1c 
     Classe LaTeX pour les seminaires Bourbaki 
     (Asterisque ou Brochure)]
\def\filename{bourbaki.cls}
\def\fileversion{2.1c}       \def\filedate{2003-02-21}
\immediate\write16{%
LaTeX document class `BOURBAKI' (\fileversion, \filedate)}
%    \end{macrocode}
% On d\'eclare les options. 
% La m\^eme classe sert \`a la fois aux brochures de Bourbaki et au document
% final dans Ast\'erisque. \`A part des finesses de mise en page,
% la seule chose qui doit changer est la taille des  caract\`eres (10 points
% pour le texte final et 12 pour les brochures). La taille du texte est
% r\'egl\'ee proportionnellement pour que la mise en page ne change
% essentiellement pas.
% On met donc une option brochure.
%    \begin{macrocode}
\DeclareOption{11pt}{\typeout{Desole --- le volume est en 10 points}}
\DeclareOption{12pt}{\typeout{Desole --- le volume est en 10 points}}
\newif\if@brochure
\DeclareOption{brochure}{\typeout{Brochure Bourbaki : 12 points, etc.}%
     \PassOptionsToClass{12pt}{smfart}%
     \@brochuretrue}
\DeclareOption{twocolumn}{\typeout{Desole --- 
      une seule colonne dans le style BOURBAKI.}}
\DeclareOption{openbib}{\typeout{Desole ---
      pas d'option openbib dans le style BOURBAKI.}}
\DeclareOption{fleqn}{\typeout{Desole --- 
      pas d'equations a gauche dans le style BOURBAKI.}}
\DeclareOption{titlepage}{\typeout{Desole ---
      pas d'option titlepage dans le style BOURBAKI.}}
\def\@bbklanguage{2}
\DeclareOption{french}%
  {\typeout{Style BOURBAKI -- version francaise}\def\@bbklanguage{1}%
   \PassOptionsToClass{french}{smfart}}
\DeclareOption{francais}%
  {\typeout{Style BOURBAKI -- version francaise}\def\@bbklanguage{1}%
   \PassOptionsToClass{french}{smfart}}
\DeclareOption{english}%
  {\typeout{Style BOURBAKI -- english version}\def\@bbklanguage{0}%
   \PassOptionsToClass{english}{smfart}}

\DeclareOption*{\PassOptionsToClass{\CurrentOption}{smfart}}

\newif\if@bbkswapnumbers
\DeclareOption{swapnumbers}
  {\typeout{Style BOURBAKI -- num\'eros avant les intitul\'es}%
   \@bbkswapnumberstrue}

\newif\if@bbkmaster
\DeclareOption{master}{\@bbkmastertrue}

\newif\if@draft

% \def\smf@volume{}
% \def\smf@fascicule{}
% \def\@abstract{}
% \def\@altabstract{}
% \def\@alttitle{}


\ExecuteOptions{10pt,a4paper,twoside}
\ProcessOptions\relax

\def\smf@getfirstpage{\gdef\smf@firstpage{1}}
\def\smf@getlastpage{\clearpage
  {\advance\c@page-1 \xdef\smf@lastpage{\arabic{page}}}}
\def\smf@pages{\smf@firstpage-\smf@lastpage}

\if@bbkmaster 
  \if@brochure
  \ClassWarning{bourbaki}{Options brochure et master incompatibles.
J'ignore l'option brochure.}%
  \@brochurefalse
  \fi
  \message{Fichier ma\^{\i}tre d'un Ast\'erisque Bourbaki...}
  \LoadClass{smfbook}
  \def\@classname{smfbook}
  \RequirePackage{smfenum}
  \RequirePackage[noxy]{asterisque}
  \RequirePackage[master]{smfmulti}
  \addto\do@paperrefs{\do\smf@subtitle\smf@subtitle
                      \do\smf@altsubtitle\smf@altsubtitle
                      \do\smf@bbknumero\smf@bbknumero
                      \do\smf@keywords\smf@keywords
                      \do\smf@subjclass\smf@subjclass}
  \addto\do@volumerefs{\do\smf@bbkannee\@bbkannee}
  \def\@pnumwidth{3em}

\else 
  \LoadClass{smfart}
  \def\@classname{smfart}
  \if@brochure
    \textwidth 13cm
    \textheight 21.5cm
    \headheight=12pt
    \headsep 12mm
    \footskip 12mm      
    \textwidth  1.2\textwidth
    \textheight 1.2\textheight 
    \calclayout
  \else
    \RequirePackage{smfenum}
    \RequirePackage[noxy]{asterisque}
    \RequirePackage{smfmulti}
    \addto\do@paperrefs{\do\smf@subtitle\@subtitle
                        \do\smf@altsubtitle\@altsubtitle
                        \do\smf@bbknumero\@bbknumero
                        \do\smf@keywords\@keywords
                        \do\smf@subjclass\@subjclass}
    \addto\do@volumerefs{\do\smf@bbkannee\smf@bbkannee}
  \fi
\fi

% \AtBeginDocument{\smf@getfirstpage}
% \AtEndDocument{\smf@getlastpage}


\def\altsubtitle#1{\def\@altsubtitle{#1}}
\def\@altsubtitle{}
\def\subtitle#1{\def\@subtitle{#1}}
\def\@subtitle{}

\def\@setaltabstracthead{\abstractheadfont \altabstractname
  \ifx\@alttitle\@empty\else\ \textup(\emph{\@alttitle}%
       \ifx\@altsubtitle\@empty\else
            \ \textup[\emph{\@altsubtitle}\textup]\fi\textup)\fi}

\def\@bbknumero{}\def\smf@bbknumero{}
\def\@bbkannee{}\def\smf@bbkannee{}
\def\bbknumero#1{\gdef\@bbknumero{#1}\gdef\smf@bbknumero{#1}}
\def\bbkannee#1{\gdef\@bbkannee{#1}}

\if@bbkmaster

\def\smf@titleii{\clearpage
  \thispagestyle{empty}
  \ifx\@empty\addresses\else \@setaddresses\fi
  \vfill
  \hrule
  \bigskip
  \@setkeyclass
  \bigskip
  \hrule
  \vfilneg
}

\def\@setkeyclass{%
  \bgroup
  \def\baselinestretch{1}
  \abstractfont\smaller[2]
  {\abstractheadfont 
   Mots clefs et classification math\'ematique par sujets \textup{(2000)}\par
   \medskip}
   \def\donot##1{}
   \let\do\do@setkeyclass
   \smf@files
  \egroup
}

\def\do@setkeyclass #1{\bgroup
   \smf@read{#1}%
   \noindent
   {\bfseries Expos\'e n\textsuperscript o \smf@bbknumero\MakePointrait}%
   \enspace\ignorespaces
   \smf@keywords\MakePointrait\enspace\ignorespaces
   \smf@subjclass\@addpunct. \par\egroup}

\def\smf@titleiii{%
  \clearpage\thispagestyle{copyright}
  \markboth{\@nx\shorttitle}{\@nx\shorttitle}
  %% INSERER UNE IMAGE
  \null
  \vskip 12\medskipamount plus 8\medskipamount
  \begin{center}\Large\bfseries\smf@boldmath
  {\MakeUppercase\@title\par}
%  \vskip 4\medskipamount plus 2\medskipamount
%   \def\and{,\ \penalty-1}\authors\par
  \end{center}
  \vskip 8\medskipamount plus 4 \medskipamount
%   \def\abstractmargin{1cm}
  \@setabstract\par
  \vskip 1\bigskipamount plus 1\bigskipamount
     \penalty-100
  \@setaltabstract\par
}

% \def\smf@titleiii{\clearpage}

%% Modifications smfmulti

\def\smfmulti@protect{%
  \let\do\relax 
  \let\donot\relax
  \let\bourbakisession\relax}

\def\smf@addfile#1{\bgroup
     \smfmulti@protect
     \smf@toks=\expandafter{\smf@newfiles}%
     \xdef\smf@newfiles{\the\smf@toks\do{#1}}%
   \egroup}

\def\bbksession#1{\addtocontents{toc}{\protect\bourbakisession{#1}}%
   \bgroup
     \smfmulti@protect
     \smf@toks=\expandafter{\smf@newfiles}%
     \xdef\smf@newfiles{\the\smf@toks\donot{\bourbakisession{#1}}}
  \egroup
}

\DeclareRobustCommand{\bourbakisession}[1]{\bigskip
      \noindent
      {\itshape\MakeUppercase{#1}}\par\medskip}

%%% Table des matieres

\def\ps@contents{
  \def\@oddfoot{\normalfont\Tiny\hfil
     {\smf@LOGO\ \@setyear}}%
  \def\@evenfoot{\normalfont\tiny
     {\MakeUppercase\smf@titrecourt
      \ifx\smf@volume\@empty\else{\unskip\ \smf@volume}\fi\hfil}}%
  \def\@evenhead{\normalfont\scriptsize
     \rlap{\bfseries\thepage}\hfil {\itshape TABLE DES MATI\`ERES}\hfil}%
  \def\@oddhead{\normalfont\scriptsize
     \def\\{\unskip\space\ignorespaces}%
     \hfil {\itshape TABLE DES MATI\`ERES}\hfil
           \llap{\bfseries\thepage}}%
  \let\@mkboth\org@markboth
    }


\def\l@chapter{\@tocline{0}{0pt}{0pt}{}{}}

\def\tableofcontents{\begingroup
  \cleardoublepage
  \pagestyle{contents}\thispagestyle{contents}
  \hbox{}\vfil
  \typeout{Table des matieres}%
  \makeatletter
  \@input{\jobname.toc}%
  \global\@nobreakfalse \endgroup
  \newpage }

\def\do@smftoc #1{%
  \smf@read {#1}
  \makeatletter
  \@tocline{-2}{4pt plus 2pt}{0pt}{4em}{}{%
  {\def\smfandname{\&}\andify\smf@authors
   \hbox to 3em{\smf@bbknumero\hss}\smf@authors}
   ---
   {\itshape\let\\\relax\ignorespaces\smf@title\unskip\space
    \ifx\smf@subtitle\@empty\else
         \textup[\smf@subtitle\unskip\textup]\space\fi }}%
   {\smf@firstpage}
}

%% Resumes

\newskip \resumepreskipamount
\resumepreskipamount 18pt plus 6pt minus 6pt  % 1.5 \bigskipamount
\def\smftableofresumes{%%
  \bgroup
  \cleardoublepage
  \def\baselinestretch{1}\small
  \let\@secnumber\@empty
  \addcontentsline{toc}{chapter}{R\'esum\'es des expos\'es}
  \pagestyle{resumes}
%% IL FAUDRAIT SE DEBROUILLER POUR QU'IL Y EN AIT EXACTEMENT 5 PAR PAGE !
   \def\donot##1{##1}
   \def\bourbakisession##1{\clearpage}
%  \def\donot##1{}
  \def\do##1{\vskip\resumepreskipamount
             \do@smfresume{##1}}
  \smf@files\clearpage
  \egroup}

\def\do@smfresume #1{\bgroup
   \smf@read{#1}%
   \edef\@tempa{\noexpand\smf@silentselectlanguage{\smf@langue}}\@tempa
   \vbox{%
   \noindent
   {\def\smfandname{\&}\andify \smf@authors
     \normalfont
     \smf@authors } --
    {\itshape\let\\\relax\ignorespaces\smf@title\unskip
     \ifx\smf@subtitle\@empty\else
            \space\ignorespaces\textup[\smf@subtitle\textup]\fi}}
    \par\nobreak
    \def\smf@tempa{english}\ifx\smf@langue\smf@tempa
       \smf@abstract\else\smf@resume\fi\par
    \egroup
}

\def\ps@resumes{
  \def\@oddfoot{\normalfont\Tiny\hfil
     {\smf@LOGO\ \@setyear}}%
  \def\@evenfoot{\normalfont\tiny
     {\MakeUppercase\smf@titrecourt
      \ifx\smf@volume\@empty\else{\unskip\ \smf@volume}\fi\hfil}}%
  \def\@evenhead{\normalfont\scriptsize
     \rlap{\bfseries\thepage}\hfil {\itshape R\'ESUM\'ES DES EXPOS\'ES}\hfil}%
  \def\@oddhead{\normalfont\scriptsize
     \def\\{\unskip\space\ignorespaces}%
     \hfil {\itshape R\'ESUM\'ES DES EXPOS\'ES}\hfil
           \llap{\bfseries\thepage}}%
  \let\@mkboth\org@markboth
    }

%% Derniere de couv.
%
% \def\smf@gardeiv{\clearpage\thispagestyle{empty}\bgroup
%   \large\centering
%   \smf@restorecmr
%   \null \vfil
%   \fboxsep 1cm
%   \fbox{\begin{minipage}[t]{11cm}{\@setshortabstract}\end{minipage}}
%   \vfil
%   \fbox{\begin{minipage}[t]{11cm}{\@setshortaltabstract}\end{minipage}}
%   \par\vfil
%   \egroup}
% 

\else 
  \let\@mkboth\@gobbletwo
  \let\partmark\@gobble\let\sectionmark\@gobble
  \let\subsectionmark\@gobble

  \def\@setthanks{\def\thanks##1{##1\@addpunct{{\upshape.}}}\thankses}
  \if@brochure

    \def\ps@copyright{\ps@empty}
    \def\ps@expose{\ps@empty
    \def\@evenhead{\normalfont
           \hfil \@bbknumero--\ifnum\c@page<10 0\fi\the\c@page\hfil}
    \let\@oddhead\@evenhead }
    \ps@expose

  \else
 
  \def\ps@copyright{\ps@empty
    \def\@oddfoot{\normalfont\Tiny\hfil {\smf@LOGO\ \@setyear}}%
    \def\@evenfoot{\normalfont\tiny
        {\MakeUppercase\smf@titrecourt
        \ifx\smf@volume\@empty\else{\unskip\ \smf@volume}\fi\hfil}}}
  \def\ps@expose{%
    \def\@oddfoot{\normalfont\Tiny\hfil {\smf@LOGO\ \@setyear}}%
    \def\@evenfoot{\normalfont\tiny
       {\MakeUppercase\smf@titrecourt
        \ifx\smf@volume\@empty\else{\unskip\ \smf@volume}\fi\hfil}}%
    \def\@evenhead{\normalfont\scriptsize
       \rlap{\bfseries\thepage}\hfil {\itshape \leftmark{}{}}\hfil}%
    \def\@oddhead{\normalfont\scriptsize 
       \def\\{\unskip\space\ignorespaces}%
       \hfil {\itshape (\@bbknumero)\quad \rightmark{}{}}\hfil
             \llap{\bfseries\thepage}}%
    \let\@mkboth\org@markboth }
  \ps@expose

  \fi

  \def\@maketitle{%
  \cleardoublepage
    \thispagestyle{copyright}
  \parindent=0pt \normalfont\normalsize
  \let\@makefnmark\relax  \let\@thefnmark\relax
%% REMERCIEMENTS
  \ifx\@empty\thankses\else\@footnotetext{\@setthanks}\fi
  \topskip0\p@ %% on commence tout en haut.
%% L'ENTETE
  {\let\\\relax
   \uppercasenonmath\shorttitle
   \ifx\@empty\shortauthors \let\shortauthors\shorttitle
     \else \uppercasenonmath\shortauthors \andify\shortauthors \fi
     \toks@\@xp{\shortauthors}\@temptokena\@xp{\shorttitle}%
     \edef\@tempa{\@nx\markboth{\the\toks@}{\the\@temptokena}}%
   \@tempa}
  \vtop to 55 true mm{%
  \hbox to\textwidth{S\'eminaire BOURBAKI\hfil \@date}
  \hbox to\textwidth{\if@brochure
     \@bbkannee, n\raise4pt\hbox{\small o} \@bbknumero\else
     \smf@bbkannee, n\raise4pt\hbox{\small o} \@bbknumero,
        p.~\smf@firstpage\ \`a \smf@lastpage
    \fi
    \hss}
    \vfil
    {\centering\bf
     \MakeUppercase\@title \@@par
     \ifx\@empty\@subtitle\else\textup[\@subtitle\textup]\@@par\fi
     \bigskip
     {\normalfont \smfbyname\ }\authors\@@par
    \vfil
    \ifx\@empty\@dedicatory
         \else{\raggedleft\it\@dedicatory\@@par}\vfil\fi}\par}%
  }

% Auteur, adresse

\renewcommand{\author}[2][]{%
  \ifx\@empty\authors
    \gdef\shortauthors{#1}\gdef\authors{#2}%
  \else
    \g@addto@macro\shortauthors{\and#1}%
    \g@addto@macro\authors{\and#2}%
  \fi
  \g@addto@macro\addresses{\author{#2}}%
}

\def\@setaddresses{\par
  \nobreak \begingroup
  \parindent \addressindent\normalfont
  \def\author##1{\begingroup
    \addvspace\bigskipamount \indent ##1\par\endgroup}%
  \def\\{\par\nobreak\ignorespaces}%
  \interlinepenalty\@M
  \def\address##1##2{\begingroup
    \par\nobreak\addvspace\medskipamount\indent
    \@ifnotempty{##1}{(\ignorespaces##1\unskip) }%
    {\normalfont\ignorespaces##2}\par\endgroup}%
  \def\curraddr##1##2{\begingroup
    \@ifnotempty{##2}{\nobreak\indent{\itshape Addresse courante}%
      \@ifnotempty{##1}{, \ignorespaces##1\unskip}~:\space
      ##2\par\endgroup}}%
  \def\email##1##2{\begingroup
    \@ifnotempty{##2}{\nobreak\indent{\itshape \emailname}%
      \@ifnotempty{##1}{, \ignorespaces##1\unskip}~:\space
      \ttfamily##2\par\endgroup}}%
  \def\urladdr##1##2{\begingroup
    \@ifnotempty{##2}{\nobreak\indent{\itshape \urlname}%
      \@ifnotempty{##1}{, \ignorespaces##1\unskip}~:\space
      \ttfamily##2\par\endgroup}}%
  \addresses
  \endgroup
}    
\def\emailname{E-mail}
\def\urlname{Web}

\def\baselinestretch{1.1}
\parskip 0pt plus 4pt

\binoppenalty 2500 % normalement 700
\relpenalty 1500   % normalement 500

\newdimen\addressindent
\addressindent .5\textwidth

\fi

\def\part{\@startsection{part}{1}%
  \z@{3\linespacing\@plus\linespacing}{2\linespacing}%
  {\raggedright\normalfont\bfseries\smf@boldmath\MakeUppercase}}
\def\section{\@startsection{section}{1}%
  \z@{2\linespacing\@plus\linespacing}{\linespacing}%
  {\raggedright\normalfont\bfseries\smf@boldmath\MakeUppercase}}
\def\specialsection{\@startsection{section}{1}%
  \z@{2\linespacing\@plus\linespacing}{\linespacing}%
  {\centering\normalfont\bfseries\smf@boldmath\MakeUppercase}}
\let\sectionname\@empty
\def\subsection{\@startsection{subsection}{2}%
  \z@{.7\linespacing\@plus.7\linespacing}{.3\linespacing}
  {\normalfont\bfseries\smf@boldmath}}
\let\Subsection\subsection

\let\bibliosection\specialsection
\def\bibliofont{\normalfont} 
  % {\def\baselinestretch{1.2}\normalfont}
  % \let\specialsection\section

\def\th@plain{%
  \let\thm@indent\noindent
  \thm@headfont{\normalfont\scshape}%
  \thm@notefont{\normalfont}%
  \thm@preskip.5\linespacing \@plus .5\linespacing
  \thm@postskip\thm@preskip
  \thm@headpunct{\MakePointrait}
  \itshape }
\def\th@definition{\th@plain }  %  was \upshape 
\def\th@remark{\th@definition \thm@headfont{\itshape} \upshape}

%%%% THEOREMES, DEFINITIONS
\if@bbkswapnumbers\swapnumbers\fi

\theoremstyle{plain}
\newtheorem{defi}{\definame}[section]
\newtheorem{prop}[defi]{\propname}
\newtheorem{theo}[defi]{\theoname}
\newtheorem{conj}[defi]{\conjname}
\newtheorem{coro}[defi]{\coroname}
\newtheorem{fait}[defi]{\faitname}
\theoremstyle{definition}
\newtheorem{lemm}[defi]{\lemmname}
\theoremstyle{remark}
\newtheorem{rema}[defi]{\remaname}
\newtheorem{exem}[defi]{\exemname}
\theoremstyle{plain}

\newenvironment{enonce}[2][plain]%
  {\let\smfenonce\relax \theoremstyle{#1}%
   \newtheorem{smfenonce}[\smf@thm]{#2}%
    \begin{smfenonce}}%
    {\end{smfenonce}}%
\newenvironment{enonce*}[2][plain]%
    {\let\smfenonce\relax \theoremstyle{#1}%
     \newtheorem*{smfenonce}{#2}%
     \begin{smfenonce}}%
    {\end{smfenonce}}%

%%%% CITATIONS

\def\@cite#1#2{{%
 \m@th\upshape\mdseries[{#1}{\if@tempswa, #2\fi}]}}

%%%% FIN DU DOCUMENT

\g@addto@macro\smf@captionsenglish{\def\faitname{Fact}}
\g@addto@macro\smf@captionsfrench{\def\faitname{Fait}}

\def\smf@enddoc{%
  \par\vskip 2\bigskipamount
  \bgroup
  \def\baselinestretch{1}\normalfont
  \raggedright
  \ifx\@empty\@translators\else \@settranslators\medskip \fi
  \ifx\@empty\addresses   \else \@setaddresses             \fi
  \par\egroup}
%</asterki>
%    \end{macrocode}
% \section{Ponctuation haute en romain m\^eme en italiques}
% Ce package requiert que \paquet{babel} soit charg\'e et sous-entend que
% l'on est en fran\c cais.
%    \begin{macrocode}
%<*upitparen>
\ProvidesPackage{upitparen}[2003/08/28 v1.1
   Ponctuation haute en romain m\^eme en italiques]
\declare@shorthand{french}{;}{%
    \ifhmode
      \ifdim\lastskip>\z@\unskip\penalty\@M\thinspace\else\FDP@thinspace\fi
    \fi
    \ifmmode\string;\else\textup{\string;}\fi}
\declare@shorthand{french}{!}{%
    \ifhmode
      \ifdim\lastskip>\z@\unskip\penalty\@M\thinspace\else\FDP@thinspace\fi
    \fi
    \ifmmode\string!\else\textup{\string!}\fi}
\declare@shorthand{french}{?}{%
    \ifhmode
      \ifdim\lastskip>\z@\unskip\penalty\@M\thinspace\else\FDP@thinspace\fi
    \fi
    \ifmmode\string?\else \textup{\string?}\fi}
\declare@shorthand{french}{:}{%
    \ifhmode
      \ifdim\lastskip>\z@\unskip\penalty\@M\Fcolonspace\else\FDP@colonspace\fi
    \fi
    \ifmmode\string:\else\textup{\string:}\fi}

\initiate@active@char{(}
\initiate@active@char{)}
\declare@shorthand{french}{(}{%
    \ifmmode\string(\else\textup{\string(}\penalty\@M\fi}
\declare@shorthand{french}{)}{%
    \ifmmode\string)\else\penalty\@M\textup{\string)}\fi}
\declare@shorthand{system}{(}{\string(}
\declare@shorthand{system}{)}{\string)}

\addto\extrasfrench{\bbl@activate{(}\bbl@activate{)}}
\addto\noextrasfrench{\bbl@deactivate{(}\bbl@deactivate{)}}
%    \end{macrocode}
%</upitparen>
% \section{Style \BibTeX\ alphabétique}
%<*smfalpha>
%    \begin{macrocode}
%%  @BibTeX-style-file{"smfalpha.bst"
%%  date="1998/06/15",
%%  version="v0.1"}
%% Types of entries currently allowed in a BibTeX file:
%% ARTICLE -- An article from a journal or magazine.
%% BOOK -- A book with an explicit publisher.
%% BOOKLET -- A work that is printed and bound,
%%     but without a named publisher or sponsoring institution.
%% CONFERENCE -- The same as INPROCEEDINGS,
%%     included for Scribe compatibility.
%% INBOOK -- A part of a book,
%%     which may be a chapter (or section or whatever) and/or a range of pages.
%% INCOLLECTION -- A part of a book having its own title.
%% INPROCEEDINGS -- An article in a conference proceedings.
%% MANUAL -- Technical documentation.
%% MASTERSTHESIS -- A Master's thesis.
%% MISC -- Use this type when nothing else fits.
%% PHDTHESIS -- A PhD thesis.
%% PROCEEDINGS -- The proceedings of a conference.
%% TECHREPORT -- A report published by a school or other institution,
%%     usually numbered within a series.
%% UNPUBLISHED -- A document having an author and title, but not formally
%%     published.
ENTRY
  { address
    author
    booktitle
    chapter
    edition
    editor
    howpublished
    institution
    journal
    key
    language
    month
    note
    number
    organization
    pages
    publisher
    school
    series
    title
    type
    volume
    year
  }
  {}
  { label extra.label extra.same.label sort.label }

INTEGERS { output.state before.all mid.sentence after.name }

FUNCTION {init.state.consts}
{ #0 'before.all :=
  #1 'after.name :=
  #2 'mid.sentence :=
}


STRINGS { s t }
FUNCTION {not}
{   { #0 }
    { #1 }
  if$
}

FUNCTION {and}
{   'skip$
    { pop$ #0 }
  if$
}

FUNCTION {or}
{   { pop$ #1 }
    'skip$
  if$
}

FUNCTION {field.or.null}
{ duplicate$ empty$
    { pop$ "" }
    'skip$
  if$
}

FUNCTION {emphasize}
{ duplicate$ empty$
    { pop$ "" }
    { "\emph{" swap$ * "}" * }
  if$
}

FUNCTION {guillemetize}
{ duplicate$ empty$
    { pop$ "" }
    { "{\og " swap$ * "\fg}" * }
   if$
}

FUNCTION {scapify}
{ duplicate$ empty$
    { pop$ "" }
    { "{\scshape " swap$ * "}" * }
  if$
}


FUNCTION {n.dashify}
{ 't :=
  ""
    { t empty$ not }
    { t #1 #1 substring$ "-" =
{ t #1 #2 substring$ "--" = not
    { "--" *
      t #2 global.max$ substring$ 't :=
    }
    {   { t #1 #1 substring$ "-" = }
{ "-" *
  t #2 global.max$ substring$ 't :=
}
      while$
    }
  if$
}
{ t #1 #1 substring$ *
  t #2 global.max$ substring$ 't :=
}
      if$
    }
  while$
}


FUNCTION {tie.or.space.connect}
{ duplicate$ text.length$ #3 <
    { "~" }
    { " " }
  if$
  swap$ * *
}

FUNCTION {add.space.if.necessary}
{ duplicate$ "" =
    'skip$
    { " " * }
  if$
}


FUNCTION {either.or.check}
{ empty$
    'pop$
    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
  if$
}


FUNCTION {output.nonnull}
{ 's :=
  output.state after.name =
    { extra.same.label "\bysame" =
      { ", " * write$ }
      { " -- " * write$ }
      if$
      mid.sentence  'output.state := }
    {  output.state mid.sentence =
       { ", " * write$ }
       { output.state before.all =
         'write$
          { add.period$ " " * write$ }
         if$
         after.name 'output.state := }
     if$ }
   if$
  s
}


FUNCTION {output}
{ duplicate$ empty$
    'pop$
    'output.nonnull
  if$
}


FUNCTION {missing.warning}
{ "missing " swap$ * " in " * cite$ * warning$ }


FUNCTION {output.check}
{ 't :=
  duplicate$ empty$
    { pop$ t missing.warning }
    'output.nonnull
  if$
}

FUNCTION {output.bibitem}
{ newline$
  "\bibitem[" write$
  label write$
  "]{" write$
  cite$ write$
  "}" write$
  newline$
  ""
  before.all 'output.state :=
}

FUNCTION {fin.entry}
{ add.period$
  write$
  newline$
}


FUNCTION {format.language}
{ language empty$
    { "" }
    { " (" language * ")" * }
  if$
}
INTEGERS { nameptr namesleft numnames }


FUNCTION {format.names}
{ 's :=
  #1 'nameptr :=
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    { s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't :=
      nameptr #1 >
{ namesleft #1 >
    { ", " * t * }
    { numnames #2 >
{ "" * }
'skip$
      if$
      t "others" =
{ " {\normalfont et~al.}" * }
{ " {\normalfont \smfandname} " * t * }
      if$
    }
  if$
}
't
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
}

FUNCTION {format.authors}
{ author empty$
    { "" }
    { extra.same.label "\bysame" =
         { "\bysame " }
         { author format.names scapify }
     if$
    }
  if$
}

FUNCTION {format.editors}
{ editor empty$
    { "" }
    { extra.same.label "\bysame" =
         { "\bysame " }
         { editor format.names scapify }
      if$
      editor num.names$ #1 >
  { " (\smfedsname)" * }
      { " (\smfedname)" * }
      if$
      "\nomorebysame" 'extra.same.label :=
    }
  if$
}

FUNCTION {format.nonauthor.editors}
{ editor empty$
    { "" }
    { editor format.names
      editor num.names$ #1 >
{ ", \smfedsname" * }
{ ", \smfedname" * }
      if$
    }
  if$
}

FUNCTION {format.booktitle}
{ title empty$
    { "" }
    { title "t" change.case$ emphasize }
  if$
}

FUNCTION {format.title}
{ title empty$
    { "" }
    { title "t" change.case$ guillemetize }
  if$
}

FUNCTION {format.journal.vol.year}
{ journal empty$
    { "journal name" missing.warning ""}
    { journal emphasize }
  if$
  volume empty$
    'skip$
    { " \textbf{" * volume * "}" * }
  if$
  year empty$
    { "year" missing.warning }
    { " (" * year * ")" * }
  if$
}


FUNCTION {format.number}
{ number empty$
    { "" }
    { "no.~" number * }
  if$
}


FUNCTION {format.date}
{ year empty$
    { month empty$
{ "" }
{ "there's a month but no year in " cite$ * warning$
  month
}
      if$
    }
    { month empty$
'year
{ month " " * year * }
      if$
    }
  if$
}


FUNCTION {format.bookvolume.series.number}
{ volume empty$
    { "" % Push the empty string as a placeholder in case everything else
         % is empty too.
      series empty$
        'skip$
        { pop$ series } % if series is not empty put in stack
      if$
      number empty$
        'skip$
        { duplicate$ empty$ % if no preceding material,
            'skip$          % do nothing, otherwise
            { ", " * }      % add a comma and space to separate.
          if$
          "no." number tie.or.space.connect * % add the number information
        }
      if$
    }
%% If the volume is NOT EMPTY:
    { "vol." volume tie.or.space.connect % vol. XX
      number empty$
        { series empty$
            'skip$
            { series ", " * swap$ *}    % Series Name, vol. XX
          if$
        }
        { series empty$
            { "can't use both volume and number if series info is missing"
              warning$
              "in BibTeX entry type `" type$ * "'" * top$
            }
            { ", " * series * ", no." * number tie.or.space.connect }
          if$
        }
      if$
    }
  if$

}  % end of format.bookvolume.series.number

%% format.inproc.title.where.editors is used by inproceedings entry types

FUNCTION {format.inproc.title.address.editors}
{ booktitle empty$
    { "" }
%%      Emphasizing the title.  We want initial caps.
    { "in " booktitle emphasize *}
  if$
%%      We add parentheses around the address (place where conference
%%      was held).
  address empty$
    'skip$
    { add.space.if.necessary "(" * address * ")" * }
  if$
%%      Likewise we add parentheses around the editors' names.
  editor empty$
    'skip$
    { add.space.if.necessary "(" * format.nonauthor.editors * ")" * }
  if$
}

%% format.incoll.title.editors is similar to format.inproc... but
%% omits the address. For collections that are not proceedings volumes.

FUNCTION {format.incoll.title.editors}
{ booktitle empty$
    { "" }
%%      Emphasizing the title.  We want initial caps.
    { "in " booktitle emphasize * }
  if$
%%      We add parentheses around the editors' names.
  editor empty$
    'skip$
    { add.space.if.necessary "(" * format.nonauthor.editors * ")" * }
  if$
}


FUNCTION {format.number.series}
{ series empty$
    { number empty$
        { "" }
        { "there's a number but no series in " cite$ * warning$ }
      if$
    }
    { series
      number empty$
        'skip$
        { "\ \textbf{" * number * "}" * }
      if$
    }
  if$
}

FUNCTION {format.edition}
{ edition empty$
    { "" }
    { output.state mid.sentence =
{ edition "l" change.case$ " \smfedname" * }
{ edition "t" change.case$ " \smfedname" * }
      if$
    }
  if$
}

INTEGERS { multiresult }

FUNCTION {multi.page.check}
{ 't :=
  #0 'multiresult :=
    { multiresult not
      t empty$ not
      and
    }
    { t #1 #1 substring$
      duplicate$ "-" =
      swap$ duplicate$ "," =
      swap$ "+" =
      or or
{ #1 'multiresult := }
{ t #2 global.max$ substring$ 't := }
      if$
    }
  while$
  multiresult
}

FUNCTION {format.pages}
{ pages empty$
    { "" }
    { "p.~" pages n.dashify * }
  if$
}

FUNCTION {format.book.pages}
{ pages empty$
    { "" }
    { pages multi.page.check
{ "p.~" pages n.dashify * }
{ "p.~" pages * }
      if$
    }
  if$
}

FUNCTION {format.chapter.pages}
{ chapter empty$
    'format.pages
    { type empty$
{ "ch.~" }
{ type "l" change.case$ " " * }
      if$
      chapter *
      pages empty$
'skip$
{ ", " * format.book.pages * }
      if$
    }
  if$
}

FUNCTION {empty.misc.check}
{ author empty$ title empty$ howpublished empty$
  month empty$ year empty$ note empty$
  and and and and and
  key empty$ not and
    { "all relevant fields are empty in " cite$ * warning$ }
    'skip$
  if$
}

FUNCTION {format.thesis.type}
{ type empty$
    'skip$
    { pop$
      type "t" change.case$
    }
  if$
}

FUNCTION {format.tr.number}
{ type empty$
    { "Tech. Report" }
    'type
  if$
  number empty$
    { "t" change.case$ }
    { number tie.or.space.connect }
  if$
}

FUNCTION {format.article.crossref}
{ key empty$
    { journal empty$
{ "need key or journal for " cite$ * " to crossref " * crossref *
  warning$
  ""
}
{ "in " journal * }
      if$
    }
    { "in " key * }
  if$
  " \cite{" * crossref * "}" *
}

FUNCTION {format.crossref.editor}
{ editor #1 "{vv~}{ll}" format.name$
  editor num.names$ duplicate$
  #2 >
    { pop$ " et~al." * }
    { #2 <
'skip$
{ editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
    { " et~al." * }
    { " \smfandname\ " * editor #2 "{vv~}{ll}" format.name$ * }
  if$
}
      if$
    }
  if$
}

FUNCTION {format.book.crossref}
{ volume empty$
    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
      "in "
    }
    { "vol." volume tie.or.space.connect
      " de " *
    }
  if$
  editor empty$
  editor field.or.null author field.or.null =
  or
    { key empty$
{ series empty$
    { "need editor, key, or series for " cite$ * " to crossref " *
      crossref * warning$
      "" *
    }
    { series * }
  if$
}
{ key * }
      if$
    }
    { format.crossref.editor * }
  if$
  " \cite{" * crossref * "}" *
}

FUNCTION {format.incoll.inproc.crossref}
{ key empty$
  { booktitle empty$
    { editor empty$
      editor field.or.null author field.or.null =
      or
         { "need editor, key, or booktitle for " cite$ * "to crossref " *
           crossref * warning$ "" }
         { "in " format.crossref.editor * }
      if$ }
    { "in " booktitle emphasize * }
    if$ }
  { "in " key * }
  if$
  " \cite{" * crossref * "}" *
}


FUNCTION {article}
{ output.bibitem
  format.authors "author" output.check
  format.title "title" output.check
  crossref missing$
    { format.journal.vol.year output
      format.number output
      format.pages "pages" output.check
    }
    { format.article.crossref output.nonnull
      format.pages output
    }
  if$
  format.language *
  note output
  fin.entry
}

FUNCTION {book}
{ output.bibitem
  author empty$
    { format.editors "author and editor" output.check }
    { format.authors output.nonnull
      crossref missing$
{ "author and editor" editor either.or.check }
'skip$
      if$
    }
  if$
  format.booktitle "title" output.check
  format.edition output
  crossref missing$
    { format.bookvolume.series.number output
      publisher "publisher" output.check
      address output
    }
    { format.book.crossref output.nonnull
    }
  if$
  format.date "year" output.check
  format.language *
  note output
  fin.entry
}
FUNCTION {booklet}
{ output.bibitem
  format.authors output
  format.booktitle "title" output.check
  howpublished output
  address output
  format.date output
  note output
  fin.entry
}

FUNCTION {inbook}
{ output.bibitem
  author empty$
    { format.editors "author and editor" output.check }
    { format.authors output.nonnull
      crossref missing$
{ "author and editor" editor either.or.check }
'skip$
      if$
    }
  if$
  format.title "title" output.check
  crossref missing$
    { format.bookvolume.series.number output
      format.chapter.pages "chapter and pages" output.check
      format.number.series output
      publisher "publisher" output.check
      address output
    }
    { format.chapter.pages "chapter and pages" output.check
      format.book.crossref output.nonnull
    }
  if$
  format.edition output
  format.date "year" output.check
  format.language *
  note output
  fin.entry
}

FUNCTION {incollection}
{ output.bibitem
  format.authors "author" output.check
  format.title "title" output.check
  crossref missing$
    { format.incoll.title.editors "booktitle" output.check
      format.bookvolume.series.number output
      publisher "publisher" output.check
      address output
      format.edition output
      format.date "year" output.check
    }
    { format.incoll.inproc.crossref output.nonnull
    }
  if$
  note output
  format.book.pages output
  format.language *
  fin.entry
}

FUNCTION {inproceedings}
{ output.bibitem
  format.authors "author" output.check
  format.title "title" output.check
  crossref missing$
    { format.inproc.title.address.editors "booktitle" output.check
      format.bookvolume.series.number output
      organization output
      publisher output
      format.date "year" output.check
    }
    { format.incoll.inproc.crossref output.nonnull
    }
  if$
  note output
  format.book.pages output
  format.language *
  fin.entry
}

FUNCTION {conference} { inproceedings }

FUNCTION {manual}
{ output.bibitem
  author empty$
    { organization empty$
'skip$
{ organization output.nonnull
  address output
}
      if$
    }
    { format.authors output.nonnull }
  if$
  format.booktitle "title" output.check
  author empty$
    { organization empty$
{ address output }
'skip$
      if$
    }
    { organization output
      address output
    }
  if$
  format.edition output
  format.date output
  note output
  fin.entry
}

FUNCTION {mastersthesis}
{ output.bibitem
  format.authors "author" output.check
  format.booktitle "title" output.check
  "\smfmastersthesisname" format.thesis.type output.nonnull
  school "school" output.check
  address output
  format.date "year" output.check
  note output
  fin.entry
}

FUNCTION {phdthesis}
{ output.bibitem
  format.authors "author" output.check
  format.title "title" output.check
  "\smfphdthesisname" format.thesis.type output.nonnull
  school "school" output.check
  address output
  format.date "year" output.check
  note output
  format.book.pages output
  fin.entry
}

FUNCTION {proceedings}
{ output.bibitem
  editor empty$
    { organization output }
    { format.editors output.nonnull }
  if$
  format.booktitle "title" output.check
  format.bookvolume.series.number output
  address empty$
    { editor empty$
        'skip$
{ organization output }
      if$
      publisher output
      format.date "year" output.check
    }
    { address output.nonnull
      editor empty$
'skip$
{ organization output }
      if$
      publisher output
      format.date "year" output.check
    }
  if$
  note output
  fin.entry
}

FUNCTION {techreport}
{ output.bibitem
  format.authors "author" output.check
  format.title "title" output.check
  format.tr.number output.nonnull
  institution "institution" output.check
  address output
  format.date "year" output.check
  note output
  fin.entry
}


FUNCTION {misc}
{ output.bibitem
  format.authors output
  format.title output
  howpublished output
  format.date output
  note output
  format.book.pages output
  fin.entry
  empty.misc.check
}

FUNCTION {unpublished}
{ output.bibitem
  format.authors "author" output.check
  format.title "title" output.check
  note "note" output.check
  format.date output
  fin.entry
}
FUNCTION {default.type} { misc }
READ

FUNCTION {sortify}
{ purify$
  "l" change.case$
}

INTEGERS { len }

FUNCTION {chop.word}
{ 's :=
  'len :=
  s #1 len substring$ =
    { s len #1 + global.max$ substring$ }
    's
  if$
}

INTEGERS { et.al.char.used }

FUNCTION {initialize.et.al.char.used}
{ #0 'et.al.char.used :=
}

EXECUTE {initialize.et.al.char.used}

FUNCTION {format.lab.names}
{ 's :=
  s num.names$ 'numnames :=
  numnames #1 >
    { numnames #4 >
    { #3 'namesleft := }
    { numnames 'namesleft := }
      if$
      #1 'nameptr :=
      ""
    { namesleft #0 > }
    { nameptr numnames =
        { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
        { "{\etalchar{+}}" *
          #1 'et.al.char.used :=
        }
        { s nameptr "{v{}}{l{}}" format.name$ * }
          if$
        }
        { s nameptr "{v{}}{l{}}" format.name$ * }
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
      while$
      numnames #4 >
    { "{\etalchar{+}}" *
      #1 'et.al.char.used :=
    }
    'skip$
      if$
    }
    { s #1 "{v{}}{l{}}" format.name$
      duplicate$ text.length$ #2 <
    { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ }
    'skip$
      if$
    }
  if$
}

FUNCTION {author.key.label}
{ author empty$
    { key empty$
    { cite$ #1 #3 substring$ }
    { key #3 text.prefix$ }
      if$
    }
    { author format.lab.names }
  if$
}

FUNCTION {author.editor.key.label}
{ author empty$
    { editor empty$
    { key empty$
        { cite$ #1 #3 substring$ }
        { key #3 text.prefix$ }
      if$
    }
    { editor format.lab.names }
      if$
    }
    { author format.lab.names }
  if$
}

FUNCTION {author.key.organization.label}
{ author empty$
    { key empty$
    { organization empty$
        { cite$ #1 #3 substring$ }
        { "The " #4 organization chop.word #3 text.prefix$ }
      if$
    }
    { key #3 text.prefix$ }
      if$
    }
    { author format.lab.names }
  if$
}

FUNCTION {editor.key.organization.label}
{ editor empty$
    { key empty$
    { organization empty$
        { cite$ #1 #3 substring$ }
        { "The " #4 organization chop.word #3 text.prefix$ }
      if$
    }
    { key #3 text.prefix$ }
      if$
    }
    { editor format.lab.names }
  if$
}

FUNCTION {calc.label}
{ type$ "book" =
  type$ "inbook" =
  or
    'author.editor.key.label
    { type$ "proceedings" =
    'editor.key.organization.label
    { type$ "manual" =
        'author.key.organization.label
        'author.key.label
      if$
    }
      if$
    }
  if$
  duplicate$
  year field.or.null purify$ #-1 #2 substring$
  *
  'label :=
  year field.or.null purify$ #-1 #4 substring$
  *
  sortify 'sort.label :=
}
FUNCTION {sort.format.names}
{ 's :=
  #1 'nameptr :=
  ""
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    { nameptr #1 >
{ "   " * }
'skip$
      if$
%%      s nameptr "{vv{ } }{ll{ }}{  ff{ }}{  jj{ }}" format.name$ 't :=
      s nameptr "{ll{ }}{  ff{ }}{  jj{ }}" format.name$ 't :=
      nameptr numnames = t "others" = and
{ "et~al" * }
{ t sortify * }
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
}

FUNCTION {sort.format.title}
{ 't :=
  "A " #2
    "An " #3
      "The " #4 t chop.word
    chop.word
  chop.word
  sortify
  #1 global.max$ substring$
}

FUNCTION {author.sort}
{ author empty$
    { key empty$
{ "to sort, need author or key in " cite$ * warning$
  ""
}
{ key sortify }
      if$
    }
    { author sort.format.names }
  if$
}

FUNCTION {author.editor.sort}
{ author empty$
    { editor empty$
{ key empty$
    { "to sort, need author, editor, or key in " cite$ * warning$
      ""
    }
    { key sortify }
  if$
}
{ editor sort.format.names }
      if$
    }
    { author sort.format.names }
  if$
}

FUNCTION {author.organization.sort}
{ author empty$
    { organization empty$
{ key empty$
    { "to sort, need author, organization, or key in " cite$ * warning$
      ""
    }
    { key sortify }
  if$
}
{ "The " #4 organization chop.word sortify }
      if$
    }
    { author sort.format.names }
  if$
}

FUNCTION {editor.organization.sort}
{ editor empty$
    { organization empty$
{ key empty$
    { "to sort, need editor, organization, or key in " cite$ * warning$
      ""
    }
    { key sortify }
  if$
}
{ "The " #4 organization chop.word sortify }
      if$
    }
    { editor sort.format.names }
  if$
}

FUNCTION {presort}
{
  calc.label
  sort.label
  "    "
  *
  type$ "book" =
  type$ "inbook" =
  or
    'author.editor.sort
    { type$ "proceedings" =
'editor.organization.sort
{ type$ "manual" =
    'author.organization.sort
    'author.sort
  if$
}
      if$
    }
  if$
  *
  "    "
  *
  year field.or.null sortify
  *
  "    "
  *
  title field.or.null
  sort.format.title
  *
  #1 entry.max$ substring$
  'sort.key$ :=
}

ITERATE {presort}

SORT
STRINGS { longest.label last.sort.label next.extra this.author prev.author }

INTEGERS { longest.label.width last.extra.num }

FUNCTION {initialize.longest.label}
{ "" 'longest.label :=
  #0 int.to.chr$ 'last.sort.label :=
  "" 'next.extra :=
  #0 'longest.label.width :=
  #0 'last.extra.num :=
  "abcxyz" 'prev.author :=
  "" 'this.author :=
}
FUNCTION {forward.pass}
{ last.sort.label sort.label =
    { last.extra.num #1 + 'last.extra.num :=
      last.extra.num int.to.chr$ 'extra.label :=
    }
    { "a" chr.to.int$ 'last.extra.num :=
      "" 'extra.label :=
      sort.label 'last.sort.label :=
    }
  if$

  author empty$
    { editor empty$
      { "" }
      'editor
      if$
    }
    'author
  if$
  'this.author :=
  this.author prev.author =
    { "\bysame" 'extra.same.label := }
    { "" 'extra.same.label :=
      this.author "" =
        { "abcxyz" }
        'this.author
      if$
      'prev.author :=
    }
  if$
}

FUNCTION {reverse.pass}
{ next.extra "b" =
    { "a" 'extra.label := }
    'skip$
  if$
  label extra.label * 'label :=
  label width$ longest.label.width >
    { label 'longest.label :=
      label width$ 'longest.label.width :=
    }
    'skip$
  if$
  extra.label 'next.extra :=
}



EXECUTE {initialize.longest.label}

ITERATE {forward.pass}

REVERSE {reverse.pass}
FUNCTION {begin.bib}
{
 et.al.char.used
    { "\newcommand{\etalchar}[1]{$^{#1}$}" write$ newline$ }
    'skip$
  if$
  preamble$ empty$
    'skip$
    { preamble$ write$ newline$ }
  if$
  "\providecommand{\bysame}{\leavevmode ---\ }" write$ newline$
  "\providecommand{\og}{``}" write$ newline$
  "\providecommand{\fg}{''}" write$ newline$
  "\providecommand{\smfandname}{\&}" write$ newline$
  "\providecommand{\smfedsname}{\'eds.}" write$ newline$
  "\providecommand{\smfedname}{\'ed.}" write$ newline$
  "\providecommand{\smfmastersthesisname}{M\'emoire}" write$ newline$
  "\providecommand{\smfphdthesisname}{Th\`ese}" write$ newline$
  "\begin{thebibliography}{"  longest.label  * "}" * write$ newline$
}

EXECUTE {begin.bib}

EXECUTE {init.state.consts}

ITERATE {call.type$}

FUNCTION {end.bib}
{ newline$
  "\end{thebibliography}" write$ newline$
}

EXECUTE {end.bib}
%    \end{macrocode}
%</smfalpha>
% \section{Style \BibTeX\ numérique}
%<*smfplain>
%    \begin{macrocode}
%%  @BibTeX-style-file{"smfplain.bst"
%%  date="1998/06/15",
%%  version="v0.1"}
%% Types of entries currently allowed in a BibTeX file:
%% ARTICLE -- An article from a journal or magazine.
%% BOOK -- A book with an explicit publisher.
%% BOOKLET -- A work that is printed and bound,
%%     but without a named publisher or sponsoring institution.
%% CONFERENCE -- The same as INPROCEEDINGS,
%%     included for Scribe compatibility.
%% INBOOK -- A part of a book,
%%     which may be a chapter (or section or whatever) and/or a range of pages.
%% INCOLLECTION -- A part of a book having its own title.
%% INPROCEEDINGS -- An article in a conference proceedings.
%% MANUAL -- Technical documentation.
%% MASTERSTHESIS -- A Master's thesis.
%% MISC -- Use this type when nothing else fits.
%% PHDTHESIS -- A PhD thesis.
%% PROCEEDINGS -- The proceedings of a conference.
%% TECHREPORT -- A report published by a school or other institution,
%%     usually numbered within a series.
%% UNPUBLISHED -- A document having an author and title, but not formally
%%     published.
ENTRY
  { address
    author
    booktitle
    chapter
    edition
    editor
    howpublished
    institution
    journal
    key
    language
    month
    note
    number
    organization
    pages
    publisher
    school
    series
    title
    type
    volume
    year
  }
  {}
  { label extra.label }

INTEGERS { output.state before.all mid.sentence after.name }

FUNCTION {init.state.consts}
{ #0 'before.all :=
  #1 'after.name :=
  #2 'mid.sentence :=
}


STRINGS { s t }
FUNCTION {not}
{   { #0 }
    { #1 }
  if$
}

FUNCTION {and}
{   'skip$
    { pop$ #0 }
  if$
}

FUNCTION {or}
{   { pop$ #1 }
    'skip$
  if$
}

FUNCTION {field.or.null}
{ duplicate$ empty$
    { pop$ "" }
    'skip$
  if$
}

FUNCTION {emphasize}
{ duplicate$ empty$
    { pop$ "" }
    { "\emph{" swap$ * "}" * }
  if$
}

FUNCTION {guillemetize}
{ duplicate$ empty$
    { pop$ "" }
    { "{\og " swap$ * "\fg}" * }
   if$
}

FUNCTION {scapify}
{ duplicate$ empty$
    { pop$ "" }
    { "{\scshape " swap$ * "}" * }
  if$
}


FUNCTION {n.dashify}
{ 't :=
  ""
    { t empty$ not }
    { t #1 #1 substring$ "-" =
{ t #1 #2 substring$ "--" = not
    { "--" *
      t #2 global.max$ substring$ 't :=
    }
    {   { t #1 #1 substring$ "-" = }
{ "-" *
  t #2 global.max$ substring$ 't :=
}
      while$
    }
  if$
}
{ t #1 #1 substring$ *
  t #2 global.max$ substring$ 't :=
}
      if$
    }
  while$
}


FUNCTION {tie.or.space.connect}
{ duplicate$ text.length$ #3 <
    { "~" }
    { " " }
  if$
  swap$ * *
}

FUNCTION {add.space.if.necessary}
{ duplicate$ "" =
    'skip$
    { " " * }
  if$
}


FUNCTION {either.or.check}
{ empty$
    'pop$
    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
  if$
}


FUNCTION {output.nonnull}
{ 's :=
  output.state after.name =
    { extra.label "\bysame" =
      { ", " * write$ }
      { " -- " * write$ }
      if$
      mid.sentence  'output.state := }
    {  output.state mid.sentence =
       { ", " * write$ }
       { output.state before.all =
         'write$
          { add.period$ " " * write$ }
         if$
         after.name 'output.state := }
     if$ }
   if$
  s
}


FUNCTION {output}
{ duplicate$ empty$
    'pop$
    'output.nonnull
  if$
}


FUNCTION {missing.warning}
{ "missing " swap$ * " in " * cite$ * warning$ }


FUNCTION {output.check}
{ 't :=
  duplicate$ empty$
    { pop$ t missing.warning }
    'output.nonnull
  if$
}

FUNCTION {output.bibitem}
{ newline$
  "\bibitem{" write$
  cite$ write$
  "}" write$
  newline$
  ""
  before.all 'output.state :=
}

FUNCTION {fin.entry}
{ add.period$
  write$
  newline$
}


FUNCTION {format.language}
{ language empty$
    { "" }
    { " (" language * ")" * }
  if$
}
INTEGERS { nameptr namesleft numnames }


FUNCTION {format.names}
{ 's :=
  #1 'nameptr :=
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    { s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't :=
      nameptr #1 >
{ namesleft #1 >
    { ", " * t * }
    { numnames #2 >
{ "" * }
'skip$
      if$
      t "others" =
{ " {\normalfont et~al.}" * }
{ " {\normalfont \smfandname} " * t * }
      if$
    }
  if$
}
't
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
}

FUNCTION {format.authors}
{ author empty$
    { "" }
    { extra.label "\bysame" =
         { "\bysame " }
         { author format.names scapify }
     if$
    }
  if$
}

FUNCTION {format.editors}
{ editor empty$
    { "" }
    { extra.label "\bysame" =
         { "\bysame " }
         { editor format.names scapify }
      if$
      editor num.names$ #1 >
  { " (\smfedsname)" * }
      { " (\smfedname)" * }
      if$
      "\nomorebysame" 'extra.label :=
    }
  if$
}

FUNCTION {format.nonauthor.editors}
{ editor empty$
    { "" }
    { editor format.names
      editor num.names$ #1 >
{ ", \smfedsname" * }
{ ", \smfedname" * }
      if$
    }
  if$
}

FUNCTION {format.booktitle}
{ title empty$
    { "" }
    { title "t" change.case$ emphasize }
  if$
}

FUNCTION {format.title}
{ title empty$
    { "" }
    { title "t" change.case$ guillemetize }
  if$
}

FUNCTION {format.journal.vol.year}
{ journal empty$
    { "journal name" missing.warning ""}
    { journal emphasize }
  if$
  volume empty$
    'skip$
    { " \textbf{" * volume * "}" * }
  if$
  year empty$
    { "year" missing.warning }
    { " (" * year * ")" * }
  if$
}


FUNCTION {format.number}
{ number empty$
    { "" }
    { "no.~" number * }
  if$
}


FUNCTION {format.date}
{ year empty$
    { month empty$
{ "" }
{ "there's a month but no year in " cite$ * warning$
  month
}
      if$
    }
    { month empty$
'year
{ month " " * year * }
      if$
    }
  if$
}


FUNCTION {format.bookvolume.series.number}
{ volume empty$
    { "" % Push the empty string as a placeholder in case everything else
         % is empty too.
      series empty$
        'skip$
        { pop$ series } % if series is not empty put in stack
      if$
      number empty$
        'skip$
        { duplicate$ empty$ % if no preceding material,
            'skip$          % do nothing, otherwise
            { ", " * }      % add a comma and space to separate.
          if$
          "no." number tie.or.space.connect * % add the number information
        }
      if$
    }
%% If the volume is NOT EMPTY:
    { "vol." volume tie.or.space.connect % vol. XX
      number empty$
        { series empty$
            'skip$
            { series ", " * swap$ *}    % Series Name, vol. XX
          if$
        }
        { series empty$
            { "can't use both volume and number if series info is missing"
              warning$
              "in BibTeX entry type `" type$ * "'" * top$
            }
            { ", " * series * ", no." * number tie.or.space.connect }
          if$
        }
      if$
    }
  if$

}  % end of format.bookvolume.series.number

%% format.inproc.title.where.editors is used by inproceedings entry types

FUNCTION {format.inproc.title.address.editors}
{ booktitle empty$
    { "" }
%%      Emphasizing the title.  We want initial caps, roman.
    { "in " booktitle emphasize * }
  if$
%%      We add parentheses around the address (place where conference
%%      was held).
  address empty$
    'skip$
    { add.space.if.necessary "(" * address * ")" * }
  if$
%%      Likewise we add parentheses around the editors' names.
  editor empty$
    'skip$
    { add.space.if.necessary "(" * format.nonauthor.editors * ")" * }
  if$
}

%% format.incoll.title.editors is similar to format.inproc... but
%% omits the address. For collections that are not proceedings volumes.

FUNCTION {format.incoll.title.editors}
{ booktitle empty$
    { "" }
%%      Emphasizing the title.  We want initial caps
    { "in " booktitle emphasize * }
  if$
%%      We add parentheses around the editors' names.
  editor empty$
    'skip$
    { add.space.if.necessary "(" * format.nonauthor.editors * ")" * }
  if$
}


FUNCTION {format.number.series}
{ series empty$
    { number empty$
        { "" }
        { "there's a number but no series in " cite$ * warning$ }
      if$
    }
    { series
      number empty$
        'skip$
        { "\ \textbf{" * number * "}" * }
      if$
    }
  if$
}

FUNCTION {format.edition}
{ edition empty$
    { "" }
    { output.state mid.sentence =
{ edition "l" change.case$ " \smfedname" * }
{ edition "t" change.case$ " \smfedname" * }
      if$
    }
  if$
}

INTEGERS { multiresult }

FUNCTION {multi.page.check}
{ 't :=
  #0 'multiresult :=
    { multiresult not
      t empty$ not
      and
    }
    { t #1 #1 substring$
      duplicate$ "-" =
      swap$ duplicate$ "," =
      swap$ "+" =
      or or
{ #1 'multiresult := }
{ t #2 global.max$ substring$ 't := }
      if$
    }
  while$
  multiresult
}

FUNCTION {format.pages}
{ pages empty$
    { "" }
    { "p.~" pages n.dashify * }
  if$
}

FUNCTION {format.book.pages}
{ pages empty$
    { "" }
    { pages multi.page.check
{ "p.~" pages n.dashify * }
{ "p.~" pages * }
      if$
    }
  if$
}

FUNCTION {format.chapter.pages}
{ chapter empty$
    'format.pages
    { type empty$
{ "ch.~" }
{ type "l" change.case$ " " * }
      if$
      chapter *
      pages empty$
'skip$
{ ", " * format.book.pages * }
      if$
    }
  if$
}

FUNCTION {empty.misc.check}
{ author empty$ title empty$ howpublished empty$
  month empty$ year empty$ note empty$
  and and and and and
  key empty$ not and
    { "all relevant fields are empty in " cite$ * warning$ }
    'skip$
  if$
}

FUNCTION {format.thesis.type}
{ type empty$
    'skip$
    { pop$
      type "t" change.case$
    }
  if$
}

FUNCTION {format.tr.number}
{ type empty$
    { "Tech. Report" }
    'type
  if$
  number empty$
    { "t" change.case$ }
    { number tie.or.space.connect }
  if$
}

FUNCTION {format.article.crossref}
{ key empty$
    { journal empty$
{ "need key or journal for " cite$ * " to crossref " * crossref *
  warning$
  ""
}
{ "in " journal * }
      if$
    }
    { "in " key * }
  if$
  " \cite{" * crossref * "}" *
}

FUNCTION {format.crossref.editor}
{ editor #1 "{vv~}{ll}" format.name$
  editor num.names$ duplicate$
  #2 >
    { pop$ " et~al." * }
    { #2 <
'skip$
{ editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
    { " et~al." * }
    { " \smfandname\ " * editor #2 "{vv~}{ll}" format.name$ * }
  if$
}
      if$
    }
  if$
}

FUNCTION {format.book.crossref}
{ volume empty$
    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
      "in "
    }
    { "vol." volume tie.or.space.connect
      " de " *
    }
  if$
  editor empty$
  editor field.or.null author field.or.null =
  or
    { key empty$
{ series empty$
    { "need editor, key, or series for " cite$ * " to crossref " *
      crossref * warning$
      "" *
    }
    { series * }
  if$
}
{ key * }
      if$
    }
    { format.crossref.editor * }
  if$
  " \cite{" * crossref * "}" *
}

FUNCTION {format.incoll.inproc.crossref}
{ key empty$
  { booktitle empty$
    { editor empty$
      editor field.or.null author field.or.null =
      or
         { "need editor, key, or booktitle for " cite$ * "to crossref " *
           crossref * warning$ "" }
         { "in " format.crossref.editor * }
      if$ }
    { "in " booktitle emphasize * }
    if$ }
  { "in " key * }
  if$
  " \cite{" * crossref * "}" *
}


FUNCTION {article}
{ output.bibitem
  format.authors "author" output.check
  format.title "title" output.check
  crossref missing$
    { format.journal.vol.year output
      format.number output
      format.pages "pages" output.check
    }
    { format.article.crossref output.nonnull
      format.pages output
    }
  if$
  format.language *
  note output
  fin.entry
}

FUNCTION {book}
{ output.bibitem
  author empty$
    { format.editors "author and editor" output.check }
    { format.authors output.nonnull
      crossref missing$
{ "author and editor" editor either.or.check }
'skip$
      if$
    }
  if$
  format.booktitle "title" output.check
  format.edition output
  crossref missing$
    { format.bookvolume.series.number output
      publisher "publisher" output.check
      address output
    }
    { format.book.crossref output.nonnull
    }
  if$
  format.date "year" output.check
  format.language *
  note output
  fin.entry
}
FUNCTION {booklet}
{ output.bibitem
  format.authors output
  format.booktitle "title" output.check
  howpublished output
  address output
  format.date output
  note output
  fin.entry
}

FUNCTION {inbook}
{ output.bibitem
  author empty$
    { format.editors "author and editor" output.check }
    { format.authors output.nonnull
      crossref missing$
{ "author and editor" editor either.or.check }
'skip$
      if$
    }
  if$
  format.title "title" output.check
  crossref missing$
    { format.bookvolume.series.number output
      format.chapter.pages "chapter and pages" output.check
      format.number.series output
      publisher "publisher" output.check
      address output
    }
    { format.chapter.pages "chapter and pages" output.check
      format.book.crossref output.nonnull
    }
  if$
  format.edition output
  format.date "year" output.check
  format.language *
  note output
  fin.entry
}

FUNCTION {incollection}
{ output.bibitem
  format.authors "author" output.check
  format.title "title" output.check
  crossref missing$
    { format.incoll.title.editors "booktitle" output.check
      format.bookvolume.series.number output
      publisher "publisher" output.check
      address output
      format.edition output
      format.date "year" output.check
    }
    { format.incoll.inproc.crossref output.nonnull
    }
  if$
  note output
  format.book.pages output
  format.language *
  fin.entry
}

FUNCTION {inproceedings}
{ output.bibitem
  format.authors "author" output.check
  format.title "title" output.check
  crossref missing$
    { format.inproc.title.address.editors "booktitle" output.check
      format.bookvolume.series.number output
      organization output
      publisher output
      format.date "year" output.check
    }
    { format.incoll.inproc.crossref output.nonnull
    }
  if$
  note output
  format.book.pages output
  format.language *
  fin.entry
}

FUNCTION {conference} { inproceedings }

FUNCTION {manual}
{ output.bibitem
  author empty$
    { organization empty$
'skip$
{ organization output.nonnull
  address output
}
      if$
    }
    { format.authors output.nonnull }
  if$
  format.booktitle "title" output.check
  author empty$
    { organization empty$
{ address output }
'skip$
      if$
    }
    { organization output
      address output
    }
  if$
  format.edition output
  format.date output
  note output
  fin.entry
}

FUNCTION {mastersthesis}
{ output.bibitem
  format.authors "author" output.check
  format.booktitle "title" output.check
  "\smfmastersthesisname" format.thesis.type output.nonnull
  school "school" output.check
  address output
  format.date "year" output.check
  note output
  fin.entry
}

FUNCTION {phdthesis}
{ output.bibitem
  format.authors "author" output.check
  format.title "title" output.check
  "\smfphdthesisname" format.thesis.type output.nonnull
  school "school" output.check
  address output
  format.date "year" output.check
  note output
  format.book.pages output
  fin.entry
}

FUNCTION {proceedings}
{ output.bibitem
  editor empty$
    { organization output }
    { format.editors output.nonnull }
  if$
  format.booktitle "title" output.check
  format.bookvolume.series.number output
  address empty$
    { editor empty$
        'skip$
{ organization output }
      if$
      publisher output
      format.date "year" output.check
    }
    { address output.nonnull
      editor empty$
'skip$
{ organization output }
      if$
      publisher output
      format.date "year" output.check
    }
  if$
  note output
  fin.entry
}

FUNCTION {techreport}
{ output.bibitem
  format.authors "author" output.check
  format.title "title" output.check
  format.tr.number output.nonnull
  institution "institution" output.check
  address output
  format.date "year" output.check
  note output
  fin.entry
}


FUNCTION {misc}
{ output.bibitem
  format.authors output
  format.title output
  howpublished output
  format.date output
  note output
  format.book.pages output
  fin.entry
  empty.misc.check
}

FUNCTION {unpublished}
{ output.bibitem
  format.authors "author" output.check
  format.title "title" output.check
  note "note" output.check
  format.date output
  fin.entry
}
FUNCTION {default.type} { misc }
READ

FUNCTION {sortify}
{ purify$
  "l" change.case$
}

INTEGERS { len }

FUNCTION {chop.word}
{ 's :=
  'len :=
  s #1 len substring$ =
    { s len #1 + global.max$ substring$ }
    's
  if$
}

FUNCTION {sort.format.names}
{ 's :=
  #1 'nameptr :=
  ""
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    { nameptr #1 >
{ "   " * }
'skip$
      if$
%%      s nameptr "{vv{ } }{ll{ }}{  ff{ }}{  jj{ }}" format.name$ 't :=
      s nameptr "{ll{ }}{  ff{ }}{  jj{ }}" format.name$ 't :=
      nameptr numnames = t "others" = and
{ "et~al" * }
{ t sortify * }
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
}

FUNCTION {sort.format.title}
{ 't :=
  "A " #2
    "An " #3
      "The " #4 t chop.word
    chop.word
  chop.word
  sortify
  #1 global.max$ substring$
}

FUNCTION {author.sort}
{ author empty$
    { key empty$
{ "to sort, need author or key in " cite$ * warning$
  ""
}
{ key sortify }
      if$
    }
    { author sort.format.names }
  if$
}

FUNCTION {author.editor.sort}
{ author empty$
    { editor empty$
{ key empty$
    { "to sort, need author, editor, or key in " cite$ * warning$
      ""
    }
    { key sortify }
  if$
}
{ editor sort.format.names }
      if$
    }
    { author sort.format.names }
  if$
}

FUNCTION {author.organization.sort}
{ author empty$
    { organization empty$
{ key empty$
    { "to sort, need author, organization, or key in " cite$ * warning$
      ""
    }
    { key sortify }
  if$
}
{ "The " #4 organization chop.word sortify }
      if$
    }
    { author sort.format.names }
  if$
}

FUNCTION {editor.organization.sort}
{ editor empty$
    { organization empty$
{ key empty$
    { "to sort, need editor, organization, or key in " cite$ * warning$
      ""
    }
    { key sortify }
  if$
}
{ "The " #4 organization chop.word sortify }
      if$
    }
    { editor sort.format.names }
  if$
}

FUNCTION {presort}
{
  type$ "book" =
  type$ "inbook" =
  or
    'author.editor.sort
    { type$ "proceedings" =
'editor.organization.sort
{ type$ "manual" =
    'author.organization.sort
    'author.sort
  if$
}
      if$
    }
  if$
  "    "
  *
  year field.or.null sortify
  *
  "    "
  *
  title field.or.null
  sort.format.title
  *
  #1 entry.max$ substring$
  'sort.key$ :=
}

ITERATE {presort}

SORT
STRINGS { longest.label prev.author this.author }

INTEGERS { number.label longest.label.width }

FUNCTION {initialize.longest.label}
{ "" 'longest.label :=
  #1 'number.label :=
  #0 'longest.label.width :=
  "abcxyz" 'prev.author :=
  "" 'this.author :=
}

FUNCTION {longest.label.pass}
{ number.label int.to.str$ 'label :=
  number.label #1 + 'number.label :=
  label width$ longest.label.width >
    { label 'longest.label :=
      label width$ 'longest.label.width :=
    }
    'skip$
  if$
  author empty$
    { editor empty$
      { "" }
      'editor
      if$
    }
    'author
  if$
  'this.author :=
  this.author prev.author =
    { "\bysame" 'extra.label := }
    { "" 'extra.label :=
      this.author "" =
        { "abcxyz" }
        'this.author
      if$
      'prev.author :=
    }
  if$
}

EXECUTE {initialize.longest.label}

ITERATE {longest.label.pass}
FUNCTION {begin.bib}
{
  preamble$ empty$
    'skip$
    { preamble$ write$ newline$ }
  if$
  "\providecommand{\bysame}{\leavevmode ---\ }" write$ newline$
  "\providecommand{\og}{``}" write$ newline$
  "\providecommand{\fg}{''}" write$ newline$
  "\providecommand{\smfandname}{\&}" write$ newline$
  "\providecommand{\smfedsname}{\'eds.}" write$ newline$
  "\providecommand{\smfedname}{\'ed.}" write$ newline$
  "\providecommand{\smfmastersthesisname}{M\'emoire}" write$ newline$
  "\providecommand{\smfphdthesisname}{Th\`ese}" write$ newline$
  "\begin{thebibliography}{"  longest.label  * "}" * write$ newline$
}

EXECUTE {begin.bib}

EXECUTE {init.state.consts}

ITERATE {call.type$}

FUNCTION {end.bib}
{ newline$
  "\end{thebibliography}" write$ newline$
}

EXECUTE {end.bib}
%    \end{macrocode}
%</smfplain>
% \clearpage
% \def\filename{index}
% \PrintIndex
% \clearpage
% \PrintChanges
% \Finale
% \end{document}
