diff options
author | Karl Berry <karl@freefriends.org> | 2021-04-18 20:24:44 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2021-04-18 20:24:44 +0000 |
commit | 42af4b15d1af005bbe14b6e4a9728ba7c147c4b4 (patch) | |
tree | 94b5663a35968cdba72d10181fddc274ec95ff37 /Master/texmf-dist/source/latex/smflatex/smflatex.dtx | |
parent | 10e1b85d45093a42f2bc86448e47d772aad8567e (diff) |
smflatex (18apr21)
git-svn-id: svn://tug.org/texlive/trunk@58910 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/smflatex/smflatex.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/smflatex/smflatex.dtx | 8531 |
1 files changed, 8531 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/smflatex/smflatex.dtx b/Master/texmf-dist/source/latex/smflatex/smflatex.dtx new file mode 100644 index 00000000000..855de2b4c6b --- /dev/null +++ b/Master/texmf-dist/source/latex/smflatex/smflatex.dtx @@ -0,0 +1,8531 @@ +% \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} |