% \iffalse % %% sesamanuel.dtx %% Copyright 2014-2015 Sesamath, J.-C. Charpentier, S. Mengin % %% Class `sesamanuel' to use with LaTeX 2e %% Copyright (C) 2014-2015 Sesamath, Jean-C\^ome Charpentier, S\'ebastien %% Mengin. % \fi % %% \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 \~} %% % \iffalse %<*driver> \documentclass[a4paper]{ltxdoc} \IndexPrologue{% \newpage \section*{Index}% Les num\'eros soulign\'es indiquent le num\'ero de ligne de la d\'efinition de l'entr\'ee. Les num\'eros en roman indiquent les num\'eros de ligne o\`u l'entr\'ee est utilis\'ee. } \makeatletter \renewenvironment{theglossary}{% \glossary@prologue \GlossaryParms \let\item\@idxitem \ignorespaces}% {} \makeatother \GlossaryPrologue{% \newpage \section*{{Historique des changements}} \markboth{{Historique des changements}}{{Historique des changements}}% } \DisableCrossrefs %\EnableCrossrefs %\CodelineIndex \RecordChanges %\OnlyDescription \usepackage{fontspec} \usepackage{xunicode} \usepackage{xltxtra} \usepackage[a4paper,left=2in]{geometry} \usepackage{makeidx} \usepackage{array} \let\iint\relax \let\iiint\relax \let\iiiint\relax \let\idotsint\relax \usepackage{amsmath} \usepackage{xcolor} \usepackage[french]{babel} \usepackage{xspace} \usepackage{hyperref} \makeindex \title{Code de la classe \class{sesamanuel}\\Classe pour les cahiers Sésamath} \author{% Jean-Côme Charpentier\thanks{\ttfamily jean-come.charpentier@wanadoo.fr} \and Sébastien Mengin\thanks{\ttfamily sebastien-mengin@edilibre.net} } \newcommand*\pgm[1]{\texttt{#1}} \newcommand*\file[1]{\texttt{#1}} \newcommand*\package[1]{\texttt{#1}} \newcommand*\class[1]{\texttt{#1}} \newcommand*\option[1]{\texttt{#1}} \newcommand*\key[1]{\texttt{#1}} \newcommand*\environ[1]{\texttt{#1}} \begin{document} \maketitle \newpage \tableofcontents \newpage \DocInput{sesamanuel.dtx} \PrintChanges \PrintIndex \end{document} % % \fi % % \changes{v0.1}{2013/07/16}{% % Classe \class{sesacah} commencée. % } % \changes{v0.2}{2014/03/05}{% % Classe \class{sesacah} utilisée en production. % } % \changes{v0.3}{2014/08/26}{% % Quelques aménagements de la classe après écriture de la % documentation.\endgraf % Package \package{sesacah} pour une utilisation indépendante. % } % \changes{v0.4}{2014/10/31}{% % Écriture de la partie libre. % } % \changes{v0.5}{2014/12/20}{% % Changement de nom sesacah en sesamanuel. % } % \changes{v0.6}{2015/03/03}{% % Mise en cohérence avec les sources du site Sesamath.\endgraf % Package \package{sesamanuelTIKZ} ajouté au dtx. % } % \CheckSum{0} % \iffalse %<*class> % \fi % \section{Partie introductive} % La partie introductive de la classe n'a rien de particulier, on % retrouve la définition de version et de date de la classe ainsi que % les commandes \LaTeX{} pour communiquer ces informations à % l'utilisateur. % \begin{macrocode} \def\filedate{2015/03/03} \let\smcfiledate\filedate \def\fileversion{0.6} \let\smcfileversion\fileversion \NeedsTeXFormat{LaTeX2e}[1995/06/01] \ProvidesClass{sesamanuel}[% \filedate\space v\fileversion\space Classe pour les cahiers Sesamath (SM/JCC/SM)% ] % \end{macrocode} % Dans cette partie introductive, on charge également la classe % \class{book}. Pour l'instant, il n'y a besoin d'aucune option % particulière, les options par défaut sont tout à fait suffisantes. % \begin{macrocode} \LoadClass{book} % \end{macrocode} % \section{Options de classe} % La classe gère le codage d'entrée en option. On retrouve tous les % codages possibles. En principe, la classe est sensée fonctionner % avec \XeTeX{} et alors uniquement un codage d'entrée UTF-8 mais on % permettra un fonctionnement sous \LaTeX{} et donc avec les codages % permis par \package{inputenc}. Comme il y a beaucoup de déclarations % différentes, on utilise une macro générale de déclaration d'option : % \begin{macrocode} \def\smc@enc@opt#1{\DeclareOption{#1}{\def\smc@encoding{#1}}} \smc@enc@opt{ascii} \smc@enc@opt{latin1} \smc@enc@opt{latin2} \smc@enc@opt{latin3} \smc@enc@opt{latin4} \smc@enc@opt{latin5} \smc@enc@opt{latin9} \smc@enc@opt{latin10} \smc@enc@opt{decmulti} \smc@enc@opt{cp850} \smc@enc@opt{cp852} \smc@enc@opt{cp858} \smc@enc@opt{cp437} \smc@enc@opt{cp437de} \smc@enc@opt{cp865} \smc@enc@opt{applemac} \smc@enc@opt{macce} \smc@enc@opt{next} \smc@enc@opt{cp1250} \smc@enc@opt{cp1252} \smc@enc@opt{cp1257} \smc@enc@opt{ansinew} \smc@enc@opt{utf8} % \end{macrocode} % On a également une option pour obtenir ou non les repères % photographique (et les débordements de pleine page). On donne sa % valeur par défaut qui est vraie. % \begin{macrocode} \newif\ifsmc@crop \smc@croptrue \DeclareOption{crop}{\smc@croptrue} \DeclareOption{nocrop}{\smc@cropfalse} % \end{macrocode} % Une dernière option permet de supprimer les numéros de page mais % uniquement pour un texte libre. % \begin{macrocode} \newif\ifsmc@page \smc@pagetrue \DeclareOption{page}{\smc@pagetrue} \DeclareOption{nopage}{\smc@pagefalse} % \end{macrocode} % Les options par défaut sont l'utilisation de UTF-8 et de repère % photgraphique et de la numérotation des pages en partie libre. On % aura également besoin d'une macro contenant la chaîne \og utf8 \fg{}. % \begin{macrocode} \newcommand*\smc@string@utfviii{utf8} \ExecuteOptions{utf8} \ProcessOptions % \end{macrocode} % \section{Chargement des extensions} % On chargera le minimum d'extensions dans la classe afin de limiter % les problèmes de compatibilités avec les différentes distributions % \TeX{} (distributions et versions de ces distributions). On aurait % pu choisir de charger les extensions \package{ifpdf}, % \package{ifluatex} et \package{ifxetex} pour tester le mode de % compilation et agir en conséquence mais on n'a pas besoin de ce luxe % : comme on est en tout début de classe, on peut utiliser des % méthodes légèrement moins solides que celles fournies dans ces % extensions mais très largement suffisantes ici. % % On doit tester dans l'ordre : % \begin{enumerate} % \item si on compile avec PDF\LaTeX{} ou lua\LaTeX{} ce qui % doit donner une erreur de compilation immédiate avec un message % d'erreur explicite ; % \item si on compile avec \LaTeX{} ou avec \XeLaTeX{} ce qui donnera % un chargement d'extensions différentes et, plus tard, une gestion % des fontes différentes. % \end{enumerate} % Le code suivant est une recopie du code de \package{ifxetex} de Will % Robertson. % \begin{macrocode} \newif\ifxetex \begingroup\expandafter\expandafter\expandafter\endgroup \expandafter\ifx\csname XeTeXrevision\endcsname\relax \xetexfalse \else \xetextrue \fi % \end{macrocode} % Le code suivant est très largement suffisant pour détecter en tout % début de classe si on utilise PDF\LaTeX{} en mode PDF, PDF\LaTeX{} % en mode dvi, \XeLaTeX{} ou enfin lua\LaTeX{}. % \begin{macrocode} \newif\ifpdftex \newif\ifpdfdvi \newif\ifluatex \ifx\luatexversion\undefined \luatexfalse \ifx\pdfoutput\undefined \pdftexfalse \pdfdvifalse \else \pdftextrue \ifnum\pdfoutput=\z@ \pdfdvitrue \else \pdfdvifalse \fi \fi \else \luatextrue \fi % \end{macrocode} % On teste d'abord les modes qui conduisent à une erreur de % compilation. % \begin{macrocode} \ifpdftex \unless\ifpdfdvi \ClassError{sesamanuel}{Vous ne pouvez pas compiler en mode pdflatex} {Compilez en mode latex.}% \fi \fi \ifluatex \ClassError{sesamanuel}{Vous ne pouvez pas compiler en mode lualatex} {Compilez en mode latex.}% \fi % \end{macrocode} % On commence le chargement des extensions par celles qui dépendent du % mode de compilation. Au préalable, on charge le package % \package{etex} pour ne pas embêter ceux qui vont utiliser TikZ. % \begin{macrocode} \RequirePackage{etex} \ifxetex \RequirePackage{fontspec} \RequirePackage{xunicode} \defaultfontfeatures{Ligatures=TeX} % \end{macrocode} % Si l'auteur a précisé un codage autre que utf8 dans les options de % classe, on va émettre un message d'erreur. % \begin{macrocode} \unless\ifx\smc@encoding\smc@string@utfviii \ClassError{sesamanuel}{Vous ne pouvez pas utiliser un codage autre que utf8 avec xelatex}{Changez les codages de tous vos fichiers pour les transformer en utf8.}% \fi % \end{macrocode} % Si on n'est pas en mode \XeLaTeX{}, on considèrera qu'on est en mode % \LaTeX{}. Si ce n'est pas vrai, il y aura déjà eu un message % d'erreur auparavant. On déclare également des fontes annexes. % \begin{macrocode} \else \RequirePackage[T1]{fontenc} \RequirePackage[\smc@encoding]{inputenc} \fi % \end{macrocode} % On charge les fontes courantes. Le réglage de la fonte Helvetica % fait que l'œil est le même que pour Palatino. % \begin{macrocode} \RequirePackage[scaled=0.87]{helvet} \RequirePackage{mathpazo} \renewcommand{\ttdefault}{lmtt} % \end{macrocode} % Puis quelques autres à usage plus ponctuel. % \begin{macrocode} \RequirePackage{mathrsfs} \RequirePackage{pifont} \RequirePackage[official]{eurosym} % \end{macrocode} % Il est difficle de trouver une fonte directement installée dans les % distributions \TeX{} qui se rapproche du Comic Sans proposé par la % maquette. Un premier essai a été Comforta mais il semble que cette % fonte n'existait pas sur les versions un peu ancienne des % distributions \TeX{} (par exemple \TeX Live 2009). On fait un autre % essai avec la famille llcmss (\package{lxfonts}). % \begin{macrocode} %%%\newcommand*\scriptfamily{\fontfamily{fco}\selectfont} \newcommand*\scriptfamily{\fontfamily{llcmss}\selectfont} % \end{macrocode} % Tout ce qui est empagement est paramétré au maximum. |\smc@bleed| % indique le débordement des éléments en pleine page. % \begin{macrocode} \newcommand*\smc@paperheight{27cm} \newcommand*\smc@paperwidth{19.5cm} \newcommand*\smc@marginleft{1.33cm} \newcommand*\smc@marginright{1.33cm} % \end{macrocode} % Il y a une dimension en plus qui ne sera pas gérée par geometry : le % surplus de marge droite pour certains éléments de l'ouvrage. % \begin{macrocode} \newcommand*\ExtraMarginRight{1.8cm} \newcommand*\smc@margintop{2.5cm} \newcommand*\smc@headheight{14.4pt} \newcommand*\smc@headsep{1.4cm} \newcommand*\smc@marginbottom{2cm} \newcommand*\smc@footskip{1.2cm} % \end{macrocode} % Les éléments suivants dépendent de la demande ou non de repères % photographiques. On traite d'abord le cas où il y a une telle demande. % \begin{macrocode} \ifsmc@crop \newcommand*\smc@bleed{5mm} % \end{macrocode} % On peut alors appeler l'extension geometry ainsi que crop. Avant % d'appeler geometry, on sauvegarde les éléments de mise en page dans % des macros privées. Tous les calculs de distances se feront avec des % macros (jamais de longueurs directes). % \begin{macrocode} \RequirePackage[driver=none, paperheight=\smc@paperheight, paperwidth=\smc@paperwidth, top=\smc@margintop, headheight=\smc@headheight, headsep=\smc@headsep, bottom=\smc@marginbottom, footskip=\smc@footskip, left=\smc@marginleft, right=\smc@marginright, nomarginpar]{geometry} \RequirePackage[cam,a4,center]{crop} % \end{macrocode} % Si on ne demande pas de repère photographique, l'extension % \package{crop} est inutile et les débordements de pleine page sont % supprimés. L'appel de \package{geometry} se fait exactement de la % même façon qu'avec l'option crop mais on garde quand même un double % code au cas où l'appel ne serait plus le même plus tard. % \begin{macrocode} \else \newcommand*\smc@bleed{0mm} \RequirePackage[driver=none, paperheight=\smc@paperheight, paperwidth=\smc@paperwidth, top=\smc@margintop, headheight=\smc@headheight, headsep=\smc@headsep, bottom=\smc@marginbottom, footskip=\smc@footskip, left=\smc@marginleft, right=\smc@marginright, nomarginpar]{geometry} \RequirePackage[off,a4,center]{crop} \fi % \end{macrocode} % On continue avec d'autres extensions utiles % \begin{macrocode} \RequirePackage{ifmtarg} \RequirePackage{mathtools} \RequirePackage{amssymb} \RequirePackage{longtable, tabularx} \RequirePackage{multirow} \RequirePackage[table]{xcolor} \RequirePackage{pst-all, pstricks-add} \RequirePackage{fancyhdr} \RequirePackage{fancyvrb} \RequirePackage{multicol} \RequirePackage[french]{babel} \RequirePackage[autolanguage]{numprint} % \end{macrocode} % On crée quelques registres de brouillon % \begin{macrocode} \newbox\smc@boxa \newbox\smc@boxb \newdimen\smc@dima \newdimen\smc@dimb % \end{macrocode} % \section{Mise en page générale} % Suppression des retraits d'alinéa. % \begin{macrocode} \setlength{\parindent}{0pt} % \end{macrocode} % \begin{macro}{\cleardoubleoddpage} % Macro permettant de commencer sur une page impaire en remplissant si % besoin une page vide (pas totalement vide). % \begin{macrocode} \newcommand*\cleardoubleoddpage{% \clearpage \pagestyle{empty} \cleardoublepage } % \end{macrocode} % \end{macro} % \begin{macro}{\cleardoubleevenpage} % Macro permettant de commencer sur une page paire en remplissant si % besoin une page vide (pas totalement vide). Cette macro a besoin de % la commande intermédiaire |\clearevendoublepage| construite sur le % modèle de |\cleardoublepage| de \LaTeX. Il semble que la maquette % n'utilise plus l'ouverture en page paire mais on laisse quand même % les macros au cas où. % \begin{macrocode} \newcommand*\clearevendoublepage{% \clearpage \ifodd\c@page \hbox{}\newpage \fi } \newcommand*\cleardoubleevenpage{% \clearpage \pagestyle{empty} \clearevendoublepage } % \end{macrocode} % \end{macro} % \begin{macro}{\normalsize} % La classe définit un interlignage bien plus important que % d'habitude. Il faut donc redéfinir les commandes standards de taille % de caractère pour respecter cette marche typographique tout au long % du document. La demande est d'avoir un interlignage de 14 points au % lieu du 12 points habituel. On mettra plutôt 14.4 points pour garder % la progression géométrique habituelle. On ne touche pas au ressorts % verticaux pour les formules hors-texte. % \begin{macrocode} \renewcommand\normalsize{% \@setfontsize\normalsize{9.5}\@xivpt \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@ \abovedisplayshortskip \z@ \@plus3\p@ \belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@ \belowdisplayskip \abovedisplayskip \let\@listi\@listI} \normalsize % \end{macrocode} % Les autres commandes suivent le même procédé. On augmente % l'interlignage de un cran dans la progression géométrique. % \begin{macrocode} \renewcommand\small{% \@setfontsize\small{8.5}{12}% \abovedisplayskip 8.5\p@ \@plus3\p@ \@minus4\p@ \abovedisplayshortskip \z@ \@plus2\p@ \belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@ \belowdisplayskip \abovedisplayskip } \renewcommand\footnotesize{% \@setfontsize\footnotesize{7.5}{11}% \abovedisplayskip 6\p@ \@plus2\p@ \@minus4\p@ \abovedisplayshortskip \z@ \@plus\p@ \belowdisplayshortskip 3\p@ \@plus\p@ \@minus2\p@ \belowdisplayskip \abovedisplayskip } \renewcommand\scriptsize{\@setfontsize\scriptsize{6.5}{9.5}} \renewcommand\tiny{\@setfontsize\tiny\@vpt\@viipt} \renewcommand\large{\@setfontsize\large\@xiipt\@xviipt} \renewcommand\Large{\@setfontsize\Large\@xivpt{22}} \renewcommand\LARGE{\@setfontsize\LARGE\@xviipt{25}} \renewcommand\huge{\@setfontsize\huge\@xxpt{30}} \renewcommand\Huge{\@setfontsize\Huge\@xxvpt{36}} \setlength\smallskipamount{3\p@ \@plus 1\p@ \@minus 1\p@} \setlength\medskipamount{6\p@ \@plus 2\p@ \@minus 2\p@} \setlength\bigskipamount{12\p@ \@plus 4\p@ \@minus 4\p@} % \end{macrocode} % \end{macro} % \begin{environment}{itemize} % En fait, il n'y a pas un environnement |itemize| mais tout un tas % qui seront mis en place en fonction du contexte. On commence par % l'environnement qui indique qu'on a pas le droit d'utiliser cet % environnement ! On inhibe |\item| pour ne pas multipler les messages % d'erreur. % \begin{macrocode} \newenvironment{smc@noitemize}{% \ClassError{sesamanuel}{Il est interdit d'utiliser itemize ici} {Consultez la documentation pour plus de renseignements.}% \let\item\relax }{} % \end{macrocode} % Par défaut, c'est l'environnement interdit qui est actif. % \begin{macrocode} \let\itemize\smc@noitemize \let\enditemize\endsmc@noitemize % \end{macrocode} % \begin{macro}{\DeclareCorrItemize} % On crée un spécificateur d'environnement itemize pour les % corrigés. Il ne s'agit pas de liste au sens \LaTeX ien du terme : il % n'y a pas de passage à la ligne avant le premier item, il n'y a pas % de retrait. % % Le premier argument est le nom de base (il sera précédé de smc@corr % et terminé par itemize), le % deuxième argument est le type de puce % \begin{macrocode} \newcommand*\DeclareCorrItemize[2]{% \newenvironment{smc@corr#1itemize}{% \def\item{\par#2~}% \ignorespaces } {\par} } % \end{macrocode} % \end{macro} % Les espacements sont les mêmes pour toutes les listes sauf les % enumerate. % \emph{normales}. % \begin{macrocode} \def\smc@setalllist{% \setlength{\leftmargin}{\ListLabelWidth}% \setlength{\rightmargin}{0mm}% \setlength{\labelwidth}{\ListLabelWidth}% \setlength{\labelsep}{0mm}% \setlength{\itemindent}{0mm}% \setlength{\listparindent}{0mm}% \setlength{\topsep}{0mm}% \setlength{\partopsep}{\baselineskip}% \setlength{\itemsep}{0mm}% \setlength{\parsep}{0mm}% \def\makelabel##1{##1\hss}% } % \end{macrocode} % Pour les enumerate de premier niveau, on peut avoir une largeur plus % importante d'étiquette afin de pouvoir composer des numéros sur deux % chiffres sans télescopage. Ce niveau utilise |\smc@setallfirstlist| % qui est par défaut égal à la macro précédente. % \begin{macrocode} \let\smc@setallfirstlist\smc@setalllist % \end{macrocode} % Pour les list enumerate de premier niveau, on pourra utiliser une % place plus importante pour le numéro afin de permettre une % numérotation sur deux chiffres. C'est l'environnement |bigenumerate| % qui utilisera cette possibilité. % \begin{macrocode} \def\smc@setallbiglist{% \setlength{\leftmargin}{\EnumerateLabelWidth}% \setlength{\rightmargin}{0mm}% \setlength{\labelwidth}{\EnumerateLabelWidth}% \setlength{\labelsep}{0mm}% \setlength{\itemindent}{0mm}% \setlength{\listparindent}{0mm}% \setlength{\topsep}{0mm}% \setlength{\partopsep}{\baselineskip}% \setlength{\itemsep}{0mm}% \setlength{\parsep}{0mm}% \def\makelabel##1{##1\hss}% } % \end{macrocode} % Vient ensuite l'environnement de liste à puce dans les prérequis. On % donnera systématiquement la variante \og corr \fg de l'environnement % même si celle-ci ne sert à rien pour l'instant : c'est une réserve % pour l'avenir. % % On teste la profondeur des itemize pour pouvoir définir une puce % différente en fonction du niveau. % \begin{macrocode} \newenvironment{smc@prerequisitemize}{% \ifnum\@listdepth=\z@ \list{\textcolor{PrerequisItemColor}{$\blacktriangleright$}} {\smc@setalllist}% \else \list{\textcolor{PrerequisItemColor}{$\blacktriangleright$}} {\smc@setalllist}% \fi } {\endlist} \DeclareCorrItemize{prerequis} {\textcolor{PrerequisItemColor}{$\blacktriangleright$}} % \end{macrocode} % Puis l'environnement de liste à puce dans l'auto-évaluation. % \begin{macrocode} \newenvironment{smc@AEitemize}{% \ifnum\@listdepth=\z@ \list{\textcolor{AEItemColor}{$\bullet$}} {\smc@setalllist}% \else \list{\textcolor{AEItemColor}{$\bullet$}} {\smc@setalllist}% \fi } {\endlist} \DeclareCorrItemize{AE}{\textcolor{AEItemColor}{$\bullet$}} % \end{macrocode} % Puis l'environnement de liste à puce dans les méthodes. % \begin{macrocode} \newenvironment{smc@exappitemize}{% \ifnum\@listdepth=\z@ \list{\textcolor{ExAppItemColor}{$\bullet$}} {\smc@setalllist}% \else \list{\textcolor{ExAppItemColor}{$\bullet$}} {\smc@setalllist}% \fi } {\endlist} \DeclareCorrItemize{exapp}{\textcolor{ExAppItemColor}{$\bullet$}} % \end{macrocode} % Puis l'environnement de liste à puce dans les environnement de type % définition. % \begin{macrocode} \newenvironment{smc@defitemize}{% \ifnum\@listdepth=\z@ \list{% \color{DefItemColor}% \vrule width \ItemRuleWidth height \ItemRuleHeight depth \ItemRuleDepth \relax} {\smc@setalllist}% \else \list{% \color{DefItemColor}% \vrule width \ItemRuleWidth height \ItemRuleHeight depth \ItemRuleDepth \relax} {\smc@setalllist}% \fi } {\endlist} \DeclareCorrItemize{def}{% \textcolor{DefItemColor}{% \vrule width \ItemRuleWidth height \ItemRuleHeight depth \ItemRuleDepth }% } % \end{macrocode} % Puis l'environnement de liste à puce dans les activités. % \begin{macrocode} \newenvironment{smc@activiteitemize}{% \ifnum\@listdepth=\z@ \list{\textcolor{ActiviteItemColor}{$\bullet$}} {\smc@setalllist}% \else \list{\textcolor{ActiviteItemColor}{$\bullet$}} {\smc@setalllist}% \fi } {\endlist} \DeclareCorrItemize{activite}{\textcolor{ActiviteItemColor}{$\bullet$}} % \end{macrocode} % Puis l'environnement de liste à puce dans les remarques. % \begin{macrocode} \newenvironment{smc@remitemize}{% \ifnum\@listdepth=\z@ \list{% \color{RemItemColor} \vrule width \ItemRuleWidth height \ItemRuleHeight depth \ItemRuleDepth \relax} {\smc@setalllist}% \else \list{% \color{RemItemColor} \vrule width \ItemRuleWidth height \ItemRuleHeight depth \ItemRuleDepth \relax} {\smc@setalllist}% \fi } {\endlist} \DeclareCorrItemize{rem}{% \textcolor{RemItemColor}{% \vrule width \ItemRuleWidth height \ItemRuleHeight depth \ItemRuleDepth }% } % \end{macrocode} % Puis l'environnement de liste à puce dans les exemples. % \begin{macrocode} \newenvironment{smc@exempleitemize}{% \ifnum\@listdepth=\z@ \list{\textcolor{ExempleItemColor}{$\bullet$}} {\smc@setalllist}% \else \list{\textcolor{ExempleItemColor}{$\bullet$}} {\smc@setalllist}% \fi } {\endlist} \DeclareCorrItemize{exemple}{\textcolor{ExempleItemColor}{$\bullet$}} % \end{macrocode} % Puis l'environnement de liste à puce dans les preuves. % \begin{macrocode} \newenvironment{smc@proofitemize}{% \ifnum\@listdepth=\z@ \list{\textcolor{ProofItemColor}{$\bullet$}} {\smc@setalllist}% \else \list{\textcolor{ProofItemColor}{$\bullet$}} {\smc@setalllist}% \fi } {\endlist} \DeclareCorrItemize{proof}{\textcolor{ProofItemColor}{$\bullet$}} % \end{macrocode} % Puis l'environnement de liste à puce dans les parties Exercices de % base et Exercices d'approfondissement. % \begin{macrocode} \newenvironment{smc@exerciceitemize}{% \ifnum\@listdepth=\z@ \list{\textcolor{ExerciceItemColor}{$\bullet$}} {\smc@setalllist}% \else \list{\textcolor{ExerciceItemColor}{$\bullet$}} {\smc@setalllist}% \fi } {\endlist} \DeclareCorrItemize{exercice}{\textcolor{ExerciceItemColor}{$\bullet$}} % \end{macrocode} % Puis l'environnement de liste à puce pour les acquis. % \begin{macrocode} \newenvironment{smc@acquisitemize}{% \ifnum\@listdepth=\z@ \list{\textcolor{AcquisItemColor}{\footnotesize$\blacktriangleright$}} {\smc@setalllist}% \else \list{\textcolor{AcquisItemColor}{$\bullet$}} {\smc@setalllist}% \fi } {\endlist} \DeclareCorrItemize{acquis}{\textcolor{AcquisItemColor}{$\bullet$}} % \end{macrocode} % Puis l'environnement de liste à puce pour les commentaires. Dans cet % espace, on prend la forme la plus simple. % \begin{macrocode} \newenvironment{smc@commentaireitemize}{% \ifnum\@listdepth=\z@ \list{\textcolor{CommentaireItemColor}{$\bullet$}} {\smc@setalllist}% \else \list{\textcolor{CommentaireItemColor}{$\bullet$}} {\smc@setalllist}% \fi } {\endlist} \DeclareCorrItemize{commentaire}{\textcolor{CommentaireItemColor}{$\bullet$}} % \end{macrocode} % Puis l'environnement de liste à puce pour les récréations, énigmes. % \begin{macrocode} \newenvironment{smc@recreationitemize}{% \ifnum\@listdepth=\z@ \list{\textcolor{RecreationItemColor}{$\bullet$}} {\smc@setalllist}% \else \list{\textcolor{RecreationItemColor}{$\bullet$}} {\smc@setalllist}% \fi } {\endlist} \DeclareCorrItemize{recreation}{\textcolor{RecreationItemColor}{$\bullet$}} % \end{macrocode} % Puis l'environnement de liste à puce dans les annexes. % \begin{macrocode} \newenvironment{smc@annexeitemize}{% \ifnum\@listdepth=\z@ \list{% \color{AnnexeItemColor} \vrule width \ItemRuleWidth height \ItemRuleHeight depth \ItemRuleDepth \relax} {\smc@setalllist}% \else \list{% \color{AnnexeItemColor} \vrule width \ItemRuleWidth height \ItemRuleHeight depth \ItemRuleDepth \relax} {\smc@setalllist}% \fi } {\endlist} % \end{macrocode} % Liste pour le lexique % \begin{macrocode} \newenvironment{smc@lexiqueitemize}{% \ifnum\@listdepth=\z@ \list{\textcolor{LexiqueItemColor}{$\bullet$}} {\smc@setalllist}% \else \list{\textcolor{LexiqueItemColor}{$\bullet$}} {\smc@setalllist}% \fi } {\endlist} % \end{macrocode} % Puis l'environnement de liste à puce dans le texte libre. % \begin{macrocode} \newenvironment{smc@libreitemize}{% \ifnum\@listdepth=\z@ \list{% \color{LibreItemColor} \vrule width \ItemRuleWidth height \ItemRuleHeight depth \ItemRuleDepth \relax} {\smc@setalllist}% \else \list{% \color{LibreItemColor} \vrule width \ItemRuleWidth height \ItemRuleHeight depth \ItemRuleDepth \relax} {\smc@setalllist}% \fi } {\endlist} \DeclareCorrItemize{libre}{\textcolor{LibreItemColor}{$\bullet$}} % \end{macrocode} % \end{environment} % \begin{environment}{enumerate} % Tout ce qu'on a fait avec |itemize| se reporte de façon similaire % avec |enumerate| (sauf la largeur de l'étiquette). On ne modifiera % pas l'environnement |description| \emph{a priori}. % % On commence par déclarer l'interdiction d'utiliser |enumerate|. % \begin{macrocode} \newenvironment{smc@noenumerate}{% \ClassError{sesamanuel}{Il est interdit d'utiliser enumerate ici} {Consultez la documentation pour plus de renseignements.}% \let\item\relax }{} % \end{macrocode} % Par défaut ce sont les environnements interdits qui sont activés. % \begin{macrocode} \let\enumerate\smc@noenumerate \let\endenumerate\endsmc@noenumerate % \end{macrocode} % On définit maintenant l'environnement |bigenumerate| qui ne fait % qu'appeler |enumerate| en ayant modifié au préalable la largeur des % étiquettes pour la liste de premier niveau. % \begin{macrocode} \newenvironment{bigenumerate} {% \let\smc@setallfirstlist\smc@setallbiglist \begin{enumerate} } {\end{enumerate}} % \end{macrocode} % Les différentes environnements enumerate ne diffèrent que par la % couleur des numéros et le gras. On les déclarera grâce à la commande % générique |\DeclareEnumerate|. Sa syntaxe est : \\ % |\DeclareEnumerate{nom\_environnement}{commande}{couleur}|\\ % % La première définition globale permet d'afficher correctement la % couleur des références des item. % \begin{macrocode} \newcommand\DeclareEnumerate[3]{% \newenvironment{smc@#1enumerate}{% \gdef\smc@curr@itemcmd{#2}% \gdef\smc@curr@itemcolor{#3}%( \renewcommand\labelenumi{\textcolor{#3}{#2\theenumi)}}%( \renewcommand\labelenumii{\textcolor{#3}{#2\theenumii)}}%( \renewcommand\labelenumiii{\textcolor{#3}{#2\theenumiii)}}% \advance\@enumdepth \@ne \ifnum\@enumdepth>\thr@@ % \end{macrocode} % Si on a plus de trois niveau d'imbrication de enumerate, c'est une % erreur. % \begin{macrocode} \ClassError{sesamanuel}{Pas plus de 3 niveaux de liste} {Consultez la documentation pour plus de renseignements.} \else\ifnum\@enumdepth=\@ne % \end{macrocode} % Si on est au premier niveau, on peut utiliser une largeur de label % plus importante pour permettre une numérotation à deux % chiffres. % \begin{macrocode} \edef\@enumctr{enum\romannumeral\the\@enumdepth}% \expandafter \list \csname label\@enumctr\endcsname {% \usecounter{\@enumctr}% \smc@setallfirstlist }% \else % \end{macrocode} % Sinon, on garde la largeur habituelle. % \begin{macrocode} \edef\@enumctr{enum\romannumeral\the\@enumdepth}% \expandafter \list \csname label\@enumctr\endcsname {% \usecounter{\@enumctr}% \smc@setalllist }% \fi\fi } {\endlist} % \end{macrocode} % On définit du même coup les environnements |smc@correnumerate| % qui se comporte très différemment des listes enumerate classiques. % \begin{macrocode} \newenvironment{smc@corr#1enumerate}{% \gdef\smc@curr@itemcmd{#2}% \gdef\smc@curr@itemcolor{#3}%( % \end{macrocode} % On remet tous les compteurs à zéros (même si un seul sera utilisé). % \begin{macrocode} \setcounter{enumi}{0}% \setcounter{enumii}{0}% \setcounter{enumiii}{0}% \renewcommand\labelenumi{\textcolor{#3}{#2\theenumi)}}%( \renewcommand\labelenumii{\textcolor{#3}{#2\theenumii)}}%( \renewcommand\labelenumiii{\textcolor{#3}{#2\theenumiii)}}% \advance\@enumdepth \@ne \ifnum\@enumdepth>\thr@@ \ClassError{sesamanuel}{Pas plus de 3 niveaux de liste} {Consultez la documentation pour plus de renseignements.} \else % \end{macrocode} % On commence par crée une macro annexe qui affiche le numéro. % \begin{macrocode} \def\smc@enum{% \refstepcounter{enum\romannumeral\@enumdepth}% \csname labelenum\romannumeral\@enumdepth\endcsname~ }% % \end{macrocode} % Ici, on ne redéfinit que la commande |\item|. % \begin{macrocode} \def\item{% % \end{macrocode} % Au premier appel, on ne fait qu'afficher le numéro d'item. % \begin{macrocode} \smc@enum % \end{macrocode} % Aux appels suivants, on commencera par passer au paragraphe % suivant. Pour cela la macro |\item| se redéfinit elle-même. % \begin{macrocode} \def\item{\par\smc@enum}% }% \fi \ignorespaces } {\par} } % \end{macrocode} % |enumerate| dans les prérequis. % \begin{macrocode} \DeclareEnumerate{prerequis}{}{PrerequisItemColor} % \end{macrocode} % |enumerate| dans les méthodes. % \begin{macrocode} \DeclareEnumerate{exapp}{\bfseries}{ExAppItemColor} % \end{macrocode} % |enumerate| dans les environnements de type définition. % \begin{macrocode} \DeclareEnumerate{def}{\bfseries}{DefItemColor} % \end{macrocode} % |enumerate| dans l'auto-évaluation. % \begin{macrocode} \DeclareEnumerate{AE}{\bfseries}{AEItemColor} % \end{macrocode} % |enumerate| dans les activités. % \begin{macrocode} \DeclareEnumerate{activite}{\bfseries}{ActiviteItemColor} % \end{macrocode} % |enumerate| dans les remarques. % \begin{macrocode} \DeclareEnumerate{rem}{}{RemItemColor} % \end{macrocode} % |enumerate| dans les exemples. % \begin{macrocode} \DeclareEnumerate{exemple}{}{ExempleItemColor} % \end{macrocode} % |enumerate| dans les preuves. % \begin{macrocode} \DeclareEnumerate{proof}{}{ProofItemColor} % \end{macrocode} % |enumerate| dans les parties Exercices de base et Exercices % d'approfondissement. % \begin{macrocode} \DeclareEnumerate{exercice}{\bfseries}{ExerciceItemColor} % \end{macrocode} % |enumerate| dans le cadre |acquis|. % \begin{macrocode} \DeclareEnumerate{acquis}{\bfseries}{AcquisItemColor} % \end{macrocode} % |enumerate| dans les commentaires. % \begin{macrocode} \DeclareEnumerate{commentaire}{}{CommentaireItemColor} % \end{macrocode} % |enumerate| dans les récréation, énigmes. % \begin{macrocode} \DeclareEnumerate{recreation}{\bfseries}{RecreationItemColor} % \end{macrocode} % |enumerate| dans les annexes. % \begin{macrocode} \DeclareEnumerate{annexe}{}{AnnexeItemColor} % \end{macrocode} % |enumerate| dans le lexique. % \begin{macrocode} \DeclareEnumerate{lexique}{}{LexiqueItemColor} % \end{macrocode} % |enumerate| dans le texte libre. % \begin{macrocode} \DeclareEnumerate{libre}{}{LibreItemColor} % \end{macrocode} % \end{environment} % \begin{environment}{colitemize} % En plus des environnements de liste classiques, on a deux autres % types de liste où on précise le nombre de colonnes sur lesquelles % sont composées chaque item. En revanche, on garde la même syntaxe % que les environnements standards, à savoir :\\ % |\begin{colitemize}{}|\\ % |\item ...|\\ % |\item ...|\\ % |\item ...|\\ % |\end{colitemize}| % % On commence en indiquant l'interdiction d'utiliser ce type % d'environnement. % \begin{macrocode} \newenvironment{smc@nocolitemize}{% \ClassError{sesamanuel}{Il est interdit d'utiliser colitemize ici} {Consultez la documentation pour plus de renseignements.}% \let\item\relax }{} % \end{macrocode} % Les autres environnements seront déclarés de façon générique en % indiquant uniquement la couleur des étiquettes et leur code. % \begin{macrocode} \newcount\smc@nbitem \newcount\smc@nbline \newcommand*\DeclareColItemize[3]{% % \end{macrocode} % Tous les environnements |colitemize| doivent spécifier le nombre de % colonnes en premier argument. % \begin{macrocode} \newenvironment{#1}[1]{% \par % \end{macrocode} % On doit sauvegarder le nombre de colonnes car cette information ne % servira que dans la partie terminale de l'environnement. % \begin{macrocode} \def\smc@nbcolumn{##1}% % \end{macrocode} % On initialise le nombre d'items % \begin{macrocode} \smc@nbitem \z@ % \end{macrocode} % Chaîne pour le test de fin d'environnement. % \begin{macrocode} \edef\StringColCurrent{\StringColitemize}% % \end{macrocode} % et on lance la macro qui va lire la totalité du contenu de % l'environnement et la stoker dans le registre de lexèmes % |\toks@| en ayant vidé ce registre au préalable. % \begin{macrocode} \toks@{}% \smc@getbody }% {% % \end{macrocode} % En partie terminale de l'environnement, on relance la lecture du % corps de l'environnement par la macro |\smc@splititem| qui % sauvegarde chaque item dans une macro |\smc@item|. Pour % permettre la détection facile de la fin, on ajoute un % |\item\@nil\item| à la fin du corps. % \begin{macrocode} \expandafter\smc@splititem\the\toks@\item\@nil\item % \end{macrocode} % En sortie de la macro précédente, le nombre d'items est sauvegardé % dans le registre |\smc@nbitem|. On calcule le nombre de lignes que % cela va nécessiter avec la formule :\\ % $\hbox{nb\_lignes}=\dfrac{\hbox{nb\_items}+\hbox{nb\_colonnes}-1} % {\hbox{nb\_colonnes}}$\\ % \begin{macrocode} \smc@nbline \numexpr \smc@nbitem+\smc@nbcolumn-1 \divide\smc@nbline \smc@nbcolumn % \end{macrocode} % On rentre dans la double boucle d'affichage. La boucle externe gère % les lignes. % \begin{macrocode} \multido{\n=1+1}{\smc@nbline}{% % \end{macrocode} % La boucle interne va afficher tous les items de la ligne en % cours. Comme les items sont organisés en colonnes, on va afficher % les items ayant comme numéro le numéro de ligne pour l'item le plus % à gauche et en ajoutant le nombre de lignes à ce numéro à chaque % fois qu'on passe au numéro suivant. % % Par exemple, si on compose 10 items sur 3 colonnes, les calculs % suivants indiquent qu'il y aura 4 lignes. Les numéros d'items de la % première lignes seront donc 1 puis $1+4=5$ puis $5+4=9$. La deuxième % ligne accueillera les numéros d'items 2 puis $2+4=6$ puis % $6+4=10$. La troisième ligne accueillera les numéros d'items 3 puis % $3+4=7$ et comme le numéro $7+4=11$ n'existe pas, la dernière % colonne de la troisième ligne sera vide. Ce sera la même chose pour % la quatrième ligne. % \begin{macrocode} \multido{\ni=\n+\the\smc@nbline}{\smc@nbcolumn}{% % \end{macrocode} % On n'affiche l'item que si le numéro existe. % \begin{macrocode} \unless\ifnum\ni>\smc@nbitem % \end{macrocode} % La puce est composée dans une boîte de largeur fixée en se servant % des paramètres transmis à la macro |\DeclareColItemize|. % \begin{macrocode} \makebox[\ListLabelWidth]{\textcolor{#2}{#3}\hss}% % \end{macrocode} % Le corps de l'item est alors composé dans une minipage alignée en % haut et de largeur tel qu'elle permet d'avoir le nombre de colonnes % et le nombre d'espaces intercolonnes nécessaires. % \begin{macrocode} \begin{minipage}[t]{\dimexpr (\linewidth-\ListHSep*(\smc@nbcolumn-1))% /\smc@nbcolumn-\ListLabelWidth} % \end{macrocode} % Le contenu lui même est précédé et suivi d'un |\strut| pour assurer % un bon interlignage. % \begin{macrocode} \strut\@nameuse{smc@item\ni}\strut \end{minipage}% % \end{macrocode} % À la fin de la minipage, on place l'espace intercolonne. % \begin{macrocode} \hspace{\ListHSep}% \fi }% % \end{macrocode} % À la fin de chaque ligne, on insère un saut de ligne. Pour ne pas % avoir de saut trop important, la dernière ligne utilisera % |\endgraf|. % \begin{macrocode} \ifnum\n=\smc@nbline \endgraf \else \\ \fi }% }% } % \end{macrocode} % La macro |\smc@getbody| permet de récupérer l'intégralité du corps % d'un environnement dans le registre de lexèmes |\toks@|. Cette macro % est une version simple de ce type de lecture qui ne permet pas % l'emboîtement d'environnements. % % Le principe est de tout lire jusqu'au premier |\end|, de le % sauvegarder et de tester le |\end| en mettant un |\smc@testend| dans % le flot de lecture. % \begin{macrocode} \long\def\smc@getbody#1\end{% \toks@\expandafter{\the\toks@#1}\smc@testend } % \end{macrocode} % La macro |\smc@testend| permet de savoir si on est effectivement à % la fin de l'environnement de départ et de réagir en conséquence. % \begin{macrocode} \long\def\smc@testend#1{% % \end{macrocode} % On sauvegarde ce qui suit le |\end| pour regarder si c'est égal à la % chaîne correspondant à l'environnement de départ. % \begin{macrocode} \def\smc@arg{#1}% \ifx\smc@arg\StringColCurrent % \end{macrocode} % Si c'est le cas, il suffit de remettre le tout dans le flot de % lecture courant. % \begin{macrocode} \end{#1}% \else % \end{macrocode} % Si ce n'est pas le cas, le |\end{environnement}| doit être mis de % côté dans la suite du registre de lecture du corps d'environnement % et il faut reprendre la lecture en faisant un appel récursif à % |\smc@getbody|. % \begin{macrocode} \toks@\expandafter{\the\toks@\end{#1}}% \expandafter\smc@getbody \fi } % \end{macrocode} % La macro |\smc@splititem| permet de répartir le contenu de chaque % item dans des macros ayant un nom comportant un numéro. En % l'occurrence |\smc@item|. % \begin{macrocode} \long\def\smc@splititem#1\item{% % \end{macrocode} % En réalité, le premier appel ne sert qu'à passer la première balise % |\item| qui n'est normalement précédée d'aucun texte. On passe % directement à la macro de lecture effective. % \begin{macrocode} \smc@@splititem } % \end{macrocode} % La macro |\smc@@splititem| est la macro de lecture recursive qui % permet de mémoriser les contenus de tous les items. % \begin{macrocode} \long\def\smc@@splititem#1\item{% % \end{macrocode} % On place le contenu dans une macro pour tester si c'est égal à % |\@nil|. % \begin{macrocode} \def\smc@arg{#1}% \ifx\smc@arg\@nnil % \end{macrocode} % Si le |\@nil| a été lu, il n'y a plus rien à faire. % \begin{macrocode} \else % \end{macrocode} % Sinon on incrémente le compteur d'items, on sauvegarde le contenu de % l'item et on fait un appel récursif sur le prochain item. % \begin{macrocode} \advance\smc@nbitem\@ne \@namedef{smc@item\the\smc@nbitem}{#1}% \expandafter\smc@@splititem \fi } % \end{macrocode} % On peut maintenant déclarer les environnements colitemize des % différentes parties. On commence par les listes dans les prérequis. % \begin{macrocode} \DeclareColItemize{smc@prerequiscolitemize} {PrerequisItemColor}{$\blacktriangleright$} % \end{macrocode} % Ensuite le colitemize pour l'auto-évaluation. % \begin{macrocode} \DeclareColItemize{smc@AEcolitemize} {AEItemColor}{$\bullet$} % \end{macrocode} % Ensuite le colitemize pour les méthodes. % \begin{macrocode} \DeclareColItemize{smc@exappcolitemize} {ExAppItemColor}{$\bullet$} % \end{macrocode} % Ensuite le colitemize pour les environnements de type définition. % \begin{macrocode} \DeclareColItemize{smc@defcolitemize} {DefItemColor} {% \vrule width \ItemRuleWidth height \ItemRuleHeight depth \ItemRuleDepth \relax } % \end{macrocode} % Ensuite le colitemize pour les activités. % \begin{macrocode} \DeclareColItemize{smc@activitecolitemize} {ActiviteItemColor}{$\bullet$} % \end{macrocode} % Ensuite le colitemize pour les remarques. % \begin{macrocode} \DeclareColItemize{smc@remcolitemize} {RemItemColor} {% \vrule width \ItemRuleWidth height \ItemRuleHeight depth \ItemRuleDepth \relax } % \end{macrocode} % Ensuite le colitemize pour les exemples. % \begin{macrocode} \DeclareColItemize{smc@exemplecolitemize} {ExempleItemColor}{$\bullet$} % \end{macrocode} % Ensuite le colitemize pour les preuves. % \begin{macrocode} \DeclareColItemize{smc@proofcolitemize} {ProofItemColor}{$\bullet$} % \end{macrocode} % Ensuite le colitemize pour les parties Exercices de base et % Exercices d'approfondissement. % \begin{macrocode} \DeclareColItemize{smc@exercicecolitemize} {ExerciceItemColor}{$\bullet$} % \end{macrocode} % Ensuite le colitemize pour les acquis % \begin{macrocode} \DeclareColItemize{smc@acquiscolitemize} {AcquisItemColor}{$\bullet$} % \end{macrocode} % Ensuite le colitemize pour les commentaires. % \begin{macrocode} \DeclareColItemize{smc@commentairecolitemize} {CommentaireItemColor}{$\bullet$} % \end{macrocode} % Ensuite le colitemize pour les récréation, énigmes. % \begin{macrocode} \DeclareColItemize{smc@recreationcolitemize} {RecreationItemColor}{$\bullet$} % \end{macrocode} % Ensuite le colitemize pour les annexes. % \begin{macrocode} \DeclareColItemize{smc@annexecolitemize} {AnnexeItemColor} {% \vrule width \ItemRuleWidth height \ItemRuleHeight depth \ItemRuleDepth \relax } % \end{macrocode} % Ensuite le colitemize pour le lexique. % \begin{macrocode} \DeclareColItemize{smc@lexiquecolitemize} {LexiqueItemColor}{$\bullet$} % \end{macrocode} % Ensuite le colitemize pour le texte libre. % \begin{macrocode} \DeclareColItemize{smc@librecolitemize} {LibreItemColor} {% \vrule width \ItemRuleWidth height \ItemRuleHeight depth \ItemRuleDepth \relax } % \end{macrocode} % \end{environment} % \begin{environment}{colenumerate} % Les environnements |colenumerate| permettent les listes numérotées % sur plusieurs colonnes. Le code va être similaire à celui de % |colitemize|. Pour la déclaration, il y aura besoin du nom de % l'environnement d'une commande de fonte éventuelle et de la % couleur. % \begin{macrocode} \newcommand*\DeclareColEnumerate[3]{% % \end{macrocode} % Tous les environnements |colenumerate| doivent spécifier le nombre de % colonnes en premier argument. % \begin{macrocode} \newenvironment{#1}[1]{% \par\leavevmode % \end{macrocode} % On commence par initialiser le comportement global de la liste en % fonction de sa profondeur. Le compteur est indépendant des autres % listes. Il s'agira de |\ni| qui sera en fait la variable de boucle % interne des |\multido|. % \begin{macrocode} \advance\@enumdepth \@ne \ifnum\@enumdepth>\thr@@ \ClassError{sesamanuel}{Pas plus de 3 niveaux de liste} {Consultez la documentation pour plus de renseignements.} \else % \end{macrocode} % On définit la forme du compteur qui sera utilisé pour la % liste. Cette forme dépend des paramètres transmis ainsi que de la % profondeur de la liste. % \begin{macrocode} \ifcase\@enumdepth \or %( \def\@enumlabel{\textcolor{#3}{#2\ni)}}%( \or \def\@enumlabel{\textcolor{#3}{#2{\@alph\ni})}}%( \or \def\@enumlabel{\textcolor{#3}{#2{\@roman\ni)}}}% \fi \fi % \end{macrocode} % La suite est maintenant assez proche de ce qui se passait pour la % macro |\DeclareColItemize|. % \begin{macrocode} \def\smc@nbcolumn{##1}% \smc@nbitem \z@ % \end{macrocode} % Le test de fin se fait avec la chaîne \og colenumerate \fg{}. % \begin{macrocode} \edef\StringColCurrent{\StringColenumerate}% \toks@{}% \smc@getbody } {% \expandafter\smc@splititem\the\toks@\item\@nil\item \smc@nbline \numexpr \smc@nbitem+\smc@nbcolumn-1 \divide\smc@nbline \smc@nbcolumn \multido{\n=1+1}{\smc@nbline}{% \multido{\ni=\n+\the\smc@nbline}{\smc@nbcolumn}{% \unless\ifnum\ni>\smc@nbitem % \end{macrocode} % À ce niveau, le code diffère de ce qui se passait pour % |\DeclareColItemize| puisque l'étiquette consiste en un nombre % défini précédemment dans la macro |@enumlabel|. % \begin{macrocode} \makebox[\ListLabelWidth]{\@enumlabel\hss}% \begin{minipage}[t]{\dimexpr (\linewidth-\ListHSep*(\smc@nbcolumn-1))% /\smc@nbcolumn-\ListLabelWidth} \strut\@nameuse{smc@item\ni}\strut \end{minipage}% \hspace{\ListHSep}% \fi }% \ifnum\n=\smc@nbline \endgraf \else \\ \fi }% }% } % \end{macrocode} % On peut maintenant déclarer les environnements colenumerate des % différentes parties. On commence par les listes dans les prérequis. % \begin{macrocode} \DeclareColEnumerate{smc@prerequiscolenumerate} {}{PrerequisItemColor} % \end{macrocode} % |colenumerate| dans les méthodes. % \begin{macrocode} \DeclareColEnumerate{smc@exappcolenumerate} {\bfseries}{ExAppItemColor} % \end{macrocode} % |colenumerate| dans les environnements de type définition. % \begin{macrocode} \DeclareColEnumerate{smc@defcolenumerate} {\bfseries}{DefItemColor} % \end{macrocode} % |colenumerate| dans l'auto-évaluation. % \begin{macrocode} \DeclareColEnumerate{smc@AEcolenumerate} {\bfseries}{AEItemColor} % \end{macrocode} % |colenumerate| dans les activités. % \begin{macrocode} \DeclareColEnumerate{smc@activitecolenumerate} {}{ActiviteItemColor} % \end{macrocode} % |colenumerate| dans les remarques. % \begin{macrocode} \DeclareColEnumerate{smc@remcolenumerate} {}{RemItemColor} % \end{macrocode} % |colenumerate| dans les exemples. % \begin{macrocode} \DeclareColEnumerate{smc@exemplecolenumerate} {}{ExempleItemColor} % \end{macrocode} % |colenumerate| dans les preuves. % \begin{macrocode} \DeclareColEnumerate{smc@proofcolenumerate} {}{ProofItemColor} % \end{macrocode} % |colenumerate| dans les parties Exercices de base et Exercices % d'approfondissement. % \begin{macrocode} \DeclareColEnumerate{smc@exercicecolenumerate} {\bfseries}{ExerciceItemColor} % \end{macrocode} % |colenumerate| dans la partie acquis. % \begin{macrocode} \DeclareColEnumerate{smc@acquiscolenumerate} {\bfseries}{AcquisItemColor} % \end{macrocode} % |colenumerate| dans les commentaires. % \begin{macrocode} \DeclareColEnumerate{smc@commentairecolenumerate} {\bfseries}{CommentaireItemColor} % \end{macrocode} % |colenumerate| dans les récréation, énigmes. % \begin{macrocode} \DeclareColEnumerate{smc@recreationcolenumerate} {\bfseries}{RecreationItemColor} % \end{macrocode} % |colenumerate| dans les annexes. % \begin{macrocode} \DeclareColEnumerate{smc@annexecolenumerate} {\bfseries}{AnnexeItemColor} % \end{macrocode} % |colenumerate| dans le lexique. % \begin{macrocode} \DeclareColEnumerate{smc@lexiquecolenumerate} {\bfseries}{RecreationItemColor} % \end{macrocode} % |colenumerate| dans le texte libre. % \begin{macrocode} \DeclareColEnumerate{smc@librecolenumerate} {\bfseries}{LibreItemColor} % \end{macrocode} % \end{environment} % \begin{environment}{changemargin} % Environnement général de changement de marge. % \begin{macrocode} \newenvironment{changemargin}[2]{% \begin{list}{}{% \setlength{\topsep}{0pt}% \setlength{\leftmargin}{0pt}% \setlength{\rightmargin}{0pt}% \setlength{\listparindent}{0pt}% \setlength{\itemindent}{0pt}% \setlength{\parsep}{\parskip}% \addtolength{\leftmargin}{#1}% \addtolength{\rightmargin}{#2}% }% \item\relax } {\strut \end{list}} % \end{macrocode} % \end{environment} % \section{Cadres et mises en page ponctuelles} % \begin{environment}{cadre} % Cadre avec un coin inférieur gauche biseauté. On a deux arguments % optionnels pour indiquer les couleurs de cadre et de fond. Pour % cette raison, il faudra définir l'environnement sous forme de % macro. % \begin{macrocode} \newcommand*{\cadre}[1][]{% % \end{macrocode} % Le premier paramètre optionnel indique la couleur de ligne. Si il % est vide, c'est la couleur par défaut qui est utilisée. % \begin{macrocode} \ifx\relax#1\relax \colorlet{CurrCadreLineColor}{CadreLineColor}% \else % \end{macrocode} % Sinon, c'est que la couleur de ligne est explicitement indiquée. % \begin{macrocode} \colorlet{CurrCadreLineColor}{#1}% \fi % \end{macrocode} % On appelle alors la macro auxiliaire permettant de lire le % deuxième argument optionnel et de commencer le travail véritable. % \begin{macrocode} \@cadre } \newcommand\@cadre[1][]{% % \end{macrocode} % On refait le travail précédent pour la couleur de fond. % \begin{macrocode} \ifx\relax#1\relax \colorlet{CurrCadreBkgColor}{CadreBkgColor}% \else \colorlet{CurrCadreBkgColor}{#1}% \fi % \end{macrocode} % On va stocker le corps de l'environnement dans une boîte contenant % une minipage de l'empagement moins deux fois |\CadreSep| moins deux % fois |\CadreLineWidth|. % \begin{macrocode} \def\smc@cadre@color{#1}% \begin{lrbox}{\smc@boxa}% \minipage{\dimexpr \linewidth-\CadreSep*2-\CadreLineWidth*2}% } % \end{macrocode} % Partie terminale de l'environnement % \begin{macrocode} \def\endcadre {% \endminipage \end{lrbox}% % \end{macrocode} % La boîte est construite, il reste à construire le cadre biseauté à % la bonne taille et à placer la boîte dans le cadre. % \begin{macrocode} \par\addvspace{\BeforeCadreVSpace} % \end{macrocode} % On peut maintenant construire le cadre % \begin{macrocode} \begin{pspicture}(0,\dimexpr\ht\smc@boxa+\CadreSep+\CadreLineWidth) (\linewidth,-\dimexpr\dp\smc@boxa+\CadreSep+\CadreLineWidth) % \end{macrocode} % Pose des nœuds utiles. Tout est calculé automatiquement à partir des % deux coins opposés. % \begin{macrocode} \pnode(0,\dimexpr\ht\smc@boxa+\CadreSep+\CadreLineWidth){A} \pnode(\linewidth,-\dimexpr\dp\smc@boxa+\CadreSep+\CadreLineWidth){C} \pnode(A|C){B} \pnode(C|A){D} \pnode([nodesep=-\SquareWidth]C){C1} \pnode([offset=\SquareWidth]C){C2} % \end{macrocode} % Affichage du cadre. % \begin{macrocode} \pspolygon[linecolor=CurrCadreLineColor, linewidth=\CadreLineWidth, fillstyle=solid, fillcolor=CurrCadreBkgColor] (A)(B)(C1)(C2)(D) % \end{macrocode} % Affichage du contenu. % \begin{macrocode} \rput[Bl](\dimexpr\CadreSep+\CadreLineWidth,0) {\usebox{\smc@boxa}} \end{pspicture} \par\addvspace{\AfterCadreVSpace} } % \end{macrocode} % \end{environment} % \begin{environment}{smc@cadre} % Environnement général de construction d'un cadre avec fond coloré, % bord éventuel et coins arrondis à la demande. Pour cela, % l'environnement demande un argument optionnel, un % argument obligatoire et un troisième argument optionnel. Ils % indiquent, dans l'ordre : % \begin{itemize} % \item les coins devant être arrondis (en partant du coin inférieur % gauche et en tournant dans le sens inverse des aiguilles d'une % montre avec une suite de valeurs entières séparées par des virgules % qui donnent un multiple de dixième de la valeur |\FrameArc| donc 0 % indique un coin carré et 10 un coint arrondi avec ce rayon) ; % \item la couleur de fond ; % \item la couleur de bordure. % \end{itemize} % S'il n'y a pas de couleur de bordure, il n'y a pas de bordure du % tout. Le cadre utilise les longueurs |\FrameSep| indiquant la % distance entre le texte et les bords du cadre, |\FrameLineWidth| % indiquant l'épaisseur du bord éventuel, |\FrameArc| indiquant le % rayon de l'arc. % % En raison de l'examen de paramètres dans un ordre non conventionnel % (pour \LaTeX{}), on définit l'environnement |smc@cadre| comme étant % le couple |\smc@cadre| |\endsmc@cadre|. La valeur par défaut du % premier argument optionnel est |0,0,0,0| ce qui donne quatre coins % carrés. % \begin{macrocode} \newcommand*\smc@cadre[2][0,0,0,0]{% % \end{macrocode} % Il faut sauvegarder les arguments car on ne s'en servira que dans la % partie terminale de l'environnement, en l'occurrence dans la macro % |\endcadre|. % \begin{macrocode} \def\smc@framecorner{#1}% \def\smc@framebkgcolor{#2}% \smc@@cadre } % \end{macrocode} % La macro auxiliaire a une valeur par défaut vide pour le second % paramètre optionnel de l'environnement, c'est-à-dire qu'il n'y aura % pas de bord. % \begin{macrocode} \newcommand*\smc@@cadre[1][]{% % \end{macrocode} % On sauvegarde également l'argument optionnel pour la même raison que % ci-dessus. % \begin{macrocode} \def\smc@framelinecolor{#1}% % \end{macrocode} % Le contenu de l'environnement sera composé dans une minipage de % largeur égale à l'empagement moins deux fois l'espace |\FrameSep| % et, si besoin, deux fois l'épaisseur |\FrameLineWidth|. On calcule % également le décalage horizontal de la boîte dans le cadre final. % \begin{macrocode} \ifx\smc@framelinecolor\empty \edef\smc@framehoffset{\the\dimexpr\FrameSep*2}% \edef\smc@framewidth {\the\dimexpr\linewidth-\smc@framehoffset}% \else \edef\smc@framehoffset{\the\dimexpr\FrameSep*2+\FrameLineWidth*2}% \edef\smc@framewidth {\the\dimexpr\linewidth-\smc@framehoffset}% \fi % \end{macrocode} % Le code initiale se termine en mettant en boîte l'ensemble du corps % de l'environnement pour l'afficher ensuite avec son cadre % coloré. % \begin{macrocode} \setbox0=\hbox\bgroup \minipage{\smc@framewidth}% \ignorespaces } % \end{macrocode} % La macro |\endsmc@cadre| correspond au code terminal de % l'environnement. C'est elle qui fera tout le travail de composition % après avoir refermé la minipage et sa boîte englobante. % \begin{macrocode} \def\endsmc@cadre{% \endminipage \egroup % \end{macrocode} % Le principe va être d'afficher d'abord le cadre et de placer le % texte au dessus. Comme les coins peuvent être ou non arrondis % individuellement, on va utiliser |\pscustom| pour construire le % pourtour. Le cadre à une largeur égal à |\linewidth| est une hauteur % égale à celle du texte plus deux fois |\FrameSep| et, éventuellement % plus deux fois |\FrameLineWidth|. On commence donc par calculer la % profondeur et la hauteur du cadre et on initialise les paramètres % PSTsicks pour le tracé du cadre. Pour faciliter le code ultérieur, % s'il n'y a pas de bord, on force la longueur |\FrameLineWith| à être % nulle. % \begin{macrocode} \ifx\smc@framelinecolor\empty \edef\smc@ymin{\the\dimexpr-\dp0-\FrameSep}% \edef\smc@ymax{\the\dimexpr\ht0+\FrameSep}% \psset{linewidth=0pt, linestyle=none, fillstyle=solid, fillcolor=\smc@framebkgcolor} \else \edef\smc@ymin{\the\dimexpr -\dp0-\FrameSep-\FrameLineWidth}% \edef\smc@ymax{\the\dimexpr\ht0+\FrameSep+\FrameLineWidth}% \psset{linewidth=\FrameLineWidth, linecolor=\smc@framelinecolor, fillstyle=solid, fillcolor=\smc@framebkgcolor} \def\FrameLineWidth{0pt}% \fi % \end{macrocode} % Avant de commencer le cadre proprement dit, il faut analyser la % chaîne d'indication des arrondis de coin. On va en fait mémoriser % les quatre nombres dans les quatre macros |\smc@corner@dl|, % |\smc@corner@dr|, |\smc@corner@ur| et |\smc@corner@ul|, dans l'ordre % où les valeurs sont lues. % \begin{macrocode} \smc@parse@corner{\smc@framecorner}% % \end{macrocode} % Tout est en place pour procéder à la composition proprement dite % \begin{macrocode} \begin{pspicture}(0,\smc@ymin)(\linewidth,\smc@ymax) % \end{macrocode} % Il n'y a pas besoin de spécifier les paramètres au niveau de la % commande |\pscustom| puisque ceux-ci ont été déclarés auparavant. % \begin{macrocode} \pscustom{% % \end{macrocode} % Arc du coin inférieur gauche et ligne du coin inférieur gauche au % coin inférieur droit. % \begin{macrocode} \psarc(\dimexpr \FrameArc/10*\smc@corner@dl, \dimexpr \smc@ymin+\FrameArc/10*\smc@corner@dl) {\dimexpr \FrameArc/10*\smc@corner@dl}{180}{270} \psline(\dimexpr \FrameArc/10*\smc@corner@dl, \smc@ymin) (\dimexpr \linewidth-\FrameArc/10*\smc@corner@dr, \smc@ymin) % \end{macrocode} % Arc du coin inférieur droit et ligne du coin inférieur droit au coin % supérieur droit. % \begin{macrocode} \psarc(\dimexpr \linewidth-\FrameArc/10*\smc@corner@dr, \dimexpr \smc@ymin+\FrameArc/10*\smc@corner@dr) {\dimexpr \FrameArc/10*\smc@corner@dr}{270}{360} \psline(\linewidth, \dimexpr \smc@ymin+\FrameArc/10*\smc@corner@dr) (\linewidth, \dimexpr \smc@ymax-\FrameArc/10*\smc@corner@ur) % \end{macrocode} % Arc du coin supérieur droit et ligne du coin supérieur droit au % coin supérieur gauche. % \begin{macrocode} \psarc(\dimexpr \linewidth-\FrameArc/10*\smc@corner@ur, \dimexpr \smc@ymax-\FrameArc/10*\smc@corner@ur) {\dimexpr \FrameArc/10*\smc@corner@ur}{0}{90} \psline(\dimexpr \linewidth-\FrameArc/10*\smc@corner@ur, \smc@ymax) (\dimexpr \FrameArc/10*\smc@corner@ul, \smc@ymax) % \end{macrocode} % Arc du coin supérieur gauche et ligne du coin supérieur gauche au % coin inférieur gauche. % \begin{macrocode} \psarc(\dimexpr \FrameArc/10*\smc@corner@ul, \dimexpr \smc@ymax-\FrameArc/10*\smc@corner@ul) {\dimexpr \FrameArc/10*\smc@corner@dr}{90}{180} \psline(0, \dimexpr \smc@ymax-\FrameArc/10*\smc@corner@ul) (0, \dimexpr \smc@ymin+\FrameArc/10*\smc@corner@dl) } % \end{macrocode} % Le cadre est terminé, il reste à placer le contenu de % l'environnement. % \begin{macrocode} \rput[Bl](\dimexpr \FrameSep+\FrameLineWidth,0){\box0} \end{pspicture}% } % \end{macrocode} % On définit maintenant la commande qui analyse les valeurs des coins % (afin de déterminer l'arrondi). % \begin{macrocode} \newcommand*\smc@parse@corner[1]{% % \end{macrocode} % On acceptera qu'il y ait moins de quatre argument et qu'un argument % vide équivaut à zéro. Pour cela, on ajoute quatre valeurs vides à % la suite de l'argument transmis. % \begin{macrocode} \expandafter\smc@@parse@corner#1,,,,\@nil } \def\smc@@parse@corner#1,#2,#3,#4,#5\@nil{% % \end{macrocode} % L'ordre des arguments est toujours inférieur-gauche, % inférieur-droite, supérieur-droit, supérieur-gauche. % \begin{macrocode} \def\smc@corner@dl{#1}% \ifx\smc@corner@dl\empty \def\smc@corner@dl{0}% \fi \def\smc@corner@dr{#2}% \ifx\smc@corner@dr\empty \def\smc@corner@dr{0}% \fi \def\smc@corner@ur{#3}% \ifx\smc@corner@ur\empty \def\smc@corner@ur{0}% \fi \def\smc@corner@ul{#4}% \ifx\smc@corner@ul\empty \def\smc@corner@ul{0}% \fi % \end{macrocode} % Le cinquième argument sert à faire le ménage au niveau des virgules % inutilisées. % \begin{macrocode} } % \end{macrocode} % \end{environment} % \begin{environment}{tableau} % Rien n'empèche d'utiliser les environnements de tableau de \LaTeX{} % mais l'environnement |tableau| permet d'automatiser la % présentation. En particulier, les cellules colorés seront toujours % de la même couleur, les filets utiliseront un gris particulier et % les colonnes de type X sont verticalement centrées. % % Le principe va être d'avoir un paramètre optionnel % indiquant le type du tableau et un ou plusieurs paramètres % obligatoires en fonction du type de tableau choisi. On aura : % \begin{itemize} % \item |t| Toutes les colonnes de même largeur, argument 1 $\to$ % largeur, argument 2 $\to$ nombre de colonnes. % \item |c| Toutes les colonnes de même largeur, colonne de gauche en % jaune, argument 1 $\to$ largeur, argument 2 $\to$ nombre de % colonnes (c'est le type par défaut). % \item |l| Toutes les colonnes de même largeur, ligne du haut en % jaune, argument 1 $\to$ largeur, argument 2 $\to$ nombre de % colonnes. % \item |cl| Toutes les colonnes de même largeur, ligne du haut et % colonne de gauche en jaune, argument 1 $\to$ largeur, argument 2 % $\to$ nombre de colonnes. % \item |lc| synonyme de |cl|. % \item |T|, |C| |L|, |CL| |LC| comme précédemment sauf que la % première colonne aura un motif libre qu'il faudra renseigner avec le % dernier argument. % \item |pr| Le tableau prendra la largeur d'empagement, il aura trois % colonnes avec une colonne centrale environ deux fois plus large que % les colonnes externes et colorée. La troisième colonne sera centrée. % \end{itemize} % % En revanche, la syntaxe des tableaux sera celle habituelle à % l'intérieur de l'environnement (utilisation des |&| et des commandes % |\\|, |\hline|, |\cline|, |\multicolumn|, etc. La classe charge les % extensions suivantes pour gérer tous ces cas : % \begin{itemize} % \item tabularx ; % \item multirow ; % \item xcolor avec la l'option table. % \end{itemize} % |\tableau| est bien un environnement mais on va le déclarer en tant % que commande car son code final dépend de l'option choisie et c'est % donc plus simple de le coder de cette façon. % \begin{macrocode} \newcommand{\tableau}[1][c]{% % \end{macrocode} % Quel que soit le type de tableau, on indique la couleur des filets % et les colonnes X sont centrées verticalement et horizontalement. % \begin{macrocode} \arrayrulecolor{FiletTableauColor}% \renewcommand\tabularxcolumn[1]{>{\centering\arraybackslash}m{##1}}% % \end{macrocode} % On construit maintenant le code initial et final en fonction de % l'argument optionnel. Pour cela, on teste si la macro % |\tableau| existe. Si oui, c'est elle qui sera utilisée, % sinon, on émet un message d'erreur et on utilise le type c à la place. % \begin{macrocode} \ifcsname#1tableau\endcsname \expandafter\let\expandafter\smc@next\csname#1tableau\endcsname \expandafter\let\expandafter\endtableau\csname end#1tableau\endcsname \else \ClassError{sesamanuel} {Le type de tableau #1 n'existe pas} {Les types possibles sont 't', 'c', 'l', 'cl', 'T', 'C', 'L', 'CL' et 'pr'.}% \let\smc@next\ctableau \let\endtableau\endctableau \fi % \end{macrocode} % Il ne reste plus qu'à lancer l'environnement précédemment assigné % avec un espacement vertical précédent. % \begin{macrocode} \par\addvspace{\BeforeTableVSpace} \smc@next } % \end{macrocode} % On définit maintenant les véritables environnements de travail. % % L'environnement |ttableau| demande comme arguments la largeur du % tableau et le nombre de colonnes. % \begin{macrocode} \newenvironment{ttableau}[2] {\tabularx{#1}{|*{#2}{X|}}} {\endtabularx\par\addvspace{\AfterTableVSpace}} % \end{macrocode} % L'environnement |Ttableau| demande comme arguments la largeur du % tableau, le nombre de colonnes et le motif de la première colonne. % \begin{macrocode} \newenvironment{Ttableau}[3] {\tabularx{#1}{|#3|*{\numexpr#2-1}{X|}}} {\endtabularx\par\addvspace{\AfterTableVSpace}} % \end{macrocode} % L'environnement |ctableau| demande comme arguments la largeur du % tableau et le nombre de colonnes. Pour la colonne en couleur, on % utilise le premier argument optionnel de |\columncolor| pour % permettre un affichage complet du filet gauche. % \begin{macrocode} \newenvironment{ctableau}[2] {% \tabularx{#1}{% |>{\columncolor{FondTableaux}[\dimexpr\tabcolsep-0.5pt]}X| *{\numexpr#2-1}{X|}}% } {\endtabularx\par\addvspace{\AfterTableVSpace}} % \end{macrocode} % L'environnement |Ctableau| demande comme arguments la largeur du % tableau, le nombre de colonnes et le motif de la première colonne. % \begin{macrocode} \newenvironment{Ctableau}[3] {% \tabularx{#1}{% |>{\columncolor{FondTableaux}[\dimexpr\tabcolsep-0.5pt]}#3| *{\numexpr#2-1}{X|}}% } {\endtabularx\par\addvspace{\AfterTableVSpace}} % \end{macrocode} % L'environnement |ltableau| demande comme arguments la largeur du % tableau et le nombres de colonnes. % \begin{macrocode} \newenvironment{ltableau}[2] {% \tabularx{#1}{|*{#2}{X|}} \rowcolor{FondTableaux} } {\endtabularx\par\addvspace{\AfterTableVSpace}} % \end{macrocode} % L'environnement |Ltableau| demande comme arguments la largeur du % tableau, le nombres de colonnes et le motif de la première colonne. % \begin{macrocode} \newenvironment{Ltableau}[3] {% \tabularx{#1}{|#3|*{\numexpr#2-1}{X|}} \rowcolor{FondTableaux} } {\endtabularx\par\addvspace{\AfterTableVSpace}} % \end{macrocode} % L'environnement |cltableau| demande comme arguments la largeur du % tableau et le nombre de colonnes. Pour la colonne en couleur, on % utilise le premier argument optionnel de |\columncolor| pour % permettre un affichage complet du filet gauche. % \begin{macrocode} \newenvironment{cltableau}[2] {% \tabularx{#1}{% |>{\columncolor{FondTableaux}[\dimexpr\tabcolsep-0.5pt]}X| *{\numexpr#2-1}{X|}}% \rowcolor{FondTableaux} } {\endtabularx\par\addvspace{\AfterTableVSpace}} % \end{macrocode} % L'environnement |CLtableau| demande comme arguments la largeur du % tableau, le nombre de colonnes et le motif de la première colonne. % \begin{macrocode} \newenvironment{CLtableau}[3] {% \tabularx{#1}{% |>{\columncolor{FondTableaux}[\dimexpr\tabcolsep-0.5pt]}#3| *{\numexpr#2-1}{X|}}% \rowcolor{FondTableaux} } {\endtabularx\par\addvspace{\AfterTableVSpace}} % \end{macrocode} % Les environnements |lctableau| et |LCtableau| ne sont que des alias % de |cltableau| et |CLtableau|. % \begin{macrocode} \let\lctableau\cltableau \let\endlctableau\endcltableau \let\LCtableau\CLtableau \let\endLCtableau\endCLtableau % \end{macrocode} % Le type |pr| permet de construire le tableau des propriétés dans la % partie annexe. il ne demande que la largeur de tableau en % paramètre. Il utilise la couleur |TablePropertyBkgColor| pour le % fond de la deuxième colonne et les couleurs % |TablePropertyTitleBkgColor| et |TablePropertyTitleTextColor| pour % les couleurs de fond et de texte du titre \og propriété \fg{}. % \begin{macrocode} \newenvironment{prtableau}[1] {% % \end{macrocode} % On redéfinit la macro |\propriete| à l'intérieur de l'environnement % \begin{macrocode} \def\propriete{% \refstepcounter{propriete}% \psframebox*[fillcolor=TablePropertyTitleBkgColor]{% \ProprieteFont \textcolor{TablePropertyTitleTextColor}{ \MakeUppercase{\StringPropriete}} \NumProprieteFont \textcolor{TablePropertyTitleTextColor}{\thepropriete} } }% % \end{macrocode} % On peut ensuite composer le tableau proprement dit. % \begin{macrocode} \longtable{% % \end{macrocode} % Après discussions et retouches diverses, on va partager partager % |#1| avec les facteurs 0.24/0.46/0.30. Il faut également prévoir les % 6 |\tabcolsep|. % \begin{macrocode} >{\leavevmode\endgraf\vspace{-0.3\baselineskip}} m{0.24\dimexpr#1-6\tabcolsep} <{\endgraf\vspace{-0.3\baselineskip}} >{% \leavevmode\endgraf\vspace{-0.3\baselineskip} \columncolor{TablePropertyBkgColor} } m{0.46\dimexpr#1-6\tabcolsep} <{\endgraf\vspace{-0.3\baselineskip}} >{% \centering\arraybackslash \leavevmode\endgraf\vspace{-0.3\baselineskip} } m{0.30\dimexpr#1-6\tabcolsep} <{\endgraf\vspace{-0.3\baselineskip}} }% } {\endlongtable\par\addvspace{\AfterTableVSpace}} % \end{macrocode} % \end{environment} % \begin{macro}{\tabX} % La macro |\tabX| permet d'obtenir des cases avec une croix à % l'intérieur qui joint les coins opposés. Cette macro admet un % argument optionnel indiquant la hauteur et la profondeur de la % cellule (par défaut hauteur et profondeur d'une ligne normale de % tableau). % \begin{macrocode} \newcommand\tabX[1][\ht\@arstrutbox,\dp\@arstrutbox]{% % \end{macrocode} % On commence par analyser l'argument optionnel pour placer les deux % valeurs séparées par une virgule dans les deux macros |\smc@htTabX| % et |\smc@dpTabX|. % \begin{macrocode} \smc@GetVTabX#1,,\@nil % \end{macrocode} % On place un strut de la hauteur et profondeur indiquée pour forcer % effectivement la ligne a avoir ces dimensions verticales. % \begin{macrocode} \vrule width0pt height\smc@htTabX depth-\smc@dpTabX % \end{macrocode} % On pose d'abord les nœuds gauches (supérieur puis inférieur). % \begin{macrocode} \pnode(-\tabcolsep,\smc@htTabX){ul} \pnode(-\tabcolsep,\smc@dpTabX){dl} % \end{macrocode} % On réalise un saut avec un ressort infini pour se placer sur la % droite de la cellule afin de placer les nœuds droits (supérieur et % inférieur). % \begin{macrocode} \hspace*{\stretch{1}}% \pnode(\tabcolsep,\smc@htTabX){ur} \pnode(\tabcolsep,\smc@dpTabX){dr} % \end{macrocode} % Il ne reste plus qu'à tracer la croix. % \begin{macrocode} \psline(ul)(dr) \psline(dl)(ur) } % \end{macrocode} % Macro de sauvegarde d'une liste de deuc valeurs séparées par une % virgule en deux macros |\smc@htTabX| et |\smc@dpTabX|. % \begin{macrocode} \def\smc@GetVTabX#1,#2,{% \edef\smc@htTabX{\the\dimexpr#1}% \edef\smc@dpTabX{-\the\dimexpr#2}% \smc@gobblenil } \def\smc@gobblenil#1\@nil{} % \end{macrocode} % \end{macro} % \begin{environment}{debordedroite} % L'environnement |debordedroite| ajoute une marge de % |\ExtraMarginRight| à droite. % \begin{macrocode} \newenvironment{debordedroite}{% \changemargin{0mm}{-\ExtraMarginRight}% } {\par\endchangemargin} % \end{macrocode} % \end{environment} % \begin{macro}{\habillage} % Cette macro permet d'habiller une image par le texte. Sa syntaxe est % la suivante :\\ % |\habillage{
}|\\ % \begin{macrocode} \newcommand*\habillage[1]{% % \end{macrocode} % Le principe va être de placer la figure en la faisant déborder dans % la marge droite. Si la figure fait moins de |\ExtraMarginRight| % de large, elle n'ira pas jusqu'à la fin de cette marge % supplémentaire sinon, elle est placée pour aller jusqu'à cette marge % et le texte est composée sur une largeur adéquate de façon % automatique par la macro |\parpic|. % % Pour cela, on va tricher sur la largeur de la figure. Elle sera de % |-\ExtraMarginRight| si cette quantité est positive ou bien % nulle sinon. En réalité, il y a un petit bug à ce niveau (de parpic % je pense) et il ne faut pas que la largeur soit totalement nulle, % d'où la valeur un peu étrange de |0.1pt|. Pour faire tous ces % calculs, il faut au préalable mettre le matériel en boîte. % \begin{macrocode} \setbox\smc@boxb=\hbox{#1}% \smc@dimb = \dimexpr\wd\smc@boxb-\ExtraMarginRight\relax \ifdim \smc@dimb<\z@ \smc@dimb = 0.1pt \fi % \end{macrocode} % On peut maintenant appeler la macro |\parpic|. % \begin{macrocode} \parpic[r]{\makebox[\smc@dimb][l]{{#1}}} } % \end{macrocode} % \end{macro} % \begin{macro}{\u} % La classe permet de gérer les unités de façon simple avec des macros % de type |\uxx| où |xx| indique l'unité choisie. Le nombre est mis en % forme selon les standards français. % % Au départ, on sauvegarde la valeur de la macro |\u| dans |\uori|. Il % s'agit de la macro d'accent rond inverse. On déclare alors les deux % macros qui ne demandent aucune unité. % \begin{macrocode} \let\uori\u % \end{macrocode} % Le |\U| est parfois défini. On le tue. % \begin{macrocode} \let\Uori\U \let\U\relax \newcommand\U[1]{\ensuremath{#1}} \renewcommand\u[1]{\ensuremath{\nombre{#1}}} % \end{macrocode} % \end{macro} % \begin{macro}{\newunit} % Macro générale de création de macros d'unité. Cette macro demande % deux paramètres : le nom de la macro et l'unité à afficher (en mode % texte). % \begin{macrocode} \newcommand\newunit[2]{% % \end{macrocode} % On commence avec la macro où le nombre est écrit avec la macro % |\nombre|. Le nom de cette macro est |\u| où || est le % premier argument de |\newunit|. % \begin{macrocode} \expandafter\newcommand\csname u#1\endcsname[1]{% % \end{macrocode} % Si le nombre passé est totalement vide, on n'affiche que l'unité. % \begin{macrocode} \@ifmtarg{##1} {\ensuremath{#2}} {\ensuremath{\nombre{##1}\,#2}}% }% % \end{macrocode} % On fait exactement la même chose avec la macro |\U|. La % diiférence est que le nombre est composé directement en mode % mathématique (sans la macro |\nombre|). Cela permet de passer des % expressions mathématiques. % \begin{macrocode} \expandafter\newcommand\csname U#1\endcsname[1]{% \@ifmtarg{##1} {\ensuremath{#2}} {\ensuremath{##1\,#2}}% }% } % \end{macrocode} % \end{macro} % \begin{macro}{\renewunit} % La macro |\renewunit| permet à l'utilisateur de redéfinir des unités % existantes. C'est exactement le même code que ci-dessus mais avec un % |\renewcommand| à la place des |\newcommand|. % \begin{macrocode} \newcommand\renewunit[2]{% \expandafter\renewcommand\csname u#1\endcsname[1]{% \@ifmtarg{##1} {\ensuremath{#2}} {\ensuremath{\nombre{##1}\,#2}}% }% \expandafter\renewcommand\csname U#1\endcsname[1]{% \@ifmtarg{##1} {\ensuremath{#2}} {\ensuremath{##1\,#2}}% }% } % \end{macrocode} % \end{macro} % On utilise la macro |\newunit| pour créer des macros d'unités % de longueur. % \begin{macrocode} \newunit{ym}{\text{ym}} \newunit{zm}{\text{zm}} \newunit{am}{\text{am}} \newunit{fm}{\text{fm}} \newunit{pm}{\text{pm}} \newunit{nm}{\text{nm}} \newunit{micron}{\mu\text{m}} \newunit{mm}{\text{mm}} \newunit{cm}{\text{cm}} \newunit{dm}{\text{dm}} \newunit{m}{\text{m}} \newunit{dam}{\text{dam}} \newunit{hm}{\text{hm}} \newunit{km}{\text{km}} \newunit{Mm}{\text{Mm}} \newunit{Gm}{\text{Gm}} \newunit{Tm}{\text{Tm}} \newunit{Pm}{\text{Pm}} \newunit{Em}{\text{Em}} \newunit{Zm}{\text{Zm}} \newunit{Ym}{\text{Ym}} % \end{macrocode} % Unités de surface. % \begin{macrocode} \newunit{mmq}{\text{mm}^2} \newunit{cmq}{\text{cm}^2} \newunit{dmq}{\text{dm}^2} \newunit{mq}{\text{m}^2} \newunit{damq}{\text{dam}^2} \newunit{hmq}{\text{hm}^2} \newunit{kmq}{\text{km}^2} \newunit{ha}{\text{ha}} % \end{macrocode} % Unités de volume. % \begin{macrocode} \newunit{mmc}{\text{mm}^3} \newunit{cmc}{\text{cm}^3} \newunit{dmc}{\text{dm}^3} \newunit{mc}{\text{m}^3} \newunit{damc}{\text{dam}^3} \newunit{hmc}{\text{hm}^3} \newunit{kmc}{\text{km}^3} % \end{macrocode} % Unités de volume en litre. % \begin{macrocode} \newunit{hl}{\text{hl}} \newunit{dal}{\text{dal}} \newunit{l}{\text{l}} \newunit{dl}{\text{dl}} \newunit{cl}{\text{cl}} \newunit{ml}{\text{ml}} % \end{macrocode} % Unité de volume en litre (avec un joli \og l \fg{}) % \begin{macrocode} \newunit{hel}{\text{h$\ell$}} \newunit{dael}{\text{da$\ell$}} \newunit{el}{\text{$\ell$}} \newunit{del}{\text{d$\ell$}} \newunit{cel}{\text{c$\ell$}} \newunit{mel}{\text{m$\ell$}} % \end{macrocode} % Unité de temps % \begin{macrocode} \newunit{s}{\text{s}} \newunit{min}{\text{min}} \newunit{h}{\text{h}} \newunit{ms}{\text{m$\cdot$s}^{-1}} \newunit{mh}{\text{m$\cdot$h}^{-1}} \newunit{kms}{\text{km$\cdot$s}^{-1}} \newunit{kmmin}{\text{km$\cdot$min}^{-1}} \newunit{kmh}{\text{km$\cdot$h}^{-1}} % \end{macrocode} % Unité de débit % \begin{macrocode} \newunit{ls}{\text{$\ell\cdot$s}^{-1}} % \end{macrocode} % Unités de masses % \begin{macrocode} \newunit{mg}{\text{mg}} \newunit{cg}{\text{cg}} \newunit{dg}{\text{dg}} \newunit{g}{\text{g}} \newunit{dag}{\text{dag}} \newunit{hg}{\text{hg}} \newunit{kg}{\text{kg}} \newunit{T}{\text{T}} % \end{macrocode} % Autres unité % \begin{macrocode} \newunit{pc}{\%} \newunit{deg}{\text{\degre}} \newunit{degc}{\text{\degre C}} \newunit{euro}{\text{\euro}} % \end{macrocode} % \begin{macro}{\algo} % Quelques cartouches de signalitique sont proposés. On commence avec % celle indiquant une activité ou un exercice traitant % d'algorithmique. % \begin{macrocode} \newcommand*\algo{% \psframebox[framesep=1pt,linewidth=\LogoLineWidth, linecolor=AlgoLineColor, fillstyle=solid, fillcolor=AlgoBkgColor, framearc=0.6]{% \AlgoFont \textcolor{AlgoTextColor}{\StringALGO}% } } % \end{macrocode} % \end{macro} % \begin{macro}{\tice} % Le deuxième logo est celui dédié au TICE. Il se construit % exactement comme le logo Algo. Seul le texte (bien sûr) et les % couleurs changent. % \begin{macrocode} \newcommand*\tice{% \psframebox[framesep=1pt,linewidth=\LogoLineWidth, linecolor=TiceLineColor, fillstyle=solid, fillcolor=TiceBkgColor, framearc=0.6]{% \TiceFont \textcolor{TiceTextColor}{\StringTICE}% } } % \end{macrocode} % \end{macro} % \begin{environment}{oldalgorithme} % Dans une première version, l'environnement algorithme consistait % uniquement à afficher le contenu dans un cadre arrondi avec fond % coloré en respectant les saut de ligne et les espaces et avec une % numérotation des lignes. % % En fait, dans la deuxième version, toute la structure des % algorithmes est décrite en terme de macro. Tout l'arsenal de % traitement verbatim devient donc totalement inutile. On conserve % quand même l'ancien environnement sous le nom |oldalgorithme|. % % Le compteur |smc@line| va servir à numéroter les lignes. % \begin{macrocode} \newcounter{smc@line} \newenvironment{oldalgorithme}{% % \end{macrocode} % Les algorithmes sont affichés avec la fonte à chasse fixe. On remet % ensuite le compteur de ligne à zéro. % \begin{macrocode} \ttfamily \c@smc@line \z@ % \end{macrocode} % Avant de rendre la fin de ligne active (et équivalente à |\par|) % avec la commande |\obeylines|, on redéfinit |\par|. Celle-ci doit % non seulement passer au paragraphe suivant mais aussi afficher le % numéro de ligne. On ne peut pas le faire de façion systématique % sinon, la ligne |\end{oldalgorithme}| provoquerait une ligne vide % numérotée dans le résultat. Pour cela, on regarde ce qui suit le % saut de ligne. % \begin{macrocode} \def\par{% \@@par \afterassignment\smc@displaynum\let\next=% }% % \end{macrocode} % Si ce qui suit le saut de ligne est |\end|, on réinjecte le |\end| % sans rien faire. % \begin{macrocode} \def\smc@displaynum{% \ifx\next\end \expandafter\end \else % \end{macrocode} % Sinon, on incrémente le compteur de ligne est on l'affiche dans sa % boîte. % \begin{macrocode} \global\advance\c@smc@line\@ne% \leavevmode\hb@xt@\AlgorithmeNumWidth{\the\c@smc@line.\hss}% % \end{macrocode} % L'unité lexicale lue doit être réinjectée après le numéro de ligne % et en faisant attention à terminer le développement de |\fi| au % préalable au cas où l'unité sera une macro à paramètre (par % exemple). % \begin{macrocode} \expandafter\next \fi% }% % \end{macrocode} % Les ponctuations doubles ne doivent pas gérer seules les % espacements. % \begin{macrocode} \shorthandoff{;:!?}% % \end{macrocode} % Tout est prêt pour activer les espaces (avec la commandes % \LaTeX{} |\@vobeyspaces| qui permet de garder les espaces de début % de ligne) et les sauts de ligne. % \begin{macrocode} \@vobeyspaces \obeylines % \end{macrocode} % Le reste de l'environnement consiste à placer le corps de % l'environnement dans une boîte dont la largeur doit prévoir les % marges et les filets. % \begin{macrocode} \begin{lrbox}{\smc@boxa}% \minipage{\dimexpr\linewidth-\AlgorithmeRuleWidth*2-\AlgorithmeSep*2}% } {% % \end{macrocode} % En fin d'environnement, on ferme la minipage et la boîte. % \begin{macrocode} \endminipage \end{lrbox}% % \end{macrocode} % On passe au paragraphe suivant (avec la primitive |\@@par|). % \begin{macrocode} \@@par\addvspace{\BeforeAlgorithmeVSpace} % \end{macrocode} % On peut alors afficher le cadre et son contenu ! % \begin{macrocode} \psframebox[linecolor=AlgorithmeRuleColor, linewidth=\AlgorithmeRuleWidth, fillstyle=solid, fillcolor=AlgorithmeBkgColor, framesep=\AlgorithmeSep, cornersize=absolute, linearc=\AlgorithmeSep]% {\usebox{\smc@boxa}}% \@@par\addvspace{\AfterAlgorithmeVSpace} } % \end{macrocode} % \end{environment} % \begin{environment}{algorithme} % Le nouvel environnement |algorithme| dispose d'une batterie de % macros permettant de spécifier le code. % % Chaque commande commence une nouvelle ligne et place l'espace de % retrait constamment tenu à jour dans le compteur |\smc@indent|. Pour % gérer ce retrait de la façon la plus lisible possible, deux macros % sont définies pour l'augmenter et le diminuer. % \begin{macrocode} \newcount\smc@indent \newcommand*\smc@inc@indent{% \advance\smc@indent\@ne } \newcommand*\smc@dec@indent{% \ifnum\smc@indent>\z@ \advance\smc@indent\m@ne \fi } \newcommand*\smc@write@indent{% \par \refstepcounter{smc@line}% \dimen0 \dimexpr\AlgoIndent*\smc@indent \leavevmode\hb@xt@\AlgorithmeNumWidth{\texttt{\the\c@smc@line.}\hss}% \hspace*{\dimen0}% } \newcommand*\BlocVariables{% \smc@dec@indent \smc@write@indent \textit{Liste des variables utilis\'ees}% \smc@inc@indent } \newcommand*\BlocEntrees{% \smc@dec@indent \smc@write@indent \textit{Entr\'ees}% \smc@inc@indent } \newcommand*\BlocTraitements{% \smc@dec@indent \smc@write@indent \textit{Traitements} \smc@inc@indent } \newcommand*\BlocAffichage{% \smc@dec@indent \smc@write@indent \textit{Affichage} \smc@inc@indent } \newcommand\BlocTraitementsEtAffichage{% \smc@dec@indent \smc@write@indent \textit{Traitements et affichage} \smc@inc@indent } \newcommand*\DeclareVar[3]{% \smc@write@indent \texttt{#1 \string: }% \textit{#2}\hfill \textcolor{CouleurAlgoCommentaire}{#3}% } \newcommand*\TantQue[2]{% \smc@write@indent \texttt{\textcolor{CouleurAlgoTantque}{\bfseries Tant que} (\texttt{#1})} \texttt{\bfseries faire} \smc@inc@indent #2 \smc@dec@indent \smc@write@indent \texttt{\textcolor{CouleurAlgoTantque}{\bfseries Fin Tant que}}% } \newcommand*\Pour[4]{% \smc@write@indent \texttt{\textcolor{CouleurAlgoPour}{\bfseries Pour}} \texttt{#1} \textcolor{CouleurAlgoPour}{\bfseries variant de} \texttt{#2} \textcolor{CouleurAlgoPour}{\bfseries \`a} \texttt{#3} \texttt{\bfseries faire} \smc@inc@indent #4 \smc@dec@indent \smc@write@indent \texttt{\textcolor{CouleurAlgoTantque}{\bfseries Fin Pour}}% } \newcommand*\PourAvecPas[5]{% \smc@write@indent \texttt{\textcolor{CouleurAlgoPour}{\bfseries Pour}} \texttt{#1} \textcolor{CouleurAlgoPour}{\bfseries variant de} \texttt{#2} \textcolor{CouleurAlgoPour}{\bfseries \`a} \texttt{#3} \textcolor{CouleurAlgoPour}{\bfseries avec un pas de} \texttt{#4} \texttt{faire} \smc@inc@indent #5 \smc@dec@indent \smc@write@indent \texttt{\textcolor{CouleurAlgoTantque}{\bfseries Fin Pour}}% } \newcommand*\SiAlors[2]{% \smc@write@indent \texttt{\textcolor{CouleurAlgoSi}{\bfseries Si}} {#1} \texttt{\textcolor{CouleurAlgoSi}{\bfseries Alors}} \smc@inc@indent #2 \smc@dec@indent \smc@write@indent \texttt{\textcolor{CouleurAlgoSi}{\bfseries Fin Si}}% } \newcommand*\SiAlorsSinon[3]{% \smc@write@indent \texttt{\textcolor{CouleurAlgoSi}{\bfseries Si}} {#1} \texttt{\textcolor{CouleurAlgoSi}{\bfseries Alors}} \smc@inc@indent #2 \smc@dec@indent \smc@write@indent \texttt{\textcolor{CouleurAlgoSi}{\bfseries Sinon}} \smc@inc@indent #3 \smc@dec@indent \smc@write@indent \texttt{\textcolor{CouleurAlgoSi}{\bfseries Fin Si}}% } \newcommand*\AfficherVar[1]{% \smc@write@indent \textcolor{CouleurAlgoAffiche}{Afficher la valeur de} \texttt{#1}% } \newcommand*\Afficher[1]{% \smc@write@indent \textcolor{CouleurAlgoAffiche}{Afficher} #1% } \newcommand*\Calculer[1]{% \smc@write@indent \textcolor{CouleurAlgoCalcule}{Calculer} #1% } \newcommand*\Demander[1]{% \smc@write@indent \textcolor{CouleurAlgoDemander}{Demander} \texttt{#1}% } \newcommand*\Saisir[1]{% \smc@write@indent \textcolor{CouleurAlgoSaisir}{Saisir} \texttt{#1}% } \newcommand*\Stocker[1]{% \smc@write@indent \textcolor{CouleurAlgoStocker}{Stocker} la r\'eponse dans \texttt{#1}% } \newcommand*\DonnerValeur[2]{% \smc@write@indent \textcolor{CouleurAlgoDonnerValeur}{Donner} \`a \texttt{#1} la valeur de \texttt{#2}% } \newcommand*\TitreAlgo[1]{% \smc@write@indent \textit{Algorithme \string: }#1 } \newcommand*\FinAlgo{% \smc@dec@indent \smc@write@indent \textit{Fin de l'algorithme}% } % \end{macrocode} % L'environnement proprement dit ne fait pas grand chose : il place % son contenu dans une minipage de la bonne largeur et compose alors % ce contenu dans un cadre à fond coloré (et arrondi). % \begin{macrocode} \newenvironment{algorithme}{% % \end{macrocode} % On commence par initialiser le compteur de ligne et on inhibe les % ponctuations doubles actices. % \begin{macrocode} \c@smc@line\z@ \shorthandoff{;:!?}% % \end{macrocode} % On mémorise alors le contenu dans une boîte contenant la minipage à % la bonne largeur. % \begin{macrocode} \begin{lrbox}{\smc@boxa}% \minipage{\dimexpr\linewidth-\AlgorithmeRuleWidth*2-\AlgorithmeSep*2}% } {% % \end{macrocode} % En fin d'environnement, on ferme la minipage et la boîte. % \begin{macrocode} \endminipage \end{lrbox}% % \end{macrocode} % On passe au paragraphe suivant. % \begin{macrocode} \par\addvspace{\BeforeAlgorithmeVSpace} % \end{macrocode} % On peut alors afficher le cadre et son contenu ! % \begin{macrocode} \psframebox[linecolor=AlgorithmeRuleColor, linewidth=\AlgorithmeRuleWidth, fillstyle=solid, fillcolor=AlgorithmeBkgColor, framesep=\AlgorithmeSep, cornersize=absolute, linearc=\AlgorithmeSep]% {\usebox{\smc@boxa}}% \par\addvspace{\AfterAlgorithmeVSpace} } % \end{macrocode} % \end{environment} % \begin{macro}{\Strut} % Pour pouvoir régler finement et individuellement l'interlignage, on % va définir une macro |\Strut| qui sera comme |\strut| mais avec un % paramètre optionnel indiquant un facteur % d'agrandissement-réduction. Par défaut, le facteur vaut 1 et la % macro se comportera comme le |\strut| de \LaTeX{}. % \begin{macrocode} \newcommand*\Strut[1][1]{% \leavevmode \vrule \@height #1\ht\strutbox \@depth #1\dp\strutbox \@width\z@ } % \end{macrocode} % \end{macro} % \begin{macro}{\TopStrut} % La commande |\TopStrut| se comporte comme |\Strut| mais elle ne % concerne que la hauteur. % \begin{macrocode} \newcommand*\TopStrut[1][1]{% \leavevmode \vrule \@height #1\ht\strutbox \@depth \z@ \@width \z@ } % \end{macrocode} % \end{macro} % \begin{macro}{\BotStrut} % La commande |\BotStrut| se comporte comme |\Strut| mais elle ne % concerne que la profondeur. % \begin{macrocode} \newcommand*\BotStrut[1][1]{% \leavevmode \vrule \@height \z@ \@depth #1\dp\strutbox \@width \z@ } % \end{macrocode} % \end{macro} % \begin{macro}{\RefExercice} % Fait référence à un exercice en plaçant le numéro dans un cadre. Les % couleurs sont les mêmes que pour les numéros d'exercice réels. % \begin{macrocode} \newcommand*\RefExercice{% % \end{macrocode} % La couleur du cadre va dépendre du fait que l'exercice ait ou non une % correction. On se sert d'une version étoilée de cette macro pour % gérer cela. % \begin{macrocode} \@ifstar{\smc@sRefExercice}{\smc@nsRefExercice}% } \newcommand*\smc@sRefExercice[1]{% \psframebox*[linewidth=0pt, fillcolor=ExerciceCorrigeNumFrameColor, framesep=2pt]{\textcolor{ExerciceNumColor}{\bfseries \ref{#1}}}% } \newcommand*\smc@nsRefExercice[1]{% \psframebox*[linewidth=0pt, fillcolor=ExerciceNumFrameColor, framesep=2pt] {\textcolor{ExerciceNumColor}{\bfseries \ref{#1}}}% } % \end{macrocode} % \end{macro} % \begin{macro}{\MethodeRefExercice} % Cette macro permet d'indiquer une référence à un exercice dans le % titre d'une méthode. Comme pour la macro précédente, il faut étoiler % la macro pour faire réference à un exercice corrigé. % \begin{macrocode} \newcommand*\MethodeRefExercice{% \@ifstar{\smc@sMethodeRefExercice}{\smc@nsMethodeRefExercice}% } \newcommand\smc@sMethodeRefExercice[1]{% % \end{macrocode} % Tout est composé en taille normale et couleur normale. On passe donc % dans un groupe. % \begin{macrocode} \begingroup \normalcolor \normalfont \MethodeRefExerciceFont % \end{macrocode} % On trouve d'abord un espace |\quad| puis un triangle de la même % couleur que le cadre du numéro. % \begin{macrocode} \hfill \begin{pspicture}(0,0)(0.8em,1.2ex) \pspolygon*[linewidth=0pt, linecolor=MethodeTitleFrameColor] (0,0)(0,1.2ex)(0.8em,0.6ex) \end{pspicture}~% % \end{macrocode} % On compose alors le texte Ex. p. % \begin{macrocode} Ex.~\RefExercice*{#1}~p.~\pageref{#1}% \endgroup } % \end{macrocode} % La version non étoilée fait exactement la même chose à part la % couleur du cadre donc l'appel à |\RefExercice| sans étoile. % \begin{macrocode} \newcommand\smc@nsMethodeRefExercice[1]{% \begingroup \normalcolor \normalfont \MethodeRefExerciceFont \hfill \begin{pspicture}(0,0)(0.8em,1.2ex) \pspolygon*[linewidth=0pt, linecolor=MethodeTitleFrameColor] (0,0)(0,1.2ex)(0.8em,0.6ex) \end{pspicture}~% Ex.~\RefExercice{#1}~p.~\pageref{#1}% \endgroup } % \end{macrocode} % \end{macro} % \begin{macro}{\RefMethode} % Façon de faire référence à une méthode. Le numéro est composé avec % la couleur normalement utilisée pour les cadres de méthodes. % \begin{macrocode} \newcommand*\RefMethode[1]{% \textcolor{MethodeTitleFrameColor}{\bfseries \ref{#1}}% } % \end{macrocode} % \end{macro} % \begin{macro}{\ExerciceRefMethode} % Façon de faire référence à une méthode dans le titre d'un exercice. % \begin{macrocode} \newcommand*\ExerciceRefMethode[1]{% \begingroup \quad \begin{pspicture}(0,0)(0.8em,1.2ex) \pspolygon*[linewidth=0pt, linecolor=MethodeTitleFrameColor] (0,0)(0,1.2ex)(0.8em,0.6ex) \end{pspicture}~% \psframebox*[fillcolor=ExerciceRefMethodeColor] {% \textcolor{Blanc}{% {% \ExerciceRefMethodeFont \StringMETHODE~\ref{#1}% }% }% }% \textcolor{Noir}{% {% \normalfont \ExercicePageRefMethodeFont ~p.~\pageref{#1}% }% }% \endgroup } % \end{macrocode} % \end{macro} % \begin{macro}{\RefItem} % Façon de faire référence à un numéro de liste. % \begin{macrocode} \newcommand*\RefItem[1]{% \textcolor{\smc@curr@itemcolor}{\smc@curr@itemcmd\ref{#1}}% } % \end{macrocode} % \end{macro} % \begin{macro}{\RefQCM} % Façon de faire référence à un exercice de QCM. On reprend en fait un % code similaire à celui permettant de composer le numéro des % exercices de type QCM mais avec une autre taille de caractères. % \begin{macrocode} \newcommand*\RefQCM[1]{% \begingroup \fboxsep \QCMRefHSep \colorbox{QCMFrameColor}{\textcolor{QCMTextFrameColor}{\ref{#1}}}% \endgroup } % \end{macrocode} % \end{macro} % \begin{macro}{\RefPartie} % Façon de faire référence à un numéro de partie. % \begin{macrocode} \newcommand*\RefPartie[1]{% \psframebox*[fillcolor=smc@curr@partiebkgcolor] {\textcolor{smc@curr@partiecolor}{\smc@curr@partiefont \ref{#1}}}% } % \end{macrocode} % \end{macro} % \begin{macro}{sudoku} % La classe prévoit la possibilité de construire des grilles de sudoku % de façon agréable pour l'utilisateur. La syntaxe est la suivante : % \begin{verbatim} % \sudoku[taille]{% % ......... % .*.*.*.*. % 3..1..2.. % etc. % } % \end{verbatim} % où \key{taille} indique la taille des cases de la grille (5mm par % défaut) et où l'argument de |\sudoku| indique soit une case vide % blanche (.) soit une case vide colorée (*) soit un caractère devant % figurer dans la case (avec des accolades en cas de caractère % complexe). % % En fait, la largeur par défaut est sous le contrôle de la macro % |\SudokuWidth|. % \begin{macrocode} \newcommand*\SudokuWidth{5mm} \newcommand\sudoku[2][\SudokuWidth]{% \begingroup % \end{macrocode} % Avant même de faire le |\begin{pspicture}|, on fixe l'unité qui sera % la largeur des cases de la grille. C'est pour cela que tout se % déroule à l'intérieur d'un groupe. % \begin{macrocode} \psset{unit=#1, dimen=middle, linewidth=0.3pt, linecolor=FiletTableauColor} % \end{macrocode} % L'environnement \environ{pspicture} prévoit 10 cases au lieu de 9 % pour pouvoir placer les légendes des lignes et colonnes. % \begin{macrocode} \begin{pspicture}(0,0)(10,10) % \end{macrocode} % Légende des lignes et colonnes. |96+\n| affiche a\ldots j et |74-\n| % affiche J\ldots A. % \begin{macrocode} \multido{\n=1+1}{9}{% \rput[B](\n.5,9.25){\symbol{\numexpr 96+\n}} \rput[B](0.5,\dimexpr\n\psyunit-0.75\psyunit){\symbol{\numexpr 74-\n}} } % \end{macrocode} % Avant de lire l'argument de la macro, c'est-à-dire le contenu des % cases, on initialise les compteurs de ligne et de colonne. On va % lire les lignes de haut en bas donc de 8 à 0 du point de vue de % \environ{pspicture}. % \begin{macrocode} \def\x{1}\def\y{8}% % \end{macrocode} % La macro de lecture de l'argument (et de l'affichage du contenu des % cases) est une macro récursive. On initialise la macro |\smc@next| % avec le nom de cette macro pour préparer les appels récursifs. % \begin{macrocode} \let\smc@next\smc@parsesudoku % \end{macrocode} % Appel de la macro récursive de lecture. Pour gérer tous les cas % (plus de 81 indications, moins de 81 indications) on dispose d'une % double balise de limitation d'argument. % \begin{macrocode} \smc@next#2\@nil\@@nil % \end{macrocode} % Une fois que les cases sont remplies, on affiche les traits gras des % triples cases à l'intérieur de la grille générale de sudoku. Pour % que les jonctions des coins soient propres, on doit faire déborder % certaines lignes de la moitié de l'épaisseur des lignes. % \begin{macrocode} \psset{linewidth=1.2pt} \multido{\n=0+3,\nn=1+3}{4}{% \psline(1,\n)(10,\n) \psline(\nn,-0.5\pslinewidth)(\nn,\dimexpr 9\psyunit+0.5\pslinewidth) } \end{pspicture}% \endgroup } % \end{macrocode} % La macro qui suit est celle qui va lire l'argument de |\sudoku| de % façon récursive et remplir la case correspondante selon le caractère % rencontré. % \begin{macrocode} \def\smc@parsesudoku#1{% % \end{macrocode} % On place le caractère (ou le groupe) lu dans une macro pour tester % s'il s'agit de la balise |\@nil|. % \begin{macrocode} \def\smc@arg{#1}% \ifx\smc@arg\@nnil % \end{macrocode} % Si la balise est atteinte, on passe au traitement final. % \begin{macrocode} \let\smc@next\smc@endsudoku \else % \end{macrocode} % Sinon, on place le résultat en |(\x,\y)|. % \begin{macrocode} \rput(\x,\y){% \if#1.% % \end{macrocode} % Le point donne une case vide à fond blanc. % \begin{macrocode} \psframe(0,0)(1,1) \else\if#1*% % \end{macrocode} % L'étoile donne une case vide à fond coloré. % \begin{macrocode} \psframe[fillstyle=solid, fillcolor=FondSudokuColor](0,0)(1,1) \else % \end{macrocode} % Tout autre contenu affiche le contenu centré dans la case. % \begin{macrocode} \psframe(0,0)(1,1) \rput[B](0.5,0.3\psyunit){#1} \fi\fi } \fi % \end{macrocode} % On passe à la case suivante. % \begin{macrocode} \edef\x{\the\numexpr\x+1}% \ifnum\x=10 % \end{macrocode} % Si la rangée est pleine, on revient au début de la rangée suivante. % \begin{macrocode} \def\x{1}% \edef\y{\the\numexpr\y-1}% \ifnum\y=-1 % \end{macrocode} % Si toutes les rangées ont été traitées, on termine le traitement. % \begin{macrocode} \let\smc@next\smc@endsudoku \fi \fi \smc@next } % \end{macrocode} % En fin de lecture récursive, il faut se débarasser des balises de % délimitation de l'argument. La double balise permet de gérer tous % les cas (plus de 81 indications, exactement 81 indications, moins de % 81 indications). % \begin{macrocode} \def\smc@endsudoku#1\@@nil{% % \end{macrocode} % On regarde s'il y a eu moins de 81 indications. Et si oui, on lance % la macro récursive de remplissage. % \begin{macrocode} \ifnum\y>-1 \let\smc@next\smc@@endsudoku \smc@next \fi } % \end{macrocode} % La dernière macro va s'appeler récursivement pour remplir la fin de % la grille avec des cases vides. % \begin{macrocode} \def\smc@@endsudoku{% \rput(\x,\y){\psframe(0,0)(1,1)} \edef\x{\the\numexpr\x+1}% \ifnum\x=10 % \end{macrocode} % Si la rangée est pleine, on revient au début de la rangée suivante. % \begin{macrocode} \def\x{1}% \edef\y{\the\numexpr\y-1}% \ifnum\y=-1 % \end{macrocode} % Si toutes les rangées ont été traitées, on termine le traitement. % \begin{macrocode} \let\smc@next\relax \fi \fi \smc@next } % \end{macrocode} % \end{macro} % \section{En-têtes et pieds de page} % \begin{macro}{\smc@nobsbs} % Il est parfois nécessaire que la séquence de contrôle |\\| perde son % rôle de saut de ligne pour prendre celui d'une espace. On prendra % garde au fait que cette séquence de contrôle, qu'elle soit ou non % suivie d'un espace soit équivalente à une seule espace. % \begin{macrocode} \newcommand\smc@nobsbs[1]{% \begingroup \def\\{\space\ignorespaces}% \protected@edef\smc@tmp{#1}% \smc@tmp \endgroup } % \end{macrocode} % \end{macro} % \begin{macro}{\smc@headeven} % On gère ici toutes les en-têtes et pieds de page. On commence par % définir une macro qui servira systématiquement pour les % en-têtes. Ceux-ci sont constitués d'un cadre avec un titre et un % dégradé de carrés dans un coin. Il suffit de donner le nom de base % des couleurs qui seront utilisées (les noms seront construits selon % le procédé \texttt{Color} où \texttt{} est un nombre % entre 1 et 5 donnant les cinq couleurs différentes pour % l'en-tête et un numéro 0 pour la couleur du texte du titre. il % faudra également passer, en second argument, le titre. % % Les en-têtes de page paire et impaire ne sont pas construite de la % même façon. On commence par celles des pages paires. % \begin{macrocode} \newcommand*\smc@headeven[2]{% % \end{macrocode} % Sur les pages paires, le cadre est sur la gauche de l'en-tête en % pleine page : il faudra faire déborder à gauche (et en haut). % \begin{macrocode} \begin{pspicture}(0,0)(\HeadFrameWidth,0) \psset{linewidth=0pt, linestyle=none, fillstyle=solid} \psframe[fillcolor=#15Color] (\dimexpr -\smc@marginleft-\smc@bleed,-\HeadFrameDepth) (\HeadFrameWidth,\dimexpr \HeadFrameHeight+\smc@bleed) \smc@diagonal(\HeadFrameWidth-\SquareWidth*3,-\HeadFrameDepth){#1} % \end{macrocode} % Pour le titre, il faut d'abord vérifier qu'il loge dans la largeur à % disposition et, sinon, réaliser une contraction horizontale avant de % l'afficher. Pour cela on utilise la macro |\psscaleboxto| qui a % besoin de connaître les nouvelles hauteur totale et largeur. La % hauteur totale doit rester la même d'où le calcul % |\ht0+\dp0|. D'autre part, la commande PSTricks |\psscaleboxto| ne % semble pas fonctionner correctement ici. Enfin, pour que la commande % |\resizebox| de l'extension \package{graphicx} fonctionne comme il % faut, il faut que les commandes de changement de fontes soient % extérieures à l'argument terminal de |\resizebox|. % \begin{macrocode} \setbox0=\hbox{\textcolor{#10Color}{\HeadTitleFont #2}}% \ifdim\wd0>\HeadTitleMaxWidth \rput[Bl](0,0){% {% \HeadTitleFont\color{#10Color}% \resizebox{\HeadTitleMaxWidth}{\dimexpr\ht0+\dp0}{#2}% }% } \else \rput[Bl](0,0){\unhbox0} \fi \end{pspicture} } % \end{macrocode} % \end{macro} % \begin{macro}{\smc@headodd} % La différence avec les en-têtes de pages paires est que le cadre est % à droite (donc déborde à droite et en haut) et que le texte est % cadré à droite. % \begin{macrocode} \newcommand\smc@headodd[2]{% \begin{pspicture}(0,0)(\HeadFrameWidth,0) \psset{linewidth=0pt, linestyle=none, fillstyle=solid} \psframe[fillcolor=#15Color] (0,-\HeadFrameDepth) (\dimexpr \HeadFrameWidth+\smc@marginright+\smc@bleed, \dimexpr \HeadFrameHeight+\smc@bleed) \smc@antidiagonal(0pt,-\HeadFrameDepth){#1} \setbox0=\hbox{\textcolor{#10Color}{\HeadTitleFont #2}}% \ifdim\wd0>\HeadTitleMaxWidth \rput[Br](\HeadFrameWidth,0){% {% \HeadTitleFont\color{#10Color}% \resizebox{\HeadTitleMaxWidth}{\dimexpr\ht0+\dp0}{#2}% }% } \else \rput[Br](\HeadFrameWidth,0){\unhbox0} \fi \end{pspicture} } % \end{macrocode} % \end{macro} % \begin{macro}{\smc@roundheadeven} % Certaines en-têtes ont un aspect arrondi. Il faudra des macros % dédiées pour les gérer. Voici celle pour les pages paires. Par % rapport à la macro précédente, il y a un argument de couleur % supplémentaire pour pouvoir faire l'arrondi du cadre avec la couleur % du fond. % \begin{macrocode} \newcommand*\smc@roundheadeven[3]{% \begin{pspicture}(0,0)(\RoundHeadFrameWidth,0) \psset{linewidth=0pt, linestyle=none, fillstyle=solid} \psframe[fillcolor=#15Color] (\dimexpr -\smc@marginleft-\smc@bleed,-\HeadFrameDepth) (\RoundHeadFrameWidth,\dimexpr \HeadFrameHeight+\smc@bleed) % \end{macrocode} % En fait, l'arrondi sera fait par les disques. Ici, on se contente % d'effacer un carré correspondant à un quart de disque % \begin{macrocode} \psframe[fillcolor=#2] (\dimexpr \RoundHeadFrameWidth-\SquareWidth/2, -\HeadFrameDepth) (\RoundHeadFrameWidth, \dimexpr -\HeadFrameDepth+\SquareWidth/2) \smc@rounddiagonal(\RoundHeadFrameWidth-\SquareWidth*3,-\HeadFrameDepth){#1} \setbox0=\hbox{\textcolor{#10Color}{\HeadTitleFont #3}}% \ifdim\wd0>\RoundHeadTitleMaxWidth \rput[Bl](0,0){% {% \HeadTitleFont\color{#10Color}% \resizebox{\RoundHeadTitleMaxWidth}{\dimexpr\ht0+\dp0}{#3}% }% } \else \rput[Bl](0,0){\unhbox0} \fi \end{pspicture} } % \end{macrocode} % \end{macro} % \begin{macro}{\smc@roundheadodd} % Même chose que ci-dessus mais pour les pages impaires. % \begin{macrocode} \newcommand\smc@roundheadodd[3]{% \begin{pspicture}(0,0)(\RoundHeadFrameWidth,0) \psset{linewidth=0pt, linestyle=none, fillstyle=solid} \psframe[fillcolor=#15Color] (0,-\HeadFrameDepth) (\dimexpr \RoundHeadFrameWidth+\smc@marginright+\smc@bleed, \dimexpr \HeadFrameHeight+\smc@bleed) \psframe[fillcolor=#2] (0, -\HeadFrameDepth) (\dimexpr \SquareWidth/2, \dimexpr -\HeadFrameDepth+\SquareWidth/2) \smc@roundantidiagonal(0pt,-\HeadFrameDepth){#1} \setbox0=\hbox{\textcolor{#10Color}{\HeadTitleFont #3}}% \ifdim\wd0>\RoundHeadTitleMaxWidth \rput[Br](\RoundHeadFrameWidth,0){% {% \HeadTitleFont\color{#10Color}% \resizebox{\RoundHeadTitleMaxWidth}{\dimexpr\ht0+\dp0}{#3}% }% } \else \rput[Br](\RoundHeadFrameWidth,0){\unhbox0} \fi \end{pspicture}% } % \end{macrocode} % \end{macro} % \begin{macro}{\smc@footpage} % Le pied de page est toujours constitué du numéro de page avec un % rectangle coloré au-dessous en pleine page. Comme il n'y a pas % nécessairement de titre accolé, on commence par définir cette partie % commune. Ici, il n'y a besoin que de la couleur de fond. % \begin{macrocode} \newcommand*\smc@footpage[1]{% \begin{pspicture}(0,0)(\FootFrameWidth,0) \psset{linewidth=0pt, linestyle=none, fillstyle=solid} \rput[B](.25,0){\FootPageFont \thepage} \psframe[fillcolor=#1](0,-\FootFrameSep) (\FootFrameWidth, \dimexpr \smc@footskip+\FootFrameSep -\smc@marginbottom-\smc@bleed) \end{pspicture}% } % \end{macrocode} % \end{macro} % \begin{macro}{\smc@foottitleeven} % Les pieds de page de pages paires comportent généralement % l'abréviation du thème courant en capitale suivie du numéro de % chapitre et du titre de chapitre. Il faut tuer la macro |\\| pour ne % pas avoir de saut de ligne dans le pied de page. % \begin{macrocode} \newcommand*\smc@foottitleeven{% {% \space {% \color{FootTitleHeadColor}% \FootTitleHeadFont \@chapapp\space \MakeUppercase{\smc@thema@init}\thechapter. }\space {% \FootTitleChapterFont \smc@nobsbs{\smc@chaptertitle}% }% }% } % \end{macrocode} % \end{macro} % \begin{macro}{\smc@foottitleodd} % Les pieds de pages impaires sont généralement comme les pieds de % pages paires mais cadrés à droite. Il faut quitter le mode vertical % au début sinon on a un décalage vertical parasite. % \begin{macrocode} \newcommand*\smc@foottitleodd{% {% \leavevmode {% \color{FootTitleHeadColor}% \FootTitleHeadFont \@chapapp\space \MakeUppercase{\smc@thema@init}\thechapter. }\space {% \FootTitleChapterFont \smc@nobsbs{\smc@chaptertitle}% }% }% \space } % \end{macrocode} % \end{macro} % \begin{macro}{\smc@bkgeven} % Les pages en fond colorés sont gérés directement par la classe et au % niveau des en-têtes. Cela permet de pouvoir avoir la main sur le % débordement de pleine page. Il faut distinguer les fonds de page % paire et de page impaire si les marges droite et gauche sont % différentes (ce n'est pas le cas ici mais autant prévoir). % % Il faut que ce soit le premier élément affiché dans une en-tête et % pour cela, il ne modifiera pas l'emplacement en cours du curseur. Il % faudra également l'afficher en tant qu'en-tête gauche de la page. % \begin{macrocode} \newcommand*\smc@bkgeven[1]{% \begin{pspicture}(0,0)(0,0) \psset{linewidth=0pt, linestyle=none, fillstyle=solid} \psframe[fillcolor=#1] (\dimexpr -\smc@marginleft-\smc@bleed, \dimexpr \smc@margintop-\smc@headsep+\smc@bleed) (\dimexpr \linewidth+\smc@marginright+\smc@bleed, \dimexpr -\smc@headsep-\textheight-\smc@marginbottom-\smc@bleed) \end{pspicture}% } % \end{macrocode} % \end{macro} % \begin{macro}{\smc@bkgodd} % La seule chose qui change par rapport à la macro précédente est % l'inversion de la droite et de la gauche pour les marges. % \begin{macrocode} \newcommand*\smc@bkgodd[1]{% \begin{pspicture}(0,0)(0,0) \psset{linewidth=0pt, linestyle=none, fillstyle=solid} \psframe[fillcolor=#1] (\dimexpr -\smc@marginright-\smc@bleed, \dimexpr \smc@margintop-\smc@headsep+\smc@bleed) (\dimexpr \linewidth+\smc@marginleft+\smc@bleed, \dimexpr -\smc@headsep-\textheight-\smc@marginbottom-\smc@bleed) \end{pspicture}% } % \end{macrocode} % \end{macro} % Pour tous les styles, il n'y aura jamais de filets sur les en-têtes % et les pieds de page. On les supprime donc de façon globale. % \begin{macrocode} \renewcommand{\headrulewidth}{0pt} \renewcommand{\footrulewidth}{0pt} % \end{macrocode} % \begin{macro}{\ps@firstchapter} % Le style de première page de chapitre est très simple : rien pour % l'en-tête et numéro de page pour le pied de page. Bien qu'une % première page de chapitre ne puisse se situer sur une page paire, on % définit quand même ce style pour les deux parités. % \begin{macrocode} \fancypagestyle{firstchapter}{% \fancyhf{} \fancyhead[LE]{} \fancyhead[RO]{} \fancyfoot[LE]{\smc@footpage{FirstChapterFootColor}} \fancyfoot[RO]{\smc@footpage{FirstChapterFootColor}} } % \end{macrocode} % \end{macro} % \begin{macro}{\ps@activites} % Le style des pages d'activités d'approche suit le cadre général. % \begin{macrocode} \fancypagestyle{activites}{% \fancyhf{} \fancyhead[LE]{\smc@headeven{ActiviteHeadFrame}{\StringActivitesApproche}} \fancyhead[RO]{\smc@headodd{ActiviteHeadFrame}{\StringActivitesApproche}} \fancyfoot[LE]{\smc@footpage{ActiviteFootColor}\smc@foottitleeven} \fancyfoot[RO]{\smc@foottitleodd\smc@footpage{ActiviteFootColor}} } % \end{macrocode} % \end{macro} % \begin{macro}{\ps@cours} % Le style des pages de Cours et Méthodes suit le cadre général. % \begin{macrocode} \fancypagestyle{cours}{% \fancyhf{} \fancyhead[LE]{\smc@headeven{CoursHeadFrame}{\StringCoursMethodes}} \fancyhead[RO]{\smc@headodd{CoursHeadFrame}{\StringCoursMethodes}} \fancyfoot[LE]{\smc@footpage{CoursFootColor}\smc@foottitleeven} \fancyfoot[RO]{\smc@foottitleodd\smc@footpage{CoursFootColor}} } % \end{macrocode} % \end{macro} % \begin{macro}{\ps@exercicesbase} % Le style des pages de Exercices de base suit le cadre général. % \begin{macrocode} \fancypagestyle{exercicesbase}{% \fancyhf{} \fancyhead[LE]{\smc@headeven{ExoBaseHeadFrame}{\StringExercicesBase}} \fancyhead[RO]{\smc@headodd{ExoBaseHeadFrame}{\StringExercicesBase}} \fancyfoot[LE]{\smc@footpage{ExoBaseFootColor}\smc@foottitleeven} \fancyfoot[RO]{\smc@foottitleodd\smc@footpage{ExoBaseFootColor}} } % \end{macrocode} % \end{macro} % \begin{macro}{\ps@exercicesappr} % Le style des pages de Exercices de base suit le cadre général. % \begin{macrocode} \fancypagestyle{exercicesappr}{% \fancyhf{} \fancyhead[LE]{\smc@headeven{ExoApprHeadFrame}{\StringExercicesAppr}} \fancyhead[RO]{\smc@headodd{ExoApprHeadFrame}{\StringExercicesAppr}} \fancyfoot[LE]{\smc@footpage{ExoApprFootColor}\smc@foottitleeven} \fancyfoot[RO]{\smc@foottitleodd\smc@footpage{ExoApprFootColor}} } % \end{macrocode} % \end{macro} % \begin{macro}{\ps@connaissances} % Le style des pages de Je teste mes connaissances ne suit pas le % cadre général. Le fond de page en couleur sera géré par les % en-têtes. En fait, pour des raisons d'économie d'impression pour les % collègues, on ne fait plus de fond de page en couleur. % \begin{macrocode} \fancypagestyle{connaissances}{% \fancyhf{} \fancyfoot[LE]{\smc@footpage{ConnFootColor}\smc@foottitleeven} \fancyfoot[RO]{\smc@foottitleodd\smc@footpage{ConnFootColor}} } % \end{macrocode} % \end{macro} % \begin{macro}{\ps@firstconnaissances} % Le style de la première page de Je teste mes connaissances ne suit % pas le cadre général. L'en-tête est avec un cadre a coin arrondi et % des disques au lieu des carrés. % \begin{macrocode} \fancypagestyle{firstconnaissances}{% \fancyhf{} \fancyhead[LE]{% \smc@roundheadeven{ConnHeadFrame}{Blanc} {\StringTestConnaissances}% } \fancyhead[RO]{% \smc@roundheadodd{ConnHeadFrame}{Blanc} {\StringTestConnaissances}% } \fancyfoot[LE]{\smc@footpage{ConnFootColor}\smc@foottitleeven} \fancyfoot[RO]{\smc@foottitleodd\smc@footpage{ConnFootColor}} } % \end{macrocode} % \end{macro} % \begin{macro}{\ps@TP} % Le style des pages des travaux pratiques suit le cadre général. % \begin{macrocode} \fancypagestyle{TP}{% \fancyhf{} \fancyhead[LE]{\smc@headeven{TPHeadFrame}{\StringTravauxPratiques}} \fancyhead[RO]{\smc@headodd{TPHeadFrame}{\StringTravauxPratiques}} \fancyfoot[LE]{\smc@footpage{TPFootColor}\smc@foottitleeven} \fancyfoot[RO]{\smc@foottitleodd\smc@footpage{TPFootColor}} } % \end{macrocode} % \end{macro} % \begin{macro}{ps@recreation} % Le style des pages récréation suit le cadre général. % \begin{macrocode} \fancypagestyle{recreation}{% \fancyhf{} \fancyhead[LE]{\smc@headeven{RecreationHeadFrame}{\StringRecreation}} \fancyhead[RO]{\smc@headodd{RecreationHeadFrame}{\StringRecreation}} \fancyfoot[LE]{\smc@footpage{RecreationFootColor}\smc@foottitleeven} \fancyfoot[RO]{\smc@foottitleodd\smc@footpage{RecreationFootColor}} } % \end{macrocode} % \end{macro} % \begin{macro}{\smc@firstheadevenannexe} % Les annexes partagent toutes le même type d'en-tête qui est en fait % des rectangles dans les marges. On définit ici la forme générale de % ces en-têtes. D'abord pour la première page si elle est % paire. L'argument est la couleur utilisée. % \begin{macrocode} \newcommand*\smc@firstheadevenannexe[1]{% \begin{pspicture}(0,0)(0,0) \rput(-\smc@marginleft, \dimexpr \smc@margintop-\smc@headsep){% \pspolygon[linestyle=none, linewidth=0pt, fillstyle=solid, fillcolor=#1] (-\smc@bleed, \smc@bleed) (-\smc@bleed, \dimexpr -\smc@paperheight-\smc@bleed) (\CorrigeHeadFrameWidth, \dimexpr -\smc@paperheight-\smc@bleed) (\CorrigeHeadFrameWidth, -\CorrigeHeadFrameWidth) (\dimexpr \CorrigeHeadFrameWidth*2, -\CorrigeHeadFrameWidth) (\dimexpr \CorrigeHeadFrameWidth*2, \smc@bleed) } \end{pspicture}% } % \end{macrocode} % \end{macro} % \begin{macro}{\smc@firstheadoddannexe} % Même chose que ci-dessus pour les premières pages impaires. % \begin{macrocode} \newcommand*\smc@firstheadoddannexe[1]{% \begin{pspicture}(0,0)(0,0) \rput(\smc@marginright,\dimexpr \smc@margintop-\smc@headsep){% \pspolygon[linestyle=none, linewidth=0pt, fillstyle=solid, fillcolor=#1] (\smc@bleed, \smc@bleed) (\smc@bleed, \dimexpr -\smc@paperheight-\smc@bleed) (-\CorrigeHeadFrameWidth, \dimexpr -\smc@paperheight-\smc@bleed) (-\CorrigeHeadFrameWidth, -\CorrigeHeadFrameWidth) (\dimexpr -\CorrigeHeadFrameWidth*2, -\CorrigeHeadFrameWidth) (\dimexpr -\CorrigeHeadFrameWidth*2, \smc@bleed) } \end{pspicture}% } % \end{macrocode} % \end{macro} % \begin{macro}{\smc@headevenannexe} % Rectangle pour les pages paires des annexes. % \begin{macrocode} \newcommand*\smc@headevenannexe[1]{% \begin{pspicture}(0,0)(0,0) \rput(-\smc@marginleft, \dimexpr \smc@margintop-\smc@headsep){% \pspolygon[linestyle=none, linewidth=0pt, fillstyle=solid, fillcolor=#1] (-\smc@bleed, \smc@bleed) (-\smc@bleed, \dimexpr -\smc@paperheight-\smc@bleed) (\CorrigeHeadFrameWidth, \dimexpr -\smc@paperheight-\smc@bleed) (\CorrigeHeadFrameWidth, \smc@bleed) } \end{pspicture}% } % \end{macrocode} % \end{macro} % \begin{macro}{\smc@headoddannexe} % Rectangle pour les pages paires des annexes. % \begin{macrocode} \newcommand*\smc@headoddannexe[1]{% \begin{pspicture}(0,0)(0,0) \rput(\smc@marginright,\dimexpr \smc@margintop-\smc@headsep){% \pspolygon[linestyle=none, linewidth=0pt, fillstyle=solid, fillcolor=#1] (\smc@bleed,\smc@bleed) (\smc@bleed, \dimexpr -\smc@paperheight-\smc@bleed) (-\CorrigeHeadFrameWidth, \dimexpr -\smc@paperheight-\smc@bleed) (-\CorrigeHeadFrameWidth, \smc@bleed) } \end{pspicture}% } % \end{macrocode} % \end{macro} % \begin{macro}{\ps@firstcorrige} % Le style pour les pages de corrigé n'a rien à voir avec les autres % styles. L'en-tête n'est constituée que d'une sorte de rectangle dans % la marge et le pied de page est beaucoup plus minimal celui des % autres styles. % \begin{macrocode} \fancypagestyle{firstcorrige}{% \fancyhf{} \fancyhead[LE]{% \smc@firstheadevenannexe{CorrigeHeadFrameColor}% } \fancyhead[RO]{% \smc@firstheadoddannexe{CorrigeHeadFrameColor}% } \fancyfoot[LE]{% {\FootAnnexePageFont \thepage} {\FootAnnexeTxtFont \MakeUppercase{\StringCorriges}}% } \fancyfoot[RO]{% {\FootAnnexeTxtFont \MakeUppercase{\StringCorriges}} {\FootAnnexePageFont \thepage}% } } % \end{macrocode} % \end{macro} % \begin{macro}{\ps@corrige} % Les pages suivantes des corrigés se font de la même façon sauf que % le rectangle de la marge n'a pas d'angle de retour en haut % \begin{macrocode} \fancypagestyle{corrige}{% \fancyhf{} \fancyhead[LE]{% \smc@headevenannexe{CorrigeHeadFrameColor}% } \fancyhead[RO]{% \smc@headoddannexe{CorrigeHeadFrameColor} } \fancyfoot[LE]{% {\FootAnnexePageFont \thepage} {\FootAnnexeTxtFont \MakeUppercase{\StringCorriges}}% } \fancyfoot[RO]{% {\FootAnnexeTxtFont \MakeUppercase{\StringCorriges}} {\FootAnnexePageFont \thepage}% } } % \end{macrocode} % \end{macro} % \begin{macro}{\ps@firstannexe} % Style des premières pages des annexes % \begin{macrocode} \fancypagestyle{firstannexe}{% \fancyhf{} \fancyhead[LE]{% \smc@firstheadevenannexe{AnnexeHeadFrameColor}% } \fancyhead[RO]{% \smc@firstheadoddannexe{AnnexeHeadFrameColor}% } \fancyfoot[LE]{% {\FootAnnexePageFont \thepage} {\FootAnnexeTxtFont \MakeUppercase{\smc@TitleAnnexe}}% } \fancyfoot[RO]{% {\FootAnnexeTxtFont \MakeUppercase{\smc@TitleAnnexe}} {\FootAnnexePageFont \thepage}% } } % \end{macrocode} % \end{macro} % \begin{macro}{\ps@annexe} % Style des pages suivantes des annexes % \begin{macrocode} \fancypagestyle{annexe}{% \fancyhf{} \fancyhead[LE]{% \smc@headevenannexe{AnnexeHeadFrameColor}% } \fancyhead[RO]{% \smc@headoddannexe{AnnexeHeadFrameColor} } \fancyfoot[LE]{% {\FootAnnexePageFont \thepage} {\FootAnnexeTxtFont \MakeUppercase{\smc@TitleAnnexe}}% } \fancyfoot[RO]{% {\FootAnnexeTxtFont \MakeUppercase{\smc@TitleAnnexe}} {\FootAnnexePageFont \thepage}% } } % \end{macrocode} % \end{macro} % \begin{macro}{\ps@firstlexique} % Style des premières pages du lexique % \begin{macrocode} \fancypagestyle{firstlexique}{% \fancyhf{} \fancyhead[LE]{% \smc@firstheadevenannexe{LexiqueHeadFrameColor}% } \fancyhead[RO]{% \smc@firstheadoddannexe{LexiqueHeadFrameColor}% } \fancyfoot[LE]{% {\FootAnnexePageFont \thepage} {\FootAnnexeTxtFont \MakeUppercase{\StringLexique}}% } \fancyfoot[RO]{% {\FootAnnexeTxtFont \MakeUppercase{\StringLexique}} {\FootAnnexePageFont \thepage}% } } % \end{macrocode} % \end{macro} % \begin{macro}{\ps@lexique} % Style des pages suivantes du lexique % \begin{macrocode} \fancypagestyle{lexique}{% \fancyhf{} \fancyhead[LE]{% \smc@headevenannexe{LexiqueHeadFrameColor}% } \fancyhead[RO]{% \smc@headoddannexe{LexiqueHeadFrameColor} } \fancyfoot[LE]{% {\FootAnnexePageFont \thepage} {\FootAnnexeTxtFont \MakeUppercase{\StringLexique}}% } \fancyfoot[RO]{% {\FootAnnexeTxtFont \MakeUppercase{\StringLexique}} {\FootAnnexePageFont \thepage}% } } % \end{macrocode} % \end{macro} % \begin{macro}{ps@firstaffichemethode} % Style des premières pages de la liste des méthodes. % \begin{macrocode} \fancypagestyle{firstaffichemethode}{% \fancyhf{} \fancyhead[LE]{% \smc@firstheadevenannexe{ListeMethodeHeadFrameColor}% } \fancyhead[RO]{% \smc@firstheadoddannexe{ListeMethodeHeadFrameColor}% } \fancyfoot[LE]{% {\FootAnnexePageFont \thepage} {\FootAnnexeTxtFont \MakeUppercase{\StringListeMethode}}% } \fancyfoot[RO]{% {\FootAnnexeTxtFont \MakeUppercase{\StringListeMethode}} {\FootAnnexePageFont \thepage}% } } % \end{macrocode} % \end{macro} % \begin{macro}{\ps@affichemethode} % Style des pages suivantes de la liste des méthodes % \begin{macrocode} \fancypagestyle{affichemethode}{% \fancyhf{} \fancyhead[LE]{% \smc@headevenannexe{ListeMethodeHeadFrameColor}% } \fancyhead[RO]{% \smc@headoddannexe{ListeMethodeHeadFrameColor} } \fancyfoot[LE]{% {\FootAnnexePageFont \thepage} {\FootAnnexeTxtFont \MakeUppercase{\StringListeMethode}}% } \fancyfoot[RO]{% {\FootAnnexeTxtFont \MakeUppercase{\StringListeMethode}} {\FootAnnexePageFont \thepage}% } } % \end{macrocode} % \end{macro} % \begin{macro}{\ps@firstlibre} % Style des premières pages des textes libres. % \begin{macrocode} \fancypagestyle{firstlibre}{% \fancyhf{} \fancyfoot[LE]{% {\ifsmc@page\FootLibrePageFont \thepage\fi} } \fancyfoot[RO]{% {\ifsmc@page\FootLibrePageFont \thepage\fi}% } } % \end{macrocode} % \end{macro} % \begin{macro}{\ps@libre} % Style des pages suivantes des textes libres. % \begin{macrocode} \fancypagestyle{libre}{% \fancyhf{} \fancyfoot[LE]{% {\ifsmc@page\FootLibrePageFont \thepage\fi} } \fancyfoot[RO]{% {\ifsmc@page\FootLibrePageFont \thepage\fi}% } } % \end{macrocode} % \end{macro} % \begin{macro}{\ps@empty} % Le style pour les pages vides n'est en fait pas totalement vide : il % reste le pied de page en cours. On détruit donc uniquement % l'en-tête. % \begin{macrocode} \fancypagestyle{empty}{% \fancyhead{} } % \end{macrocode} % \end{macro} % \section{Couleurs} % Couleurs utilisées tout au long du document. On prend la % nomenclature du fichier tiré de la maquette Indesign (légèrement % révisée pour éviter les redondances). % \begin{macrocode} \definecolor{A1} {cmyk}{1.00, 0.00, 0.00, 0.50} \definecolor{A2} {cmyk}{0.60, 0.00, 0.00, 0.10} \definecolor{A3} {cmyk}{0.30, 0.00, 0.00, 0.05} \definecolor{A4} {cmyk}{0.10, 0.00, 0.00, 0.00} \definecolor{B1} {cmyk}{0.00, 1.00, 0.60, 0.40} \definecolor{B2} {cmyk}{0.00, 0.85, 0.60, 0.15} \definecolor{B3} {cmyk}{0.00, 0.20, 0.15, 0.05} \definecolor{B4} {cmyk}{0.00, 0.05, 0.05, 0.00} \definecolor{C1} {cmyk}{0.00, 1.00, 0.00, 0.50} \definecolor{C2} {cmyk}{0.00, 0.60, 0.00, 0.20} \definecolor{C3} {cmyk}{0.00, 0.30, 0.00, 0.05} \definecolor{C4} {cmyk}{0.00, 0.10, 0.00, 0.05} \definecolor{D1} {cmyk}{0.00, 0.00, 1.00, 0.50} \definecolor{D2} {cmyk}{0.20, 0.20, 0.80, 0.00} \definecolor{D3} {cmyk}{0.00, 0.00, 0.20, 0.10} \definecolor{D4} {cmyk}{0.00, 0.00, 0.20, 0.05} \definecolor{F1} {cmyk}{0.00, 0.80, 0.50, 0.00} \definecolor{F2} {cmyk}{0.00, 0.40, 0.30, 0.00} \definecolor{F3} {cmyk}{0.00, 0.15, 0.10, 0.00} \definecolor{F4} {cmyk}{0.00, 0.07, 0.05, 0.00} \definecolor{G1} {cmyk}{1.00, 0.00, 0.50, 0.00} \definecolor{G2} {cmyk}{0.50, 0.00, 0.20, 0.00} \definecolor{G3} {cmyk}{0.20, 0.00, 0.10, 0.00} \definecolor{G4} {cmyk}{0.10, 0.00, 0.05, 0.00} \definecolor{H1} {cmyk}{0.40, 0.00, 1.00, 0.10} \definecolor{H2} {cmyk}{0.20, 0.00, 0.50, 0.05} \definecolor{H3} {cmyk}{0.10, 0.00, 0.20, 0.00} \definecolor{H4} {cmyk}{0.07, 0.00, 0.15, 0.00} \definecolor{J1} {cmyk}{0.00, 0.50, 1.00, 0.00} \definecolor{J2} {cmyk}{0.00, 0.20, 0.50, 0.00} \definecolor{J3} {cmyk}{0.00, 0.10, 0.20, 0.00} \definecolor{J4} {cmyk}{0.00, 0.07, 0.15, 0.00} \definecolor{FondOuv} {cmyk}{0.00, 0.05, 0.10, 0.00} \definecolor{FondAutoEvaluation}{cmyk}{0.00, 0.03, 0.15, 0.00} \definecolor{FondTableaux} {cmyk}{0.00, 0.00, 0.20, 0.00} \definecolor{FondAlgo} {cmyk}{0.07, 0.00, 0.30, 0.00} \definecolor{BleuOuv} {cmyk}{1.00, 0.00, 0.00, 0.00} \definecolor{PartieFonction} {cmyk}{1.00, 0.00, 0.00, 0.00} \definecolor{PartieGeometrie} {cmyk}{0.80, 0.80, 0.00, 0.00} % \end{macrocode} % Les couleurs du bandeau de la partie statistique ont souvent bougé. % \begin{macrocode} \definecolor{PartieStatistique} {cmyk}{0.60, 0.95, 0.00, 0.20} \definecolor{PartieStatistiqueOLD}{cmyk}{0.95, 0.60, 0.20, 0.00} \definecolor{PartieStatistique*}{cmyk}{0.30, 1.00, 0.00, 0.00} % \end{macrocode} % Couleurs qui se sont ajoutées après la première version de la % maquette qui était accompagnée du nuancier. % \begin{macrocode} \definecolor{U1} {cmyk}{0.50, 0.10, 0.00, 0.10} \definecolor{U2} {cmyk}{0.20, 0.15, 0.00, 0.00} \definecolor{U3} {cmyk}{0.50, 0.00, 1.00, 0.00} \definecolor{U4} {cmyk}{0.40, 0.00, 0.00, 0.00} % \end{macrocode} % On ajoute le noir, le blanc et quelques gris. % \begin{macrocode} \definecolor{Blanc} {cmyk}{0.00, 0.00, 0.00, 0.00} \definecolor{Gris1} {cmyk}{0.00, 0.00, 0.00, 0.20} \definecolor{Gris2} {cmyk}{0.00, 0.00, 0.00, 0.40} \definecolor{Gris3} {cmyk}{0.00, 0.00, 0.00, 0.50} \definecolor{Noir} {cmyk}{0.00, 0.00, 0.00, 1.00} % \end{macrocode} % Les couleurs effectives sont définies en termes des couleurs de % bases ci-dessous. On commence avec les éléments partagés dans tout % le document. En particulier, la première définition concerne la % couleur par défaut qui doit être un noir définie en CMYK pour que % overprint fonctionne correctement % \begin{macrocode} \AtBeginDocument{\def\default@color{cmyk 0 0 0 1}\normalcolor} \colorlet{AlgoLineColor}{F3} \colorlet{AlgoBkgColor}{F1} \colorlet{AlgoTextColor}{Blanc} \colorlet{TiceLineColor}{A3} \colorlet{TiceBkgColor}{A1} \colorlet{TiceTextColor}{Blanc} \colorlet{CadreLineColor}{D3} \colorlet{CadreBkgColor}{Blanc} \colorlet{AlgorithmeRuleColor}{D2} \colorlet{AlgorithmeBkgColor}{FondAlgo} \colorlet{CouleurAlgoAffiche}{Noir} \colorlet{CouleurAlgoDemander}{Noir} \colorlet{CouleurAlgoSaisir}{Noir} \colorlet{CouleurAlgoStocker}{Noir} \colorlet{CouleurAlgoSi}{Noir} \colorlet{CouleurAlgoTantque}{Noir} \colorlet{CouleurAlgoPour}{Noir} \colorlet{CouleurAlgoCalcule}{Noir} \colorlet{CouleurAlgoInitialiser}{Noir} \colorlet{CouleurAlgoIncrementer}{Noir} \colorlet{CouleurAlgoCommentaire}{Noir} \colorlet{CouleurAlgoDonnerValeur}{Noir} \colorlet{CommentaireItemColor}{Noir} \colorlet{FiletTableauColor}{Gris3} \colorlet{FondSudokuColor}{FondTableaux} % \end{macrocode} % Couleurs de la première page. % % Les couleurs pour les rectangles de pieds de pied de page sont % calculées à partir de la couleur du bandeau d'en-tête : on divise % toutes les composantes par deux. % \begin{macrocode} \definecolor{FootFonctionColor}{cmyk}{0.50, 0.00, 0.00, 0.00} \definecolor{FootGeometrieColor}{cmyk}{0.40, 0.40, 0.00, 0.00} \definecolor{FootStatistiqueColor}{cmyk}{0.30, 0.48, 0.00, 0.10} \definecolor{FootStatistiqueOLDColor}{cmyk}{0.48, 0.30, 0.10, 0.00} \definecolor{FootStatistique*Color}{cmyk}{0.20, 0.00, 0.00, 0.00} \colorlet{ChapterBottomFrameColor}{J4} \colorlet{ThemaTopFrameColor}{J1} \colorlet{ThemaBottomFrameColor}{J2} \colorlet{ThemaTitleColor}{Blanc} \colorlet{ChapterNumBkgColor}{H2} \colorlet{ChapterNumSquare0Color}{Blanc} \colorlet{ChapterNumSquare1Color}{H1} \colorlet{ChapterNumSquare2Color}{H2} \colorlet{ChapterNumSquare3Color}{H4} \colorlet{ChapterTitleColor}{B1} \colorlet{ChapAppColor}{Blanc} \colorlet{ChapterNumColor}{Blanc} \colorlet{PrerequisTitleColor}{B2} \colorlet{PrerequisBkgColor}{A4} \colorlet{PrerequisItemColor}{B2} \colorlet{AEItemColor}{B2} \colorlet{AETitleFrame0Color}{Blanc} \colorlet{AETitleFrame1Color}{B2} \colorlet{AETitleFrame2Color}{B3} \colorlet{AETitleFrame3Color}{A4} \colorlet{AETitleFrame4Color}{A3} \colorlet{AETitleFrame5Color}{A2} \colorlet{AETitleColor}{Blanc} \colorlet{AEExoNumColor}{Blanc} \colorlet{AEExoNumFrameColor}{J1} \colorlet{AEFrameColor}{FondAutoEvaluation} \colorlet{AECartoucheCorrBkgColor}{J2} \colorlet{AECartoucheCorrArrowColor}{G2} \colorlet{AECartoucheCorrVCPColor}{B2} % \end{macrocode} % Couleurs pour la partie \og Activités d'approche \fg{} ainsi que la % couleur du numéro de chapitre dans les pieds de page. % \begin{macrocode} \colorlet{ActiviteHeadFrame0Color}{Blanc} \colorlet{ActiviteHeadFrame1Color}{C1} \colorlet{ActiviteHeadFrame2Color}{C2} \colorlet{ActiviteHeadFrame3Color}{C3} \colorlet{ActiviteHeadFrame4Color}{D3} \colorlet{ActiviteHeadFrame5Color}{G1} \definecolor{ActiviteFootColor}{cmyk}{0.50, 0.00, 0.25, 0.00} \colorlet{FootChapterNumColor}{U1} \colorlet{ActiviteSubtitleColor}{H1} \colorlet{ActiviteNumColor}{Blanc} \colorlet{ActiviteDebatTopColor}{G4} \colorlet{ActiviteDebatBottomColor}{D4} \colorlet{ActiviteActiviteTopColor}{D3} \colorlet{ActiviteActiviteBottomColor}{G2} \colorlet{ActiviteTitleColor}{C1} \colorlet{ActiviteItemColor}{C1} \colorlet{ActivitePartieColor}{A2} % \end{macrocode} % Couleurs pour la partie \og Cours - Méthodes \fg{}. % \begin{macrocode} \colorlet{CoursHeadFrame0Color}{Blanc} \colorlet{CoursHeadFrame1Color}{J1} \colorlet{CoursHeadFrame2Color}{J2} \colorlet{CoursHeadFrame3Color}{J4} \colorlet{CoursHeadFrame4Color}{A3} \colorlet{CoursHeadFrame5Color}{A2} \definecolor{CoursFootColor}{cmyk}{0.15, 0.00, 0.00, 0.03} \colorlet{SectionFrame1Color}{J4} \colorlet{SectionFrame2Color}{J2} \colorlet{SectionFrame3Color}{J1} \colorlet{SectionNumColor}{A1} \colorlet{SectionTitleColor}{A1} \colorlet{SubsectionNumColor}{B2} \colorlet{SubsectionTitleColor}{J1} \colorlet{DefSquareColor}{B2} \colorlet{DefTitleColor}{A1} \colorlet{DefSubtitleColor}{B2} \colorlet{DefItemColor}{B2} \colorlet{DefFrameColor}{J3} \colorlet{RemTitleColor}{H1} \colorlet{RemItemColor}{H1} \colorlet{ExempleRuleColor}{J1} \colorlet{ExempleEdgeFrameColor}{J2} \colorlet{ExempleBkgFrameColor}{F4} \colorlet{ExempleTitleColor}{A1} \colorlet{ExempleItemColor}{J1} \colorlet{MethodeTitleFrameColor}{A2} \colorlet{MethodeTitleColor}{Blanc} \colorlet{MethodeSubtitleColor}{B2} \colorlet{MethodeIntroBkgFrameColor}{A4} \colorlet{ExAppEdgeFrameColor}{A2} \colorlet{ExAppBkgFrameColor}{H1} \colorlet{ExAppTitleColor}{Blanc} \colorlet{ExAppCorrEdgeFrameColor}{H1} \colorlet{ExAppCorrBkgFrameColor}{A2} \colorlet{ExAppCorrTitleColor}{Blanc} \colorlet{ExAppItemColor}{A2} \colorlet{MethodeRuleColor}{A3} \colorlet{ProofRuleColor}{B1} \colorlet{ProofTitleColor}{A1} \colorlet{ProofTopFrameColor}{B4} \colorlet{ProofBottomFrameColor}{B3} \colorlet{ProofTriangleFrameColor}{B1} \colorlet{ProofItemColor}{J2} % \end{macrocode} % Couleurs pour la partie \og Exercices de base \fg{}. % \begin{macrocode} \colorlet{ExoBaseHeadFrame0Color}{Blanc} \colorlet{ExoBaseHeadFrame1Color}{G1} \colorlet{ExoBaseHeadFrame2Color}{G2} \colorlet{ExoBaseHeadFrame3Color}{G4} \colorlet{ExoBaseHeadFrame4Color}{J2} \colorlet{ExoBaseHeadFrame5Color}{J1} \definecolor{ExoBaseFootColor}{cmyk}{0.00, 0.25, 0.50, 0.00} \colorlet{ExerciceColumnRuleColor}{J1} \colorlet{ExercicesTitleColor}{C1} \colorlet{ExercicesTitleVRuleColor}{G2} \colorlet{ExercicesTitleSquareColor}{J1} \colorlet{ExercicesTitleHRuleColor}{C3} \colorlet{ExerciceNumColor}{Blanc} \colorlet{ExerciceTitleColor}{F1} \colorlet{ExerciceNumFrameColor}{G1} \colorlet{ExerciceCorrigeNumFrameColor}{J1} \colorlet{ExerciceItemColor}{G1} \colorlet{ExercicePartieColor}{J1} \colorlet{ExerciceRefMethodeColor}{A2} % \end{macrocode} % Couleurs pour la partie \og Exercices d'approfondissement \fg{}. % \begin{macrocode} \colorlet{ExoApprHeadFrame0Color}{Blanc} \colorlet{ExoApprHeadFrame1Color}{G1} \colorlet{ExoApprHeadFrame2Color}{G2} \colorlet{ExoApprHeadFrame3Color}{G4} \colorlet{ExoApprHeadFrame4Color}{J2} \colorlet{ExoApprHeadFrame5Color}{J1} \definecolor{ExoApprFootColor}{cmyk}{0.00, 0.25, 0.50, 0.00} % \end{macrocode} % Couleurs pour la partie \og Je teste mes connaissances \fg{}. % \begin{macrocode} \colorlet{ConnHeadFrame0Color}{Blanc} \colorlet{ConnHeadFrame1Color}{A2} \colorlet{ConnHeadFrame2Color}{A3} \colorlet{ConnHeadFrame3Color}{J2} \colorlet{ConnHeadFrame4Color}{J1} \colorlet{ConnHeadFrame5Color}{F1} \colorlet{ConnFootColor}{F2} \colorlet{AcquisTitleColor}{G1} \colorlet{AcquisBkgColor}{A4} \colorlet{AcquisItemColor}{F1} \colorlet{QCMAEFrameColor}{G1} \colorlet{QCMAETitleCircle1Color}{J1} \colorlet{QCMAETitleCircle2Color}{J2} \colorlet{QCMAETitleCircle3Color}{F1} \colorlet{QCMAETitleColor}{Blanc} \colorlet{QCMItemNumColor}{G1} \colorlet{QCMFrameColor}{J1} \colorlet{QCMTextFrameColor}{Blanc} \colorlet{QCMExoNumColor}{Blanc} \colorlet{QCMExoNumFrameColor}{J1} \colorlet{QCMLineColor}{A4} % \end{macrocode} % Couleurs pour la partie \og Travaux pratiques \fg{} et pour la % partie Récréation, énigmes. % \begin{macrocode} \colorlet{TPHeadFrame0Color}{Blanc} \colorlet{TPHeadFrame1Color}{H1} \colorlet{TPHeadFrame2Color}{H2} \colorlet{TPHeadFrame3Color}{H3} \colorlet{TPHeadFrame4Color}{C3} \colorlet{TPHeadFrame5Color}{C2} \definecolor{TPFootColor}{cmyk}{0.00, 0.30, 0.00, 0.10} \colorlet{TPTopColor}{J3} \colorlet{TPBottomColor}{C3} \colorlet{TPTitleColor}{H1} \colorlet{TPPartieColor}{J1} \colorlet{TPPartieBkgColor}{C2} \colorlet{TPPartieNumColor}{Blanc} \colorlet{RecreationHeadFrame0Color}{Blanc} \colorlet{RecreationHeadFrame1Color}{J1} \colorlet{RecreationHeadFrame2Color}{J2} \colorlet{RecreationHeadFrame3Color}{H4} \colorlet{RecreationHeadFrame4Color}{H2} \colorlet{RecreationHeadFrame5Color}{H1} \definecolor{RecreationFootColor}{cmyk}{0.20, 0.00, 0.50, 0.05} \colorlet{RecreationTitleColor}{H1} \colorlet{RecreationItemColor}{U3} \colorlet{RecreationPartieColor}{J1} % \end{macrocode} % Couleurs pour la partie \og corrigés \fg (partie annexe). % \begin{macrocode} \colorlet{CorrigeHeadFrameColor}{J2} \colorlet{CorrigeColumnRuleColor}{J1} \colorlet{CorrigeAETitleColor}{F1} \colorlet{CorrigeExercicesBaseTitleColor}{C2} \colorlet{CorrigeExercicesApprTitleColor}{C2} \colorlet{CorrigeConnaissancesTitleColor}{G1} \colorlet{CorrigeQCMItemNumColor}{G1} % \end{macrocode} % Couleurs pour la liste des méthodes % \begin{macrocode} \colorlet{ListeMethodeHeadFrameColor}{G3} \colorlet{ListeMethodeColumnRuleColor}{A1} \colorlet{ListeMethodeTitleColor}{B2} % \end{macrocode} % Couleurs pour les annexes générales % \begin{macrocode} \colorlet{TablePropertyBkgColor}{J4} \colorlet{TablePropertyTitleBkgColor}{PartieStatistique} \colorlet{TablePropertyTitleTextColor}{Blanc} \colorlet{AnnexePartieColor}{A1} % \end{macrocode} % Couleurs pour le lexique % \begin{macrocode} \colorlet{LexiqueHeadFrameColor}{F2} \colorlet{LexiqueColumnRuleColor}{B2} \colorlet{FirstLetterTxtColor}{B1} \colorlet{FirstLetterBkgColor}{J3} \colorlet{LexiqueEntreeColor}{B2} \colorlet{LexiqueItemColor}{B2} % \end{macrocode} % Couleurs pour le texte libre. % \begin{macrocode} \colorlet{LibrePartieColor}{A1} % \end{macrocode} % \section{Fontes} % Fontes utilisées tout au long du document. La macro |\selectfont| à % la suite de |\fontsize| n'est obligatoire que dans la mesure où il % n'y a pas d'autres commandes \LaTeX{} de modification de fonte. On % commence avec les fontes partagées pour tout le document. % \begin{macrocode} \newcommand*\AlgoFont{\fontsize{9.5}{9.5}\sffamily\bfseries} \newcommand*\TiceFont{\fontsize{9.5}{9.5}\sffamily\bfseries} % \end{macrocode} % Fontes de la page de titre. % \begin{macrocode} \newcommand*\ThemaTitleFont{\fontsize{20}{24}\sffamily} \newcommand*\ChapterTitleFont{\fontsize{40}{40}\sffamily\bfseries} \newcommand*\ChapAppFont{\fontsize{15}{18}\sffamily} \newcommand*\ChapterNumFont{\fontsize{88}{106}\sffamily} \newcommand*\PrerequisTitleFont{\fontsize{14.4}{17.28}\sffamily\bfseries} \newcommand*\PrerequisTextFont{\fontsize{9.5}{14.4}\sffamily} \newcommand*\AETitleFont{\fontsize{15}{18}\sffamily\bfseries} \newcommand*\AEExoNumFont{\fontsize{9.5}{14.4}\sffamily\bfseries} \newcommand*\AECartoucheCorrArrowFont{\fontsize{12}{14.4}} \newcommand*\AECartoucheCorrVCPFont{\fontsize{9.5}{14.4}\sffamily} \newcommand*\AEManuelFont{\fontsize{9.5}{10.5}\sffamily} \newcommand*\LogoManuelFont{\fontsize{9.5}{10.5}\sffamily\bfseries} \newcommand*\LogoURLManuelFont{\fontsize{9.5}{10.5}\sffamily\bfseries} % \end{macrocode} % Fontes pour les en-têtes et pied de page. % \begin{macrocode} \newcommand*\HeadTitleFont{\fontsize{24}{28.8}\sffamily\bfseries} \newcommand*\RoundHeadTitleFont{\fontsize{24}{28.8}\sffamily\bfseries\itshape} \newcommand*\FootChapterNumFont{\fontsize{12}{14.4}\sffamily\bfseries} \newcommand*\FootTitleHeadFont{\fontsize{9.5}{12}\sffamily\bfseries} \newcommand*\FootTitleChapterFont{\fontsize{9.5}{12}\sffamily} \newcommand*\FootPageFont{\fontsize{9.5}{12}\sffamily\bfseries} % \end{macrocode} % Fontes pour la partie Activités d'approche % \begin{macrocode} \newcommand*\ActiviteTitleFont{\fontsize{15}{18}\sffamily\bfseries} \newcommand*\ActiviteNumFont{\fontsize{15}{18}\sffamily\bfseries} \newcommand*\ActiviteSubtitleFont{\fontsize{15}{18}\sffamily\bfseries} \newcommand*\ActivitePartieFont{\fontsize{12}{14.4}\sffamily\bfseries} % \end{macrocode} % Fontes pour la partie Cours - Méthodes. % \begin{macrocode} \newcommand*\SectionNumFont{\fontsize{21}{25}\sffamily\bfseries} \newcommand*\SectionTitleFont{\fontsize{17.28}{21}\sffamily\bfseries} \newcommand*\SubsectionNumFont{\fontsize{17.28}{21}\sffamily\bfseries} \newcommand*\SubsectionTitleFont{\fontsize{14.4}{17.28}\sffamily\bfseries} \newcommand*\DefTitleFont{\fontsize{12}{14.4}\sffamily} \newcommand*\DefSubtitleFont{\fontsize{12}{14.4}\sffamily\bfseries} \newcommand*\RemTitleFont{\fontsize{9.5}{14.4}\scshape\bfseries} \newcommand*\ExempleTitleFont{\fontsize{9.5}{14.4}\sffamily} \newcommand*\MethodeTitleFont{\fontsize{12}{14.4}\sffamily\bfseries} \newcommand*\MethodeSubtitleFont{\fontsize{12}{14.4}\sffamily\bfseries} \newcommand*\MethodeRefExerciceFont{\fontsize{9.5}{14.4}\sffamily} \newcommand*\ExAppTitleFont{\normalsize\sffamily} \newcommand*\ExAppCorrTitleFont{\normalsize\sffamily} \newcommand*\ProofTitleFont{\fontsize{9.5}{14.4}\sffamily} % \end{macrocode} % Fontes pour les parties Exercices de base et Exercices % d'approfondissement. % \begin{macrocode} \newcommand*\ExercicesTitleFont{\fontsize{14.4}{17.28}\sffamily\bfseries} \newcommand*\ExerciceNumFont{\fontsize{10.5}{14.4}\sffamily\bfseries} \newcommand*\ExerciceTitleFont{\fontsize{10.5}{14.4}\sffamily\bfseries} \newcommand*\ExercicePartieFont{\fontsize{10.5}{14.4}\bfseries} \newcommand*\ExerciceRefMethodeFont{\fontsize{9.5}{14.4}\sffamily\bfseries} \newcommand*\ExercicePageRefMethodeFont{\fontsize{9.5}{14.4}\sffamily} % \end{macrocode} % Fontes pour la partie Je teste mes connaissances. % \begin{macrocode} \newcommand*\AcquisTitleFont{\fontsize{17.28}{17.28}\sffamily\bfseries} \newcommand*\AcquisTextFont{\fontsize{9.5}{14.4}\sffamily} \newcommand*\QCMAETitleFont{\fontsize{20}{20}\sffamily\bfseries} \newcommand*\QCMAEManuelFont{\fontsize{9.5}{10.5}\sffamily} \newcommand*\QCMAETextAfterTitleFont{\bfseries} \newcommand*\QCMExoNumFont{\fontsize{9.5}{14.4}\sffamily\bfseries} \newcommand*\QCMItemNumFont{\fontsize{9.5}{14.4}\sffamily\bfseries} % \end{macrocode} % Fontes pour la partie TP. % \begin{macrocode} \newcommand*\TPPartieFont{\fontsize{12}{14.4}\sffamily\bfseries} \newcommand*\RecreationFont{\fontsize{20}{20}\scriptfamily\bfseries} \newcommand*\RecreationTitleFont{\fontsize{12}{14.4}\sffamily\bfseries} \newcommand*\RecreationPartieFont{\fontsize{10}{14.4}\scshape\bfseries} \newcommand*\RecreationPartieTitleFont{\fontsize{10}{14.4}\bfseries} % \end{macrocode} % Fontes pour la liste des méthodes. % \begin{macrocode} \newcommand*\ListeMethodeChapterFont{\fontsize{40}{40}\sffamily} \newcommand*\ListeMethodeTitleFont{\fontsize{12}{14.4}\sffamily\bfseries} \newcommand*\ListeMethodePageFont{\fontsize{12}{14.4}\sffamily\bfseries} % \end{macrocode} % Fontes pour la partie Corrigés (annexe). % \begin{macrocode} \newcommand*\CorrigeTitleFont{\fontsize{40}{40}\sffamily} \newcommand*\CorrigeChapterFont{\fontsize{12}{14.4}\sffamily\bfseries} \newcommand*\CorrigePartieFont{\fontsize{11}{14.4}\sffamily\bfseries} \newcommand*\CorrigeNumExerciceFont{\fontsize{9.5}{14.4}\sffamily\bfseries} \newcommand*\CorrigeQCMItemNumFont{\fontsize{9.5}{14.4}\sffamily} % \end{macrocode} % Fontes pour les annexes générales. % \begin{macrocode} \newcommand*\FootAnnexeTxtFont{\fontsize{11}{14.4}\sffamily} \newcommand*\FootAnnexePageFont{\fontsize{11}{14.4}\sffamily\bfseries} \newcommand*\AnnexeTitleFont{\fontsize{35}{35}\sffamily} \newcommand*\AnnexeSectionTitleFont{\fontsize{14.4}{14.4}\sffamily\bfseries} \newcommand*\ProprieteFont{\fontsize{10}{14.4}\sffamily} \newcommand*\NumProprieteFont{\fontsize{10}{14.4}\sffamily\bfseries} \newcommand*\AnnexePartieFont{\fontsize{10.5}{14.4}\bfseries} % \end{macrocode} % Fontes pour le lexique. % \begin{macrocode} \newcommand*\LexiqueTitleFont{\fontsize{50}{50}\sffamily} \newcommand*\FirstLetterFont{\fontsize{16}{16}\sffamily\bfseries} \newcommand*\LexiqueEntreeFont{\fontsize{12}{14.4}\sffamily\bfseries} \newcommand*\LexiqueFont{\sffamily\upshape\bfseries} % \end{macrocode} % Fontes pour le texte libre. % \begin{macrocode} \newcommand*\FootLibrePageFont{\fontsize{11}{14.4}\sffamily\bfseries} \newcommand*\LibreSectionTitleFont{\fontsize{14.4}{14.4}\sffamily\bfseries} \newcommand*\LibrePartieFont{\fontsize{10.5}{14.4}\bfseries} % \end{macrocode} % \section{Longueurs} % Longueurs utilisées tout au long du document. Il n'est pas % nécessaire que ce soit des registres de dimensions. On commence avec % les longueurs utilisées pour l'ensemble du document. % % Longueurs pour les en-têtes et pieds de page de tout le document. % \begin{macrocode} \def\SquareWidth{3mm} \def\ItemRuleWidth{1.5mm} \def\ItemRuleHeight{1.5mm} \def\ItemRuleDepth{0mm} \def\ListLabelWidth{4mm} \def\EnumerateLabelWidth{5mm} \def\ListHSep{2mm} \def\AlgorithmeRuleWidth{1pt} \def\AlgorithmeSep{2mm} \def\AlgorithmeNumWidth{6mm} \def\HeadFrameWidth{11cm} \def\RoundHeadFrameWidth{12.8cm} \def\HeadTitleSep{1cm} \edef\HeadTitleMaxWidth {\the\dimexpr \HeadFrameWidth-\SquareWidth*3-\HeadTitleSep} \edef\RoundHeadTitleMaxWidth {\the\dimexpr \RoundHeadFrameWidth-\SquareWidth*3-\HeadTitleSep} \edef\HeadFrameHeight{\the\dimexpr \smc@margintop-\smc@headsep} \def\HeadFrameDepth{3mm} \def\FootFrameWidth{6mm} \def\FootFrameSep{1mm} \def\AlgoIndent{1em} % \end{macrocode} % Longueurs pour les différents cadres. % \begin{macrocode} \def\CadreSep{2mm} \def\CadreLineWidth{0.5mm} \def\FrameSep{3mm} \def\FrameLineWidth{1pt} \edef\FrameArc{\the\dimexpr \SquareWidth/2} \def\RuleWidth{1pt} \def\BeforeCadreVSpace{1.5mm} \def\AfterCadreVSpace{1.5mm} \def\BeforeTableVSpace{1.5mm} \def\AfterTableVSpace{1.5mm} \def\HabillageGap{2mm} \def\LogoLineWidth{1pt} \def\BeforeAlgorithmeVSpace{1.5mm} \def\AfterAlgorithmeVSpace{1.5mm} % \end{macrocode} % Viennent ensuite les longueurs spécifiques à chaque partie du % document. % % Longueurs pour la page de titre. % \begin{macrocode} \edef\ChapterTopFrameHeight{\the\dimexpr 2.1cm+\smc@bleed} \def\ChapterBottomFrameHeight{6cm} \edef\ChapterTotalFrameHeight{% \the\dimexpr\ChapterTopFrameHeight+\ChapterBottomFrameHeight} \def\ChapterBottomPicture{5.5cm} \def\ChapterNumLeftFrame{13.4cm} % \end{macrocode} % Les longueurs basées sur |\linewidth| ne peuvent être calculées % qu'au moment du |\begin{document}|. % \begin{macrocode} \AtBeginDocument{% \edef\ChapterTitleThemaWidth{% \the\dimexpr\linewidth-\ChapterNumLeftFrame-6mm }% } \def\ChapterNumBase{3.6cm} \def\ChapterNumBottomFrame{2.1cm} \edef\ChapterNumTopFrame{\the\dimexpr 8.1cm+\smc@bleed} \def\ChapterTitleBase{2.1cm} \def\ChapterTitleSep{1cm} \def\ThemaBottomFrame{5.7cm} \def\ThemaTopFrame{6.6cm} \def\PrerequisTitleVSpace{1mm} \def\AETitleWidth{8cm} \edef\AETitleHeight{\the\dimexpr \SquareWidth*3} \def\AEFrameVSep{4mm} \edef\AEFrameHSep{\SquareWidth} \edef\AEFrameRuleWidth{\the\dimexpr\SquareWidth/2} \edef\AEExoFrameWidth{\the\dimexpr \SquareWidth*2} \def\AEExoFrameTopSep{1mm} \def\AfterAEExoFrameHSpace{2mm} \def\AECartoucheCorrSep{4mm} \def\AECartoucheCorrHeight{6mm} \def\AECartoucheCorrWidth{50mm} \def\AEManuelWidth{55mm} \def\AEManuelRightSpace{1mm} \def\AELogoManuelWidth{9mm} \def\AfterAEManuelVSpace{3mm} % \end{macrocode} % Longueurs pour la partie Activités d'approche. % \begin{macrocode} \def\BeforeActiviteVSpace{5mm} % \end{macrocode} % Pour la longueur suivante, comme on fait beaucoup de calcul où % interviennent une multiplication par $\sqrt{2}$ ou par % $\frac{\sqrt{2}}{2}$, on va en faire un registre de longueur au lieu % d'une macro. % \begin{macrocode} \newdimen\ActiviteTitleTopHeight \ActiviteTitleTopHeight 6mm \def\ActiviteTitleBottomHeight{1.5mm} \def\ActiviteTitleLeftSpace{2mm} \def\ActiviteTitleRightSpace{1mm} \def\AfterActiviteTitleHSpace{2mm} \def\AfterActiviteTitleVSpace{3mm} \def\BeforeActivitePartieVSpace{1.5mm} \def\AfterActivitePartieVSpace{1mm} % \end{macrocode} % Longueurs pour la partie Cours - Méthodes. % \begin{macrocode} \def\BeforeSectionVSpace{10mm} \def\AfterSectionVSpace{2mm} \def\SectionNumTitleHSpace{3mm} \def\SectionCorrectionChassePoint{-0.25pt} \def\BeforeSubsectionVSpace{4mm} \def\AfterSubsectionVSpace{1mm} \def\BeforeDefVSpace{3mm} \def\AfterDefVSpace{1.5mm} \def\DefFrameHSep{3mm} \def\DefFrameVSep{1mm} \def\DefTitleFrameVSep{1mm} \def\BeforeRemVSpace{3mm} \def\AfterRemVSpace{1.5mm} \def\BeforeExempleVSpace{4mm} \def\ExempleVRuleWidthFrame{1.25mm} \def\ExempleHRuleWidthFrame{0.75mm} \def\ExempleWidthFrame{15mm} \def\ExempleHeightFrame{3mm} \def\BeforeMethodeVSpace{3mm} \edef\MethodeTitleLeftSpace{\SquareWidth} \edef\MethodeTitleRightSpace{\SquareWidth} \def\MethodeSubtitleLeftSpace{2mm} \def\AfterMethodeTitleVspace{1.5mm} \def\MethodeFrameHSep{3mm} \def\MethodeFrameTopSep{2mm} \def\MethodeFrameBottomSep{1mm} \def\ExAppWidthFrame{30mm} \def\ExAppHeightFrame{3mm} \def\ExAppDepthFrame{0.75mm} \def\ExAppCorrWidthFrame{15mm} \def\ExAppCorrHeightFrame{3mm} \def\ExAppCorrDepthFrame{0.75mm} \def\AfterCartoucheHSpace{1.5mm} \def\AfterExAppMethodeVSpace{3mm} \def\BeforeProofVSpace{3mm} \def\AfterProofVSpace{1.5mm} \def\ProofHeightFrame{3mm} \def\ProofDepthFrame{0.75mm} \def\ProofLeftSpace{1mm} \def\ProofRightSpace{1.5mm} \def\AfterProofTitleHSpace{1.5mm} % \end{macrocode} % Longueurs pour les parties Exercices de base et Exercices % d'approfondissement. % \begin{macrocode} \def\BeforeExercicesTitleVSpace{3mm} \def\AfterExercicesTitleVSpace{1.5mm} \def\ExercicesTitleHSep{3mm} \def\ExercicesTitleVSep{2mm} \def\BeforeExerciceVSpace{1.5mm} \def\ExerciceNumFrameWidth{6mm} \def\ExerciceNumFrameHeight{3.25mm} \def\ExerciceNumFrameDepth{0.75mm} \def\ExerciceTextHSep{2mm} \def\BeforeExercicePartieVSpace{1.5mm} \def\AfterExercicePartieVSpace{1mm} % \end{macrocode} % Longueurs pour la partie Je teste mes connaissances. % \begin{macrocode} \def\AcquisTitleVSpace{1mm} \def\BeforeQCMAEVSpace{6mm plus2mm minus2mm} \def\QCMAETitleHeight{9mm} \def\QCMAETitleWidth{110mm} \def\QCMAETitleLeftSpace{17mm} \def\QCMAEManuelWidth{40mm} \def\QCMAEManuelRightSpace{1mm} \def\QCMAELogoManuelWidth{9mm} \def\AfterQCMAEManuelVSpace{0mm} \def\AfterQCMAETitleVSpace{5mm plus2mm minus1mm} \def\AfterQCMAETextVSpace{3mm plus1mm minus1mm} \def\QCMRefHSep{1pt} \edef\QCMExoFrameWidth{\the\dimexpr \SquareWidth*2} \def\QCMExoFrameTopSep{1mm} \def\AfterQCMExoFrameHSpace{2mm} \def\QCMLabelWidth{6mm} \def\BeforeQCMVSpace{2mm plus1mm minus1mm} \def\AfterQCMVSpace{0mm plus1mm} \def\QCMLineWidth{2mm} \def\QCMFrameSep{1mm} \edef\QCMLineArc{\SquareWidth} % \end{macrocode} % Longueurs pour la partie TP % \begin{macrocode} \def\BeforeTPPartieVSpace{3mm plus1mm minus1mm} \def\AfterTPPartieVSpace{0mm plus1mm} \def\TPPartieHSep{2mm} \def\BeforeRecreationVSpace{6mm} \def\AfterRecreationVSpace{3mm} \def\BeforeRecreationPartieVSpace{1.5mm minus 1mm} \def\AfterRecreationPartieVSpace{1mm minus 0.5mm} % \end{macrocode} % Longueurs pour la liste des méthodes. % \begin{macrocode} \def\ListeMethodeRuleWidth{0.2pt} \def\AfterMethodeVSpace{3pt} \def\TriangleMethodeSize{1ex} % \end{macrocode} % Longueurs pour la partie corrigés (annexe). % \begin{macrocode} \def\CorrigeRuleWidth{0.2pt} \def\CorrigeHeadFrameWidth{9mm} \def\CorrigeChapterFrameHeight{5mm} \def\BeforeCorrigePartieTitleVSpace{1mm minus 0.5mm} \def\BeforeCorrigeChapterVspace{3mm plus1mm minus1mm} \def\QCMHSep{1mm} % \end{macrocode} % Longueurs pour les annexes générales. % \begin{macrocode} \def\BeforeAnnexeTitleVSpace{-20mm} \def\AfterAnnexeTitleVSpace{0mm plus0.5mm} \edef\AnnexeSectionRuleWidth{\SquareWidth} \def\AnnexeSectionRuleHSpace{1mm} \def\BeforeAnnexeSectionVSpace{5mm} \def\AfterAnnexeSectionVSpace{2mm} \def\BeforeAnnexePartieVSpace{1.5mm} \def\AfterAnnexePartieVSpace{1mm} % \end{macrocode} % Longueurs pour le lexique. % \begin{macrocode} \def\LexiqueRuleWidth{0.2pt} \def\AfterFirstLetterVSpace{2mm} \def\BeforeFirstLetterVSpace{2mm} \def\FirstLetterFrameHSep{1mm} \def\AfterEntreeVSpace{5mm} % \end{macrocode} % Longueurs pour les textes libres. % \begin{macrocode} \edef\LibreSectionRuleWidth{\SquareWidth} \def\LibreSectionRuleHSpace{1mm} \def\BeforeLibreSectionVSpace{5mm} \def\AfterLibreSectionVSpace{2mm} \def\BeforeLibrePartieVSpace{1.5mm} \def\AfterLibrePartieVSpace{1mm} % \end{macrocode} % \section{Textes fixes} % La classe propose un certain nombre de textes fixes qui vont être % définis ici. Les macros sont rendus publiques pour pouvoir les % modifier facilement si besoin. % % Attention, en cas d'utilisation de codage autre que UTF-8 ainsi que % pour éviter des erreurs lors de développement précoce de macros, % toutes les diacritiques seront codées \og à la \TeX{} \fg{}. % \begin{macrocode} \newcommand*\StringColitemize{colitemize} \newcommand*\StringColenumerate{colenumerate} \newcommand*\StringPrerequis{Connaissances du coll\`ege n\'ecessaires \`a ce chapitre} \newcommand*\StringActivitesApproche{Activit\'es d'approche} \newcommand*\StringCoursMethodes{Cours~-~M\'ethodes} \newcommand*\StringExercicesBase{S'entra\^iner} \newcommand*\StringExercicesAppr{Approfondir} \newcommand*\StringTestConnaissances{Je teste mes connaissances} \newcommand*\StringConnaissances{Auto-\'evaluation QCM} \newcommand*\StringTravauxPratiques{Travaux pratiques} \newcommand*\StringAE{Auto-\'evaluation} \newcommand*\StringVoirCorriges{Voir solutions p.} \newcommand*\StringManuel{Des ressources num\'eriques pour pr\'eparer le chapitre sur \textcolor{U4}{\LogoURLManuelFont manuel.sesamath.net}} \newcommand*\StringALGO{ALGO} \newcommand*\StringTICE{INFO} \newcommand*\StringRecreation{R\'ecr\'eation, \'enigmes} \newcommand*\StringAcquisTitle{\`A la fin de ce chapitre, je dois \^etre capable de\,:} \newcommand*\StringQCMAE{QCM d'auto-\'evaluation} % \end{macrocode} % La chaîne |\StringQCM| ne doit pas être modifiée. % \begin{macrocode} \newcommand*\StringQCM{QCM} \newcommand*\StringChapitre{Chapitre} \newcommand*\StringEnigme{\'Enigme} \newcommand*\StringPropriete{Propri\'et\'e} \newcommand*\StringPROPRIETE{PROPRI\'ET\'E} \newcommand*\StringDEFINITION{D\'EFINITION} \newcommand*\StringTHEOREME{TH\'EOR\`EME} \newcommand*\StringLexique{Lexique} % \end{macrocode} % Le logo utilisé pour indiquer que le manuel se trouve sur internet % n'est pas à proprement parler une chaîne de caractères mais on va % tout de même le définir ici. En revanche, il faut tous les % renseignements inclus dans la macro. % \begin{macrocode} \newcommand*\LogoManuel{\textcolor{U4}{\LogoManuelFont @}} \newcommand\StringDEBAT{D\'EBAT} \newcommand\StringACTIVITE{ACTIVIT\'E} \newcommand\StringTP{TP} \newcommand*\StringExemple{Exemple} \newcommand*\StringCorrection{Correction} \newcommand*\StringMETHODE{M\'ETHODE} \newcommand*\StringPREUVE{PREUVE} \newcommand*\StringMethode{M\'ethode} \newcommand*\StringExApp{Exercice d'application} \newcommand*\StringPartie{Partie} \newcommand*\StringListeMethode{Liste des m\'ethodes} \newcommand*\StringCorriges{Solutions} \newcommand*\StringListeMethodeF{Fonctions} \newcommand*\StringListeMethodeG{G\'eom\'etrie} \newcommand*\StringListeMethodeSP{Stat. et probabilit\'es} % \end{macrocode} % \section{Éléments graphiques particuliers} % \begin{macro}{\smc@diagonal} % Plusieurs éléments graphiques utilisent des carrés disposés en % diagonale avec des couleurs dégradées, cette commande permet de % construire l'ensemble de ces carrés de façon automatique. Le % principe est que les coordonnées indiquent le coin inférieur gauche % du carré inférieur gauche et que le second paramètre indique le nom % de base \texttt{} pour retrouver les couleurs. Les noms des % couleurs sont construits selon le principe \texttt{Color} % où \texttt{} est un nombre de 1 à 5. Il aurait été plus simple de % le faire avec un |\rput| mais bizarrement \XeLaTeX{} semble ne pas % bien gérer la situation (il y a un petit décalage que je ne % m'explique pas : très peu vers le haut et un peu plus vers la % gauche). % \begin{macrocode} \def\smc@diagonal(#1,#2)#3{% \psframe[linewidth=0pt, linestyle=none, fillcolor=#33Color] (\dimexpr #1, \dimexpr #2) (\dimexpr #1+\SquareWidth, \dimexpr #2+\SquareWidth) \psframe[linewidth=0pt, linestyle=none, fillcolor=#32Color] (\dimexpr #1+\SquareWidth, \dimexpr #2) (\dimexpr #1+\SquareWidth*2, \dimexpr #2+\SquareWidth) \psframe[linewidth=0pt, linestyle=none, fillcolor=#31Color] (\dimexpr #1+\SquareWidth*2, \dimexpr #2) (\dimexpr #1+\SquareWidth*3, \dimexpr #2+\SquareWidth) \psframe[linewidth=0pt, linestyle=none, fillcolor=#34Color] (\dimexpr #1, \dimexpr #2+\SquareWidth) (\dimexpr #1+\SquareWidth, \dimexpr #2+\SquareWidth*2) \psframe[linewidth=0pt, linestyle=none, fillcolor=#33Color] (\dimexpr #1+\SquareWidth, \dimexpr #2+\SquareWidth) (\dimexpr #1+\SquareWidth*2, \dimexpr #2+\SquareWidth*2) \psframe[linewidth=0pt, linestyle=none, fillcolor=#32Color] (\dimexpr #1+\SquareWidth*2, \dimexpr #2+\SquareWidth) (\dimexpr #1+\SquareWidth*3, \dimexpr #2+\SquareWidth*2) \psframe[linewidth=0pt, linestyle=none, fillcolor=#35Color] (\dimexpr #1, \dimexpr #2+\SquareWidth*2) (\dimexpr #1+\SquareWidth, \dimexpr #2+\SquareWidth*3) \psframe[linewidth=0pt, linestyle=none, fillcolor=#34Color] (\dimexpr #1+\SquareWidth, \dimexpr #2+\SquareWidth*2) (\dimexpr #1+\SquareWidth*2, \dimexpr #2+\SquareWidth*3) \psframe[linewidth=0pt, linestyle=none, fillcolor=#33Color] (\dimexpr #1+\SquareWidth*2, \dimexpr #2+\SquareWidth*2) (\dimexpr #1+\SquareWidth*3, \dimexpr #2+\SquareWidth*3) \ignorespaces } % \end{macrocode} % \end{macro} % \begin{macro}{\smc@antidiagonal} % C'est exactement la même chose que la macro précédente mais % l'orientation se fait selon la diagonale non principale. % \begin{macrocode} \def\smc@antidiagonal(#1,#2)#3{% \psframe[linewidth=0pt, linestyle=none, fillcolor=#31Color] (\dimexpr #1, \dimexpr #2) (\dimexpr #1+\SquareWidth, \dimexpr #2+\SquareWidth) \psframe[linewidth=0pt, linestyle=none, fillcolor=#32Color] (\dimexpr #1+\SquareWidth, \dimexpr #2) (\dimexpr #1+\SquareWidth*2, \dimexpr #2+\SquareWidth) \psframe[linewidth=0pt, linestyle=none, fillcolor=#33Color] (\dimexpr #1+\SquareWidth*2, \dimexpr #2) (\dimexpr #1+\SquareWidth*3, \dimexpr #2+\SquareWidth) \psframe[linewidth=0pt, linestyle=none, fillcolor=#32Color] (\dimexpr #1, \dimexpr #2+\SquareWidth) (\dimexpr #1+\SquareWidth, \dimexpr #2+\SquareWidth*2) \psframe[linewidth=0pt, linestyle=none, fillcolor=#33Color] (\dimexpr #1+\SquareWidth, \dimexpr #2+\SquareWidth) (\dimexpr #1+\SquareWidth*2, \dimexpr #2+\SquareWidth*2) \psframe[linewidth=0pt, linestyle=none, fillcolor=#34Color] (\dimexpr #1+\SquareWidth*2, \dimexpr #2+\SquareWidth) (\dimexpr #1+\SquareWidth*3, \dimexpr #2+\SquareWidth*2) \psframe[linewidth=0pt, linestyle=none, fillcolor=#33Color] (\dimexpr #1, \dimexpr #2+\SquareWidth*2) (\dimexpr #1+\SquareWidth, \dimexpr #2+\SquareWidth*3) \psframe[linewidth=0pt, linestyle=none, fillcolor=#34Color] (\dimexpr #1+\SquareWidth, \dimexpr #2+\SquareWidth*2) (\dimexpr #1+\SquareWidth*2, \dimexpr #2+\SquareWidth*3) \psframe[linewidth=0pt, linestyle=none, fillcolor=#35Color] (\dimexpr #1+\SquareWidth*2, \dimexpr #2+\SquareWidth*2) (\dimexpr #1+\SquareWidth*3, \dimexpr #2+\SquareWidth*3) \ignorespaces } % \end{macrocode} % \end{macro} % \begin{macro}{\smc@rounddiagonal} % Même chose que les carrés en diagonal mais avec des disques en diagonal % \begin{macrocode} \def\smc@rounddiagonal(#1,#2)#3{% \pscircle*[linecolor=#33Color] (\dimexpr #1+\SquareWidth/2, \dimexpr #2+\SquareWidth/2) {\dimexpr \SquareWidth/2} \pscircle*[linecolor=#32Color] (\dimexpr #1+\SquareWidth/2+\SquareWidth, \dimexpr #2+\SquareWidth/2) {\dimexpr \SquareWidth/2} \pscircle*[linecolor=#31Color] (\dimexpr #1+\SquareWidth/2+\SquareWidth*2, \dimexpr #2+\SquareWidth/2) {\dimexpr \SquareWidth/2} \pscircle*[linecolor=#34Color] (\dimexpr #1+\SquareWidth/2, \dimexpr #2+\SquareWidth/2+\SquareWidth) {\dimexpr \SquareWidth/2} \pscircle*[linecolor=#33Color] (\dimexpr #1+\SquareWidth/2+\SquareWidth, \dimexpr #2+\SquareWidth/2+\SquareWidth) {\dimexpr \SquareWidth/2} \pscircle*[linecolor=#32Color] (\dimexpr #1+\SquareWidth/2+\SquareWidth*2, \dimexpr #2+\SquareWidth/2+\SquareWidth) {\dimexpr \SquareWidth/2} \pscircle*[linecolor=#35Color] (\dimexpr #1+\SquareWidth/2, \dimexpr #2+\SquareWidth/2+\SquareWidth*2) {\dimexpr \SquareWidth/2} \pscircle*[linecolor=#34Color] (\dimexpr #1+\SquareWidth/2+\SquareWidth, \dimexpr #2+\SquareWidth/2+\SquareWidth*2) {\dimexpr \SquareWidth/2} \pscircle*[linecolor=#33Color] (\dimexpr #1+\SquareWidth/2+\SquareWidth*2, \dimexpr #2+\SquareWidth/2+\SquareWidth*2) {\dimexpr \SquareWidth/2} \ignorespaces } % \end{macrocode} % \end{macro} % \begin{macro}{\smc@roundantidiagonal} % C'est exactement la même chose que la macro précédente mais % l'orientation se fait selon la diagonale non principale. % \begin{macrocode} \def\smc@roundantidiagonal(#1,#2)#3{% \pscircle*[linecolor=#31Color] (\dimexpr #1+\SquareWidth/2, \dimexpr #2+\SquareWidth/2) {\dimexpr \SquareWidth/2} \pscircle*[linecolor=#32Color] (\dimexpr #1+\SquareWidth/2+\SquareWidth, \dimexpr #2+\SquareWidth/2) {\dimexpr \SquareWidth/2} \pscircle*[linecolor=#33Color] (\dimexpr #1+\SquareWidth/2+\SquareWidth*2, \dimexpr #2+\SquareWidth/2) {\dimexpr \SquareWidth/2} \pscircle*[linecolor=#32Color] (\dimexpr #1+\SquareWidth/2, \dimexpr #2+\SquareWidth/2+\SquareWidth) {\dimexpr \SquareWidth/2} \pscircle*[linecolor=#33Color] (\dimexpr #1+\SquareWidth/2+\SquareWidth, \dimexpr #2+\SquareWidth/2+\SquareWidth) {\dimexpr \SquareWidth/2} \pscircle*[linecolor=#34Color] (\dimexpr #1+\SquareWidth/2+\SquareWidth*2, \dimexpr #2+\SquareWidth/2+\SquareWidth) {\dimexpr \SquareWidth/2} \pscircle*[linecolor=#33Color] (\dimexpr #1+\SquareWidth/2, \dimexpr #2+\SquareWidth/2+\SquareWidth*2) {\dimexpr \SquareWidth/2} \pscircle*[linecolor=#34Color] (\dimexpr #1+\SquareWidth/2+\SquareWidth, \dimexpr #2+\SquareWidth/2+\SquareWidth*2) {\dimexpr \SquareWidth/2} \pscircle*[linecolor=#35Color] (\dimexpr #1+\SquareWidth/2+\SquareWidth*2, \dimexpr #2+\SquareWidth/2+\SquareWidth*2) {\dimexpr \SquareWidth/2} \ignorespaces } % \end{macrocode} % \end{macro} % \section{Commandes de sectionnement} % \subsection{Thème} % \begin{macro}{\thema} % Les macros |\thema| permet de spécifier le thème en cours. Pour % l'instant, la classe n'en prévoit que quatre : % \begin{itemize} % \item fonction ; % \item géométrie ; % \item statistiques probabilité ; % \item libre (pour les pages sans thème) % \end{itemize} % La macro mémorise le titre du thème, son abréviation et un certain % nombre de couleurs spécifiques. % \begin{macrocode} \newcommand*\themaF{% \cleardoubleoddpage \def\smc@thema{fonctions}% \def\smc@themacap{FONCTIONS}% \def\smc@thema@init{f}% \def\smc@thema@initcap{F}% \smc@themaFColor % \end{macrocode} % À chaque début de thème, on remet le compteur de chapitre à zéro. % \begin{macrocode} \setcounter{chapter}{0}% } % \end{macrocode} % Pour les couleurs, comme on en a besoin à plusieurs endroits, on les % définis séparément. % \begin{macrocode} \newcommand*\smc@themaFColor{% \def\CorrigeChapterFrameColor{PartieFonction}% \def\CorrigeChapterTextColor{Blanc}% \colorlet{ChapterNumFrameColor}{PartieFonction}% \colorlet{FootTitleHeadColor}{PartieFonction}% \colorlet{ChapterTopFrameColor}{A3}% \colorlet{ChapterNumSquare4Color}{A3}% \colorlet{ChapterNumSquare5Color}{PartieFonction}% \colorlet{FirstChapterFootColor}{FootFonctionColor}% } % \end{macrocode} % Même chose pour la partie Géométrie % \begin{macrocode} \newcommand*\themaG{% \cleardoubleoddpage \def\smc@thema{g\'eom\'etrie}% \def\smc@themacap{G\'EOM\'ETRIE}% \def\smc@thema@init{g}% \def\smc@thema@initcap{G}% \smc@themaGColor \setcounter{chapter}{0}% } \newcommand*\smc@themaGColor{% \def\CorrigeChapterFrameColor{PartieGeometrie}% \def\CorrigeChapterTextColor{Blanc}% \colorlet{ChapterNumFrameColor}{PartieGeometrie}% \colorlet{FootTitleHeadColor}{PartieGeometrie}% \colorlet{ChapterTopFrameColor}{G3}% \colorlet{ChapterNumSquare4Color}{G3}% \colorlet{ChapterNumSquare5Color}{PartieGeometrie}% \colorlet{FirstChapterFootColor}{FootGeometrieColor}% } % \end{macrocode} % Même chose pour la partie Statistiques et probabilités. % \begin{macrocode} \newcommand*\themaS{% \cleardoubleoddpage \def\smc@thema{statistiques\\probabilit\'es}% \def\smc@themacap{STATISTIQUES\\PROBABILIT\'ES}% \def\smc@thema@init{sp}% \def\smc@thema@initcap{SP}% \smc@themaSColor \setcounter{chapter}{0}% } \newcommand*\smc@themaSColor{% \def\CorrigeChapterFrameColor{PartieStatistique}% \def\CorrigeChapterTextColor{Blanc}% \colorlet{ChapterNumFrameColor}{PartieStatistique}% \colorlet{FootTitleHeadColor}{PartieStatistique}% \colorlet{ChapterTopFrameColor}{U2}% \colorlet{ChapterNumSquare4Color}{U2}% \colorlet{ChapterNumSquare5Color}{PartieStatistique}% \colorlet{FirstChapterFootColor}{FootStatistiqueColor}% } % \end{macrocode} % Même chose pour la partie libre. Il n'y a pas de saut de page pour % ce thème. % \begin{macrocode} \newcommand*\themaL{% \def\smc@thema{}% \def\smc@themacap{}% \def\smc@thema@init{l}% \def\smc@thema@initcap{L}% \smc@themaLColor \setcounter{chapter}{0}% } \newcommand*\smc@themaLColor{% \def\CorrigeChapterFrameColor{Blanc}% \def\CorrigeChapterTextColor{Blanc}% \colorlet{ChapterNumFrameColor}{Blanc}% \colorlet{FootTitleHeadColor}{Blanc}% \colorlet{ChapterTopFrameColor}{Blanc}% \colorlet{ChapterNumSquare4Color}{Blanc}% \colorlet{ChapterNumSquare5Color}{Blanc}% \colorlet{FirstChapterFootColor}{Blanc}% } % \end{macrocode} % \end{macro} % \begin{macro}{\NewThema} % La classe va proposer également la commande |\NewThema| pour pouvoir % définir d'autres thèmes que les quatre initiaux de la maquette. Cette % commande demande 7 arguments qui sont (dans l'ordre) : % \begin{itemize} % \item la lettre ou les lettres après |\thema| (normalement en % capitale) ; % \item la lettre ou les lettres correspondantes en minuscule ; % \item le titre du thème en minuscule ; % \item le titre du thème avec initiale en capitale ; % \item le titre du thème entèrement en capitale ; % \item la couleur du cadre pour le rectangle vertical de chapitre ; % \item la couleur de l'avant-dernier carré en bas à gauche du % rectangle vertical de chapitre. % \end{itemize} % \begin{macrocode} \newcommand*\NewThema[7]{% % \end{macrocode} % Il est interdit de redéfinir un thème % \begin{macrocode} \ifcsname thema#1\endcsname \ClassError{sesamanuel} {le theme \string\thema#1 existe deja} {Vous ne pouvez pas creer un theme deja existant.}% \else % \end{macrocode} % Déclaration du booléen pour la présence de méthodes dans ce thème. % \begin{macrocode} \protected@write\@auxout{} {% \protect\expandafter \protect\newif \protect\csname ifsmc@lom#2\protect\endcsname }% \expandafter \newif \csname ifsmc@lom#2\endcsname % \end{macrocode} % Déclaration des couleurs pour la liste des méthodes. % \begin{macrocode} \@namedef{smc@thema#1Color}{% \def\CorrigeChapterFrameColor{#6}% \def\CorrigeChapterTextColor{Blanc}% \colorlet{ChapterNumFrameColor}{#6}% \colorlet{FootTitleHeadColor}{#6}% \colorlet{ChapterTopFrameColor}{#7}% \colorlet{ChapterNumSquare4Color}{#7}% \colorlet{ChapterNumSquare5Color}{#6}% \colorlet{FirstChapterFootColor}{#7}% }% % \end{macrocode} % Définition du thème proprement dit avec sa commande d'appel. % \begin{macrocode} \expandafter\def\csname thema#1\endcsname{% \cleardoubleoddpage \def\smc@thema{#3}% \edef\smc@themacap{#5}% \def\smc@thema@init{#2}% \def\smc@thema@initcap{#1}% \def\CorrigeChapterFrameColor{#6}% \expandafter\def\csname StringListeMethode#1\endcsname{#4}% \def\CorrigeChapterTextColor{Blanc}% \colorlet{ChapterNumFrameColor}{#6}% \colorlet{FootTitleHeadColor}{#6}% \colorlet{ChapterTopFrameColor}{#7}% \colorlet{ChapterNumSquare4Color}{#7}% \colorlet{ChapterNumSquare5Color}{#6}% \colorlet{FirstChapterFootColor}{#7}% }% \fi } % \end{macrocode} % \end{macro} % \subsection{Composants d'un chapitre} % \begin{macro}{\smc@fixwidth} % On va avoir besoin d'une macro composant son contenu dans une % largeur déterminée et qui accepte les coupures de lignes avec % |\\|. Le premier argument est la largeur imposée, la seconde est le % texte. % \begin{macrocode} \newcommand\smc@fixwidth[2]{% \smc@dima=0pt \expandafter\smc@@width#2\\\@nil\\% \setbox0=\hbox{% \minipage[b]{\smc@dima} #2% \endminipage }% \smc@dima=\dimexpr\ht0+\dp0\relax \psscaleboxto(#1,\the\smc@dima){% \unhbox0 }% \ignorespaces } \def\smc@@width#1\\{% \def\smc@arg{#1}% \unless\ifx\smc@arg\@nnil \setbox0=\hbox{#1}% \ifdim\wd0>\smc@dima \smc@dima=\wd0\relax \fi \expandafter\smc@@width \fi } % \end{macrocode} % \end{macro} % \begin{macro}{\smc@fixwidthcenter} % Même chose que précédemment mais le contenu est centré. % \begin{macrocode} \newcommand\smc@fixwidthcenter[2]{% \smc@dima=0pt \expandafter\smc@@width#2\\\@nil\\% \setbox0=\hbox{% \minipage[b]{\smc@dima} \centering #2% \endminipage }% \smc@dima=\dimexpr\ht0+\dp0\relax \psscaleboxto(#1,\the\smc@dima){% \unhbox0 }% \ignorespaces } % \end{macrocode} % \end{macro} % \begin{macro}{\@makechapterhead} % La commande de chapitre est à reprendre entièrement en ce qui % concerne la mise en page. On gardera tout le mécanisme de la % commande |\chapter| même si tout ne servira pas vraiment et c'est la % commande |\@makechapterhead| qui va être redéfinie. % \begin{macrocode} \renewcommand*\@makechapterhead[1]{% % \end{macrocode} % Avant de commencer, on mémorise le titre dans une variable qui % servira dans les pieds de page. On écrit également le titre du % chapitre dans le fichier de correction. % \begin{macrocode} \def\smc@chaptertitle{#1}% \addtocontents{cor}{% \protect\smc@corrigechapter{% \StringChapitre{} \smc@thema@initcap\the\c@chapter} {\smc@chaptertitle}% {\CorrigeChapterFrameColor}% {\CorrigeChapterTextColor}% }% \begin{pspicture}(0,0)(\linewidth,\ChapterBottomPicture) \psset{linewidth=0pt,linestyle=none,fillstyle=solid} % \end{macrocode} % Cadre haut. % \begin{macrocode} \psframe[fillcolor=ChapterTopFrameColor] (\dimexpr-\smc@bleed-\smc@marginleft,\ChapterBottomFrameHeight) (\dimexpr\linewidth+\smc@marginright+\smc@bleed, \ChapterTotalFrameHeight) % \end{macrocode} % Cadre bas. % \begin{macrocode} \psframe[fillcolor=ChapterBottomFrameColor] (\dimexpr-\smc@bleed-\smc@marginleft,0) (\dimexpr\linewidth+\smc@marginright+\smc@bleed, \ChapterBottomFrameHeight) % \end{macrocode} % Cadre vert de fond du numéro de chapitre. % \begin{macrocode} \psframe[fillcolor=ChapterNumBkgColor] (\ChapterNumLeftFrame,0) (\linewidth,\ChapterTotalFrameHeight) % \end{macrocode} % Cadre de fond du numéro de chapitre. % \begin{macrocode} \psframe[fillcolor=ChapterNumFrameColor] (\ChapterNumLeftFrame,\ChapterNumBottomFrame) (\linewidth,\ChapterNumTopFrame) % \end{macrocode} % Carrés dégradés. % \begin{macrocode} \smc@antidiagonal(\ChapterNumLeftFrame,\ChapterNumBottomFrame) {ChapterNumSquare} % \end{macrocode} % thème et numéro de chapitre. % \begin{macrocode} \rput[B](\dimexpr \linewidth/2+\ChapterNumLeftFrame/2, \ChapterBottomFrameHeight) {\textcolor{ThemaTitleColor} {% \ChapAppFont \smc@fixwidthcenter{\ChapterTitleThemaWidth} {\smc@themacap}% }% } \rput[B](\dimexpr \linewidth/2+\ChapterNumLeftFrame/2, \ChapterNumBase) {\textcolor{ChapterNumColor} {\ChapterNumFont \thechapter}} % \end{macrocode} % Titre du chapitre. % \begin{macrocode} \rput[Bl](0,\ChapterTitleBase){% \begin{minipage}[b]{\dimexpr\ChapterNumLeftFrame-\ChapterTitleSep} \ChapterTitleFont \color{ChapterTitleColor}#1% \end{minipage} } \end{pspicture} % \end{macrocode} % Le style de page est défini dans la macro |\chapter| comme étant le % style \texttt{plain}. On aurait pu redéfinir |\chapter| pour % modifier ce point mais autant ne pas surcharger la classe et % redéfinir le style de page en fin de macro d'affichage. % \begin{macrocode} \thispagestyle{firstchapter} } % \end{macrocode} % \end{macro} % \begin{environment}{prerecquis} % Cet environnement liste les connaissances antérieures nécessaires au % chapitre en cours. % % Pour un livre de seconde, ce sera les \og Connaissances du collège % nécessaires à ce chapitre \fg{} mais ce titre étant susceptible de % varier, on le passe en paramètre à l'environnement. Pour faciliter % la vie de l'utilisateur, on le fournit sous forme d'un argument % optionnel, la valeur par défaut étant contenu dans la macro % |\StringPrerequis|. Pour commencer, cette macro est % initialisée avec le titre pour les secondes mais on pourra prévoir % un mécanisme plus général où il suffira d'indiquer le niveau du % livre en début de compilation. % % L'environnement |prerequis| compose son contenu en sans empattement, % dans un cadre bleu en deux colonnes. % \begin{macrocode} \newenvironment{prerequis}[1][\StringPrerequis] {% % \end{macrocode} % Si la première page de chapitre doit être calibrée pour faire % effectivement une seule page, alors, pour l'instant, je place un % ressort vertical infini entre chaque élément de la page. % \begin{macrocode} \par\vspace*{\stretch{1}} % \end{macrocode} % Redéfinition locale des listes et autres. % \begin{macrocode} \let\itemize\smc@prerequisitemize \let\enditemize\endsmc@prerequisitemize \let\colitemize\smc@prerequiscolitemize \let\endcolitemize\endsmc@prerequiscolitemize \let\enumerate\smc@prerequisenumerate \let\endenumerate\endsmc@prerequisenumerate \let\colenumerate\smc@prerequiscolenumerate \let\endcolenumerate\endsmc@prerequiscolenumerate \let\partie\smc@nopartie \let\exercice\smc@noexercice \let\endexercice\endsmc@noexercice \let\corrige\smc@nocorrige \let\endcorrige\endsmc@nocorrige \def\smc@currpart{Prerequis}% % \end{macrocode} % Titre du prérequis. % \begin{macrocode} {% \PrerequisTitleFont \textcolor{PrerequisTitleColor}{#1}% \par\vspace{\PrerequisTitleVSpace}% }% % \end{macrocode} % Avant d'appeler l'environnement de cadre, on explicite l'espace vide % entre le bord du cadre et le texte. % \begin{macrocode} \edef\FrameSep{\SquareWidth}% \smc@cadre{PrerequisBkgColor} % \end{macrocode} % L'environnement \environ{multicols} ajoute un espace vertical % au-dessus. Ce n'est pas lié à la longueur |\multicolsep| qui n'a % visiblement pas d'action à l'intérieur d'un environnement % \environ{minipage}. Pour équilibrer la présentation il faut placer % un saut négatif ad hoc. % \begin{macrocode} \vspace*{-4.5pt} \begin{multicols}{2} \PrerequisTextFont } {% \end{multicols}% \endsmc@cadre \par } % \end{macrocode} % \end{environment} % \begin{environment}{autoeval} % L'environnement \environ{autoeval} gère la partie \og % Auto-évaluation \fg{} de la première page de chapitre. Celle-ci se % compose d'un cartouche avec le titre (immuable ?) \og % Auto-évaluation \fg{} puis d'un cadre avec l'énoncé des exercices % comprenant (en bas à droite ?) un cartouche indiquant la page de % correction. % % L'environnement \environ{autoeval} ne demande aucun paramètre. % \begin{macrocode} \newenvironment{autoeval} {% % \end{macrocode} % On commence par placer une balise dans le fichier de correction % \begin{macrocode} \addtocontents{cor}{\protect\smc@corrigeautoeval}% % \end{macrocode} % Comme pour l'environnement précédent, on équilibre les blancs % verticaux de la page. % \begin{macrocode} \par\vspace{\stretch{1}} % \end{macrocode} % Le cartouche de titre peut être affiché avant de connaître le % contenu de l'environnement. On le fait donc dans la partie % initiale. Pour obtenir une hauteur de exactement 3 diamètres de % disque et une largeur de |\AETitleWidth|, on va tricher en demandant % une séparation nulle avec le texte et une construction de texte % ayant exactement les dimensions voulues. On va également tricher sur % la largeur d'empagement puisque l'environnement |cadre| est % normalement prévu pour des cadres occupant tout cet empagement. % \begin{macrocode} \begingroup \linewidth=\AETitleWidth \def\FrameSep{0pt}% \edef\FrameArc{\the\dimexpr \SquareWidth/2}% \def\FrameLineWidth{0pt}% \begin{smc@cadre}[0,0,10,10]{AETitleFrame1Color}% \minipage[b][\AETitleHeight]{\AETitleWidth}% \begin{pspicture}(0,0)(\dimexpr\SquareWidth*3,\dimexpr\SquareWidth*2) \smc@rounddiagonal(0mm,0mm){AETitleFrame}% \end{pspicture}% \hspace*{\stretch{1}}% \AETitleFont \raisebox{\dimexpr\SquareWidth*3/4}{\textcolor{AETitleColor}{\StringAE}}% \hspace*{\stretch{1}}% \endminipage \end{smc@cadre} \endgroup % \end{macrocode} % On affiche ensuite le texte de référence au site manuel.sesamath.net % \begin{macrocode} \hspace*{\stretch{1}}% \begin{minipage}[b]{\AEManuelWidth} \raggedright \AEManuelFont \StringManuel \par\vspace*{\AfterAEManuelVSpace} \end{minipage}% % \end{macrocode} % On affiche enfin le logo. % \begin{macrocode} \hspace{\AEManuelRightSpace}% \raisebox{\AfterAEManuelVSpace} {\psscaleboxto(\AELogoManuelWidth,0){\LogoManuel}}% \\[-1pt] % \end{macrocode} % On redéfinit les listes et la macro d'exercice. % \begin{macrocode} \let\itemize\smc@AEitemize \let\enditemize\endsmc@AEitemize \let\colitemize\smc@AEcolitemize \let\endcolitemize\endsmc@AEcolitemize \let\enumerate\smc@AEenumerate \let\endenumerate\endsmc@AEenumerate \let\colenumerate\smc@AEcolenumerate \let\endcolenumerate\endsmc@AEcolenumerate \let\partie\smc@nopartie \let\exercice\smc@AEexercice \let\endexercice\endsmc@AEexercice \let\corrige\smc@AEcorrige \let\endcorrige\endsmc@AEcorrige \def\smc@currpart{AE}% % \end{macrocode} % On peut alors mémoriser l'intérieur de l'environnement. On utilise % une minipage de la largeur d'empagement moins |\AEFrameHSep*2| % \begin{macrocode} \begin{lrbox}{\smc@boxa} \minipage[b]{\dimexpr\linewidth-\AEFrameHSep*2}% \ignorespaces } {% % \end{macrocode} % En fin d'environnement, on ferme la minipage et la lrbox. Avant % cela, on ajoute un espace vertical pour placer le cartouche de la % correction. % \begin{macrocode} \par \vspace*{\dimexpr\AECartoucheCorrSep+\AECartoucheCorrHeight-\SquareWidth} \hspace*{\stretch{1}}% \endminipage \end{lrbox}% % \end{macrocode} % On va alors afficher la boîte dans un cadre. % \begin{macrocode} \psframebox[framesep=\the\dimexpr\AEFrameHSep-\AEFrameRuleWidth, linewidth=\AEFrameRuleWidth, linecolor=AEFrameColor]{\box\smc@boxa}% % \end{macrocode} % Le point de référence est alors positionné sur le coin inférieur % droit du cadre. On va placer le cartouche en revenant en arrière. On % va également tricher sur la hauteur pour que le cartouche se place à % l'intérieur du cadre. % \begin{macrocode} \hspace*{-\AECartoucheCorrWidth}% \raisebox{-\SquareWidth}{% \begin{pspicture}(0,0)(\AECartoucheCorrWidth,0) \psframe*[linecolor=AECartoucheCorrBkgColor, cornersize=absolute, linearc=\dimexpr\SquareWidth/2] (0,0)(\AECartoucheCorrWidth,\AECartoucheCorrHeight) \psframe*[linecolor=AECartoucheCorrBkgColor] (0,0)(\AECartoucheCorrWidth,3mm) \psframe*[linecolor=AECartoucheCorrBkgColor] (3mm,0)(\AECartoucheCorrWidth,\AECartoucheCorrHeight) \rput(\dimexpr\AECartoucheCorrWidth/2,\dimexpr\AECartoucheCorrHeight/2) {% % \end{macrocode} % Affichage du texte du cartouche de correction. % \begin{macrocode} \AECartoucheCorrArrowFont \textcolor{AECartoucheCorrArrowColor} {\ding{228}\ding{228}\ding{228}} \AECartoucheCorrVCPFont \textcolor{AECartoucheCorrVCPColor} {\StringVoirCorriges\space\pageref{toutes-solutions}}% }% \end{pspicture}% }% } % \end{macrocode} % On définit maintenant l'environnement exercice pour % l'auto-évaluation. % \begin{macrocode} \newcounter{AEexo}[chapter] \newenvironment{smc@AEexercice}{% \par \refstepcounter{AEexo}% % \end{macrocode} % On place un cadre avec le numéro d'exercice dedans. Et c'est tout ! % \begin{macrocode} \psframebox*[linestyle=none, linewidth=0pt, fillcolor=AEExoNumFrameColor, framesep=\AEExoFrameTopSep]{% \hbox to\dimexpr\AEExoFrameWidth-\AEExoFrameTopSep*2{% \hss \AEExoNumFont \textcolor{AEExoNumColor}{\theAEexo}% \hss }% }% \hspace{\AfterAEExoFrameHSpace}% \ignorespaces } % \end{macrocode} % Pour l'instant, il n'y a rien à faire de spécial pour le code % final. Uniquement un saut de paragraphe. % \begin{macrocode} {\par} % \end{macrocode} % \end{environment} % \subsection{Activités} % \begin{macro}{\activites} % Cette macro introduit la partie \og Activités d'approche \fg{} dans % un chapitre. Elle interdit l'utilisation des listes et des macros % |\exercice|, |\correction| et |\partie| en dehors des environnements. % \begin{macrocode} \newcommand*\activites{% \clearpage \pagestyle{activites} \addtocontents{cor}{\protect\smc@corrigeactivite}% \let\itemize\smc@noitemize \let\enditemize\endsmc@noitemize \let\colitemize\smc@nocolitemize \let\endcolitemize\endsmc@nocolitemize \let\enumerate\smc@noenumerate \let\endenumerate\endsmc@noenumerate \let\colenumerate\smc@nocolenumerate \let\endcolenumerate\endsmc@nocolenumerate \let\exercice\smc@noexercice \let\correction\smc@nocorrection \let\partie\smc@activite@partie \let\exercice\smc@noexercice \let\endexercice\endsmc@noexercice \let\corrige\smc@activitecorrige \let\endcorrige\endsmc@activitecorrige \def\smc@currpart{Activite}% } % \end{macrocode} % \end{macro} % \begin{macro}{\DeclareActivityLike} % Les environnements d'activités d'approche propose au moins deux % types d'activités qui partagent le même aspect général. On les % déclare avec la macro |\DeclareActivityLike|. Celle-ci demande % quatre arguments : % \begin{enumerate} % \item le nom de l'environnement ; % \item le titre affiché ; % \item la couleur de la partie supérieure du cartouche ; % \item la couleur de la partie inférieure du cartouche ; % \item la couleur du titre et du losange de numéro. % \end{enumerate} % \begin{macrocode} \newcounter{activite}[chapter] \newcounter{partie}[activite] \newcommand*\DeclareActivityLike[5]{% % \end{macrocode} % Les environnements ont un argument optionnel pour le titre et un % deuxième pour le logo. On est donc obligé de les définir avec des % macros au lieu d'environnements. % \begin{macrocode} \expandafter\newcommand\csname#1\endcsname[1][]{% % \end{macrocode} % On sauvegarde le titre et on appelle la macro auxiliaire pour le % deuxième paramètre optionnel. % \begin{macrocode} \def\smc@activite@title{##1}% \csname#1@aux\endcsname }% \expandafter\newcommand\csname#1@aux\endcsname[1][]{% % \end{macrocode} % L'environnement commence par placer un espacement vertical avant de % composer son titre et son sous-titre. % \begin{macrocode} \par \addvspace{\BeforeActiviteVSpace} \refstepcounter{activite} % \end{macrocode} % On commence avec le titre. Pour pouvoir le composer correctement, il % va d'abord falloir le mettre dans une boîte. % \begin{macrocode} \setbox\smc@boxa=\hbox{% \ActiviteTitleFont #2% }% % \end{macrocode} % On peut maintenant composer réellement le titre en tenant commpte de % la longueur |\wd\smc@boxa|. On réalise le cartouche en faisant % croire que la frontière entre le cadre du bas et celui du haut est % la ligne de base. Le calcul de la largeur compte également la % diagonale d'un carré de côté |\ActiviteTitleTopHeight|, c'est-à-dire % cette longueur multipliée par $\sqrt{2}\approx1.4142$. % \begin{macrocode} \begin{pspicture}(0,0) (\dimexpr \ActiviteTitleLeftSpace+\wd\smc@boxa+\ActiviteTitleRightSpace+1.4142\ActiviteTitleTopHeight,\ActiviteTitleTopHeight) % \end{macrocode} % On commence par afficher les deux parties du fond. La largeur est ce % qui a été calculé pour l'image complète sauf qu'on ne prend qu'une % demi-diagonale au lieu d'une diagonale entière. % \begin{macrocode} \psframe*[linewidth=0, linecolor= #3] (0,0)(\dimexpr\ActiviteTitleLeftSpace+\wd\smc@boxa+\ActiviteTitleRightSpace+0.7071\ActiviteTitleTopHeight, \ActiviteTitleTopHeight) % \end{macrocode} % Même chose pour la partie du bas en sachant qu'elle déborde de la % boîte englobante. % \begin{macrocode} \psframe*[linewidth=0, linecolor= #4] (0,0)(\dimexpr\ActiviteTitleLeftSpace+\wd\smc@boxa+\ActiviteTitleRightSpace+0.7071\ActiviteTitleTopHeight, -\ActiviteTitleBottomHeight) % \end{macrocode} % On peut maintenant placer le titre. % \begin{macrocode} \rput[l](\ActiviteTitleLeftSpace, 0.5\dimexpr\ActiviteTitleTopHeight-\ActiviteTitleBottomHeight){% \ActiviteTitleFont \textcolor{#5}{#2}% } % \end{macrocode} % Il reste à placer la carré avec le numéro d'activité. Le carré est % placé verticalement au centre du cartouche. On place également le % numéro de l'activité. % \begin{macrocode} \rput (\dimexpr\ActiviteTitleLeftSpace+\wd\smc@boxa+\ActiviteTitleRightSpace, 0.5\dimexpr\ActiviteTitleTopHeight-\ActiviteTitleBottomHeight) {% \pspolygon*[linewidth=0, linecolor=#5] (0,0) (0.7071\ActiviteTitleTopHeight,0.7071\ActiviteTitleTopHeight) (1.4142\ActiviteTitleTopHeight,0) (0.7071\ActiviteTitleTopHeight,-0.7071\ActiviteTitleTopHeight) \rput(0.7071\ActiviteTitleTopHeight,0){% \ActiviteNumFont \textcolor{ActiviteNumColor}{\theactivite}% } } \end{pspicture}% % \end{macrocode} % Le cartouche est totalement réalisé. On va maintenant afficher le % sous-titre. Ce n'est pas la peine de tester si il est vide : on ne % modifie rien s'il y a ou non un sous titre. % \begin{macrocode} \hspace*{\AfterActiviteTitleHSpace}% % \end{macrocode} % Pour permettre un titre sur plusieurs lignes, on place le sous-titre % dans une minipage dont la largeur doit être égale au reste de % l'empagement qui existe à ce moment précis, c'est-à-dire la largeur % du cartouche plus l'espace qu'on vient de placer auquel il faut % soustraire l'espace du à un éventuel logo. C'est pour cela qu'on % commence par tester la présence d'un tel élément. % \begin{macrocode} \@ifmtarg{##1} {\setbox0=\hbox{}} {\setbox0=\hbox{##1\ }}% \minipage[t]{\dimexpr\linewidth-\ActiviteTitleLeftSpace-\wd\smc@boxa-\ActiviteTitleRightSpace-1.4142\ActiviteTitleTopHeight-\AfterActiviteTitleHSpace-\wd0} \ActiviteSubtitleFont \textcolor{ActiviteSubtitleColor}{\smc@activite@title}% \endminipage \@ifnotmtarg{##1}{\hfill##1}% \par\vspace{\AfterActiviteTitleVSpace} % \end{macrocode} % On règle les listes pour les activités. % \begin{macrocode} \let\itemize\smc@activiteitemize \let\enditemize\endsmc@activiteitemize \let\colitemize\smc@activitecolitemize \let\endcolitemize\endsmc@activitecolitemize \let\enumerate\smc@activiteenumerate \let\endenumerate\endsmc@activiteenumerate \let\colenumerate\smc@activitecolenumerate \let\endcolenumerate\endsmc@activitecolenumerate \let\partie\smc@activite@partie \let\exercice\smc@noexercice \let\endexercice\endsmc@noexercice \let\corrige\smc@nocorrige \let\endcorrige\endsmc@nocorrige \def\smc@currpart{Activite}% % \end{macrocode} % On peut maintenant composer le contenu de l'environnement. Celui-ci % sera placé dans un empagement réduit. % \begin{macrocode} \begin{changemargin}{\dimexpr\SquareWidth*4}{\ExtraMarginRight} }% % \end{macrocode} % Le code terminal est défini par la macro |\end|. % Attention, comme le nom commence par |\end|, on ne peut pas utiliser % |\newcommand|. % \begin{macrocode} \expandafter\def\csname end#1\endcsname{% \end{changemargin} }% } % \end{macrocode} % \end{macro} % \begin{environment}{debat} % On va maintenant utiliser la macro |\DeclareActivityLike| pour créer % l'environnement |debat|. Il y a juste à préciser le nom de % l'environnement, le titre, la couleur du haut du cartouche et la % couleur du bas du cartouche. % \begin{macrocode} \DeclareActivityLike{debat}{\StringDEBAT} {ActiviteDebatTopColor} {ActiviteDebatBottomColor} {ActiviteTitleColor} % \end{macrocode} % \end{environment} % \begin{environment}{activite} % On procède de la même façon pour l'environnement |activite|. % \begin{macrocode} \DeclareActivityLike{activite}{\StringACTIVITE} {ActiviteActiviteTopColor} {ActiviteActiviteBottomColor} {ActiviteTitleColor} % \end{macrocode} % \end{environment} % \subsection{Cours} % \begin{macro}{\cours} % Cette macro introduit la partie \og Cours - Méthodes \fg{} dans un % chapitre. Elle interdit l'utilisation des listes et des macros % |\exercice|, |\correction| et |\partie| en dehors des environnements. % \begin{macrocode} \newcommand*\cours{% \clearpage \pagestyle{cours} \let\itemize\smc@noitemize \let\enditemize\endsmc@noitemize \let\colitemize\smc@nocolitemize \let\endcolitemize\endsmc@nocolitemize \let\enumerate\smc@noenumerate \let\endenumerate\endsmc@noenumerate \let\colenumerate\smc@nocolenumerate \let\endcolenumerate\endsmc@nocolenumerate \let\exercice\smc@noexercice \let\endexercice\endsmc@noexercice \let\corrige\smc@nocorrige \let\endcorrige\endsmc@nocorrige \let\correction\smc@nocorrection \let\partie\smc@nopartie \def\smc@currpart{Cours}% } % \end{macrocode} % \end{macro} % \begin{macro}{\section} % Les macros de sectionnement vont garder leur nom habituel. On % gardera également la syntaxe avec l'argument optionnel et l'étoile % mais cette dernière ne servira strictement à rien ! Le numéro de % section ne fait pas référence au numéro de chapitre. % \begin{macrocode} \renewcommand\thesection{\arabic{section}} \renewcommand*\section{\@ifstar{\smc@sec}{\smc@sec}} \newcommand*\smc@sec[2][]{% % \end{macrocode} % On commence par regarder si l'argument optionnel est vide. Si oui, % le titre court sera égal au titre long. % \begin{macrocode} \ifx\relax#1\relax \smc@@sec{#2}{#2}% \else \smc@@sec{#1}{#2}% \fi } % \end{macrocode} % À ce stade, on a un titre court en premier argument et un titre long % en deuxième argument. Le travail effectif peut commencer. % \begin{macrocode} \newcommand*\smc@@sec[2]{% \par\goodbreak\addvspace{\BeforeSectionVSpace}% \refstepcounter{section}% % \end{macrocode} % Le titre court sera éventuellement utilisé pour une TDM. Ce sera à % voir plus tard. % \begin{macrocode} \relax % \end{macrocode} % On compose ensuite le numéro et le titre de la section. On commence % avec le numéro composé dans un environnement |pspicture| avec un % décalage vers la bas pour aligner les lignes de base du numéro avec % celui de la première ligne du titre. % % L'ensemble du titre est placé dans une boîte pour pouvoir régler sa % hauteur ultérieurement : la boîte crée est trop haute sur la ligne % de base. % \begin{macrocode} \setbox\smc@boxa=\hbox{% \begin{pspicture}[shift=-\SquareWidth] (0,0)(\dimexpr\SquareWidth*3,\dimexpr\SquareWidth*3) \psframe*[linecolor=SectionFrame1Color,linewidth=0pt] (0,0)(\dimexpr\SquareWidth*3,\dimexpr\SquareWidth*3) \psframe*[linecolor=SectionFrame2Color,linewidth=0pt] (0,0)(\SquareWidth,\dimexpr\SquareWidth*3) \psframe*[linecolor=SectionFrame2Color,linewidth=0pt] (0,0)(\dimexpr\SquareWidth*3,\SquareWidth) \psframe*[linecolor=SectionFrame3Color,linewidth=0pt] (0,0)(\SquareWidth,\SquareWidth) \rput[Br](\dimexpr\SquareWidth*3,\SquareWidth){% \SectionNumFont \textcolor{SectionNumColor}{\thesection}% % \end{macrocode} % Pour le point, on passe à la fonte de titre ou on garde la fonte du % numéro (en fonction du choix de fontes) pour avoir un point carré % comme ceux présents sur les \og i \fg{}. Il y a également une % correction horizontale pour que le point soit exactement sur la % frontière droite du cadre. Cette correction est sensible aux fontes % utilisées. % \begin{macrocode} \SectionNumFont \textcolor{SectionNumColor}{.}% \hspace*{\SectionCorrectionChassePoint}% } \end{pspicture}% % \end{macrocode} % On affiche le titre après un certain décalage horizontal. Le titre % sera placé dans une minipage alilgné en haut pour que ce soit la % première ligne du titre qui soit alignée avec le numéro. % \begin{macrocode} \hspace{\SectionNumTitleHSpace}% \begin{minipage}[t]{\dimexpr\linewidth-\SectionNumTitleHSpace-\SquareWidth*3} \SectionTitleFont \textcolor{SectionTitleColor}{#2}% \end{minipage}% }% % \end{macrocode} % Avant d'afficher le contenu de la boîte |\smc@boxa|, on diminue sa % hauteur afin de l'afficher avec sa ligne de base correctement % placé. La longueur |\BeforeSectionVSpace| corrigera ce manque. % \begin{macrocode} \smc@dima=\dimexpr \ht\smc@boxa-\SquareWidth \ht\smc@boxa \smc@dima \leavevmode\box\smc@boxa % \end{macrocode} % On termine en plaçant un espacement vertical donné et une % interdiction de coupe. Il n'y a pas besoin de s'occuper du retrait % d'alinéa puisqu'il n'y en a pas ! % \begin{macrocode} \par\nobreak\addvspace{\AfterSectionVSpace} } % \end{macrocode} % On définit également la commande |\smc@normalsection| pour permettre % de restaurer les sections \og normales \fg{} avec la commande % |\RestoreSection|. % \begin{macrocode} \let\smc@normalsection\section \newcommand*\RestoreSection{\let\section\smc@normalsection} % \end{macrocode} % \end{macro} % \begin{macro}{\subsection} % La syntaxe est la même que pour |\section|. La composition du titre % est bien plus simple. On gardera quand même la possibilité d'avoir % un titre sur plusieurs lignes en l'alignant à gauche avec un retrait % tenant compte de celui de la lettre % \begin{macrocode} \renewcommand{\thesubsection}{\Alph{subsection}} \renewcommand\subsection{\@ifstar{\smc@subsec}{\smc@subsec}} \newcommand*\smc@subsec[2][]{% \ifx\relax#1\relax \smc@@subsec{#2}{#2}% \else \smc@@subsec{#1}{#2}% \fi } \newcommand*\smc@@subsec[2]{% % \end{macrocode} % On teste si le dernier saut était celui d'une section. Si oui, on % garde un espace insécable sinon, on réalise un saut avec une % préférence pour la coupure de page. % \begin{macrocode} \ifdim\lastskip=\AfterSectionVSpace \par\nobreak \else \par\goodbreak\addvspace{\BeforeSubsectionVSpace} \fi \refstepcounter{subsection}% % \end{macrocode} % Le titre court sera éventuellement utilisé pour une TDM. Ce sera à % voir plus tard. % \begin{macrocode} \relax % \end{macrocode} % On compose ensuite le numéro et le titre de la section. On commence % avec le numéro composé dans une boîte pour en connaître la largeur. % \begin{macrocode} \setbox\smc@boxa=\hbox{% \SubsectionNumFont \textcolor{SubsectionNumColor}{\thesubsection.~}% }% % \end{macrocode} % On affiche alors la boîte (sans la détruire et on compose le titre % dans une minipage de largeur l'empagement moins la largeur du numéro. % \begin{macrocode} \leavevmode\copy\smc@boxa \begin{minipage}[t]{\dimexpr\linewidth-\wd\smc@boxa} \SubsectionTitleFont \textcolor{SubsectionTitleColor}{#2}% \end{minipage} \par\nobreak\addvspace{\AfterSubsectionVSpace} } % \end{macrocode} % \end{macro} % \begin{macro}{\subsubsection} % La classe n'accepte pas les commandes de sectionnement à partir de % ce niveau ni la commande |\part|. On redéfinit ces commandes pour % qu'elles déclenchent une erreur de compilation. % \begin{macrocode} \newcommand*\smc@error@section[1]{% \ClassError{sesamanuel}{La commande \string#1 n'existe pas}{Les seules commandes disponibles sont \string\chapter\space \string\section\space et \string\subsection.}% } \renewcommand\part{% \@ifstar{\smc@part}{\smc@part}% } \newcommand\smc@part[2][]{% \smc@error@section{\part}% } \renewcommand\subsubsection{% \@ifstar{\smc@subsubsection}{\smc@subsubsection}% } \newcommand\smc@subsubsection[2][]{% \smc@error@section{\subsubsection}% } \renewcommand\paragraph{% \@ifstar{\smc@paragraph}{\smc@paragraph}% } \newcommand\smc@paragraph[2][]{% \smc@error@section{\paragraph}% } \renewcommand\subparagraph{% \@ifstar{\smc@subparagraph}{\smc@subparagraph}% } \newcommand\smc@subparagraph[2][]{% \smc@error@section{\subparagraph}% } % \end{macrocode} % \end{macro} % \begin{macro}{\DeclareDefLike} % Les cadres de type définition vont partager la même façon de se % faire composer et la même syntaxe d'appel : % \begin{center} % |\begin{def}[sous-titre]| % \end{center} % où |sous-titre| est un sous-titre optionnel. % % On les déclare avec la macro |\DeclareDefLike| en donnant dans % l'ordre le nom de l'environnement et le mot à afficher comme titre. % \begin{macrocode} \newcommand*\DeclareDefLike[2]{% \newenvironment{#1}[1][]{% \par\addvspace{\BeforeDefVSpace} % \end{macrocode} % On redéfinit les listes avant de composer quoi que ce soit. % \begin{macrocode} \let\itemize\smc@defitemize \let\enditemize\endsmc@defitemize \let\colitemize\smc@defcolitemize \let\endcolitemize\endsmc@defcolitemize \let\enumerate\smc@defenumerate \let\endenumerate\endsmc@defenumerate \let\colenumerate\smc@defcolenumerate \let\endcolenumerate\endsmc@defcolenumerate \let\partie\smc@nopartie \let\exercice\smc@noexercice \let\endexercice\endsmc@noexercice \let\corrige\smc@nocorrige \let\endcorrige\endsmc@nocorrige \def\smc@currpart{#1}% % \end{macrocode} % Le carré est composé avec un retrait de 2|\SquareWidth| pour que son % côté droit soit aligné avec celui des sections. % \begin{macrocode} \hspace*{\dimexpr\SquareWidth*2}% \textcolor{DefSquareColor}{\rule{\SquareWidth}{\SquareWidth}}% \space % \end{macrocode} % Après le carré, on affiche le titre de l'environnement. Celui qui a % été passé en deuxième argument de |\DeclareDefLike|. % \begin{macrocode} % \end{macrocode} % S'il y a un argument optionnel, c'est-à-dire un sous-titre, on % compoosera un caractère deux points à la suite du titre suivi du % sous titre sinon, le titre sans les deux points. % \begin{macrocode} \ifx\relax##1\relax {% \DefTitleFont \textcolor{DefTitleColor}{#2}% }% \else {% \DefTitleFont \textcolor{DefTitleColor}{#2 : }% }% {% \DefSubtitleFont \textcolor{DefSubtitleColor}{##1}% }% \fi \par\nobreak\addvspace{\DefTitleFrameVSep} % \end{macrocode} % La ligne de titre est maintenant composée, il reste à composer % l'intérieur du cadre. Le texte est sauvegardé dans une minipage dont % la largeur tient compte des retraits gauche % (3|\SquareWidth|+|\DefFrameHSep|) et droit % (|\ExtraMarginRight|+|\DefFrameHSep|). Il y a aussi un % |\ignorespaces| pour supprimer l'espace automatique créé après le % |\begin{definition}|. % \begin{macrocode} \begin{lrbox}{\smc@boxa} \minipage{\dimexpr\linewidth-\SquareWidth*3-\DefFrameHSep*2-\ExtraMarginRight} \par\vspace{\DefFrameVSep} \ignorespaces } % \end{macrocode} % Partie terminale de l'environnement. On commence par placer l'espace % vertical adéquat puis on ferme la minipage et la boîte. % \begin{macrocode} {% \par\vspace{\DefFrameVSep} \endminipage \end{lrbox} % \end{macrocode} % Le contenu de l'environnement est sauvegardé dans la boîte % |\smc@boxa|, il reste à la placer avec les espacements corrects dans % le cadre coloré. Pour controler les espaces pour chaque côté du % cadre, on annule les espacements globaux avant d'utiliser la % commande |\colorbox|. % \begin{macrocode} {% \setlength{\fboxsep}{0pt}% \hspace*{\dimexpr\SquareWidth*3}% \colorbox{DefFrameColor}{% \hspace*{\DefFrameHSep}% \usebox{\smc@boxa}% \hspace*{\DefFrameHSep}% } }% \par } } % \end{macrocode} % \end{macro} % \begin{environment}{definition} % On se sert maintenant de la macro |\DeclareDefLike| pour déclarer % l'environnement de définition. % \begin{macrocode} \DeclareDefLike{definition}{\StringDEFINITION} % \end{macrocode} % \end{environment} % \begin{environment}{propriete} % L'environnement |propriete| suit les mêmes règles que |definition| % \begin{macrocode} \DeclareDefLike{propriete}{\StringPROPRIETE} % \end{macrocode} % \end{environment} % \begin{environment}{theoreme} % L'environnement |theoreme|. % \begin{macrocode} \DeclareDefLike{theoreme}{\StringTHEOREME} % \end{macrocode} % \end{environment} % \begin{macro}{\DeclareRemLike} % La déclaration des environnements de type remarque se fait comme % pour les environnements de type définition. C'est le contenu de % l'environnement qui n'est pas du tout le même. % \begin{macrocode} \newcommand*\DeclareRemLike[2]{% % \end{macrocode} % Cela commence dès le début où il n'y a pas de paramètre optionnel, % le texte pouvant commencer directement après le titre. En fait, les % choses sont beaucoup plus simples : l'environnement fait que % l'ensemble du texte traité l'est dans un empagement réduit (y % compris le titre). Il s'agit du même empagement que celui des % définitions d'où le même calcul de largeur de la minipage et le même % retrait initial. % \begin{macrocode} \newenvironment{#1}{% \par\addvspace{\BeforeRemVSpace} \hspace*{\dimexpr\SquareWidth*3+\DefFrameHSep}% % \end{macrocode} % On redéfinit aussi les listes avant d'appeler la minipage. % \begin{macrocode} \let\itemize\smc@remitemize \let\enditemize\endsmc@remitemize \let\colitemize\smc@remcolitemize \let\endcolitemize\endsmc@remcolitemize \let\enumerate\smc@remenumerate \let\endenumerate\endsmc@remenumerate \let\colenumerate\smc@remcolenumerate \let\endcolenumerate\endsmc@remcolenumerate \let\partie\smc@nopartie \let\exercice\smc@noexercice \let\endexercice\endsmc@noexercice \let\corrige\smc@nocorrige \let\endcorrige\endsmc@nocorrige \def\smc@currpart{#1}% \minipage{\dimexpr\linewidth-\SquareWidth*3-\DefFrameHSep*2-\ExtraMarginRight} \strut {\RemTitleFont \textcolor{RemTitleColor}{#2 : }}% \ignorespaces } % \end{macrocode} % La partie terminale de l'environnement ferme la minipage et passe au % paragraphe suivant. % \begin{macrocode} {% \endminipage \par\addvspace{\AfterRemVSpace} } } % \end{macrocode} % \end{macro} % \begin{environment}{remarque} % On se sert maintenant de la macro |\DeclareRemLike| pour créer les % environnements de type remarque. % \begin{macrocode} \DeclareRemLike{remarque}{Remarque} % \end{macrocode} % \end{environment} % \begin{environment}{remarques} % \begin{macrocode} \DeclareRemLike{remarques}{Remarques} % \end{macrocode} % \end{environment} % \begin{environment}{notation} % \begin{macrocode} \DeclareRemLike{notation}{Notation} % \end{macrocode} % \end{environment} % \begin{environment}{notations} % \begin{macrocode} \DeclareRemLike{notations}{Notations} % \end{macrocode} % \end{environment} % \begin{environment}{vocabulaire} % \begin{macrocode} \DeclareRemLike{vocabulaire}{Vocabulaire} % \end{macrocode} % \end{environment} % \begin{macro}{\DeclareProofLike} % On a également des environnements de type |preuve| qui seront créés % par la macro |\DeclareProofLike|. Le premier argument est le nom de % l'environnement et le deuxième et le titre. % \begin{macrocode} \newcommand*\DeclareProofLike[2]{% \newenvironment{#1} {% % \end{macrocode} % Au début, on place un espacement vertical puis un espacement % horizontal; le filet et un autre espacement horizontal. % \begin{macrocode} \par\addvspace{\BeforeProofVSpace} \hspace*{\dimexpr\SquareWidth*3}% {% \color{ProofRuleColor}% \vrule width \RuleWidth } \hspace*{\dimexpr \SquareWidth-\RuleWidth}% % \end{macrocode} % On redéfinit aussi les listes avant d'appeler la minipage. % \begin{macrocode} \let\itemize\smc@proofitemize \let\enditemize\endsmc@proofitemize \let\colitemize\smc@proofcolitemize \let\endcolitemize\endsmc@proofcolitemize \let\enumerate\smc@proofenumerate \let\endenumerate\endsmc@proofenumerate \let\colenumerate\smc@proofcolenumerate \let\endcolenumerate\endsmc@proofcolenumerate \let\partie\smc@nopartie \let\exercice\smc@noexercice \let\endexercice\endsmc@noexercice \let\corrige\smc@nocorrige \let\endcorrige\endsmc@nocorrige \def\smc@currpart{#1}% \minipage{\dimexpr\linewidth-\SquareWidth*4-\ExtraMarginRight} % \end{macrocode} % Le titre est placé dans un boîte avec les espacements adéquat afin % de pouvoir le placer sur le cartouche adéquat au niveau de la % largeur. % \begin{macrocode} \setbox\smc@boxa=\hbox{% \hspace*{\dimexpr\ProofHeightFrame+\ProofLeftSpace}% \ProofTitleFont \textcolor{ProofTitleColor}{#2}% \hspace*{\ProofRightSpace}% }% % \end{macrocode} % Maintenant que le titre complet est dans une boîte, on peut % construire le cartouche suivi d'une espace. % \begin{macrocode} \begin{pspicture}(0,0)(\wd\smc@boxa,\ProofHeightFrame) \psframe*[linestyle=none,linecolor=ProofBottomFrameColor] (0,-\ProofDepthFrame)(\wd\smc@boxa,0) \psframe*[linestyle=none,linecolor=ProofTopFrameColor] (0,0)(\wd\smc@boxa,\ProofHeightFrame) \pspolygon*[linestyle=none,linecolor=ProofTriangleFrameColor] (0,0)(0,\ProofHeightFrame)(\ProofHeightFrame,\ProofHeightFrame) \rput[Bl](\dimexpr\ProofHeightFrame+\ProofLeftSpace,0){% \ProofTitleFont \textcolor{ProofTitleColor}{#2}% } \end{pspicture}% \hspace{\AfterProofTitleHSpace}% \ignorespaces } % \end{macrocode} % La partie terminale de l'environnement ferme la minipage et passe au % paragraphe suivant. % \begin{macrocode} {% \endminipage \par\addvspace{\AfterProofVSpace} } } % \end{macrocode} % \end{macro} % \begin{environment}{preuve} % On utilise la macro précédente pour déclarer l'environnement % |preuve|. % \begin{macrocode} \DeclareProofLike{preuve}{\StringPREUVE} % \end{macrocode} % \end{environment} % \begin{environment}{exemple} % Comme il y a plusieurs environnements de type exemple, on va % regrouper dans des macros séparés les parties communes. À savoir les % affichages des cartouches. % \begin{macrocode} \newcommand*\smc@cartoucheexemple{% \begin{pspicture}(-\ExempleVRuleWidthFrame,0) (\ExempleWidthFrame,\ExempleHeightFrame) \psframe*[linewidth=0pt,linecolor=ExempleEdgeFrameColor] (-\ExempleVRuleWidthFrame,-\ExempleHRuleWidthFrame) (\ExempleWidthFrame,\ExempleHeightFrame) \psframe*[linewidth=0pt,linecolor=ExempleBkgFrameColor] (0mm,-0mm)(\ExempleWidthFrame,\ExempleHeightFrame) \rput[B](\dimexpr\ExempleWidthFrame/2,0){% \ExempleTitleFont \textcolor{ExempleTitleColor}{\StringExemple}% } \end{pspicture}% } \newcommand*\smc@cartouchecorrection{% \begin{pspicture}(-\ExempleVRuleWidthFrame,0) (\ExempleWidthFrame,\ExempleHeightFrame) \psframe*[linewidth=0pt,linecolor=ExempleEdgeFrameColor] (-\ExempleVRuleWidthFrame,-\ExempleHRuleWidthFrame) (\ExempleWidthFrame,\ExempleHeightFrame) \psframe*[linewidth=0pt,linecolor=ExempleBkgFrameColor] (0mm,-0mm)(\ExempleWidthFrame,\ExempleHeightFrame) \rput[B](\dimexpr\ExempleWidthFrame/2,0){% \ExempleTitleFont \textcolor{ExempleTitleColor}{\StringCorrection}% } \end{pspicture}% } % \end{macrocode} % Le premier environnement de type exemple compose un exemple et sa % correction dans deux colonnes. La syntaxe est : % % |\begin{exemple}[ratio]|\\ % \quad texte de l'exemple\\ % |\correction|\\ % \quad texte de la correction\\ % |\end{exemple}| % % où |ratio| est un argument optionnel indiquant la proportion de la % largeur disponible réservée au texte d'énoncé (valeur par défaut de % 0,4 correspondant au $\frac{2}{5}$ de la place. % % On commence par placer le bon espacement vertical et à initialiser % la macro |\correction| valable pour cet environnement. % \begin{macrocode} \newenvironment{exemple}[1][0.4]{% \par\addvspace{\BeforeExempleVSpace} \let\correction\smc@exemplecorrection % \end{macrocode} % On redéfinit ensuite la liste à puce. % \begin{macrocode} \let\itemize\smc@exempleitemize \let\enditemize\endsmc@exempleitemize \let\colitemize\smc@exemplecolitemize \let\endcolitemize\endsmc@exemplecolitemize \let\enumerate\smc@exempleenumerate \let\endenumerate\endsmc@exempleenumerate \let\colenumerate\smc@exemplecolenumerate \let\endcolenumerate\endsmc@exemplecolenumerate \let\exercice\smc@noexercice \let\endexercice\endsmc@noexercice \let\corrige\smc@nocorrige \let\endcorrige\endsmc@nocorrige \def\smc@currpart{Exemple}% \let\partie\smc@nopartie % \end{macrocode} % Enfin, on mémorise la valeur du ratio. % \begin{macrocode} \def\smc@ratio{#1}% % \end{macrocode} % On doit afficher dans l'ordre : % \begin{itemize} % \item un espace de 3|\SquareWidth| ; % \item un filet vertical avec un espace le tout faisant % |\SquareWidth| de large ; % \item le texte de l'exemple ; % \item un espace de |\SquareWidth| ; % \item un filet vertical avec un espace le tout faisant % |\SquareWidth| de large ; % \item le texte de la correction. % \end{itemize} % \begin{macrocode} \hspace*{\dimexpr \SquareWidth*3}% \color{ExempleRuleColor}% \vrule width \RuleWidth \hspace*{\dimexpr \SquareWidth-\RuleWidth}% % \end{macrocode} % Le texte de l'exemple fait |\smc@ratio| de l'espace a disposition, % les $(1-|\smc@ratio|)$ restant étant pour la correction. La largeur % à se partager fait |\linewidth|-6|\SquareWidth|. Les deux minipages % sont alignées sur le haut. % \begin{macrocode} \minipage[t]{\smc@ratio\dimexpr\linewidth-\SquareWidth*6} % \end{macrocode} % Dans la colonne d'exemple, on commence par placer le mot \og exemple % \fg{} avec son cadre. % \begin{macrocode} \smc@cartoucheexemple \par \color{Noir}% \ignorespaces } {% \endminipage \par } % \end{macrocode} % \end{environment} % \begin{environment}{exemple*1} % Le deuxième environnement de type exemple permet une composition sur % une seule colonne. % % Le début du code est identique à celui de l'environnement % |exemple|. On indiquera les différences. On laisse un argument % optionnel mais celui-ci est inutile. % \begin{macrocode} \newenvironment{exemple*1}[1][]{% \par\addvspace{\BeforeExempleVSpace} % \end{macrocode} % La macro |\correction| appelle une autre macro. % \begin{macrocode} \let\correction\smc@one@exemplecorrection \let\itemize\smc@exempleitemize \let\enditemize\endsmc@exempleitemize \let\colitemize\smc@exemplecolitemize \let\endcolitemize\endsmc@exemplecolitemize \let\enumerate\smc@exempleenumerate \let\endenumerate\endsmc@exempleenumerate \let\colenumerate\smc@exemplecolenumerate \let\endcolenumerate\endsmc@exemplecolenumerate \let\partie\smc@nopartie \let\exercice\smc@noexercice \let\endexercice\endsmc@noexercice \let\corrige\smc@nocorrige \let\endcorrige\endsmc@nocorrige \def\smc@currpart{Exemple}% % \end{macrocode} % On ne mémorise pas la valeur de l'argument optionnel puisqu'il n'y a % plus de répartition entre deux colonnes. % \begin{macrocode} \hspace*{\dimexpr \SquareWidth*3}% \color{ExempleRuleColor}% \vrule width \RuleWidth \hspace*{\dimexpr \SquareWidth-\RuleWidth}% % \end{macrocode} % La composition se fait dans une minipage qui prend l'empagement % réduit moins |\SquareWidth*4|. % \begin{macrocode} \minipage[t]{\dimexpr\linewidth-\SquareWidth*4-\ExtraMarginRight} \smc@cartoucheexemple % \end{macrocode} % Dans l'exemple sur une colonne, on permet au texte de suivre % immédiatement le cartouche. % \begin{macrocode} \space \color{Noir}% \ignorespaces } {% \strut \endminipage \par } % \end{macrocode} % \end{environment} % Pour que les environnements d'exemples soient complets, il faut % également la macro |\correction|. Or, celle-ci sera appelée dans % plusieurs environnements, il faut donc en déclarer \og plusieurs % \fg{}. On commence avec celle qui est interdite (en-dehors des % environnements). % \begin{macrocode} \newcommand*\smc@nocorrection{% \ClassError{sesamanuel}{Vous ne pouvez pas utilisez la macro \string\correction\space ici}{Reportez-vous à la documentation pour l'utilisation de la macro \string\correction.}% } % \end{macrocode} % Vient ensuite la macro pour l'environnement d'exemple sur deux % colonnes. Elle reprend le code de l'environnement exemple mais en % donnant $(1-|\smc@ratio|)$ de l'espace à la deuxième colonne au lieu % de |\smc@ratio| ce qui oblige à un peu plus de travail. % \begin{macrocode} \newcommand*\smc@exemplecorrection{% \endminipage \hspace{\SquareWidth}% \color{ExempleRuleColor}% \vrule width \RuleWidth \hspace*{\dimexpr \SquareWidth-\RuleWidth}% \dimen0=\dimexpr\linewidth-\SquareWidth*6 \minipage[t]{\dimen0-\smc@ratio\dimen0}% \smc@cartouchecorrection \par \color{Noir}% \ignorespaces } % \end{macrocode} % On a ensuite la macro pour l'environnement d'exemple sur une seule % colonne. Le code est beaucoup plus simple puisqu'il consiste à % passer au paragraphe suivant et à afficher le cartouche de % correction. % \begin{macrocode} \newcommand*\smc@one@exemplecorrection{% \par \smc@cartouchecorrection \space } % \end{macrocode} % \begin{environment}{methode} % Il y a quatre environnements methodes. Le premier compose un seul % exercice d'application avec sa correction un peu comme on composait % l'exemple avec sa correction sur deux colonnes. Le deuxième compose % l'exemple et sa correction sur une seule colonne. Le troisième % compose deux exercices et leurs corrections sur deux colonnes. Le % troisième compose autant d'exercices et de correction que l'on veut % sur une véritable double colonne. % % Ces quatre environnements partagent la façon d'afficher un grand % filet épais à gauche avec le titre \og MÉTHODE \fg{} suivi d'un % éventuel sous-titre, ainsi que les cartouches \og Exercice % d'application \fg{} et \og Correction \fg{}. On commence par définir % tous ces éléments communs. % % Le premier est le titre. Il permet un paramètre optionnel donnant le % sous-titre. Ce titre a besoin d'un compteur. Ce dernier est % initialisé à chaque chapitre. % \begin{macrocode} \newcounter{methode}[chapter] \newcommand*\smc@titremethode[1][]{% % \end{macrocode} % On écrit le titre dans le fichier de liste des méthodes % correspondant au thème en cours. % \begin{macrocode} \smc@addtolom{#1}% % \end{macrocode} % On incrémente ensuite le compteur des méthodes avant de construire % le titre proprement dit. % \begin{macrocode} \refstepcounter{methode}% {% \setlength{\fboxsep}{0pt}% \colorbox{MethodeTitleFrameColor}{% \hspace*{\MethodeTitleLeftSpace}% \textcolor{MethodeTitleColor}{% \MethodeTitleFont \vrule width0pt height\ht\strutbox depth 1pt \StringMETHODE\space \themethode }% \hspace*{\MethodeTitleRightSpace}% }% }% \ifx\relax#1\relax \else \hspace{\MethodeSubtitleLeftSpace}% \textcolor{MethodeSubtitleColor}{\MethodeSubtitleFont #1}% \fi \par\vspace{\AfterMethodeTitleVspace} } % \end{macrocode} % La macro qui suit permet de composer \og Exercice d'application % \fg{} dans son cartouche. % \begin{macrocode} \newcommand*\smc@cartoucheexapp{% \begin{pspicture}(0,-\ExAppDepthFrame) (\ExAppWidthFrame,\ExAppHeightFrame) \psframe*[linewidth=0pt,linecolor=ExAppEdgeFrameColor] (0,-\ExAppDepthFrame) (\ExAppWidthFrame,\ExAppHeightFrame) \psframe*[linewidth=0pt,linecolor=ExAppBkgFrameColor] (0mm,-0mm)(\ExAppWidthFrame,\ExAppHeightFrame) \rput[B](\dimexpr\ExAppWidthFrame/2,0){% \ExAppTitleFont \textcolor{ExAppTitleColor}{\StringExApp}% } \end{pspicture}% } % \end{macrocode} % On a presque la même chose pour le cartouche \og Correction \fg{}. % \begin{macrocode} \newcommand*\smc@cartouchecorr{% \begin{pspicture}(0,-\ExAppCorrDepthFrame) (\ExAppCorrWidthFrame,\ExAppCorrHeightFrame) \psframe*[linewidth=0pt,linecolor=ExAppCorrEdgeFrameColor] (0,-\ExAppCorrDepthFrame) (\ExAppCorrWidthFrame,\ExAppCorrHeightFrame) \psframe*[linewidth=0pt,linecolor=ExAppCorrBkgFrameColor] (0mm,-0mm)(\ExAppCorrWidthFrame,\ExAppCorrHeightFrame) \rput[B](\dimexpr\ExAppCorrWidthFrame/2,0){% \ExAppCorrTitleFont \textcolor{ExAppCorrTitleColor}{\StringCorrection}% } \end{pspicture}% } % \end{macrocode} % On peut maintenant écrire le code des quatre environnements % méthode. L'environnement donnant un seul exemple avec sa correction % en vis à vis s'appelle |methode| et sa syntaxe est :\\ % |\begin{methode}[sous-titre]|\\ % \quad texte introductif dans le cadre bleu\\ % |\exercice|\\ % \quad texte de l'exercice d'application\\ % |\correction|\\ % \quad texte de la correction\\ % |\end{methode}| % % On commence par placer l'espace avant le bloc et à redéfinir les % macros |\exercice| et |\correction| ainsi que la liste à puce. % \begin{macrocode} \newenvironment{methode}[1][]{% \par\addvspace{\BeforeMethodeVSpace} \let\itemize\smc@exappitemize \let\enditemize\endsmc@exappitemize \let\colitemize\smc@exappcolitemize \let\endcolitemize\endsmc@exappcolitemize \let\enumerate\smc@exappenumerate \let\endenumerate\endsmc@exappenumerate \let\colenumerate\smc@exappcolenumerate \let\endcolenumerate\endsmc@exappcolenumerate \let\partie\smc@nopartie \let\exercice\smc@exappexercice \let\correction\smc@exappcorrection \let\corrige\smc@nocorrige \let\endcorrige\endsmc@nocorrige \def\smc@currpart{Methode}% % \end{macrocode} % On doit afficher dans l'ordre : % \begin{itemize} % \item un espacement horizontal ; % \item le grand filet gauche ; % \item un espacement horizontal ; % \item une grande minipage qui contiendra tout, à savoir : % \begin{itemize} % \item le titre en le décalant suffisament sur la gauche pour qu'il % écrase le filet gauche, % \item un saut de ligne, % \item un cadre bleu qui touche au filet gauche avec un texte sur % un empagement réduit, % \item une minipage de 1/3 de la place restante hors espacement et % filet, c'est-à-dire empagement - 6|\SquareWidth|-|\RuleWidth|, % \item un espacement horizontal de |\SquareWidth|, % \item un filet vertical de |\RuleWidth| d'épaisseur, % \item un espacement horizontal de |\SquareWidth|, % \item une minipage de 2/3 de la place restante hors espacement et % filet. % \end{itemize} % \end{itemize} % % On commence par l'espace à gauche et le filet gauche principal % \begin{macrocode} \hspace*{\dimexpr\SquareWidth*2}% {% \color{MethodeRuleColor}% \vrule width \SquareWidth }% % \end{macrocode} % Ensuite, on place l'espace et la minipage qui contient tout. % \begin{macrocode} \hspace{\SquareWidth}% \minipage{\dimexpr\linewidth-\SquareWidth*4}% % \end{macrocode} % Affichage du titre (avec son sous-titre éventuel). % \begin{macrocode} \hspace*{\dimexpr-\SquareWidth*2}% \smc@titremethode[#1]% \par % \end{macrocode} % À partir de maintenant, il faut tenir compte du contenu de % l'environnement. Le premier contenu est, potentiellement, le texte % introductif. Pour tester sa présence ou non, on le place dans une % boîte qu'on analysera plus tard. % \begin{macrocode} \begin{lrbox}{\smc@boxa}% \minipage{\dimexpr\linewidth-\SquareWidth*5-\MethodeFrameHSep*2}% \ignorespaces } % \end{macrocode} % En partie terminale, on a uniquement à fermer la dernière minipage % ouverte ainsi que la minipage principale et à passer au paragraphe suivant. % \begin{macrocode} {% \endminipage \endminipage \par } % \end{macrocode} % On définit la macro |\exercice| réelle pour cet environnement. Elle % accepte un argument optionnel indiquant la proportion de % l'empagement occupé par cette partie. % \begin{macrocode} \newcommand*\smc@exappexercice[1][0.4]{% \endminipage \end{lrbox}% \def\smc@ratio{#1}% % \end{macrocode} % Il faut détecter si la boîte est vide. Pour cela, on va se fonder % sur sa hauteur et sa profondeur. Les valeurs pour un texte % totalement vide sont respectivement |2.375pt| et |0pt|. Le % test se fera sur une hauteur totale de plus de |2.4pt|. % \begin{macrocode} \ifdim\dimexpr\ht\smc@boxa+\dp\smc@boxa > 2.4pt % \end{macrocode} % On est dans le cas où il y a une partie introductive. On va placer % le tout dans un |\colorbox| en ayant pris soin de contrôler % totalement les espacements. Les marges gauche et droite de la boîte % sont assurés par des |\hspace*|. Les marges haute et basse par une % manipulation des dimensions de la boîte % \begin{macrocode} {% \setlength{\fboxsep}{0pt}% \ht\smc@boxa=\dimexpr\ht\smc@boxa+\MethodeFrameTopSep \dp\smc@boxa=\dimexpr\dp\smc@boxa+\MethodeFrameBottomSep \hspace*{-\SquareWidth}% \colorbox{MethodeIntroBkgFrameColor}{% \hspace*{\MethodeFrameHSep}% \usebox{\smc@boxa}% \hspace*{\MethodeFrameHSep}% }% \par\vspace{5mm} }% \fi % \end{macrocode} % On ouvre maintenant la minipage pour l'exercice d'application. Avant % de regarder son contenu, on place le cartouche. La largeur de la % minipage est de 0.4 (par défaut) de la place restante. Comme on est % dans une minipage, cela donne % |(\linewidth-2*\SquareWidth-\RuleWidth)*\smc@ratio| % \begin{macrocode} \minipage[t]{\smc@ratio\dimexpr\linewidth-\SquareWidth*2-\RuleWidth}% \smc@cartoucheexapp \par } % \end{macrocode} % On définit la macro |\correction| réelle pour cet % environnement. Elle commence à fermer la minipage précédemment % ouverte avant de passer à la ligne et d'ouvrir sa propre % minipage. Entre les deux minipages, il y a les espacements et le % filet. % \begin{macrocode} \newcommand*\smc@exappcorrection{% \endminipage \hspace{\SquareWidth}% {% \color{MethodeRuleColor}% \vrule width \RuleWidth }% \hspace{\SquareWidth}% % \end{macrocode} % La largeur de la minipage est la même que celle pour l'énoncé de % l'exercice sauf que c'est |1-\smc@ratio| au lieu de |\smc@ratio|. Cela % oblige à un calcul externe. % \begin{macrocode} \dimen0=\dimexpr\linewidth-\SquareWidth*2-\RuleWidth \minipage[t]{\dimen0-\smc@ratio\dimen0}% \smc@cartouchecorr \par } % \end{macrocode} % \end{environment} % \begin{environment}{methode*1} % Le deuxième environnement méthode fonctionne comme le premier mais % compose les exercices et les corrections sur une seule colonne. La % syntaxe de cet environnement est :\\ % |\begin{methode*1}[sous-titre]|\\ % \quad texte introductif dans le cadre bleu\\ % |\exercice|\\ % \quad texte de l'exercice d'application\\ % |\correction|\\ % \quad texte de la correction\\ % |\end{methode*1}|\\ % En sachant qu'en fait, on peut répéter autant de fois que l'on veut % les exercices et le corrections. % \begin{macrocode} \newenvironment{methode*1}[1][]{% \par\addvspace{\BeforeMethodeVSpace} % \end{macrocode} % Seules les deux lignes suivantes diffèrent. % \begin{macrocode} \let\itemize\smc@exappitemize \let\enditemize\endsmc@exappitemize \let\colitemize\smc@exappcolitemize \let\endcolitemize\endsmc@exappcolitemize \let\enumerate\smc@exappenumerate \let\endenumerate\endsmc@exappenumerate \let\colenumerate\smc@exappcolenumerate \let\endcolenumerate\endsmc@exappcolenumerate \let\partie\smc@nopartie \let\exercice\smc@one@exappexercice \let\correction\smc@one@exappcorrection \let\corrige\smc@nocorrige \let\endcorrige\endsmc@nocorrige \def\smc@currpart{Methode}% \hspace*{\dimexpr\SquareWidth*2}% {% \color{MethodeRuleColor}% \vrule width \SquareWidth }% \hspace{\SquareWidth}% \minipage{\dimexpr\linewidth-\SquareWidth*4}% \hspace*{\dimexpr-\SquareWidth*2}% \smc@titremethode[#1]% \par \begin{lrbox}{\smc@boxa}% \minipage{\dimexpr\linewidth-\SquareWidth*5-\MethodeFrameHSep*2}% \ignorespaces } {% \end{changemargin} \endminipage \par } % \end{macrocode} % On définit maintenant les macros qui deviendront les macros % |\exercice| et |\correction| de l'environnement |methode*1|. % % On commence par le code de |\exercice|. Le début du code est % similaire à celui de |\smc@exappexercice|, on indiquera uniquement % les différences. Cela commence immédiatement avec une absence de % paramètre optionnel puisqu'il n'y a qu'une seule colonne. En % réalité, on acceptera un argument optionnel sans utilité (cela % pourra servir lors de copier-coller). % \begin{macrocode} \newcommand*\smc@one@exappexercice[1][]{% \endminipage \end{lrbox}% \ifdim\dimexpr\ht\smc@boxa+\dp\smc@boxa > 2.4pt {% \setlength{\fboxsep}{0pt}% \ht\smc@boxa=\dimexpr\ht\smc@boxa+\MethodeFrameTopSep \dp\smc@boxa=\dimexpr\dp\smc@boxa+\MethodeFrameBottomSep \hspace*{-\SquareWidth}% \colorbox{MethodeIntroBkgFrameColor}{% \hspace*{\MethodeFrameHSep}% \usebox{\smc@boxa}% \hspace*{\MethodeFrameHSep}% }% \par\vspace{5mm} }% \fi % \end{macrocode} % On redéfinit la macro |\exercice| pour permettre plusieurs exercices % dans le même environnement. % \begin{macrocode} \let\exercice\smc@one@@exappexercice % \end{macrocode} % Le code est maintenant beaucoup plus simple : il n'y a pas de début % de minipage. On ne fait que composer le cartouche avec son espace % après. Cela dit on doit revenir à une composition dans un empagement % réduit. % \begin{macrocode} \begin{changemargin}{0mm}{\dimexpr\ExtraMarginRight}% \smc@cartoucheexapp \hspace{\AfterCartoucheHSpace}% } % \end{macrocode} % Le code pour |\correction| est encore plus simple, il faut juste % passer au paragraphe suivant et afficher le cartouche avec son % espace après. % \begin{macrocode} \newcommand*\smc@one@exappcorrection{% \par\vspace{\AfterExAppMethodeVSpace} \smc@cartouchecorr \hspace{\AfterCartoucheHSpace}% } % \end{macrocode} % Les autres exercices sont comme |\correction| : très simples ! % \begin{macrocode} \newcommand\smc@one@@exappexercice[1][]{% \par\vspace{\AfterExAppMethodeVSpace} \smc@cartoucheexapp \hspace{\AfterCartoucheHSpace}% } % \end{macrocode} % \end{environment} % \begin{environment}{methode*2*2} % Le troisième environnement méthode fonctionne comme les deux % premiers mais compose deux exercices d'application avec leurs % corrections sur deux colonnes séparées par un filet aussi large que % le filet gauche. % % La syntaxe de cet environnement est :\\ % |\begin{methode*2*2}[sous-titre]|\\ % \quad texte introductif dans le cadre bleu\\ % |\exercice|\\ % \quad texte du 1\ier{} exercice d'application\\ % |\correction|\\ % \quad texte de la 1\iere{} correction\\ % |\exercice|\\ % \quad texte du 2\ieme{} exercice d'application\\ % |\correction|\\ % \quad texte de la 2\ieme{} correction\\ % |\end{methode*2}| % % Le code est quasiment identique à l'environnement |methode|, seule % les assignations des macros |\exercice| et |\correction| sont % différentes. % \begin{macrocode} \newenvironment{methode*2*2}[1][]{% \par\addvspace{\BeforeMethodeVSpace} % \end{macrocode} % Les deux lignes suivantes sont la seule différence (appels de % |\smc@@xxx| au lieu de |\smc@xxx|). % \begin{macrocode} \let\itemize\smc@exappitemize \let\enditemize\endsmc@exappitemize \let\colitemize\smc@exappcolitemize \let\endcolitemize\endsmc@exappcolitemize \let\enumerate\smc@exappenumerate \let\endenumerate\endsmc@exappenumerate \let\colenumerate\smc@exappcolenumerate \let\endcolenumerate\endsmc@exappcolenumerate \let\partie\smc@nopartie \let\exercice\smc@@exappexercice \let\correction\smc@@exappcorrection \let\corrige\smc@nocorrige \let\endcorrige\endsmc@nocorrige \def\smc@currpart{Methode}% \hspace*{\dimexpr\SquareWidth*2}% {% \color{MethodeRuleColor}% \vrule width \SquareWidth }% \hspace{\SquareWidth}% \minipage{\dimexpr\linewidth-\SquareWidth*4}% \hspace*{\dimexpr-\SquareWidth*2}% \smc@titremethode[#1]% \par \begin{lrbox}{\smc@boxa}% \minipage{\dimexpr\linewidth-\SquareWidth*5-\MethodeFrameHSep*2}% \ignorespaces } {% \endminipage \endminipage \par } % \end{macrocode} % Il faut maintenant indiquer le code des macros qui deviendront les % |\exercice| et |\correction| de l'environnement |methode*2*2|. % % On commence par le code de |\exercice|. Le code est très similaire % à celui de |\smc@exappexercice|, on indiquera uniquement les % différences. Cela commence immédiatement avec la valeur par défaut % de la proportion de l'empagement pris : ce sera 0.5. % \begin{macrocode} \newcommand*\smc@@exappexercice[1][0.5]{% \endminipage \end{lrbox}% \def\smc@ratio{#1}% \ifdim\dimexpr\ht\smc@boxa+\dp\smc@boxa > 2.4pt {% \setlength{\fboxsep}{0pt}% \ht\smc@boxa=\dimexpr\ht\smc@boxa+\MethodeFrameTopSep \dp\smc@boxa=\dimexpr\dp\smc@boxa+\MethodeFrameBottomSep \hspace*{-\SquareWidth}% \colorbox{MethodeIntroBkgFrameColor}{% \hspace*{\MethodeFrameHSep}% \usebox{\smc@boxa}% \hspace*{\MethodeFrameHSep}% }% \par\vspace{5mm} }% \fi % \end{macrocode} % La différence la plus importante et que le prochain appel de % |\exercice| n'aura pas du tout le même rôle et pour cela, on modifie % la signification de cette macro. % \begin{macrocode} \let\exercice\smc@@@exappexercice % \end{macrocode} % La largeur de la minipage n'est pas calculée exactement de la même % façon et il n'y a pas de saut de paragraphe après le cartouche % (seulement un espace). % \begin{macrocode} \minipage[t]{\smc@ratio\dimexpr\linewidth-\SquareWidth*3}% \smc@cartoucheexapp \hspace{\AfterCartoucheHSpace}% } % \end{macrocode} % La macro de correction est beaucoup plus simple (encore que là % aussi, il va falloir en prévoir deux). Elle ne fait que passer à la % ligne, afficher le cartouche et l'espace horizontale. % \begin{macrocode} \newcommand\smc@@exappcorrection{% \par\vspace{\AfterExAppMethodeVSpace} \smc@cartouchecorr \hspace{\AfterCartoucheHSpace}% % \end{macrocode} % En revanche, il faut prévoir que le prochain appel à |\correction| % ne sera pas identique. D'où la redéfinition suivante. % \begin{macrocode} \let\correction\smc@@@exappcorrection } % \end{macrocode} % On arrive maintenant dans l'appel de |\exercice| au moment où on % commence la colonne de droite. % \begin{macrocode} \newcommand\smc@@@exappexercice{% % \end{macrocode} % On commence par fermer la minipage de la colonne de gauche puis à % placer l'espacement, le filet large et l'espacement. % \begin{macrocode} \endminipage \hspace{\SquareWidth}% {% \color{MethodeRuleColor}% \vrule width \SquareWidth }% \hspace{\SquareWidth}% % \end{macrocode} % On peut alors ouvrir la deuxième minipage (colonne de droite). Il % faut calculer sa largeur avec le ratio |1-\smc@ratio| % \begin{macrocode} \dimen0=\dimexpr\linewidth-\SquareWidth*3 \minipage[t]{\dimen0-\smc@ratio\dimen0}% % \end{macrocode} % On termine comme précédemment en affichant le cartouche et % l'espace. % \begin{macrocode} \smc@cartoucheexapp \hspace{\AfterCartoucheHSpace}% } % \end{macrocode} % Le code de la macro |\correction| de la deuxième colonne est % exactement celle de la première mais sans avoir besoin de redéfinir % cette macro. % \begin{macrocode} \newcommand\smc@@@exappcorrection{% \par\vspace{\AfterExAppMethodeVSpace} \smc@cartouchecorr \hspace{\AfterCartoucheHSpace}% } % \end{macrocode} % \end{environment} % \begin{environment}{methode*2} % Le quatrième environnement méthode fonctionne comme les trois % premiers au niveau de la syntaxe mais compose les deux colonnes en % mode effectivement double colonne. C'est-à-dire que ce n'est pas le % début de la correction qui déterminera le début de la colonne de % droite. % % La syntaxe de cet environnement est :\\ % |\begin{methode*2}[sous-titre]|\\ % \quad texte introductif dans le cadre bleu\\ % |\exercice|\\ % \quad texte du 1\ier{} exercice d'application\\ % |\correction|\\ % \quad texte de la 1\iere{} correction\\ % |\end{methode*2}| % % Tout le début du code ne change pas (sauf pour la définition de % |\exercice|. % \begin{macrocode} \newenvironment{methode*2}[1][]{% \par\addvspace{\BeforeMethodeVSpace} \let\itemize\smc@exappitemize \let\enditemize\endsmc@exappitemize \let\colitemize\smc@exappcolitemize \let\endcolitemize\endsmc@exappcolitemize \let\enumerate\smc@exappenumerate \let\endenumerate\endsmc@exappenumerate \let\colenumerate\smc@exappcolenumerate \let\endcolenumerate\endsmc@exappcolenumerate \let\partie\smc@nopartie \let\exercice\smc@@@@exappexercice % \end{macrocode} % La définition précédente de |\correction| est celle qui convient ici. % \begin{macrocode} \let\correction\smc@@@exappcorrection \let\corrige\smc@nocorrige \let\endcorrige\endsmc@nocorrige \def\smc@currpart{Methode}% \hspace*{\dimexpr\SquareWidth*2}% {% \color{MethodeRuleColor}% \vrule width \SquareWidth }% \hspace{\SquareWidth}% \minipage{\dimexpr\linewidth-\SquareWidth*4}% \hspace*{\dimexpr-\SquareWidth*2}% \smc@titremethode[#1]% \par \begin{lrbox}{\smc@boxa}% \minipage{\dimexpr\linewidth-\SquareWidth*5-\MethodeFrameHSep*2}% \ignorespaces } {% % \end{macrocode} % En fin d'environnement, on termine la boîte verticale. % \begin{macrocode} \egroup % \end{macrocode} % On coupe cette boîte en deux boîtes de hauteur approximativement % égale. Et on place ces deux boîtes côte à côte après avoir restauré % l'empagement. % \begin{macrocode} \dimen0=\dimexpr (\ht\smc@boxa+\dp\smc@boxa)/2 \setbox\smc@boxb = \vsplit\smc@boxa to \dimen0 % \end{macrocode} % On restaure alors l'empagement et on affiche les deux boîtes côte à % côte. % \begin{macrocode} \hsize \smc@hsize \linewidth \smc@linewidth \usebox{\smc@boxb} \hspace{\SquareWidth}% {% \color{MethodeRuleColor}% \vrule width \RuleWidth }% \hspace{\SquareWidth}% \usebox{\smc@boxa} \endminipage \par } % \end{macrocode} % On définit maintenant le code pour la macro |\exercice| de % l'environnement |methode*1|. Le début du code sert à gérer % l'éventuel texte préliminaire et ne présente pas de différence avec % les codes des autres environnements de méthode. % \begin{macrocode} \newcommand*\smc@@@@exappexercice{% \endminipage \end{lrbox}% \ifdim\dimexpr\ht\smc@boxa+\dp\smc@boxa > 2.4pt {% \setlength{\fboxsep}{0pt}% \ht\smc@boxa=\dimexpr\ht\smc@boxa+\MethodeFrameTopSep \dp\smc@boxa=\dimexpr\dp\smc@boxa+\MethodeFrameBottomSep \hspace*{-\SquareWidth}% \colorbox{MethodeIntroBkgFrameColor}{% \hspace*{\MethodeFrameHSep}% \usebox{\smc@boxa}% \hspace*{\MethodeFrameHSep}% }% \par\vspace{5mm} }% \fi % \end{macrocode} % En revanche, la suite est nettement différente. Il va falloir % remplir une boîte verticale avec le reste du corps de % l'environnement (en commençant par le cartouche exercice). Cette % boîte verticale se construit avec un |\hsize| et |\linewidth| % particuliers. On sauvegarde donc leurs valeurs. % \begin{macrocode} \edef\smc@hsize{\the\hsize}% \edef\smc@linewidth{\the\linewidth}% \hsize = \dimexpr (\linewidth-\SquareWidth*3-\RuleWidth)/2 \linewidth = \hsize \setbox\smc@boxa = \vbox\bgroup % \end{macrocode} % On commence par placer le cartouche % \begin{macrocode} \smc@cartoucheexapp \hspace{\AfterCartoucheHSpace}% } % \end{macrocode} % \end{environment} % \begin{environment}{commentaire} % L'environnement |commentaire| permet d'avoir un texte libre ayant le % même empagement que le texte de définition. % \begin{macrocode} \newenvironment{commentaire}{% \let\itemize\smc@commentaireitemize \let\enditemize\endsmc@commentaireitemize \let\colitemize\smc@commentairecolitemize \let\endcolitemize\endsmc@commentairecolitemize \let\enumerate\smc@commentaireenumerate \let\endenumerate\endsmc@commentaireenumerate \let\colenumerate\smc@commentairecolenumerate \let\endcolenumerate\endsmc@commentairecolenumerate \let\exercice\smc@noexercice \let\endexercice\endsmc@noexercice \let\corrige\smc@nocorrige \let\endcorrige\endsmc@nocorrige \begin{changemargin}{\dimexpr\SquareWidth*4} {\dimexpr\ExtraMarginRight+\SquareWidth} } {\end{changemargin}} % \end{macrocode} % \end{environment} % \subsection{Exercices de base} % \begin{macro}{\exercicesbase} % Cette macro introduit la partie \og Exercices de base \fg{} dans un % chapitre. Elle autorise l'utilisation des listes et des macros % |\exercice| et |\correction| en dehors de tout environnement ainsi % que de la macro |\partie|. % \begin{macrocode} \newcommand*\exercicesbase{% \clearpage \pagestyle{exercicesbase} \addtocontents{cor}{\protect\smc@corrigeexercicesbase}% \let\itemize\smc@exerciceitemize \let\enditemize\endsmc@exerciceitemize \let\colitemize\smc@exercicecolitemize \let\endcolitemize\endsmc@exercicecolitemize \let\enumerate\smc@exerciceenumerate \let\endenumerate\endsmc@exerciceenumerate \let\colenumerate\smc@exercicecolenumerate \let\endcolenumerate\endsmc@exercicecolenumerate \let\exercice\smc@exobaseexercice \let\endexercice\endsmc@exobaseexercice \let\corrige\smc@exobasecorrige \let\endcorrige\endsmc@exobasecorrige \let\correction\smc@nocorrection \let\partie\smc@exercice@partie \def\smc@currpart{ExoBase}% } % \end{macrocode} % \end{macro} % \begin{environment}{colonne*exercice} % Il faut un environnement particulier pour composer les exercices sur % deux colonnes. Cet environnement sera le même pour les exercices de % base et les exercices d'approfondissement. % \begin{macrocode} \newenvironment{colonne*exercice}{% % \end{macrocode} % Cet environnement ne fait que composer le matériel en double colonne % avec un séparation faite d'un filet vertical et de deux espacements % horizontaux d'un |\Squarewidth| chacun. % \begin{macrocode} \columnsep \dimexpr \SquareWidth*2 \columnseprule \RuleWidth \def\columnseprulecolor{\color{ExerciceColumnRuleColor}}% \begin{multicols}{2}% \ignorespaces } {\end{multicols}} % \end{macrocode} % \end{environment} % \begin{macro}{\serie} % Cette macro permet de composer un titre pour un groupement % d'exercices. L'argument est le titre. % \begin{macrocode} \newcommand*\serie[1]{% \par\addvspace{\BeforeExercicesTitleVSpace} \begin{pspicture}(0,-\SquareWidth) (\linewidth,\dimexpr\SquareWidth*2) \psframe*[linewidth=0pt,linecolor=ExercicesTitleHRuleColor] (0,-\SquareWidth)(\linewidth,0) \psframe*[linewidth=0pt,linecolor=ExercicesTitleVRuleColor] (0,-\SquareWidth)(\SquareWidth,\dimexpr \SquareWidth*2) \psframe*[linewidth=0pt,linecolor=ExercicesTitleSquareColor] (0,-\SquareWidth)(\SquareWidth,0) \rput[Bl](\dimexpr \SquareWidth+\ExercicesTitleHSep, \ExercicesTitleVSep) {\ExercicesTitleFont \textcolor{ExercicesTitleColor}{#1}} \end{pspicture}% } % \end{macrocode} % \end{macro} % \begin{macro}{\exercice} % Chaque exercice est indiqué par la macro |\exercice|. Celle-ci admet % deux arguments optionnels qui donnent dans l'ordre le titre et un % logo pour l'exercice. Pour gérer les endroits où on peut ou non % utiliser la macro |\exercice|. On procède en deux temps. On définit % une macro |\smc@exercice| et une macro |\smc@noexercice|. % % La macro |\smc@noexercice| est très simple : elle ne fait que lever % une erreur. % \begin{macrocode} \newcommand\smc@noexercice{% \ClassError{sesamanuel}{Vous ne pouvez pas utiliser la macro \string\exercice\space ici}{Reportez-vous à la documentation pour l'utilisation de la macro \string\exercice.} } % \end{macrocode} % Par défaut, ce sont les macros |\smc@noexercice| et % |\smc@nocorrection| qui sont actives. % \begin{macrocode} \let\exercice\smc@noexercice \let\correction\smc@nocorrection % \end{macrocode} % On définit maintenant la macro |\smc@exobaseexercice| qui indiquera la % façon de composer les exercices dans la partie dédiée aux % exercices d'entrainement. % % Cette macro a deux arguments optionnels. Le premier est le titre, le % second est le logo. Elle propose également une version étoilée qui % indique que la correction sera affichée dans l'ouvrage. % \begin{macrocode} \newif\ifsmc@exercicecorrige \newcounter{exercice}[chapter] % \end{macrocode} % On regarde s'il y a ou non une étoile. Selon le cas, on met le % booléen |\ifsmc@exercicecorrige| à la bonne valeur. % \begin{macrocode} \newcommand*\smc@exobaseexercice{% \@ifstar {% \smc@exercicecorrigetrue \smc@@exercice } {% \smc@exercicecorrigefalse \smc@@exercice } } % \end{macrocode} % On lit ensuite le premier argument optionnel % \begin{macrocode} \newcommand*\smc@@exercice[1][]{% % \end{macrocode} % On sauvegarde le texte du titre est on appelle la macro auxiliaire % pour lire le deuxième argument optionnel. % \begin{macrocode} \def\smc@exercicetitle{#1}% \smc@@@exercice } \newcommand*\smc@@@exercice[1][]{% % \end{macrocode} % On commence par passer au paragraphe suivant et réinitialiser le compteur % partie. % \begin{macrocode} \par\addvspace{\BeforeExerciceVSpace} \setcounter{partie}{0} % \end{macrocode} % La présence d'un logo va faire qu'on ne composera pas le titre (ou % le texte) de la même façon. S'il y a un logo, on utilise la commande % |\parpic| pour habiller le logo. Sinon on ne fait rien de spécial. % \begin{macrocode} \@ifnotmtarg{#1}{% \setbox0=\hbox{#1}% \parpic[r]{\makebox[\wd0][l]{{#1}}} }% % \end{macrocode} % On compose le numéro de l'exercice. La couleur du cadre dépend du % fait que l'exercice est corrigé ou non. % \begin{macrocode} \refstepcounter{exercice}% \begin{pspicture}(0,0)(\ExerciceNumFrameWidth,\ExerciceNumFrameHeight) \ifsmc@exercicecorrige \psframe*[linewidth=0pt, linecolor=ExerciceCorrigeNumFrameColor] (0,-\ExerciceNumFrameDepth) (\ExerciceNumFrameWidth,\ExerciceNumFrameHeight) \else \psframe*[linewidth=0pt, linecolor=ExerciceNumFrameColor] (0,-\ExerciceNumFrameDepth) (\ExerciceNumFrameWidth,\ExerciceNumFrameHeight) \fi \rput[B](\dimexpr\ExerciceNumFrameWidth/2,0){% \textcolor{ExerciceNumColor}{\ExerciceNumFont \theexercice}% } \end{pspicture}% % \end{macrocode} % Y a-t-il un titre d'exercice ? % \begin{macrocode} \ifx\smc@exercicetitle\empty % \end{macrocode} % S'il n'y a pas de titre, on commence le texte de l'exercice (après % un certain espacement horizontal). % \begin{macrocode} \hspace{\ExerciceTextHSep}% \else % \end{macrocode} % S'il y a un titre, on le compose et on passe au paragraphe suivant. % \begin{macrocode} \hspace{\ExerciceTextHSep}% \textcolor{ExerciceTitleColor} {\ExerciceTitleFont \smc@exercicetitle}% \par\nobreak \fi } % \end{macrocode} % En fait, on utilisera plutôt la forme d'environnement pour entrer % les exercices. Le code terminal ne fait que placer un |\par| (cela % peut être utile pour activer un éventuel |\centering| en fin de % code. % \begin{macrocode} \def\endsmc@exercice{\par} % \end{macrocode} % Pour la forme en environnement, on doit définir l'environnement % |exercice*|. Cet environnement fait le travail initial de la macro % étoilée et revient immédiatement sur la partie commune. % \begin{macrocode} \newenvironment{exercice*} {% \smc@exercicecorrigetrue \smc@@exercice } {\par} % \end{macrocode} % On définit l'environnement |smc@exoapprexercice| comme étant un % alias de |smc@exobaseexercice|. % \begin{macrocode} \let\smc@exoapprexercice\smc@exobaseexercice \let\endsmc@exoapprexercice\endsmc@exobaseexercice % \end{macrocode} % \end{macro} % \begin{environment}{corrige} % L'environnement |corrige| va enregistrer la correction d'un exercice % dont l'énoncé vient d'être fourni. Le principe général va être de % sauvegarder les corrigés dans des fichiers |.tex| séparés. % % \begin{macro}{\killienc} % Pour utiliser \package{fancyvrb} même en UTF-8, il faut désactiver % tous les codes de caractère supérieurs à 127. La commande % |\killienc| va automatiquement construire la suite de commande :\\ % |\catcode=12|\\ % où || ira de 128 à 255. % \begin{macrocode} \newcommand\killienc{} \count@128 \@whilenum\count@<\@cclvi\do{% \edef\killienc{\killienc\catcode\the\count@=12}% \advance\count@\@ne} % \end{macrocode} % \end{macro} % La macro |\killienc| étant en place, on peut définir l'environnement % |corrige|. En réalité, comme pour plusieurs éléments de la classe, % il y aura plusieurs types d'environnement |corrige|, la sélection se % faisant au moment des besoins. On commence par définir % l'environnement qui indique qu'on n'a pas le droit d'utiliser cet % environnement ! % \begin{macrocode} \newenvironment{smc@nocorrige} {% \ClassError{sesamanuel}{Il est interdit d'utiliser corrige ici} {Consultez la documentation pour plus de renseignements.}% } {} % \end{macrocode} % En réalité, il y a de multiples environnements qui auront pour nom % |corrige|. On définit d'abord celui pour l'auto-évaluation. % \begin{macrocode} \newenvironment{smc@AEcorrige} {% % \end{macrocode} % On écrit dans le fichier de correction général l'ordre de chargement % du corrigé en cours. % \begin{macrocode} \addtocontents{cor}{% \protect\inputcor{\smc@currpart}{\smc@thema@initcap\thechapter} {\the\c@AEexo}% }% % \end{macrocode} % On utilise ensuite |killienc| pour tuer les caractères actifs. % \begin{macrocode} \killienc % \end{macrocode} % Vient ensuite la commande magique du package \package{fancyvrb} pour % permettre de créer soi-même des environnements verbatim. % \begin{macrocode} \VerbatimEnvironment % \end{macrocode} % Attention, cette ligne doit être la dernière et il ne doit même pas % y avoir de saut de ligne avant l'accolade fermante de la partie % initiale de l'environnent. % \begin{macrocode} \begin{VerbatimOut}{\PrefixeCorrection corr-\smc@currpart-\smc@thema@initcap\thechapter-\the\c@AEexo}} {% \end{VerbatimOut} } % \end{macrocode} % Le corrigé pour les exercices de base se comporte de la même façon % (sauf pour le compteur d'exercice). % \begin{macrocode} \newenvironment{smc@exobasecorrige} {% \addtocontents{cor}{% \protect\inputcor{\smc@currpart}{\smc@thema@initcap\thechapter} {\the\c@exercice}% }% \killienc \VerbatimEnvironment \begin{VerbatimOut}{\PrefixeCorrection corr-\smc@currpart-\smc@thema@initcap\thechapter-\the\c@exercice}} {% \end{VerbatimOut} } % \end{macrocode} % Un certain nombre d'environnements de correction se comportent % exactement comme le précédent. On les définit en tant qu'alias. % \begin{macrocode} \let\smc@exoapprcorrige\smc@exobasecorrige \let\endsmc@exoapprcorrige\endsmc@exobasecorrige \let\smc@recreationcorrige\smc@exobasecorrige \let\endsmc@recreationcorrige\endsmc@exobasecorrige \let\smc@QCMcorrige\smc@exobasecorrige \let\endsmc@QCMcorrige\endsmc@exobasecorrige \let\smc@librecorrige\smc@exobasecorrige \let\endsmc@librecorrige\endsmc@exobasecorrige % \end{macrocode} % La correction des énigmes ne peut pas se faire strictement de la % même façon puisqu'il n'y a pas de numéro d'exercice. C'est le seul % point qui diffère. % \begin{macrocode} \newenvironment{smc@enigmecorrige} {% \addtocontents{cor}{% \protect\inputcor{\smc@currpart}{\smc@thema@initcap\thechapter}{}% }% \killienc \VerbatimEnvironment \begin{VerbatimOut}{\PrefixeCorrection corr-\smc@currpart-\smc@thema@initcap\thechapter}} {% \end{VerbatimOut} } % \end{macrocode} % La correction des TP se fait avec le numéro de TP % \begin{macrocode} \newenvironment{smc@TPcorrige} {% \addtocontents{cor}{% \protect\inputcor{\smc@currpart}{\smc@thema@initcap\thechapter} {\the\c@activite}% }% \killienc \VerbatimEnvironment \begin{VerbatimOut}{\PrefixeCorrection corr-\smc@currpart-\smc@thema@initcap\thechapter-\the\c@activite}} {% \end{VerbatimOut} } % \end{macrocode} % \end{environment} % \subsection{Exercices d'approfondissement} % \begin{macro}{\exercicesappr} % Cette macro introduit la partie \og Exercices d'approfondissement % \fg{} dans un chapitre. Elle autorise l'utilisation des listes et % des macros |\exercice| et |\correction| en dehors de tout % environnement. % \begin{macrocode} \newcommand*\exercicesappr{% \clearpage \pagestyle{exercicesappr} \addtocontents{cor}{\protect\smc@corrigeexercicesappr}% \let\itemize\smc@exerciceitemize \let\enditemize\endsmc@exerciceitemize \let\colitemize\smc@exercicecolitemize \let\endcolitemize\endsmc@exercicecolitemize \let\enumerate\smc@exerciceenumerate \let\endenumerate\endsmc@exerciceenumerate \let\colenumerate\smc@exercicecolenumerate \let\endcolenumerate\endsmc@exercicecolenumerate \let\exercice\smc@exoapprexercice \let\endexercice\endsmc@exoapprexercice \let\corrige\smc@exoapprcorrige \let\endcorrige\endsmc@exoapprcorrige \let\correction\smc@nocorrection \let\partie\smc@exercice@partie \def\smc@currpart{ExoAppr}% } % \end{macrocode} % \end{macro} % \begin{macro}{\recreation} % Cette macro introduit la partie \og Récréation, énigme \fg{} avec % son bandeau. % \begin{macrocode} \newcommand*\recreation{% \par\addvspace{\BeforeRecreationVSpace} \begin{pspicture}(0,0)(\linewidth,\dimexpr\SquareWidth*3) \psframe*[linewidth=0pt,linecolor=RecreationHeadFrame5Color] (0,0)(\linewidth,\dimexpr\SquareWidth*3) \psset{fillstyle=solid} \smc@antidiagonal(0mm,0mm){RecreationHeadFrame} \rput[Bl](\dimexpr \SquareWidth*4,\SquareWidth){% \textcolor{RecreationHeadFrame0Color}{\RecreationFont \StringRecreation}% } \psset{linewidth=0pt} \smc@putsquare(32,2){J1} \smc@putsquare(33,0){H4} \smc@putsquare(34,1){H2} \smc@putsquare(37,1){F3} \smc@putsquare(39,0){H2} \smc@putsquare(42,2){J2} \smc@putsquare(46,1){H4} \end{pspicture} \par\addvspace{\AfterRecreationVSpace} } % \end{macrocode} % La macro suivante permet de limiter le code dans la macro % précédente. Elle place un carré de la couleur indiquée en troisième % argument à la position indiquée en unité |\SquareWidth| % \begin{macrocode} \def\smc@putsquare(#1,#2)#3{% \rput(\dimexpr \SquareWidth*#1,\dimexpr \SquareWidth*#2) {\psframe*[linecolor=#3](0,0)(\SquareWidth,\SquareWidth)} \ignorespaces } % \end{macrocode} % \end{macro} % \begin{macro}{\Recreation} % Cette macro propose une présentation avec les en-tête de page. Elle % va fonctionner comme toutes les autres commandes de parties. % \begin{macrocode} \newcommand*\Recreation{% \clearpage % \end{macrocode} % On modifie l'en-tête de page. % \begin{macrocode} \pagestyle{recreation} % \end{macrocode} % Contrairement aux autres parties, on ne redéfinit pas les listes et % les exercices. Il s'agit en fait d'une parti fictive qui va prendre % les valeurs de la partie en cours. On ne va même pas redéfinir la % macro |\smc@currpart|. % \begin{macrocode} } % \end{macrocode} % \end{macro} % \subsection{Je teste mes connaissances} % \begin{macro}{\connaissances} % Cette macro introduit la partie \og Je teste mes connaissances \fg{} % dans un chapitre. Elle ne se comporte pas comme les autres parties % de chapitre. Elle interdit l'utilisation des listes et des macros % |\exercice| et |\correction| en dehors des environnements. % \begin{macrocode} \newcommand*\connaissances{% \clearpage % \end{macrocode} % Les en-têtes et pieds de page sont spéciales (voire définition de % |\ps@connaissances| et |\ps@firstconnaissances|). % \begin{macrocode} \pagestyle{connaissances} \thispagestyle{firstconnaissances} \addtocontents{cor}{\protect\smc@corrigeconnaissances}% \let\itemize\smc@noitemize \let\enditemize\endsmc@noitemize \let\colitemize\smc@nocolitemize \let\endcolitemize\endsmc@nocolitemize \let\enumerate\smc@noenumerate \let\endenumerate\endsmc@noenumerate \let\colenumerate\smc@nocolenumerate \let\endcolenumerate\endsmc@nocolenumerate % \end{macrocode} % Les exercices ne seront accessibles qu'une fois la macro % |\QCMautoevaluation| appelée. Avant cette macro, il faut % effectivement que les exercices soient interdits. % \begin{macrocode} \let\exercice\smc@noexercice \let\endexercice\endsmc@noexercice \let\corrige\smc@nocorrige \let\endcorrige\endsmc@nocorrige \let\correction\smc@nocorrection \let\partie\smc@nopartie \def\smc@currpart{Connaissances}% } % \end{macrocode} % \end{macro} % \begin{environment}{acquis} % L'environnement |acquis| permet de composer la liste des capacités % que l'élève doit avoir en fin de chapitre. Il se compose d'une % phrase introductive suivi d'un cadre en double colonne où on compose % la liste des capacités attendues. % \begin{macrocode} \newenvironment{acquis}{% \par % \end{macrocode} % On commence par redéfinir les listes à puces. En théorie, cela ne % sert à rien mais on va également définir les listes numérotées. % \begin{macrocode} \let\itemize\smc@acquisitemize \let\enditemize\endsmc@acquisitemize \let\colitemize\smc@acquiscolitemize \let\endcolitemize\endsmc@acquiscolitemize \let\enumerate\smc@acquisenumerate \let\endenumerate\endsmc@acquisenumerate \let\colenumerate\smc@acquiscolenumerate \let\endcolenumerate\endsmc@acquiscolenumerate \let\exercice\smc@noexercice \let\endexercice\endsmc@noexercice \let\corrige\smc@nocorrige \let\endcorrige\endsmc@nocorrige \let\correction\smc@nocorrection \let\partie\smc@nopartie \def\smc@currpart{Acquis}% % \end{macrocode} % Titre du cadre. % \begin{macrocode} {% \AcquisTitleFont \textcolor{AcquisTitleColor}{\StringAcquisTitle}% \par\vspace{\AcquisTitleVSpace}% }% % \end{macrocode} % Cadre lui même. L'environnement \environ{multicols} oblige à ajouter % un espace vertical négatif. % \begin{macrocode} \smc@cadre{AcquisBkgColor} \vspace*{-4.5pt} \begin{multicols}{2} \AcquisTextFont } {% \end{multicols}% \endsmc@cadre \par } % \end{macrocode} % \end{environment} % \begin{macro}{\QCMautoevaluation} % Macro d'introduction à la partie des QCM. Cela consiste à afficher % le cartouche avec le texte \og QCM d'auto-évaluation \fg{} ainsi % qu'un éventuel texte en gras au-dessous (passé en paramètre). % \begin{macrocode} \newcommand*\QCMautoevaluation[1]{% \def\smc@currpart{QCM}% \par\addvspace{\BeforeQCMAEVSpace} % \end{macrocode} % Le cadre est placé dans une minipage de la bonne largeur. On % supprime tous les espacements entre les bords du cadre et on % redéfinit |\FrameArc| pour que les arrondis du cadre se définissent % avec 10/2 pour épouser les disques. % \begin{macrocode} \begingroup \def\FrameSep{0pt}% \edef\FrameArc{\QCMAETitleHeight}% \minipage[b][\QCMAETitleHeight]{\QCMAETitleWidth}% \begin{smc@cadre}[5,0,5,5]{QCMAEFrameColor}% \minipage[b][\QCMAETitleHeight]{\QCMAETitleWidth}% % \end{macrocode} % Il reste un mini débord du cadre qu'on supprime en commençant % l'image à |1pt| au lieu de |0| à gauche. % \begin{macrocode} \begin{pspicture}(1pt,0)(\QCMAETitleHeight,\QCMAETitleHeight) % \end{macrocode} % Les trois disques concentriques. Le plus grand faisant toute la % hauteur, le plus petit deux tiers de la hauteur et celui du milieu à % mi-chemin. % \begin{macrocode} \pscircle*[linecolor=QCMAETitleCircle1Color] (\dimexpr\QCMAETitleHeight/2, \dimexpr\QCMAETitleHeight/2) {\dimexpr\QCMAETitleHeight/2} \pscircle*[linecolor=QCMAETitleCircle2Color] (\dimexpr\QCMAETitleHeight*5/12, \dimexpr\QCMAETitleHeight*7/12) {\dimexpr\QCMAETitleHeight*5/12} \pscircle*[linecolor=QCMAETitleCircle3Color] (\dimexpr\QCMAETitleHeight/3, \dimexpr\QCMAETitleHeight*2/3) {\dimexpr\QCMAETitleHeight/3} % \end{macrocode} % Le titre. % \begin{macrocode} \rput[Bl](\QCMAETitleLeftSpace,\dimexpr\QCMAETitleHeight/6) {\textcolor{QCMAETitleColor}{\QCMAETitleFont\StringQCMAE}} \end{pspicture}% \endminipage \end{smc@cadre} \endminipage \endgroup % \end{macrocode} % À la suite du cartouche, on place les lignes de référence au manuel % numérique. % \begin{macrocode} \hspace*{\stretch{1}}% \begin{minipage}[b]{\QCMAEManuelWidth} \raggedright \QCMAEManuelFont \StringManuel \par\vspace*{\AfterQCMAEManuelVSpace} \end{minipage}% % \end{macrocode} % On affiche ensuite le logo. % \begin{macrocode} \hspace{\QCMAEManuelRightSpace}% \raisebox{\AfterQCMAEManuelVSpace} {\psscaleboxto(\AELogoManuelWidth,0){\LogoManuel}}% % \end{macrocode} % Il reste à placer un espace vertical, à afficher le texte en % argument puis à placer un dernier espace vertical. % \begin{macrocode} \par\nobreak\vspace{\AfterQCMAETitleVSpace} {\QCMAETextAfterTitleFont #1\par\nobreak} \par\nobreak\addvspace{\AfterQCMAETextVSpace} } % \end{macrocode} % \end{macro} % \begin{environment}{QCM} % L'environnement |QCM| regroupe un éventuel énoncé commun à plusieurs % QCM et une série de plusieurs QCM. Le tout va être encadré par un % cadre à bord arrondi en haut. % \begin{macrocode} \newenvironment{QCM}{% \begin{lrbox}{\smc@boxa} \minipage{\dimexpr\linewidth-\QCMLineWidth*2-\QCMFrameSep*2} % \end{macrocode} % On pose les nœuds du haut du cadre dès l'entrée dans la % minipage. Pour que ces nœuds soient toujours correctement posés, on % commence par faire une petite manœuvre de paragraphe % \begin{macrocode} \par\null \pnode(\dimexpr -\QCMFrameSep-\QCMLineWidth/2, \dimexpr \QCMFrameSep+\QCMLineWidth/2){A} \pnode(\dimexpr \linewidth+\QCMFrameSep+\QCMLineWidth/2, \dimexpr +\QCMFrameSep+\QCMLineWidth/2){B} \par } {% % \end{macrocode} % En fin de minipage, on pose les nœuds du bas du cadre et ceux de % milieu de cadre. % \begin{macrocode} \par\vspace{-\baselineskip} \pnode(\dimexpr -\QCMFrameSep-\QCMLineWidth/2, \dimexpr -\QCMFrameSep-\QCMLineWidth/2){C} \pnode(\dimexpr \linewidth+\QCMFrameSep+\QCMLineWidth/2, \dimexpr -\QCMFrameSep-\QCMLineWidth/2){D} \psRelNode(A)(C){0.5}{AC} \psRelNode(B)(D){0.5}{BD} \endminipage \end{lrbox} % \end{macrocode} % Le contenu de l'environnement est placé dans la boîte % |\smc@boxa|. On place maintenant l'espace vertical qui précède. % \begin{macrocode} \par\addvspace{\BeforeQCMVSpace} % \end{macrocode} % On place ensuite la boîte en ayant pris soin de descendre de la % distance correspondant à la largeur de ligne plus la séparation % d'avec le cadre. % \begin{macrocode} \vspace{\dimexpr\QCMLineWidth+\QCMFrameSep} \hspace*{\dimexpr\QCMLineWidth+\QCMFrameSep}% \copy\smc@boxa % \end{macrocode} % On peut alors tracer le cadre. % \begin{macrocode} \psline[linewidth=\QCMLineWidth, linecolor=QCMLineColor](AC)(C)(D)(BD) \psline[linewidth=\QCMLineWidth, linecolor=QCMLineColor, linearc=\QCMLineArc](C)(A)(B)(D) % \end{macrocode} % On place alors l'espace vertical de compensation de la largeur de % ligne et de l'espace d'avec le cadre l'espace après le groupe de QCM. % \begin{macrocode} \par\vspace{\dimexpr\QCMLineWidth+\QCMFrameSep} \addvspace{\AfterQCMVSpace} } % \end{macrocode} % \end{environment} % \begin{environment}{EnonceCommunQCM} % L'environnement |EnonceCommunQCM| permet d'avoir un chapeau pour un % groupe de QCM. Il n'y a rien de spécial à ce niveau. % \begin{macrocode} \newenvironment{EnonceCommunQCM}{% } {% } % \end{macrocode} % \end{environment} % \begin{environment}{GroupeQCM} % Dans cet environnement, on place l'ensemble des exercices d'un % groupe. On va donc définir l'environnement exercice. % \begin{macrocode} \newenvironment{GroupeQCM}{% \let\exercice\smc@QCMexercice \let\endexercice\endsmc@QCMexercice \let\corrige\smc@QCMcorrige \let\endcorrige\endsmc@QCMcorrige } {% } % \end{macrocode} % \end{environment} % \begin{environment}{smc@QCMexercice} % Environnement \environ{exercice} pour les QCM. C'est le même code % que pour l'environnement \environ{exercice} de l'auto-évaluation. % \begin{macrocode} \newenvironment{smc@QCMexercice}{% \par \refstepcounter{exercice}% \psframebox*[linestyle=none, linewidth=0pt, fillcolor=QCMExoNumFrameColor, framesep=\QCMExoFrameTopSep]{% \hbox to\dimexpr\QCMExoFrameWidth-\QCMExoFrameTopSep*2{% \hss \QCMExoNumFont \textcolor{QCMExoNumColor}{\theexercice}% \hss }% }% \hspace{\AfterQCMExoFrameHSpace}% \ignorespaces } {\par} % \end{macrocode} % \end{environment} % \begin{environment}{ChoixQCM} % L'environnement \environ{ChoixQCM} se comporte exactement comme un % \environ{colenumerate} sauf que la façon de composer le numéro n'est % pas le même (il n'y a qu'un seul niveau et les numéros sont % encerclés et écrits alphabétiquement). % % Le nombre est composé sous forme d'une lettre encerclée. Le package % \package{pifont} offre cette fonctionnalité à partir du code 172 % (seulement jusqu'à 10). La macro de mise en forme peut être définie % en dehors de l'environnement puisqu'elle servira toujours de la même % façon. % \begin{macrocode} \newcounter{QCM} \newcommand*\QCMLabel[1]{% \textcolor{QCMItemNumColor} {% \QCMItemNumFont \pscirclebox[linewidth=0.4pt, framesep=1pt, linecolor=QCMItemNumColor, boxsep=true] {\vphantom{dp}\@alph{#1}} }% }% \newenvironment{ChoixQCM}[1]{% \par\leavevmode % \end{macrocode} % Le reste ressemble au code général des \environ{colenumerate}. % \begin{macrocode} \def\smc@nbcolumn{#1}% \smc@nbitem \z@ \def\StringColCurrent{ChoixQCM}% \toks@{}% \smc@getbody } {% \expandafter\smc@splititem\the\toks@\item\@nil\item \smc@nbline \numexpr \smc@nbitem+\smc@nbcolumn-1 \divide\smc@nbline \smc@nbcolumn \multido{\n=1+1}{\smc@nbline}{% \multido{\ni=\n+\the\smc@nbline}{\smc@nbcolumn}{% \unless\ifnum\ni>\smc@nbitem \makebox[\QCMLabelWidth]{\QCMLabel{\ni}\hss}% \begin{minipage}[t]{\dimexpr (\linewidth-\ListHSep*(\smc@nbcolumn-1))% /\smc@nbcolumn-\QCMLabelWidth} \strut\@nameuse{smc@item\ni}\strut \end{minipage}% \hspace{\ListHSep}% \fi }% % \end{macrocode} % Ici, contrairement aux environnement colenumerate normaux, on laisse % un |\\| y compris à la dernière ligne pour avoir un grand espacement % vertical après la liste. % \begin{macrocode} \\ }% } % \end{macrocode} % \end{environment} % \subsection{Travaux pratiques} % \begin{macro}{\TravauxPratiques} % Cette macro introduit la partie \og Travaux pratiques \fg{} dans un % chapitre. Elle interdit l'utilisation des listes et des macros % |\exercice| et |\correction| en dehors des environnements. % \begin{macrocode} \newcommand*\TravauxPratiques{% \clearpage \pagestyle{TP} \def\smc@currpart{TP}% % \end{macrocode} % Les TP utilisent le compteur |activite| qu'il faut donc % réinitialiser. % \begin{macrocode} \setcounter{activite}{0}% % \end{macrocode} % Les parties sont composées de façon spéciales dans les TP. % \begin{macrocode} \let\partie\smc@TP@partie } % \end{macrocode} % \end{macro} % \begin{macro}{\DeclareTPLike} % Les environnements de TP sont déclarées avec la macro % |\DeclareTPLike|. Celle-ci demande quatre arguments : % \begin{enumerate} % \item le nom de l'environnement ; % \item le titre affiché ; % \item la couleur de la partie supérieure du cartouche ; % \item la couleur de la partie inférieure du cartouche ; % \item la couleur du titre et du losange de numéro. % \end{enumerate} % C'est exactement la syntaxe et le code de |\DeclareActivityLike|. % \begin{macrocode} \newcommand*\DeclareTPLike[5]{% \expandafter\newcommand\csname#1\endcsname[1][]{% \def\smc@activite@title{##1}% \csname#1@aux\endcsname }% \expandafter\newcommand\csname#1@aux\endcsname[1][]{% \par \addvspace{\BeforeActiviteVSpace} \refstepcounter{activite} \setbox\smc@boxa=\hbox{% \ActiviteTitleFont #2% }% \begin{pspicture}(0,0) (\dimexpr \ActiviteTitleLeftSpace+\wd\smc@boxa+\ActiviteTitleRightSpace+1.4142\ActiviteTitleTopHeight,\ActiviteTitleTopHeight) \psframe*[linewidth=0, linecolor= #3] (0,0)(\dimexpr\ActiviteTitleLeftSpace+\wd\smc@boxa+\ActiviteTitleRightSpace+0.7071\ActiviteTitleTopHeight, \ActiviteTitleTopHeight) \psframe*[linewidth=0, linecolor= #4] (0,0)(\dimexpr\ActiviteTitleLeftSpace+\wd\smc@boxa+\ActiviteTitleRightSpace+0.7071\ActiviteTitleTopHeight, -\ActiviteTitleBottomHeight) \rput[l](\ActiviteTitleLeftSpace, 0.5\dimexpr\ActiviteTitleTopHeight-\ActiviteTitleBottomHeight){% \ActiviteTitleFont \textcolor{#5}{#2}% } \rput (\dimexpr\ActiviteTitleLeftSpace+\wd\smc@boxa+\ActiviteTitleRightSpace, 0.5\dimexpr\ActiviteTitleTopHeight-\ActiviteTitleBottomHeight) {% \pspolygon*[linewidth=0, linecolor=#5] (0,0) (0.7071\ActiviteTitleTopHeight,0.7071\ActiviteTitleTopHeight) (1.4142\ActiviteTitleTopHeight,0) (0.7071\ActiviteTitleTopHeight,-0.7071\ActiviteTitleTopHeight) \rput(0.7071\ActiviteTitleTopHeight,0){% \ActiviteNumFont \textcolor{ActiviteNumColor}{\theactivite}% } } \end{pspicture}% \hspace*{\AfterActiviteTitleHSpace}% \@ifmtarg{##1} {\setbox0=\hbox{}} {\setbox0=\hbox{##1\ }}% \minipage[t]{\dimexpr\linewidth-\ActiviteTitleLeftSpace-\wd\smc@boxa-\ActiviteTitleRightSpace-1.4142\ActiviteTitleTopHeight-\AfterActiviteTitleHSpace-\wd0} \ActiviteSubtitleFont \textcolor{ActiviteSubtitleColor}{\smc@activite@title}% \endminipage \@ifnotmtarg{##1}{\hfill##1}% \par\vspace{\AfterActiviteTitleVSpace} \let\itemize\smc@activiteitemize \let\enditemize\endsmc@activiteitemize \let\colitemize\smc@activitecolitemize \let\endcolitemize\endsmc@activitecolitemize \let\enumerate\smc@activiteenumerate \let\endenumerate\endsmc@activiteenumerate \let\colenumerate\smc@activitecolenumerate \let\endcolenumerate\endsmc@activitecolenumerate % \end{macrocode} % Voici la seule différénce avec les activités : les parties ne sont % pas composées de la même façon. % \begin{macrocode} \let\partie\smc@TP@partie \let\exercice\smc@noexercice \let\endexercice\endsmc@noexercice \let\corrige\smc@nocorrige \let\endcorrige\endsmc@nocorrige \def\smc@currpart{Activite}% \begin{changemargin}{\dimexpr\SquareWidth*4}{\ExtraMarginRight} }% \expandafter\def\csname end#1\endcsname{% \end{changemargin} }% } % \end{macrocode} % \end{macro} % \begin{environment}{TP} % Les TP suivent très exactement les mêmes règles de composition que % les activités. Il suffit de les déclarer de la même façon ! % \begin{macrocode} \DeclareTPLike{TP}{\StringTP} {TPTopColor} {TPBottomColor} {TPTitleColor} % \end{macrocode} % \end{environment} % \begin{environment}{enigme} % Il s'agit de l'environnement permettant d'indiquer le texte d'une % \emph{récréation, énigmes}. L'unique paramètre est le titre de l'énigme. % \begin{macrocode} \newenvironment{enigme}[1][]{% % \end{macrocode} % Les énigmes peuvent donner lieu à un corrigé, on prévoit une % indication dans le fichier de correction % \begin{macrocode} \addtocontents{cor}{\protect\smc@corrigeenigme}% % \end{macrocode} % On redéfinit les listes et les parties. Les exercices ne sont pas % permis. % \begin{macrocode} \let\itemize\smc@recreationitemize \let\enditemize\endsmc@recreationitemize \let\colitemize\smc@recreationcolitemize \let\endcolitemize\endsmc@recreationcolitemize \let\enumerate\smc@recreationenumerate \let\endenumerate\endsmc@recreationenumerate \let\colenumerate\smc@recreationcolenumerate \let\endcolenumerate\endsmc@recreationcolenumerate \let\exercice\smc@noexercice \let\endexercice\endsmc@noexercice \let\corrige\smc@nocorrige \let\endcorrige\endsmc@nocorrige \let\correction\smc@nocorrection \let\partie\smc@recreation@partie \def\smc@currpart{Enigme}% % \end{macrocode} % On affiche alors le titre s'il existe. % \begin{macrocode} \par \@ifmtarg{#1}{}{% {\RecreationTitleFont \textcolor{RecreationTitleColor}{#1}\par}% } % \end{macrocode} % Il faut remettre le compteur de partie à zéro. % \begin{macrocode} \setcounter{partie}{0} } {\par} % \end{macrocode} % \end{environment} % \subsection{partie} % Il s'agit de sous-parties autorisées seulement dans certains % environnements. Pour l'instant, seules les activités peuvent % utiliser cette commande. % \begin{macro}{\partie} % On commence par définir la macro qui sera active en dehors des % environnements autorisés. Elle ne fait que lever une erreur. % \begin{macrocode} \newcommand*\smc@nopartie{% \ClassError{sesamanuel} {La commande \string\partie\space est interdite ici.} {Reportez-vous à la documentation pour l'utilisation de la macro \string\partie.}% } \let\partie\smc@nopartie % \end{macrocode} % \end{macro} % \begin{macro}{\smc@activite@partie} % La macro |\smc@activite@partie| est le code de la macro |\partie| % dans les environnements de type |activite|. % \begin{macrocode} \newcommand*\smc@activite@partie[1][]{% % \end{macrocode} % Les trois sauvegardes suivantes permettent d'utiliser les % présentations des parties dans des références. % \begin{macrocode} \colorlet{smc@curr@partiecolor}{ActivitePartieColor}% \colorlet{smc@curr@partiebkgcolor}{Blanc}% \let\smc@curr@partiefont\ActivitePartieFont % \end{macrocode} % On commence ensuite le code réel de la commande |\partie|. % \begin{macrocode} \par\addvspace{\BeforeActivitePartieVSpace} \refstepcounter{partie}% \@ifmtarg{#1} {% \textcolor{ActivitePartieColor} {\ActivitePartieFont \StringPartie{} \thepartie} } {% \textcolor{ActivitePartieColor} {\ActivitePartieFont \StringPartie{} \thepartie{} : #1} } \par\nobreak\addvspace{\AfterActivitePartieVSpace} } % \end{macrocode} % \end{macro} % \begin{macro}{\smc@exercice@partie} % La macro |\smc@exercice@partie| est le code de la macro |\partie| % dans les exercices. % \begin{macrocode} \newcommand*\smc@exercice@partie[1][]{% \colorlet{smc@curr@partiecolor}{ExercicePartieColor}% \colorlet{smc@curr@partiebkgcolor}{Blanc}% \let\smc@curr@partiefont\ExercicePartieFont \par\addvspace{\BeforeExercicePartieVSpace} \refstepcounter{partie}% \@ifmtarg{#1} {% \textcolor{ExercicePartieColor} {\ExercicePartieFont \textsc{\StringPartie} \Alph{partie}} } {% \textcolor{ExercicePartieColor} {\ExercicePartieFont \textsc{\StringPartie} \Alph{partie} : #1} } \par\nobreak\addvspace{\AfterExercicePartieVSpace} } % \end{macrocode} % \end{macro} % \begin{macro}{\smc@TP@partie} % La macro |\smc@TP@partie| est le code de la macro |\partie| dans % les TP. % \begin{macrocode} \newcommand*\smc@TP@partie[1]{% \colorlet{smc@curr@partiecolor}{TPPartieNumColor}% \colorlet{smc@curr@partiebkgcolor}{TPPartieBkgColor}% \let\smc@curr@partiefont\TPPartieFont \par\addvspace{\BeforeTPPartieVSpace} \refstepcounter{partie}% \leavevmode \hbox to\z@{% \hss \psframebox[linestyle=none, linewidth=0pt, fillstyle=solid, fillcolor=TPPartieBkgColor] {\textcolor{TPPartieNumColor}{\TPPartieFont \thepartie}}% \hspace*{\TPPartieHSep}% }% \textcolor{TPPartieColor}{\TPPartieFont #1} \par\nobreak\addvspace{\AfterTPPartieVSpace} } % \end{macrocode} % \end{macro} % \begin{macro}{\smc@recreation@partie} % La macro |\smc@recreation@partie| est le code de la macro |\partie| dans % la partie Récréation, énigmes. % \begin{macrocode} \newcommand*\smc@recreation@partie[1][]{% \colorlet{smc@curr@partiecolor}{RecreationPartieColor}% \colorlet{smc@curr@partiebkgcolor}{Blanc}% \let\smc@curr@partiefont\RecreationPartieFont \par\addvspace{\BeforeRecreationPartieVSpace} \refstepcounter{partie}% \@ifmtarg{#1} {% \textcolor{RecreationPartieColor} {\RecreationPartieFont \StringPartie{} \Alph{partie}} } {% \textcolor{RecreationPartieColor} {\RecreationPartieFont \StringPartie{} \Alph{partie} :} \textcolor{RecreationPartieColor}{\RecreationPartieTitleFont #1} } \par\nobreak\addvspace{\AfterRecreationPartieVSpace} } % \end{macrocode} % \end{macro} % \begin{macro}{\smc@annexe@partie} % La macro |\smc@annexe@partie| est le code de la macro |\partie| % pour les annexes (en fait pour les exercices des annexes). % \begin{macrocode} \newcommand\smc@annexe@partie[1][]{% \colorlet{smc@curr@partiecolor}{AnnexePartieColor}% \colorlet{smc@curr@partiebkgcolor}{Blanc}% \let\smc@curr@partiefont\AnnexePartieFont \par\addvspace{\BeforeAnnexePartieVSpace} \refstepcounter{partie}% \@ifmtarg{#1} {% \textcolor{AnnexePartieColor} {\AnnexePartieFont \textsc{\StringPartie} \Alph{partie}} } {% \textcolor{AnnexePartieColor} {\AnnexePartieFont \textsc{\StringPartie} \Alph{partie} : #1} } \par\nobreak\addvspace{\AfterAnnexePartieVSpace} } % \end{macrocode} % \end{macro} % \begin{macro}{\smc@libre@partie} % La macro |\smc@libre@partie| est le code de la macro |\partie| % pour les textes libres. % \begin{macrocode} \newcommand\smc@libre@partie[1][]{% \colorlet{smc@curr@partiecolor}{LibrePartieColor}% \colorlet{smc@curr@partiebkgcolor}{Blanc}% \let\smc@curr@partiefont\LibrePartieFont \par\addvspace{\BeforeLibrePartieVSpace} \refstepcounter{partie}% \@ifmtarg{#1} {% \textcolor{LibrePartieColor} {\LibrePartieFont \textsc{\StringPartie} \Alph{partie}} } {% \textcolor{LibrePartieColor} {\LibrePartieFont \textsc{\StringPartie} \Alph{partie} : #1} } \par\nobreak\addvspace{\AfterLibrePartieVSpace} } % \end{macrocode} % \end{macro} % \section{Annexes} % \subsection{Corrigés} % \begin{macro}{\AfficheCorriges} % Dans cette partie, on affiche l'ensemble des corrections du % livre. Tout se fait avec la seule macro |\AfficheCorriges|. Celle-ci % accepte un argument optionnel indiquant le nombre de colonnes sur % lesquelles seront composés les corrigés. Pour avoir un maximum de % souplesse, la valeur par défaut sera stockée dans la variable % publique |\NombreColonnesCorriges|. La classe fixe à 3 cette valeur % par défaut. On a également une variable publique % |\PrefixeCorrection| dont le but est de préfixer les noms des % fichiers de correction (par exemple par un nom de répertoire). % \begin{macrocode} \newcommand*\NombreColonnesCorriges{3} \newcommand*\PrefixeCorrection{} \newcommand*\AfficheCorriges[1][\NombreColonnesCorriges]{% % \end{macrocode} % On commence par changer de page et indiquer les styles de page à % utiliser pour la suite. On va également poser une étiquette pour % permettre le référencement de la page de manière automatique. % \begin{macrocode} \clearpage \label{toutes-solutions} \pagestyle{corrige} \thispagestyle{firstcorrige} % \end{macrocode} % On compose le titre de l'annexe. % \begin{macrocode} \rput[Bl](0,9mm){\CorrigeTitleFont \MakeUppercase{\StringCorriges}} \vspace*{-5mm} % \end{macrocode} % Enfin, on ouvre l'environnement de colonnage avant d'appeler le % fichier externe de correction. % \begin{macrocode} \begingroup \columnsep \dimexpr \SquareWidth*2 \columnseprule \CorrigeRuleWidth \def\columnseprulecolor{\color{ExerciceColumnRuleColor}}% % \end{macrocode} % Avant d'ouvrir le muticolonnage, on mémorise le nombre de colonnes % (cela servira plus tard pour les QCM). % \begin{macrocode} \xdef\smc@NbColonneCorrige{#1}% \ifnum#1>\@ne \begin{multicols}{#1}% \@starttoc{cor} \end{multicols} \vfill~\par \else \@starttoc{cor} \vfill~\par \fi \endgroup } % \end{macrocode} % \end{macro} % Le fichier de correction va comporter un certain nombre de commandes % particulières qu'on définit ici. % \begin{macro}{\smc@corrigechapter} % Affiche les chapitres dans l'annexe des corrigés. Le premier % paramètre contient le texte \og Chapitre \fg où le % || est l'abréviation du type de chapitre (Fonction, Géométrie % ou statistique), le deuxième le titre du chapitre, le troisième la % couleur de cadre et de titre et le quatrième la couleur du texte % dans le cadre. % \begin{macrocode} \newcommand*\smc@corrigechapter[4]{% % \end{macrocode} % Avant de procéder à la composition du titre de chapitre, on % initialise le fait que les environnements |exercice| et |corrige| % ainsi que la macro |\correction| seront interdits à l'intérieur d'un % corrigé ! % \begin{macrocode} \let\exercice\smc@noexercice \let\endexercice\endsmc@noexercice \let\corrige\smc@nocorrige \let\endcorrige\endsmc@nocorrige \let\correction\smc@nocorrection % \end{macrocode} % On place le saut vertical avant le titre puis dans l'ordre, le cadre % avec le mot Chapitre puis le titre de l'exercice. % \begin{macrocode} \par\addvspace{\BeforeCorrigeChapterVspace} \begin{pspicture}(0,0)(\linewidth,4.5mm) \psframe[linestyle=none, linewidth=0pt, fillstyle=solid, fillcolor=#3] (0,0)(\linewidth,4.5mm) \rput[B](0.5\linewidth,1mm){% \textcolor{#4}{\CorrigeChapterFont #1}% } \end{pspicture}% \\[-1mm] {% \centering \color{#3} \CorrigeChapterFont \smc@nobsbs{#2} \par\nobreak }% } % \end{macrocode} % \end{macro} % \begin{macro}{\smc@corrigeautoeval} % Affiche le titre pour les auto-évaluations. En réalité, le titre % n'est pas immédiatement affiché. Il est placé dans la macro % |\smc@BeforeCorrige| qui comporte un mécanisme % d'auto-destruction. Cette macro sera systématiquement appelée par % chaque corrigé d'exercice. Ainsi, avant d'afficher le premier % exercice, le titre sera composé et ne le sera plus pour les % exercices suivant. S'il n'y a aucun corrigé dans la partie, il n'y % aura pas de titre affiché du tout. % \begin{macrocode} \newcommand\smc@corrigeautoeval{% % \end{macrocode} % On commence par indiquer les façon de composer les listes et les % parties. On indique également la partie en cours. Pour l'instant, la % partie en cours ne sert à rien à ce niveau mais c'est une précaution % pour l'avenir. % \begin{macrocode} \let\itemize\smc@corrAEitemize \let\enditemize\endsmc@corrAEitemize \let\colitemize\smc@AEcolitemize \let\endcolitemize\endsmc@AEcolitemize \let\enumerate\smc@corrAEenumerate \let\endenumerate\endsmc@corrAEenumerate \let\colenumerate\smc@AEcolenumerate \let\endcolenumerate\endsmc@AEcolenumerate \let\partie\smc@nopartie \def\smc@currpart{CorrigeAE}% % \end{macrocode} % On définit maintenant la macro à double détente. On commence par la % première détente : la composition du titre. % \begin{macrocode} \def\smc@BeforeCorrige{% \par\addvspace{\BeforeCorrigePartieTitleVSpace} \textcolor{CorrigeAETitleColor} {\CorrigePartieFont \StringAE} \par\nobreak % \end{macrocode} % Vient ensuite la deuxième détente : la redéfinition de la macro par % elle-même pour n'être qu'un alias de |\par| % \begin{macrocode} \def\smc@BeforeCorrige{\par}% }% % \end{macrocode} % La dernière chose à préciser est la couleur des cadres des numéros % d'exercice. % \begin{macrocode} \colorlet{CorrigeNumExerciceFrameBkg}{J1}% \colorlet{CorrigeNumExerciceFrameTxt}{Blanc}% } % \end{macrocode} % \end{macro} % \begin{macro}{\smc@corrigeactivite} % C'est la même chose que précédemment pour les corrigés des % activités. % \begin{macrocode} \newcommand\smc@corrigeactivite{% \let\itemize\smc@noitemize \let\enditemize\endsmc@noitemize \let\colitemize\smc@nocolitemize \let\endcolitemize\endsmc@nocolitemize \let\enumerate\smc@noenumerate \let\endenumerate\endsmc@noenumerate \let\colenumerate\smc@nocolenumerate \let\endcolenumerate\endsmc@nocolenumerate \def\smc@currpart{CorrectionActivite}% \def\smc@BeforeCorrige{% \par\addvspace{\BeforeCorrigePartieTitleVSpace} \textcolor{CorrigeActiviteTitleColor} {\CorrigePartieFont \StringACTIVITE} \par\nobreak \def\smc@BeforeCorrige{\par}% }% \colorlet{CorrigeNumExerciceFrameBkg}{J1}% \colorlet{CorrigeNumExerciceFrameTxt}{Blanc}% } % \end{macrocode} % \end{macro} % \begin{macro}{\smc@corrigeexercicesbase} % Idem pour les corrigés de la partie exercices de base. % \begin{macrocode} \newcommand\smc@corrigeexercicesbase{% \let\itemize\smc@correxerciceitemize \let\enditemize\endsmc@correxerciceitemize \let\colitemize\smc@exercicecolitemize \let\endcolitemize\endsmc@exercicecolitemize \let\enumerate\smc@correxerciceenumerate \let\endenumerate\endsmc@correxerciceenumerate \let\colenumerate\smc@exercicecolenumerate \let\endcolenumerate\endsmc@exercicecolenumerate \let\partie\smc@exercice@partie \def\smc@currpart{CorrigeExoBase}% \def\smc@BeforeCorrige{% \par\addvspace{\BeforeCorrigePartieTitleVSpace} \textcolor{CorrigeExercicesBaseTitleColor} {\CorrigePartieFont \StringExercicesBase} \par\nobreak \def\smc@BeforeCorrige{\par}% }% \colorlet{CorrigeNumExerciceFrameBkg}{J1}% \colorlet{CorrigeNumExerciceFrameTxt}{Blanc}% } % \end{macrocode} % \end{macro} % \begin{macro}{\smc@corrigeexercicesappr} % Idem pour les corrigés de la partie exercices d'approfondissement. % \begin{macrocode} \newcommand\smc@corrigeexercicesappr{% \let\itemize\smc@correxerciceitemize \let\enditemize\endsmc@correxerciceitemize \let\colitemize\smc@exercicecolitemize \let\endcolitemize\endsmc@exercicecolitemize \let\enumerate\smc@correxerciceenumerate \let\endenumerate\endsmc@correxerciceenumerate \let\colenumerate\smc@exercicecolenumerate \let\endcolenumerate\endsmc@exercicecolenumerate \let\partie\smc@exercice@partie \def\smc@currpart{CorrigeExoAppr}% \def\smc@BeforeCorrige{% \par\addvspace{\BeforeCorrigePartieTitleVSpace} \textcolor{CorrigeExercicesApprTitleColor} {\CorrigePartieFont \StringExercicesAppr} \par\nobreak \def\smc@BeforeCorrige{\par}% }% \colorlet{CorrigeNumExerciceFrameBkg}{J1}% \colorlet{CorrigeNumExerciceFrameTxt}{Blanc}% } % \end{macrocode} % \end{macro} % \begin{macro}{\smc@corrigeconnaissances} % Idem pour les corrigés de la partie Je teste mes connaissances (QCM). % \begin{macrocode} \newcommand\smc@corrigeconnaissances{% \let\itemize\smc@noitemize \let\enditemize\endsmc@noitemize \let\colitemize\smc@nocolitemize \let\endcolitemize\endsmc@nocolitemize \let\enumerate\smc@noenumerate \let\endenumerate\endsmc@noenumerate \let\colenumerate\smc@nocolenumerate \let\endcolenumerate\endsmc@nocolenumerate \let\partie\smc@nopartie \def\smc@currpart{CorrigeConnaissances}% % \end{macrocode} % La macro effectuée à chaque passage à l'exercice suivant ne comporte % pas de saut de paragraphe. En fait, chaque corrigé va être inclu % dans une boîte du tiers de l'empagement pour avoir trois corrigés % par ligne. % \begin{macrocode} \def\smc@BeforeCorrige{% \par\addvspace{\BeforeCorrigePartieTitleVSpace} \textcolor{CorrigeConnaissancesTitleColor} {\CorrigePartieFont \StringConnaissances} \par\nobreak \def\smc@BeforeCorrige{}% }% \colorlet{CorrigeNumExerciceFrameBkg}{J1}% \colorlet{CorrigeNumExerciceFrameTxt}{Blanc}% } % \end{macrocode} % \end{macro} % \begin{macro}{\smc@corrigeenigme} % Idem pour les corrigés des énigmes. % \begin{macrocode} \newcommand\smc@corrigeenigme{% \let\itemize\smc@corrrecreationitemize \let\enditemize\endsmc@corrrecreationitemize \let\colitemize\smc@recreationcolitemize \let\endcolitemize\endsmc@recreationcolitemize \let\enumerate\smc@corrrecreationenumerate \let\endenumerate\endsmc@corrrecreationenumerate \let\colenumerate\smc@recreationcolenumerate \let\endcolenumerate\endsmc@recreationcolenumerate \let\partie\smc@recreation@partie \def\smc@currpart{CorrigeEnigme}% \def\smc@BeforeCorrige{% \par\addvspace{\BeforeCorrigePartieTitleVSpace} \textcolor{CorrigeEnigmeTitleColor} {\CorrigePartieFont \StringEnigme} \par\nobreak \def\smc@BeforeCorrige{\par}% }% \colorlet{CorrigeNumExerciceFrameBkg}{J1}% \colorlet{CorrigeNumExerciceFrameTxt}{Blanc}% } % \end{macrocode} % \end{macro} % \begin{macro}{\smc@corrigelibre} % Pour les textes libres, les choses sont assez différentes. Le % début est identique : on modifie les listes % \begin{macrocode} \newcommand\smc@corrigelibre{% \let\itemize\smc@corrlibreitemize \let\enditemize\endsmc@corrlibreitemize \let\colitemize\smc@librecolitemize \let\endcolitemize\endsmc@librecolitemize \let\enumerate\smc@corrlibreenumerate \let\endenumerate\endsmc@corrlibreenumerate \let\colenumerate\smc@librecolenumerate \let\endcolenumerate\endsmc@librecolenumerate \let\partie\smc@exercice@partie \def\smc@currpart{Libre}% % \end{macrocode} % En revanche, ensuite, on n'affiche strictement rien % \begin{macrocode} \def\smc@BeforeCorrige{% \par }% \colorlet{CorrigeNumExerciceFrameBkg}{J1}% \colorlet{CorrigeNumExerciceFrameTxt}{Blanc}% } % \end{macrocode} % \end{macro} % \begin{macro}{\inputcor} % Macro permettant le chargement d'un fichier de correction indiqué % par les trois paramètres : % \begin{itemize} % \item le type de la partie en cours ; % \item le numéro de chapitre ; % \item le numéro d'exercice. % \end{itemize} % Ces trois paramètres vont permettre de reconstituer le nom du % fichier à charger. % \begin{macrocode} \newcommand*\inputcor[3]{% % \end{macrocode} % On commence par composer soit le titre de la partie en cours, soit % un saut de paragraphe seul (soit rien pour les QCM). % \begin{macrocode} \smc@BeforeCorrige % \end{macrocode} % Si on est dans les corrections de QCM, on doit composer la % correction dans des minipages de la moitié de la largeur % d'empagement moins la largeur de séparation. et du tiers de la % largeur de l'empagement si on est en corrigé sur deux colonnes. % \begin{macrocode} \def\smc@arg{#1}% \ifx\smc@arg\StringQCM \ifnum\smc@NbColonneCorrige=2 \edef\smc@LargeurColonneCorrige {\the\dimexpr \linewidth/3-\QCMHSep}% \else \edef\smc@LargeurColonneCorrige {\the\dimexpr \linewidth/2-\QCMHSep}% \fi \minipage[t]{\smc@LargeurColonneCorrige}% \fi % \end{macrocode} % On affiche alors le numéro d'exercice dans un cadre. % \begin{macrocode} \@ifmtarg{#3}{}{% \begin{pspicture}(0,0)(5mm,2.5mm) \psframe[linestyle=none, linewidth=0pt, fillstyle=solid, fillcolor=CorrigeNumExerciceFrameBkg] (0,-0.5mm)(5mm,2.5mm) \rput[B](2.5mm,0){% \textcolor{CorrigeNumExerciceFrameTxt} {\CorrigeNumExerciceFont #3}% } \end{pspicture} }% % \end{macrocode} % On charge ensuite la correction de l'exercice. Il faut alors % reconstruire le nom du fichier. Le seul point à prendre en compte % est que sur un troisième argument vide, on n'a pas de trait d'union % entre le numéro de chapitre et le numéro d'exercice. Pour des % raisons de mise en page, on compose les réponses dans une minipage % de la largeur d'empagement en cours moins la largeur du cadre du % numéro d'exercice. Le 6.5mm est le 5mm de la largeur du cadre plus % une petite goutière de séparation. On ajoute également % systématiquement un |\strut| à la fin de l'inclusion pour que la % minipage ne donne pas un interlignage anormal sur la dernière % ligne. % \begin{macrocode} \hfill\begin{minipage}[t]{\linewidth-6.5mm} \raggedright \@ifmtarg{#3} {\input{\PrefixeCorrection corr-#1-#2}\strut} {\input{\PrefixeCorrection corr-#1-#2-#3}\strut}% \end{minipage} % \end{macrocode} % Si c'est une correction de QCM, on ferme la minipage et on place un % espace |\QCMHSep|. Il faut redéfinir |\smc@arg| car il peut être % modifié par l'appel des corrigés. % \begin{macrocode} \def\smc@arg{#1}% \ifx\smc@arg\StringQCM \endminipage \hspace{\QCMHSep}% \else \par\vfil \fi } % \end{macrocode} % \end{macro} % \begin{macro}{\Coupe} % Macro permettant une coupure de colonne au niveau des solutions. % \begin{macrocode} \newcommand\Coupe{% \strut \end{minipage} \par\hfill \begin{minipage}[t]{\linewidth-6.5mm} } % \end{macrocode} % \end{macro} % \begin{macro}{\reponseQCM} % Macro pour indiquer une réponse de QCM. Il s'agit uniquement de la % ou des réponse(s) placée(s) dans un cercle. En fait, l'argument peut % être une suite de lettres. Chacune doit être encerclée. Il faut donc % lire l'argument caractère par caractère. On appelle donc la macro % auxiliaire |\smc@reponseQCM| en plaçant la balise de fin |\@nil|. % \begin{macrocode} \newcommand\reponseQCM[1]{% \smc@reponseQCM#1\@nil } % \end{macrocode} % |\smc@reponseQCM| ne traite qu'une seule lettre (ASCII). % \begin{macrocode} \def\smc@reponseQCM#1{% \def\smc@arg{#1}% % \end{macrocode} % Si la balise de fin est rencontrée, on ne fait strictement rien % \begin{macrocode} \ifx\smc@arg\@nnil \else % \end{macrocode} % Sinon, on entoure la lettre lue\ldots % \begin{macrocode} \textcolor{CorrigeQCMItemNumColor} {% \CorrigeQCMItemNumFont \pscirclebox[linewidth=0.4pt, framesep=1pt, linecolor=CorrigeQCMItemNumColor, boxsep=true] {\vphantom{dp}#1}% } % \end{macrocode} % \ldots{} et on procède à un appel récursif. % \begin{macrocode} \expandafter\smc@reponseQCM \fi } % \end{macrocode} % \end{macro} % \subsection{Annexes générales} % Initialement la maquette présentait cette annexe pour énoncer des % \og propriétés pour démontrer en géométrie \fg{}. On va généraliser % un peu cette possibilité en laissant le titre libre, en % redéfinissant les commandes de sectionnement et en fournissant un % environnement pour les énoncés sur trois colonnes (\emph{a priori} % une figure, la propriété et une remarque). % % Pour garder toute sa généralité à la macro |\annexe|, il faut % l'accompagner d'une macro permettant de modifier les couleurs des % bandeaux de bord de page et de section. On va commencer par définir % cette macro et l'appeler immédiatement avec les couleurs indiquées % par défaut dans la maquette. % \begin{macro}{\ChangeAnnexe} % \begin{macrocode} \newcommand*\ChangeAnnexe[4]{% \colorlet{AnnexeHeadFrameColor}{#1}% \colorlet{AnnexeSectionRuleColor}{#2}% \colorlet{AnnexeItemColor}{#2}% \colorlet{AnnexeExerciceCorrigeNumFrameColor}{#2}% \colorlet{AnnexeExerciceNumFrameColor}{#2}% \colorlet{AnnexeSectionTitleColor}{#3}% \colorlet{AnnexeExerciceTitleColor}{#3} \colorlet{AnnexeExerciceNumColor}{#4} } % \end{macrocode} % On appelle maintenant cette macro avec les couleurs par défaut de la % maquette. % \begin{macrocode} \ChangeAnnexe{G3}{A1}{G1}{Blanc} % \end{macrocode} % \end{macro} % \begin{macro}{\annexe} % On peut maintenant définir la macro |\annexe|. L'argument est le % titre de l'annexe. Avant cela on définit un certain nombre de % compteur à initialiser à ce niveau. % \begin{macrocode} \newcounter{propriete} \newcommand*\annexe[1]{% \let\itemize\smc@annexeitemize \let\enditemize\endsmc@annexeitemize \let\colitemize\smc@annexecolitemize \let\endcolitemize\endsmc@annexecolitemize \let\enumerate\smc@annexeenumerate \let\endenumerate\endsmc@annexeenumerate \let\colenumerate\smc@annexecolenumerate \let\endcolenumerate\endsmc@annexecolenumerate \let\partie\smc@nopartie \let\exercice\smc@annexeexercice \let\endexercice\endsmc@annexeexercice \let\corrige\smc@nocorrige \let\endcorrige\endsmc@nocorrige \let\section\smc@annexesection \def\smc@currpart{Annexe}% \setcounter{propriete}{0}% \setcounter{exercice}{0}% % \end{macrocode} % On commence par changer de page et indiquer les styles de page à % utiliser pour la suite. % \begin{macrocode} \clearpage \pagestyle{annexe} \thispagestyle{firstannexe} % \end{macrocode} % On compose le titre de l'annexe. % \begin{macrocode} \vspace*{\BeforeAnnexeTitleVSpace} {\raggedright \AnnexeTitleFont \MakeUppercase{#1}\par} \addvspace{\AfterAnnexeTitleVSpace} % \end{macrocode} % On sauvegarde le titre pour les pieds de page. % \begin{macrocode} \def\smc@TitleAnnexe{#1}% } % \end{macrocode} % \end{macro} % \begin{macro}{\ListeProprietes} % On garde quasiment le même code que pour la macro |\propriete| % interne au tableau de type |pr| mais on lui donne un argument au % lieu du texte \og Propriété \fg avec le numéro. % \begin{macrocode} \newcommand*\ListeProprietes[1]{% \psframebox*[fillcolor=TablePropertyTitleBkgColor]{% \ProprieteFont \textcolor{TablePropertyTitleTextColor} {\MakeUppercase{\StringPropriete}~#1}% }% } % \end{macrocode} % \end{macro} % \begin{environment}{smc@annexeexercice} % Exercice pour la partie annexe. On commence par regarder s'il y a % une étoile. % \begin{macrocode} \newcommand*\smc@annexeexercice{% \@ifstar {% \smc@exercicecorrigetrue \smc@@annexeexercice } {% \smc@exercicecorrigefalse \smc@@annexeexercice } } % \end{macrocode} % On lit ensuite le premier argument optionnel. % \begin{macrocode} \newcommand*\smc@@annexeexercice[1][]{% % \end{macrocode} % On sauvegarde le texte du titre est on appelle la macro auxiliaire % pour lire le deuxième argument optionnel. % \begin{macrocode} \def\smc@exercicetitle{#1}% \smc@@@annexeexercice } \newcommand*\smc@@@annexeexercice[1][]{% % \end{macrocode} % On commence par passer au paragraphe suivant et réinitialiser le compteur % partie ainsi que la façon de composer les parties. % \begin{macrocode} \par\addvspace{\BeforeExerciceVSpace} \let\partie\smc@annexe@partie \setcounter{partie}{0} % \end{macrocode} % La présence d'un logo va faire qu'on ne composera pas le titre (ou % le texte) de la même façon. S'il y a un logo, on utilise la commande % |\parpic| pour habiller le logo. Sinon on ne fait rien de spécial. % \begin{macrocode} \@ifnotmtarg{#1}{% \setbox0=\hbox{#1}% \parpic[r]{\makebox[\wd0][l]{{#1}}} }% % \end{macrocode} % On compose le numéro de l'exercice. La couleur du cadre dépend du % fait que l'exercice est corrigé ou non. En fait, pour l'instant, les % exercices de la partie annexe ne seront pas corrigés et il n'y aura % qu'une seule couleur : celle du liseré. À part les couleurs, on % garde les mêmes macros de fonte et de longueurs que pour les % exercices des chapitres normaux. % \begin{macrocode} \refstepcounter{exercice}% \begin{pspicture}(0,0)(\ExerciceNumFrameWidth,\ExerciceNumFrameHeight) \ifsmc@exercicecorrige \psframe*[linewidth=0pt, linecolor=AnnexeExerciceCorrigeNumFrameColor] (0,-\ExerciceNumFrameDepth) (\ExerciceNumFrameWidth,\ExerciceNumFrameHeight) \else \psframe*[linewidth=0pt, linecolor=AnnexeExerciceNumFrameColor] (0,-\ExerciceNumFrameDepth) (\ExerciceNumFrameWidth,\ExerciceNumFrameHeight) \fi \rput[B](\dimexpr\ExerciceNumFrameWidth/2,0){% \textcolor{AnnexeExerciceNumColor}{\ExerciceNumFont \theexercice}% } \end{pspicture}% % \end{macrocode} % Y a-t-il un titre d'exercice ? % \begin{macrocode} \ifx\smc@exercicetitle\empty % \end{macrocode} % S'il n'y a pas de titre, on commence le texte de l'exercice (après % un certain espacement horizontal). % \begin{macrocode} \hspace{\ExerciceTextHSep}% \else % \end{macrocode} % S'il y a un titre, on le compose et on passe au paragraphe suivant. % \begin{macrocode} \hspace{\ExerciceTextHSep}% \textcolor{AnnexeExerciceTitleColor} {\ExerciceTitleFont \smc@exercicetitle}% \par\nobreak \fi } % \end{macrocode} % En fait, on utilisera plutôt la forme d'environnement pour entrer % les exercices. Le code terminal ne fait que placer un |\par| (cela % peut être utile pour activer un éventuel |\centering| en fin de % code. % \begin{macrocode} \def\endsmc@annexeexercice{\par} % \end{macrocode} % \end{environment} % \begin{macro}{\smc@annexesection} % Les annexes redéfinissent la macro |\section|. Pour cela on la % stocke sous la forme de la macro |\smc@annexesection|. Au départ, on % la définit comme une macro |\section| habituelle, en particulier, on % autorise la forme étoilée (même si pour l'instant elle n'apporte % rien de plus que la forme non étoilée). % \begin{macrocode} \newcommand*\smc@annexesection{% \@ifstar{\smc@annexesec}{\smc@annexesec}% } \newcommand*\smc@annexesec[2][]{% % \end{macrocode} % On commence par regarder si l'argument optionnel est vide. Si oui, % le titre court sera égal au titre long. % \begin{macrocode} \ifx\relax#1\relax \smc@@annexesec{#2}{#2}% \else \smc@@annexesec{#1}{#2}% \fi } % \end{macrocode} % À ce stade, on a un titre court en premier argument et un titre long % en deuxième argument. Le travail effectif peut commencer. % \begin{macrocode} \newcommand*\smc@@annexesec[2]{% \par\goodbreak\addvspace{\BeforeAnnexeSectionVSpace}% % \end{macrocode} % Le titre court sera éventuellement utilisé pour une TDM. Ce sera à % voir plus tard. % \begin{macrocode} \@ifmtarg{#1}{}{}% % \end{macrocode} % On compose le carré avec la bonne couleur. % \begin{macrocode} \begin{pspicture}(0,0)(\AnnexeSectionRuleWidth,\AnnexeSectionRuleWidth) \psframe*[linecolor=AnnexeSectionRuleColor] (0,0)(\AnnexeSectionRuleWidth,\AnnexeSectionRuleWidth) \end{pspicture}% \hspace{\AnnexeSectionRuleHSpace}% % \end{macrocode} % On place enfin le titre dans une minipage de la bonne largeur. % \begin{macrocode} \begin{minipage}[t]{\dimexpr\linewidth-\AnnexeSectionRuleWidth-\AnnexeSectionRuleHSpace} \AnnexeSectionTitleFont \textcolor{AnnexeSectionTitleColor}{#2}% \end{minipage} % \end{macrocode} % On termine en plaçant un espacement vertical donné et une % interdiction de coupe. Il n'y a pas besoin de s'occuper du retrait % d'alinéa puisqu'il n'y en a pas ! % \begin{macrocode} \par\nobreak\addvspace{\AfterAnnexeSectionVSpace} } % \end{macrocode} % \end{macro} % \subsection{Lexique} % \begin{macro}{\MotDefinition} % La classe propose un système de glossaire. La macro |\MotDefinition| % demande un premier argument qui est le mot à placer dans le lexique % et un deuxième argument. Si le deuxième argument est vide, le mot à % placer dans le lexique est également composé en gras à l'emplacement % actuel et le lexique contient une référence à ce mot avec un renvoi % à la page en cours. Si le deuxième argument n'est pas vide, la % commande ne provoque rien au niveau où elle est émise et le mot sera % placé dans le lexique avec une définition correspondant au deuxième % argument. % % Il y aura également un deuxième argument optionnel situé entre les % deux arguments obligatoires qui permettra d'indiquer la chaîne de % tri pour le lexique. % % Pour homogénéiser le traitement, on place le tout dans un fichier % annexe. % \begin{macrocode} \newcommand*\MotDefinition[2][]{% \def\smc@MDlexique{#1}% \def\smc@MDentree{#2}% \smc@MotDefinition } \newcommand*\smc@MotDefinition[2][]{% \@ifmtarg{#2}{% % \end{macrocode} % Si le deuxième argument obligatoire est vide, on compose le premier % en gras et on écrit dans le fichier annexe avec la référence à la % page en cours. % \begin{macrocode} \textbf{\smc@MDentree}% \ifx\smc@MDlexique\empty % \end{macrocode} % Si l'argument optionnel est vide, l'entrée est le mot mis en % gras. On ne fait pas de mise en forme directe avec ce type d'entrée % puisqu'il peut y avoir plusieurs pages référencées. % \begin{macrocode} \smc@noprotectaddtolexique{#1}{\smc@MDentree}{\thepage}% \else % \end{macrocode} % Sinon, l'argument optionnel devient l'entrée du Lexique. % \begin{macrocode} \smc@noprotectaddtolexique{#1}{\smc@MDlexique}{\thepage}% \fi } {% % \end{macrocode} % Si le deuxième argument n'est pas vide, on ne compose pas le premier % argument et on écrit dans le fichier annexe avec le deuxième % argument comme texte explicatif. % \begin{macrocode} \ifx\smc@MDlexique\empty \smc@addtolexique{#1}{\smc@MDentree}{% \par\nobreak #2% \par\addvspace{\AfterEntreeVSpace}% }% \else \smc@addtolexique{#1}{\smc@MDlexique}{% \par\nobreak #2% \par\addvspace{\AfterEntreeVSpace}% }% \fi }% } % \end{macrocode} % Pour les entrées d'index, on se sert de la macro |\Lexique| qui % permet de faire référence à un autre mot du lexique. Elle ne fait % que mettre le mot dans la bonne couleur. % \begin{macrocode} \newcommand*\Lexique[1]{% \textcolor{LexiqueEntreeColor}{\LexiqueFont #1}% } % \end{macrocode} % Il reste à définir la macro d'ajout dans le fichier % annexe. L'empilement des |\unexpanded| va permettre d'écrire ce que % l'on veut dans le deuxième argument des entrées de lexique. Le % premier |\unexpanded| va écrire |\unexpanded{...}| dans le fichier % aux et le deuxième permettra l'écriture sans développement dans le % fichier lex. % \begin{macrocode} \long\def\smc@addtolexique#1#2#3{% \protected@write\@auxout{} {% \string\@writefile{lex}{% \protect\smc@insertlexique[#1]{#2}{\unexpanded{\unexpanded{#3}}}% }% }% } % \end{macrocode} % On fait une deuxième version non protégée pour pouvoir avoir le % numéro de page. Pour gérer les pages multiples, c'est la macro % |\smc@preinsertlexique| qui est alors utilisée. % \begin{macrocode} \long\def\smc@noprotectaddtolexique#1#2#3{% \protected@write\@auxout{} {% \string\@writefile{lex}{% \protect\smc@preinsertlexique[#1]{#2}{#3}% }% }% } % \end{macrocode} % \end{macro} % \begin{macro}{\smc@addtolom} % Macro équivalente pour écrire dans la table des méthodes. % \begin{macrocode} \long\def\smc@addtolom#1{% \protected@write\@auxout{} {% \protect\expandafter\global\protect\csname smc@lom\smc@thema@init true\protect\endcsname % \end{macrocode} % On doit écrire dans le fichier lom qui dépend du thème général en % cours (il y a trois fichiers séparés). % \begin{macrocode} \string\@writefile{lom\smc@thema@init}{% \protect\l@methode{\unexpanded{\unexpanded{#1}}}{\thepage}% }% }% } % \end{macrocode} % \end{macro} % % \begin{macro}{\AfficheLexique} % Pour afficher le lexique on utilise la seule macro % |\AfficheLexique|. Celle-ci accepte un argument optionnel indiquant % le nombre de colonnes sur lesquelles sera composé le lexique. Pour % avoir un maximum de souplesse, la valeur par défaut sera stockée % dans la variable publique |\NombreColonnesLexique|. La classe fixe à % 2 cette valeur par défaut. % \begin{macrocode} \newcommand*\NombreColonnesLexique{2} \newcommand*\AfficheLexique[1][\NombreColonnesLexique]{% % \end{macrocode} % On commence par changer de page et indiquer les styles de page à % utiliser pour la suite. % \begin{macrocode} \clearpage \pagestyle{lexique} \thispagestyle{firstlexique} % \end{macrocode} % On définit ensuite les éléments permis dans le lexique. % \begin{macrocode} \let\itemize\smc@lexiqueitemize \let\enditemize\endsmc@lexiqueitemize \let\colitemize\smc@lexiquecolitemize \let\endcolitemize\endsmc@lexiquecolitemize \let\enumerate\smc@lexiqueenumerate \let\endenumerate\endsmc@lexiqueenumerate \let\colenumerate\smc@lexiquecolenumerate \let\endcolenumerate\endsmc@lexiquecolenumerate \let\partie\smc@nopartie \let\exercice\smc@noexercice \let\endexercice\endsmc@noexercice \let\corrige\smc@nocorrige \let\endcorrige\endsmc@nocorrige \def\smc@currpart{Lexique}% % \end{macrocode} % On compose le titre du lexique. % \begin{macrocode} \rput[Bl](0,9mm){\LexiqueTitleFont \MakeUppercase{\StringLexique}} \vspace*{-5mm} % \end{macrocode} % Enfin, on ouvre l'environnement de colonnage avant d'appeler la % macro de mise en forme du lexique. % \begin{macrocode} \begingroup \columnsep \dimexpr \SquareWidth*2 \columnseprule \LexiqueRuleWidth \def\columnseprulecolor{\color{LexiqueColumnRuleColor}}% % \end{macrocode} % On met le compteur d'entrées du lexique à zéro avant de lire le % fichier de lexique. La lecture finale se fera avec les macros finales % de lecture des entrées. Auparavant, il aura fallu lire le fichier % avec les macros de lecture des doublons. % \begin{macrocode} \smc@numlexique \z@ \begin{multicols}{#1}% % \end{macrocode} % Avant la lecture pour les doublons, on initialise les macros % |\smc@insertlexique| et |\smc@preinsertlexique| à leurs valeurs % initiales. % \begin{macrocode} \let\smc@insertlexique\smc@insertlexiqueinitial \let\smc@preinsertlexique\smc@preinsertlexiqueinitial % \end{macrocode} % La première lecture ne doit pas se faire avec |\@starttoc| puisque % cette commande détruit le fichier. En revanche cela demande quelques % précautions. D'abord, faire de |@| une lettre ensuite utiliser % |\@input| au lieu de |\input| puisque le fichier n'existe pas % nécessairement. % \begin{macrocode} \begingroup \makeatletter \@input{\jobname.lex}% \endgroup \let\smc@insertlexique\smc@insertlexiquefinal \let\smc@preinsertlexique\smc@preinsertlexiquefinal \@starttoc{lex}% % \end{macrocode} % À ce stade, les entrées ont été mises en forme. Il faut les classer % avant de les composer effectivement. Le tri se fera avec % l'algorithme de tri fusion en se servant du tableau % |\tri|. Comme le tri va porter à la fois sur |\tri| et % |\lexique|, il va être plus efficace de construire une liste % d'index et de faire le tri sur ces index. Au départ, le tableau % d'index est index[1]=1, index[]=2, etc. ce qui fait que le contenu % du tableau est son indice. % \begin{macrocode} \multido{\n=1+1}{\smc@numlexique}{% \expandafter\xdef\csname index\n\endcsname{\n}% }% % \end{macrocode} % Il faut également faire attention au cas où la liste est vide. Si % oui, il ne faut pas lancer le tri fusion (ni affficher). % \begin{macrocode} \ifnum\smc@numlexique>\z@ \smc@trifusion{1}{\the\smc@numlexique}% % \end{macrocode} % Affichage effectif des entrées. Avant de lancer cet affichage, il % faut initialiser la lettre initiale en cours. Les lettres en cours % ne peuvent être que des bas de casse non diacritiques on va donc % initialiser avec une capitale pour être certain que la première % entrée déclenche un changement de lettre. % \begin{macrocode} \def\smc@currentletter{A}% \multido{\n=1+1}{\smc@numlexique}{% \smc@afficheentree{\n}% }% \fi \end{multicols} \endgroup } % \end{macrocode} % La macro d'affichage des entrées de lexique gère également % l'affichage des changement de lettre. L'argument est l'index de % l'entrée. % \begin{macrocode} \newcommand*\smc@afficheentree[1]{% % \end{macrocode} % Le premier travail est de détecter la première lettre de |tri[#1]| % et de voir si celle-ci est la première d'une nouvelle série. Cela se % fait avec l'appel à la macro |\smc@testfirstletter| en passant la % chaîne de tri (en bas de casse) comme argument délimité. % \begin{macrocode} \edef\smc@arg{\csname tri\csname index#1\endcsname\endcsname}% \expandafter\smc@testfirstletter\smc@arg\@nil % \end{macrocode} % On affiche ensuite l'entrée proprement dite. % \begin{macrocode} \csname lexique\csname index#1\endcsname\endcsname\endgraf } % \end{macrocode} % La macro |\smc@testfirstletter| regarde la première lettre de son % argument, affiche le bandeau de nouvelle lettre si cette lettre est % différente de |\smc@currentletter|. % \begin{macrocode} \def\smc@testfirstletter#1#2\@nil{% \def\smc@arg{#1}% \unless\ifx\smc@arg\smc@currentletter \def\smc@currentletter{#1}% \par\addvspace{\BeforeFirstLetterVSpace} \setbox0=\hbox{% \textcolor{FirstLetterTxtColor}{\FirstLetterFont \MakeUppercase{#1}}% }% \begin{pspicture}(0,\dimexpr\ht0+\FirstLetterFrameHSep) \psframe[linewidth=0pt, linestyle=none, fillstyle=solid, fillcolor=FirstLetterBkgColor] (0,\dimexpr\ht0+\FirstLetterFrameHSep) (\linewidth,-\FirstLetterFrameHSep) \rput[B](0.5\linewidth,0){\box0} \end{pspicture} \par\addvspace{\AfterFirstLetterVSpace} \nobreak \fi } % \end{macrocode} % \end{macro} % \begin{macro}{\smc@trifusion} % La macro |\smc@trifusion| effectue le tri des entrées % |\lexique| en se servant de la table |\tri|. Pour cela, % les échanges effectifs se font sur la table d'index % |\index|. Cette macro, dans la phase de fusion, va utiliser % cinq compteurs. % \begin{macrocode} \newcount\smc@firsttable \newcount\smc@endfirsttable \newcount\smc@secondtable \newcount\smc@endsecondtable \newcount\smc@writetable % \end{macrocode} % Au départ, on passe en paramètre les index extrêmes de la table. % \begin{macrocode} \newcommand*\smc@trifusion[2]{% \ifnum#1=#2 % \end{macrocode} % Si la table à trier ne fait qu'un seul élément, on ne fait rien. % \begin{macrocode} \else % \end{macrocode} % Sinon, on trie les deux sous-tables en coupant en deux. Les deux % sous-tables ont donc chacune au moins un élément. % \begin{macrocode} \edef\smc@arg{{#1}{\the\numexpr(#1+#2-1)/2}}% \expandafter\smc@trifusion\smc@arg \edef\smc@arg{{\the\numexpr(#1+#2+1)/2}{#2}}% \expandafter\smc@trifusion\smc@arg % \end{macrocode} % et on fusionne les deux sous-tables triées qui ont donc toujours au % moins un élément chacune. % \begin{macrocode} \smc@fusion{#1}{#2}% \fi } % \end{macrocode} % Pour le mécanisme de fusion, on fait appel à la macro % |\smc@fusion|. % \begin{macrocode} \newcommand*\smc@fusion[2]{% % \end{macrocode} % On commence par initialiser le pointeur sur le début la première % liste, le pointeur sur le début de la seconde liste, les bornes pour % la première liste et la seconde liste et le pointeur sur la zone % d'écriture % \begin{macrocode} \smc@firsttable=#1 \smc@endfirsttable=\numexpr(#1+#2+1)/2 \smc@secondtable=\numexpr(#1+#2+1)/2 \smc@endsecondtable=\numexpr #2+1 % \end{macrocode} % L'initialisation de l'index d'écriture se fait avec la valeur % antérieure à la valeur de départ car on procède à l'incrémentation % avant l'utilisation. % \begin{macrocode} \smc@writetable=\numexpr #1-1 % \end{macrocode} % On réalise alors l'appel récursif sur la première phase de fusion % (où les deux sous-tables n'ont pas encore été épuisées). % \begin{macrocode} \let\smc@next\smc@fusionrec \smc@next % \end{macrocode} % La fusion a eu lieu dans un tableau temporaire, il faut la réécrire % Appel récursif sur la bonne fonction dans le tableau index. % \begin{macrocode} \multido{\n=#1+1}{\numexpr #2-#1+1}{% \edef\smc@tmp{\csname tmp\n\endcsname}% \expandafter\xdef\csname index\n\endcsname{\smc@tmp}% } } % \end{macrocode} % La distribution des deux sous-tables dans la table temporaire % (triée) se fait avec |\smc@fusionrec|. % \begin{macrocode} \newcommand*\smc@fusionrec{% % \end{macrocode} % On commence par mettre l'index d'écriture à jour. % \begin{macrocode} \advance\smc@writetable \@ne % \end{macrocode} % Ensuite, on compare les chaînes de tri ayant les index indiqués de % chaque sous-tableau. À l'appel de cette fonction, aucun des deux % sous-tableaux n'a été épuisé. % \begin{macrocode} \ifnum \pdfstrcmp{% \csname tri\csname index\the\smc@firsttable\endcsname\endcsname }{% \csname tri\csname index\the\smc@secondtable\endcsname\endcsname }=-1 % \end{macrocode} % Si c'est tri[index[first]] qui est inférieur, c'est index[first] qui % prend place dans le sous-tableau temporaire. % \begin{macrocode} \edef\smc@tmp{\csname index\the\smc@firsttable\endcsname}% \expandafter\let\csname tmp\the\smc@writetable\endcsname\smc@tmp % \end{macrocode} % On incrémente alors le pointeur du premier sous-tableau et on teste % si on n'a pas épuisé ce premier sous-tableau. % \begin{macrocode} \advance\smc@firsttable \@ne \ifnum\smc@firsttable=\smc@endfirsttable % \end{macrocode} % Si le premier sous-tableau est épuisé, il faut remplir la fin du % tableau temporaire avec le second sous-tableau. % \begin{macrocode} \let\smc@next\smc@fusionsecond \fi \else % \end{macrocode} % Si c'est tri[index[second]] qui est inférieur, c'est index[second] qui % prend place dans le sous-tableau temporaire. % \begin{macrocode} \edef\smc@tmp{\csname index\the\smc@secondtable\endcsname}% \expandafter\let\csname tmp\the\smc@writetable\endcsname\smc@tmp % \end{macrocode} % On incrémente alors le pointeur du premier sous-tableau et on teste % si on n'a pas épuisé ce premier sous-tableau. % \begin{macrocode} \advance\smc@secondtable \@ne \ifnum\smc@secondtable=\smc@endsecondtable % \end{macrocode} % Si le second sous-tableau est épuisé, il faut remplir la fin du % tableau temporaire avec le premier sous-tableau. % \begin{macrocode} \let\smc@next\smc@fusionfirst \fi \fi % \end{macrocode} % Appel récursif sur la bonne fonction. % \begin{macrocode} \smc@next } % \end{macrocode} % Il reste à définir les deux macros qui remplissent la fin du tableau % temporaire avec le sous-tableau non épuisé. % \begin{macrocode} \newcommand*\smc@fusionfirst{% % \end{macrocode} % À l'appel, le sous-tableau ne peut pas être vide, on effectue donc % la copie d'abord puis les tests de fin de tableau ensuite. % \begin{macrocode} \advance\smc@writetable \@ne \edef\smc@tmp{\csname index\the\smc@firsttable\endcsname}% \expandafter\let\csname tmp\the\smc@writetable\endcsname\smc@tmp \advance\smc@firsttable \@ne \ifnum\smc@firsttable=\smc@endfirsttable % \end{macrocode} % Si le premier tableau est épuisé, on a fini la fusion % \begin{macrocode} \let\smc@next\relax \fi \smc@next } % \end{macrocode} % La macro |\smc@fusionsecond| fonctionne exactement de la même façon. % \begin{macrocode} \newcommand*\smc@fusionsecond{% \advance\smc@writetable \@ne \edef\smc@tmp{\csname index\the\smc@secondtable\endcsname}% \expandafter\let\csname tmp\the\smc@writetable\endcsname\smc@tmp \advance\smc@secondtable \@ne \ifnum\smc@secondtable=\smc@endsecondtable \let\smc@next\relax \fi \smc@next } % \end{macrocode} % \end{macro} % \begin{macro}{\smc@insertlexique} % Cette macro existe en deux versions à cause du travail sur les % doublons au niveau du lexique. La première version est une version % fantome qui permet de supprimer les actions de cette macro, la % deuxième version est celle qui permet la composition effective de % l'entrée dans le lexique. % % On commence par la version fantome qui ne fait qu'avaler les paramètres. % \begin{macrocode} \newcommand\smc@insertlexiqueinitial[3][]{} % \end{macrocode} % La deuxième version est celle qui effectue le travail % véritable. Elle réalise deux conversions : % \begin{itemize} % \item elle met en capitale la première lettre du mot (ou de % l'expression) et sauvegarde le résultat dans la macro % |\lexique| ; % \item elle construit une chaîne équivalente sans diacritique (repéré % avec |IeC|) et sauvegarde le résultat dans la macro |\tri|. % \end{itemize} % \begin{macrocode} \newcount\smc@numlexique \newcommand\smc@insertlexiquefinal[3][]{% \global\advance\smc@numlexique \@ne % \end{macrocode} % Appel de la macro auxiliaire pour mettre la première lettre de % l'entrée en capitale et régler la mise en forme globale de % l'ensemble de l'entrée. % \begin{macrocode} \@ifmtarg{#1}% {\smc@@FirstUppercase#2\@nil#3\@nil}% % \end{macrocode} % Si l'argument optionnel de tri n'est pas vide, on ne cherche pas à % mettre en forme l'entrée de l'index. % \begin{macrocode} {\expandafter\protected@xdef\csname lexique\the\smc@numlexique\endcsname {% \protect\textcolor{LexiqueEntreeColor} {% \protect\LexiqueEntreeFont #2% }% \unexpanded{#3}% }% }% % \end{macrocode} % Appel de la macro auxiliaire pour écrire tout en minuscule sans % diacritique. % \begin{macrocode} \@ifmtarg{#1}% {\smc@sansdiacritique{#2}}% {\smc@sansdiacritique{#1}}% % \end{macrocode} % La macro précédente renvoie la chaîne sans espace et sans % diacritique dans la macro |\smc@tri|. On l'écrit dans % |\tri|. % \begin{macrocode} \expandafter\xdef\csname tri\the\smc@numlexique\endcsname{\smc@tri}% } % \end{macrocode} % La macro |\smc@preinsertlexique| existe également en deux versions % pour traiter les doublons. Et c'est effectivement les entrées % utilisant cette macro qui nécessitent le traitement particulier. % \begin{macrocode} \newcommand\smc@preinsertlexiqueinitial[3][]{% % \end{macrocode} % Le repérage des doublons se fera sur le critère de tri. On commence % donc par calculer ce dernier % \begin{macrocode} \@ifmtarg{#1}% {\smc@sansdiacritique{#2}}% {\smc@sansdiacritique{#1}}% % \end{macrocode} % La chaîne de tri est stockée dans |\smc@tri|. On regarde si la macro % |\nb-| existe. % \begin{macrocode} \ifcsname nb-\smc@tri\endcsname % \end{macrocode} % La macro existe, il y a donc des doublons. On met à jour les macros % |\nb-| et |\pages-| qui contiennent repectivement le % nombre de pages et la liste des pages de l'entrée en cours. Il faut % également que la page en cours ne soit pas la dernière entrée. % % On incrémente |\nb-| et on ajoute la page indiquée à % |\pages-|. % \begin{macrocode} \unless\ifnum\csname lastpage-\smc@tri\endcsname=#3 \expandafter\gdef\csname lastpage-\smc@tri\endcsname{#3}% \expandafter\xdef\csname nb-\smc@tri\endcsname{% \the\numexpr\csname nb-\smc@tri\endcsname+1 }% \edef\smc@tmp{\csname pages-\smc@tri\endcsname}% \expandafter\xdef\csname pages-\smc@tri\endcsname{\smc@tmp, #3}% \fi \else % \end{macrocode} % Si la macro n'existe pas, c'est que c'est la première occurrence de % cette entrée. On initialise la page en cours et les deux macros. % \begin{macrocode} \expandafter\gdef\csname lastpage-\smc@tri\endcsname{#3}% \expandafter\gdef\csname nb-\smc@tri\endcsname{1}% \expandafter\gdef\csname pages-\smc@tri\endcsname{#3}% \fi } % \end{macrocode} % La verion finale permet la composition proprement dite. % \begin{macrocode} \newcommand\smc@preinsertlexiquefinal[3][]{% % \end{macrocode} % On regarde si l'entrée à déjà été rencontrée. Pour cela, on si la % macro |\affiche-| existe. % \begin{macrocode} \@ifmtarg{#1}% {\smc@sansdiacritique{#2}}% {\smc@sansdiacritique{#1}}% \ifcsname affiche-\smc@tri\endcsname \else % \end{macrocode} % Il n'y aura traitement que si cette macro n'existe pas. Dans ce cas, % on commence par définir cette macro pour éviter les doublons. % \begin{macrocode} \expandafter\gdef\csname affiche-\smc@tri\endcsname{true}% % \end{macrocode} % Le reste du traitement est presque comme celui d'une entrée avec % définition. La différence est qu'ici, on affiche une liste de pages % au lieu d'une définition et qu'on a besoin pour cela du critère de % tri (d'où l'appel initial de |\smc@sansdiacritique|). % \begin{macrocode} \@ifmtarg{#1}% {\smc@sansdiacritique{#2}}% {\smc@sansdiacritique{#1}}% \global\advance\smc@numlexique \@ne % \end{macrocode} % On va s'occuper de l'entrée numéro |\smc@numlexique|. % \begin{macrocode} \@ifmtarg{#1}% % \end{macrocode} % S'il n'y a pas d'argument optionnel, le traitement se fera avec une % macro annexe. % \begin{macrocode} {\smc@@preFirstUppercase#2\@nil#3\@nil}% % \end{macrocode} % Sinon, on compose l'entrée comme d'habitude. % \begin{macrocode} {\expandafter\protected@xdef\csname lexique\the\smc@numlexique\endcsname {% \protect\textcolor{LexiqueEntreeColor}{% \protect\LexiqueEntreeFont #2% }% % \end{macrocode} % La valeur |4.4em| est en fait $10\times0.44\mathtt{em}$. Elle sert % à gérer correctement l'alignement des points de suite en assurant un % minimum de 10 points de suite. % \begin{macrocode} \space\hbox to4.4em{\rdotfill}\kern-0.44em\rdotfill % \end{macrocode} % Test de pluriel pour le mot \og Page(s) \fg{}. % \begin{macrocode} \ifnum\csname nb-\smc@tri\endcsname>\@ne \protect\emph{ Pages \csname pages-\smc@tri\endcsname}% \else \protect\emph{ Page \csname pages-\smc@tri\endcsname}% \fi }% }% % \end{macrocode} % La macro |\smc@tri| est déjà calculée, on peut s'en servir % directement. % \begin{macrocode} \expandafter\xdef\csname tri\the\smc@numlexique\endcsname {\smc@tri}% \fi } % \end{macrocode} % Pour gérer les diacritiques, on a besoin d'un très grand nombre de % macros de comparaison. La première détecte le |\IeC| indiquant un % caractère hors ASCII. Les autres permettent de distinguer toutes les % diacritiques et ligatures utilisées en français (et un peu au-delà). % \begin{macrocode} \def\smc@IeC{\IeC} \def\smcl@Ag{\`A} \def\smcl@Aa{\'A} \def\smcl@Ac{\^A} \def\smcl@At{\~A} \def\smcl@Au{\"A} \def\smcl@Ar{\r A} \def\smcl@AE{\AE} \def\smcl@Cc{\c C} \def\smcl@Eg{\`E} \def\smcl@Ea{\'E} \def\smcl@Ec{\^E} \def\smcl@Eu{\"E} \def\smcl@Ig{\`I} \def\smcl@Ia{\'I} \def\smcl@Ic{\^I} \def\smcl@Iu{\"I} \def\smcl@Nn{\~N} \def\smcl@Og{\`O} \def\smcl@Oa{\'O} \def\smcl@Oc{\^O} \def\smcl@Ot{\~O} \def\smcl@Ou{\"O} \def\smcl@Oo{\O} \def\smcl@OE{\OE} \def\smcl@Ug{\`U} \def\smcl@Ua{\'U} \def\smcl@Uc{\^U} \def\smcl@Uu{\"U} \def\smcl@Yt{\"Y} \def\smcl@ss{\ss} \def\smcl@ag{\`a} \def\smcl@aa{\'a} \def\smcl@ac{\^a} \def\smcl@at{\~a} \def\smcl@au{\"a} \def\smcl@ar{\r a} \def\smcl@ae{\ae} \def\smcl@cc{\c c} \def\smcl@eg{\`e} \def\smcl@ea{\'e} \def\smcl@ec{\^e} \def\smcl@eu{\"e} \def\smcl@ig{\`i} \def\smcl@ia{\'i} \def\smcl@ic{\^i} \def\smcl@iu{\"i} \def\smcl@nn{\~n} \def\smcl@og{\`o} \def\smcl@oa{\'o} \def\smcl@oc{\^o} \def\smcl@ot{\~o} \def\smcl@ou{\"o} \def\smcl@oo{\o} \def\smcl@oe{\oe} \def\smcl@ug{\`u} \def\smcl@ua{\'u} \def\smcl@uc{\^u} \def\smcl@uu{\"u} \def\smcl@yt{\"y} % \end{macrocode} % La première macro auxiliaire permet de composer son entrée avec sa % première lettre en capitale et toutes les autres en bas de casse. % \begin{macrocode} \long\def\smc@@FirstUppercase#1#2#3\@nil#4\@nil{% \def\smc@arg{#1}% \ifx\smc@arg\smc@IeC % \end{macrocode} % Si la première unité lexicale est |\IeC|, c'est qu'il faut prendre % les deux première unités lexicales pour la première lettre à mettre % en capitale. % \begin{macrocode} \expandafter\protected@xdef\csname lexique\the\smc@numlexique\endcsname {% \protect\textcolor{LexiqueEntreeColor} {% \protect\LexiqueEntreeFont \MakeUppercase{#1#2}% \MakeLowercase{#3}% }% \unexpanded{#4}% }% \else % \end{macrocode} % Sinon, on ne met en capitale que la première lettre qui correpond à % la première unité lexicale. % \begin{macrocode} \expandafter\protected@xdef\csname lexique\the\smc@numlexique\endcsname {% \protect\textcolor{LexiqueEntreeColor} {% \protect\LexiqueEntreeFont \MakeUppercase{#1}% \MakeLowercase{#2#3}% }% \unexpanded{#4}% }% \fi } % \end{macrocode} % Il existe une variante à la macro précédente pour les entrées avec % liste de pages. Elle est identique sauf en ce qui concerne % l'affichage de la liste de page. % \begin{macrocode} \long\def\smc@@preFirstUppercase#1#2#3\@nil#4\@nil{% \def\smc@arg{#1}% \ifx\smc@arg\smc@IeC \expandafter\protected@xdef\csname lexique\the\smc@numlexique\endcsname {% \protect\textcolor{LexiqueEntreeColor} {% \protect\LexiqueEntreeFont \MakeUppercase{#1#2}% \MakeLowercase{#3}% }% \space\hbox to4.4em{\rdotfill}\kern-0.44em\rdotfill \ifnum\csname nb-\smc@tri\endcsname>\@ne \protect\emph{ Pages \csname pages-\smc@tri\endcsname}% \else \protect\emph{ Page \csname pages-\smc@tri\endcsname}% \fi }% \else \expandafter\protected@xdef\csname lexique\the\smc@numlexique\endcsname {% \protect\textcolor{LexiqueEntreeColor} {% \protect\LexiqueEntreeFont \MakeUppercase{#1}% \MakeLowercase{#2#3}% }% \space\hbox to4.4em{\rdotfill}\kern-0.44em\rdotfill \ifnum\csname nb-\smc@tri\endcsname>\@ne \protect\emph{ Pages \csname pages-\smc@tri\endcsname}% \else \protect\emph{ Page \csname pages-\smc@tri\endcsname}% \fi }% \fi } % \end{macrocode} % Deuxième macro auxiliaire pour récrire un mot ou une expression sans % diacritiques, ligatures et espace et le tout en minuscule. Cela va % servir pour effectuer un tri alphabétique. % \begin{macrocode} \def\smc@sansdiacritique#1{% % \end{macrocode} % On commence par vider la macro qui va recevoir le résultat. % \begin{macrocode} \def\smc@tri{}% % \end{macrocode} % Pour avoir la forme avec les éventuels |\IeC|, il faut procéder à un % développement protégé de l'argument. % \begin{macrocode} \protected@edef\smc@arg{#1}% % \end{macrocode} % Ensuite, on initialise et on lance le traitement récurrent. % \begin{macrocode} \let\smc@next\smc@sd \expandafter\smc@next\smc@arg\@nil } % \end{macrocode} % Macro récursive de remplacement d'une diacritique par la lettre % simple correspondante ou de la ligature par les deux lettres la % composant. Elle met également tout en minuscule. % \begin{macrocode} \def\smc@sd#1{% \def\smc@arg{#1}% \ifx\smc@arg\@nnil % \end{macrocode} % Si on a atteint le |\@nil|, on arrête la récurrence. % \begin{macrocode} \let\smc@next\relax \else \ifx\smc@arg\smc@IeC % \end{macrocode} % Si on vient de lire un |\IeC|, on a à procéder à un traitement % spécial assuré par la macro |\smc@@sd|. % \begin{macrocode} \let\smc@next\smc@@sd \else % \end{macrocode} % Sinon, c'est une lettre non diacritique et on la recopie dans la % macro de résultat en minuscule. % \begin{macrocode} \def\smc@arg{#1}% \ifnum`#1<`A \edef\smc@tri{\smc@tri#1}% \else\ifnum`#1>`Z \edef\smc@tri{\smc@tri#1}% \else \edef\smc@tri{\smc@tri\smc@bdc{\numexpr`#1-`A}}% \fi\fi \fi \fi \smc@next } % \end{macrocode} % Macro pour changer les capitales ASCII en bas de casse ASCII % correspondant. L'argument est le rang de la capitale (de 0 à 25) % \begin{macrocode} \newcommand*\smc@bdc[1]{% \ifcase#1 a% \or b% \or c% \or d% \or e% \or f% \or g% \or h% \or i% \or j% \or k% \or l% \or m% \or n% \or o% \or p% \or q% \or r% \or s% \or t% \or u% \or v% \or w% \or x% \or y% \or z% \else ???% \fi } % \end{macrocode} % Macro pour changer les diacritiques (ou ligatures) en équivalent % ASCII (minuscule). % \begin{macrocode} \def\smc@@sd#1{% \def\smc@arg{#1} \ifx\smc@arg\smcl@Ag \edef\smc@tri{\smc@tri a}% \else\ifx\smc@arg\smcl@Aa \edef\smc@tri{\smc@tri a}% \else\ifx\smc@arg\smcl@Ac \edef\smc@tri{\smc@tri a}% \else\ifx\smc@arg\smcl@At \edef\smc@tri{\smc@tri a}% \else\ifx\smc@arg\smcl@Au \edef\smc@tri{\smc@tri a}% \else\ifx\smc@arg\smcl@Ar \edef\smc@tri{\smc@tri a}% \else\ifx\smc@arg\smcl@AE \edef\smc@tri{\smc@tri ae}% \else\ifx\smc@arg\smcl@Cc \edef\smc@tri{\smc@tri c}% \else\ifx\smc@arg\smcl@Eg \edef\smc@tri{\smc@tri e}% \else\ifx\smc@arg\smcl@Ea \edef\smc@tri{\smc@tri e}% \else\ifx\smc@arg\smcl@Ec \edef\smc@tri{\smc@tri e}% \else\ifx\smc@arg\smcl@Eu \edef\smc@tri{\smc@tri e}% \else\ifx\smc@arg\smcl@Ig \edef\smc@tri{\smc@tri i}% \else\ifx\smc@arg\smcl@Ia \edef\smc@tri{\smc@tri i}% \else\ifx\smc@arg\smcl@Ic \edef\smc@tri{\smc@tri i}% \else\ifx\smc@arg\smcl@Iu \edef\smc@tri{\smc@tri i}% \else\ifx\smc@arg\smcl@Nn \edef\smc@tri{\smc@tri n}% \else\ifx\smc@arg\smcl@Og \edef\smc@tri{\smc@tri o}% \else\ifx\smc@arg\smcl@Oa \edef\smc@tri{\smc@tri o}% \else\ifx\smc@arg\smcl@Oc \edef\smc@tri{\smc@tri o}% \else\ifx\smc@arg\smcl@Ot \edef\smc@tri{\smc@tri o}% \else\ifx\smc@arg\smcl@Ou \edef\smc@tri{\smc@tri o}% \else\ifx\smc@arg\smcl@Oo \edef\smc@tri{\smc@tri o}% \else\ifx\smc@arg\smcl@OE \edef\smc@tri{\smc@tri oe}% \else\ifx\smc@arg\smcl@Ug \edef\smc@tri{\smc@tri u}% \else\ifx\smc@arg\smcl@Ua \edef\smc@tri{\smc@tri u}% \else\ifx\smc@arg\smcl@Uc \edef\smc@tri{\smc@tri u}% \else\ifx\smc@arg\smcl@Uu \edef\smc@tri{\smc@tri u}% \else\ifx\smc@arg\smcl@Yt \edef\smc@tri{\smc@tri y}% \else\ifx\smc@arg\smcl@ss \edef\smc@tri{\smc@tri s}% \else\ifx\smc@arg\smcl@ag \edef\smc@tri{\smc@tri a}% \else\ifx\smc@arg\smcl@aa \edef\smc@tri{\smc@tri a}% \else\ifx\smc@arg\smcl@ac \edef\smc@tri{\smc@tri a}% \else\ifx\smc@arg\smcl@at \edef\smc@tri{\smc@tri a}% \else\ifx\smc@arg\smcl@au \edef\smc@tri{\smc@tri a}% \else\ifx\smc@arg\smcl@ar \edef\smc@tri{\smc@tri a}% \else\ifx\smc@arg\smcl@ae \edef\smc@tri{\smc@tri ae}% \else\ifx\smc@arg\smcl@cc \edef\smc@tri{\smc@tri c}% \else\ifx\smc@arg\smcl@eg \edef\smc@tri{\smc@tri e}% \else\ifx\smc@arg\smcl@ea \edef\smc@tri{\smc@tri e}% \else\ifx\smc@arg\smcl@ec \edef\smc@tri{\smc@tri e}% \else\ifx\smc@arg\smcl@eu \edef\smc@tri{\smc@tri e}% \else\ifx\smc@arg\smcl@ig \edef\smc@tri{\smc@tri i}% \else\ifx\smc@arg\smcl@ia \edef\smc@tri{\smc@tri i}% \else\ifx\smc@arg\smcl@ic \edef\smc@tri{\smc@tri i}% \else\ifx\smc@arg\smcl@iu \edef\smc@tri{\smc@tri i}% \else\ifx\smc@arg\smcl@nn \edef\smc@tri{\smc@tri n}% \else\ifx\smc@arg\smcl@og \edef\smc@tri{\smc@tri o}% \else\ifx\smc@arg\smcl@oa \edef\smc@tri{\smc@tri o}% \else\ifx\smc@arg\smcl@oc \edef\smc@tri{\smc@tri o}% \else\ifx\smc@arg\smcl@ot \edef\smc@tri{\smc@tri o}% \else\ifx\smc@arg\smcl@ou \edef\smc@tri{\smc@tri o}% \else\ifx\smc@arg\smcl@oo \edef\smc@tri{\smc@tri o}% \else\ifx\smc@arg\smcl@oe \edef\smc@tri{\smc@tri oe}% \else\ifx\smc@arg\smcl@ug \edef\smc@tri{\smc@tri u}% \else\ifx\smc@arg\smcl@ua \edef\smc@tri{\smc@tri u}% \else\ifx\smc@arg\smcl@uc \edef\smc@tri{\smc@tri u}% \else\ifx\smc@arg\smcl@uu \edef\smc@tri{\smc@tri u}% \else\ifx\smc@arg\smcl@yt \edef\smc@tri{\smc@tri y}% \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi % \end{macrocode} % Les appels récursifs suivants reviennent sur |\smc@sd|. % \begin{macrocode} \let\smc@next\smc@sd \smc@next } % \end{macrocode} % \end{macro} % \subsection{Liste des méthodes} % \begin{macro}{\rdotfill} % Pour les besoins de |\l@methode| on a besoin de points de suite % calés sur la droite et non centré comme ceux proposés par \LaTeX. % \begin{macrocode} \newcommand*\rdotfill{% \leavevmode \leaders \hb@xt@ .44em{\hss.}\hfill \kern\z@ } % \end{macrocode} % \end{macro} % \begin{macro}{\l@methode} % La liste des méthodes emploie un mécanisme similaire à celui de la % table des matières. En particulier, la mise en forme des titres des % méthodes est assurée par la macro |\l@methode| qui prend deux % arguments : le titre et le numéro de page. % \begin{macrocode} \newcommand*\l@methode[2]{% \begin{minipage}[b]{\linewidth-1.5cm} \raggedright \ListeMethodeTitleFont \begin{pspicture}(0,0)(\TriangleMethodeSize,\TriangleMethodeSize) \pspolygon*[linecolor=\CorrigeChapterFrameColor] (0,0)(0,\TriangleMethodeSize) (\TriangleMethodeSize,\dimexpr\TriangleMethodeSize/2) \end{pspicture} \textcolor{ListeMethodeTitleColor}{#1}% \rdotfill \end{minipage}\kern-0.44em {\ListeMethodePageFont \rdotfill#2\strut}% \par\addvspace{\AfterMethodeVSpace} } % \end{macrocode} % \end{macro} % \begin{macro}{\ListeMethodesThemes} % La liste des méthodes se fait normalement dans l'ordre des thèmes % suivant : % \begin{itemize} % \item Statistiques et probabilité ; % \item Fonctions ; % \item Géométrie. % \end{itemize} % En réalité, c'est la macro |\ListeMethodesThemes| qui indiquera % quels seront les thèmes inclus et dans quel ordre. Pour cela, la % macro contiendra la liste des codes minuscules et majuscules de % chaque thème séparés par des virgules. Comme il y a possibilité % d'avoir des codes sur plusieurs lettres, il est plus sage de % spécifier ces lettres entre accolades. La classe donne l'ordre et le % contenu par défaut listé ci-dessus. % \end{macro} % \begin{macrocode} \newcommand\ListeMethodesThemes{{sp}{SP},{f}{F},{g}{G}} % \end{macrocode} % \begin{macro}{\AfficheListeMethodes} % La classe permet de faire la liste des méthodes. Pour cela, on % utilisera la macro |\AfficheListeMethodes|. % % Celle-ci utilise des cadres d'en-tête basés sur le même modèle que % celui des récréations mais avec des couleurs différentes et qui % dépendent du thème en cours. % \begin{macrocode} \newcommand*\smc@bandeaulistemethodes[1]{% \par\addvspace{\BeforeRecreationVSpace} \begin{pspicture}(0,0)(\linewidth,\dimexpr\SquareWidth*3) \psframe*[linewidth=0pt,linecolor=ChapterNumSquare5Color] (0,0)(\linewidth,\dimexpr\SquareWidth*3) \psset{fillstyle=solid} \smc@antidiagonal(0mm,0mm){ChapterNumSquare} \rput[Bl](\dimexpr \SquareWidth*4,\SquareWidth){% \textcolor{ChapterNumSquare0Color}{\RecreationFont #1}% } \psset{linewidth=0pt} \smc@putsquare(32,2){J1} \smc@putsquare(33,0){H4} \smc@putsquare(34,1){H2} \smc@putsquare(37,1){F3} \smc@putsquare(39,0){H2} \smc@putsquare(42,2){J2} \smc@putsquare(46,1){H4} \end{pspicture} \par\nobreak\addvspace{\AfterRecreationVSpace} } % \end{macrocode} % L'affichage ou non des blocs de liste de méthodes par thème est sous % la dépendance des booléens associés. % \begin{macrocode} \newif\ifsmc@lomsp \newif\ifsmc@lomf \newif\ifsmc@lomg % \end{macrocode} % On indique le nombre de colonnes de la liste des méthodes soit par % l'intermédiaire de la macro |\NombreColonnesListeMethodes|, soit en % utilisant l'argument optionnel de |\AfficheListeMethodes|. % \begin{macrocode} \newcommand*\NombreColonnesListeMethodes{2} \newcommand*\AfficheListeMethodes[1][\NombreColonnesListeMethodes]{% % \end{macrocode} % On commence par changer de page et indiquer les styles de page à % utiliser pour la suite. % \begin{macrocode} \clearpage \pagestyle{affichemethode} \thispagestyle{firstaffichemethode} % \end{macrocode} % On compose le titre de l'annexe. % \begin{macrocode} \rput[Bl](0,9mm){\ListeMethodeChapterFont \MakeUppercase{\StringListeMethode}} \vspace*{-5mm} % \end{macrocode} % Enfin, on ouvre l'environnement de colonnage avant d'appeler les % trois fichiers qui contiennent les listes des méthodes. % \begin{macrocode} \begingroup \columnsep \dimexpr \SquareWidth*2 \columnseprule \ListeMethodeRuleWidth \def\columnseprulecolor{\color{ListeMethodeColumnRuleColor}}% % \end{macrocode} % Avant d'afficher la liste des méthodes, il faut tuer la macro % |\MethodeRefExercice| % \begin{macrocode} \renewcommand*\MethodeRefExercice{\@ifstar{\@gobble}{\@gobble}} % \end{macrocode} % On sauvegarde le nombre de colonnes dans une macro auxiliaire qui % servira dans |\smc@AfficheListeMethodesTheme|. % \begin{macrocode} \def\smc@NombreColonnesListeMethodes{#1}% % \end{macrocode} % On compose maintenant la liste des méthodes dans l'ordre des thèmes indiqués. % \begin{macrocode} \tracingifs=1 \@for\smc@currtheme:=\ListeMethodesThemes\do{% \expandafter\smc@AfficheListeMethodesTheme\smc@currtheme }% \endgroup } % \end{macrocode} % La macro suivante affiche la liste des méthodes pour le thème donné % en arguments (la ou les lettres minuscules puis la ou les lettres % capitales). % \begin{macrocode} \newcommand\smc@AfficheListeMethodesTheme[2]{% % \end{macrocode} % La liste des méthodes pour le thème ne sera affichée que s'il y a au % moins une méthode ce qui est indiqué avec le booléen % |\ifsmc@lom|. % \begin{macrocode} \expandafter\ifx\csname ifsmc@lom#1\endcsname\iftrue \csname smc@thema#2Color\endcsname \expandafter\smc@bandeaulistemethodes \expandafter{\csname StringListeMethode#2\endcsname} % \end{macrocode} % Malheureusement l'environnement \environ{multicols} n'est pas % capable de composer sur une seule colonne. D'où la construction % suivante. % \begin{macrocode} \ifnum \smc@NombreColonnesListeMethodes=\@ne \@starttoc{lom#1} \else \begin{multicols}{\smc@NombreColonnesListeMethodes} \@starttoc{lom#1} \end{multicols} \fi \fi } % \end{macrocode} % \end{macro} % \subsection{Texte libre} % Afin de permettre à l'utilisateur de se servir de la classe pour % composer une ou quelques feuilles sans devoir suivre la structure % d'un ouvrage entier, on met à disposition la commande |\libre|. Elle % va permettre, par exemple, de prendre le texte source d'un exercice % et de pouvoir le composer sans avoir à passer par toute la % machinerie d'un ouvrage (thème, en-tête coloré, etc.). % % L'ensemble du code est pris sur celui de la commande |\annexe| et % des ses macros satellites. Quelques éléments sont simplifiés. On % commence avec la macro permettant de modifier les couleurs par l'utilisateur % \begin{macro}{\ChangeLibre} % \begin{macrocode} \newcommand*\ChangeLibre[4]{% \colorlet{LibreHeadFrameColor}{#1}% \colorlet{LibreSectionRuleColor}{#2}% \colorlet{LibreItemColor}{#2}% \colorlet{LibreExerciceCorrigeNumFrameColor}{#2}% \colorlet{LibreExerciceNumFrameColor}{#2}% \colorlet{LibreSectionTitleColor}{#3}% \colorlet{LibreExerciceTitleColor}{#3} \colorlet{LibreExerciceNumColor}{#4} } % \end{macrocode} % On appelle maintenant cette macro avec les couleurs par défaut. % \begin{macrocode} \ChangeLibre{G3}{A1}{G1}{Blanc} % \end{macrocode} % \end{macro} % \begin{macro}{\libre} % On peut maintenant définir la macro |\libre|. Avant cela on définit % un certain nombre de compteur à initialiser à ce % niveau. Contrairement aux annexes générales, il n'y a pas de titre % ici donc pas d'argument à cette commande. % \begin{macrocode} \newcommand*\libre{% \let\itemize\smc@libreitemize \let\enditemize\endsmc@libreitemize \let\colitemize\smc@librecolitemize \let\endcolitemize\endsmc@librecolitemize \let\enumerate\smc@libreenumerate \let\endenumerate\endsmc@libreenumerate \let\colenumerate\smc@librecolenumerate \let\endcolenumerate\endsmc@librecolenumerate \let\partie\smc@nopartie \let\exercice\smc@libreexercice \let\endexercice\endsmc@libreexercice \let\corrige\smc@librecorrige \let\endcorrige\endsmc@librecorrige \let\section\smc@libresection \def\smc@currpart{Libre}% \setcounter{propriete}{0}% \setcounter{exercice}{0}% % \end{macrocode} % Il faut placer une balise quelconque dans le fichier de correction % pour qu'il existe. % \begin{macrocode} \addtocontents{cor}{\protect\smc@corrigelibre}% % \end{macrocode} % On commence par changer de page et indiquer les styles de page à % utiliser pour la suite. % \begin{macrocode} \clearpage \pagestyle{libre} \thispagestyle{firstlibre} % \end{macrocode} % La partie libre utilise le pseudo-thème libre. % \begin{macrocode} \themaL } % \end{macrocode} % \end{macro} % \begin{environment}{smc@libreexercice} % Exercice pour le texte libre. On commence par regarder s'il y a % une étoile. % \begin{macrocode} \newcommand*\smc@libreexercice{% \@ifstar {% \smc@exercicecorrigetrue \smc@@libreexercice } {% \smc@exercicecorrigefalse \smc@@libreexercice } } % \end{macrocode} % On lit ensuite le premier argument optionnel. % \begin{macrocode} \newcommand*\smc@@libreexercice[1][]{% % \end{macrocode} % On sauvegarde le texte du titre est on appelle la macro auxiliaire % pour lire le deuxième argument optionnel. % \begin{macrocode} \def\smc@exercicetitle{#1}% \smc@@@libreexercice } \newcommand*\smc@@@libreexercice[1][]{% % \end{macrocode} % On commence par passer au paragraphe suivant et réinitialiser le compteur % partie ainsi que la façon de composer les parties. % \begin{macrocode} \par\addvspace{\BeforeExerciceVSpace} \let\partie\smc@exercice@partie \setcounter{partie}{0} % \end{macrocode} % La présence d'un logo va faire qu'on ne composera pas le titre (ou % le texte) de la même façon. S'il y a un logo, on utilise la commande % |\parpic| pour habiller le logo. Sinon on ne fait rien de spécial. % \begin{macrocode} \@ifnotmtarg{#1}{% \setbox0=\hbox{#1}% \parpic[r]{\makebox[\wd0][l]{{#1}}} }% % \end{macrocode} % On compose le numéro de l'exercice. La couleur du cadre dépend du % fait que l'exercice est corrigé ou non. À part les couleurs, on % garde les mêmes macros de fonte et de longueurs que pour les % exercices des chapitres normaux. % \begin{macrocode} \refstepcounter{exercice}% \begin{pspicture}(0,0)(\ExerciceNumFrameWidth,\ExerciceNumFrameHeight) \ifsmc@exercicecorrige \psframe*[linewidth=0pt, linecolor=LibreExerciceCorrigeNumFrameColor] (0,-\ExerciceNumFrameDepth) (\ExerciceNumFrameWidth,\ExerciceNumFrameHeight) \else \psframe*[linewidth=0pt, linecolor=LibreExerciceNumFrameColor] (0,-\ExerciceNumFrameDepth) (\ExerciceNumFrameWidth,\ExerciceNumFrameHeight) \fi \rput[B](\dimexpr\ExerciceNumFrameWidth/2,0){% \textcolor{LibreExerciceNumColor}{\ExerciceNumFont \theexercice}% } \end{pspicture}% % \end{macrocode} % Y a-t-il un titre d'exercice ? % \begin{macrocode} \ifx\smc@exercicetitle\empty % \end{macrocode} % S'il n'y a pas de titre, on commence le texte de l'exercice (après % un certain espacement horizontal). % \begin{macrocode} \hspace{\ExerciceTextHSep}% \else % \end{macrocode} % S'il y a un titre, on le compose et on passe au paragraphe suivant. % \begin{macrocode} \hspace{\ExerciceTextHSep}% \textcolor{LibreExerciceTitleColor} {\ExerciceTitleFont \smc@exercicetitle}% \par\nobreak \fi } % \end{macrocode} % En fait, on utilisera plutôt la forme d'environnement pour entrer % les exercices. Le code terminal ne fait que placer un |\par| (cela % peut être utile pour activer un éventuel |\centering| en fin de % code. % \begin{macrocode} \def\endsmc@libreexercice{\par} % \end{macrocode} % \end{environment} % \begin{macro}{\smc@annexesection} % Les textes libres redéfinissent la macro |\section|. Pour cela on la % stocke sous la forme de la macro |\smc@libresection|. Au départ, on % la définit comme une macro |\section| habituelle, en particulier, on % autorise la forme étoilée (même si pour l'instant elle n'apporte % rien de plus que la forme non étoilée). % \begin{macrocode} \newcommand*\smc@libresection{% \@ifstar{\smc@libresec}{\smc@libresec}% } \newcommand*\smc@libresec[2][]{% % \end{macrocode} % On commence par regarder si l'argument optionnel est vide. Si oui, % le titre court sera égal au titre long. % \begin{macrocode} \ifx\relax#1\relax \smc@@libresec{#2}{#2}% \else \smc@@libresec{#1}{#2}% \fi } % \end{macrocode} % À ce stade, on a un titre court en premier argument et un titre long % en deuxième argument. Le travail effectif peut commencer. % \begin{macrocode} \newcommand*\smc@@libresec[2]{% \par\goodbreak\addvspace{\BeforeLibreSectionVSpace}% % \end{macrocode} % Le titre court sera éventuellement utilisé pour une TDM. Ce sera à % voir plus tard. % \begin{macrocode} \@ifmtarg{#1}{}{}% % \end{macrocode} % On compose le carré avec la bonne couleur. % \begin{macrocode} \begin{pspicture}(0,0)(\LibreSectionRuleWidth,\LibreSectionRuleWidth) \psframe*[linecolor=LibreSectionRuleColor] (0,0)(\LibreSectionRuleWidth,\LibreSectionRuleWidth) \end{pspicture}% \hspace{\LibreSectionRuleHSpace}% % \end{macrocode} % On place enfin le titre dans une minipage de la bonne largeur. % \begin{macrocode} \begin{minipage}[t]{\dimexpr\linewidth-\LibreSectionRuleWidth-\LibreSectionRuleHSpace} \LibreSectionTitleFont \textcolor{LibreSectionTitleColor}{#2}% \end{minipage} % \end{macrocode} % On termine en plaçant un espacement vertical donné et une % interdiction de coupe. Il n'y a pas besoin de s'occuper du retrait % d'alinéa puisqu'il n'y en a pas ! % \begin{macrocode} \par\nobreak\addvspace{\AfterLibreSectionVSpace} } % \end{macrocode} % \end{macro} % \section{Habillage de texte} % On a vraiment besoin de l'extension \package{picins}. Comme elle % n'est plus disponible sur \TeX Live ou Mik\TeX{}, on la recopie ici. % \begin{macrocode} \newbox\@BILD \newbox\@TEXT \newdimen\d@breite \newdimen\d@hoehe \newdimen\d@xoff \newdimen\d@yoff \newdimen\d@shad \newdimen\d@dash \newdimen\d@boxl \newdimen\d@pichskip \newdimen\d@tmp \newdimen\d@tmpa \newdimen\d@bskip \newdimen\hsiz@ \newdimen\p@getot@l \newcount\c@breite \newcount\c@hoehe \newcount\c@xoff \newcount\c@yoff \newcount\c@pos \newcount\c@shad \newcount\c@dash \newcount\c@boxl \newcount\c@zeilen \newcount\@changemode \newcount\c@piccaption \newcount\c@piccaptionpos \newcount\c@picpos \newcount\c@whole \newcount\c@half \newcount\c@tmp \newcount\c@tmpa \newcount\c@tmpb \newcount\c@tmpc \newcount\c@tmpd \newskip\d@leftskip \newif\if@list \@listfalse \newif\if@offset \c@piccaptionpos=1 \c@picpos=0 \d@shad=4pt \d@dash=4pt \d@boxl=10pt \d@pichskip=1em \@changemode=0 \def\@captype{figure} \let\old@par=\par \def\pichskip#1{\d@pichskip #1\relax} \def\shadowthickness#1{\d@shad #1\relax} \def\dashlength#1{\d@dash #1\relax} \def\boxlength#1{\d@boxl #1\relax} \def\picchangemode{\@changemode=1} \def\nopicchangemode{\@changemode=0} \def\piccaptionoutside{\c@piccaptionpos=1} \def\piccaptioninside{\c@piccaptionpos=2} \def\piccaptionside{\c@piccaptionpos=3} \def\piccaptiontopside{\c@piccaptionpos=4} \def\piccaption{\@ifnextchar [{\@piccaption}{\@piccaption[]}} \def\@piccaption[#1]#2{\c@piccaption=1\def\sh@rtf@rm{#1}\def\capti@nt@xt{#2}} \def\make@piccaption{% \hsiz@\d@breite \ifnum\c@piccaptionpos=2 \advance\hsiz@ -2\fboxsep \fi \ifnum\c@piccaptionpos>2 \hsiz@\hsize\advance\hsiz@-\d@breite\advance\hsiz@-\d@pichskip \fi \setbox\@TEXT=\vbox{\hsize\hsiz@\caption[\sh@rtf@rm]{\capti@nt@xt}}% } \def\newcaption{\refstepcounter\@captype\@dblarg{\@newcaption\@captype}} \long\def\@newcaption#1[#2]#3{% \old@par \addcontentsline{\csname ext@#1\endcsname }{#1} {\protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}}% \begingroup \@parboxrestore \normalsize \@newmakecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}% \old@par \endgroup } \long\def\@newmakecaption#1#2{% \vskip 10pt% \setbox\@tempboxa \hbox {#1: #2}% \ifdim \wd\@tempboxa >\hsize% \setbox0=\hbox{#1: }\dimen0=\hsize\advance\dimen0 by-\wd0 \setbox1=\vtop{\hsize=\dimen0 #2} \hbox{\box0 \box1} \par \else \hbox to\hsize {\hfil \box \@tempboxa \hfil} \fi } \def\parpic{% \@ifnextchar ({\iparpic}{\iparpic(0pt,0pt)} } \def\iparpic(#1,#2){% \@ifnextchar ({\@offsettrue\iiparpic(#1,#2)}% {\@offsetfalse\iiparpic(#1,#2)(0pt,0pt)} } \def\iiparpic(#1,#2)(#3,#4){% \@ifnextchar [{\iiiparpic(#1,#2)(#3,#4)}{\iiiparpic(#1,#2)(#3,#4)[l]} } \def\iiiparpic(#1,#2)(#3,#4)[#5]{% \@ifnextchar [{\ivparpic(#1,#2)(#3,#4)[#5]}{\ivparpic(#1,#2)(#3,#4)[#5][]} } \def\ivparpic(#1,#2)(#3,#4)[#5][#6]#7{% \let\par=\old@par\par% \hangindent0pt\hangafter1% \setbox\@BILD=\hbox{#7}% \d@breite=#1\d@breite=\the\d@breite% \ifdim\d@breite=0pt\d@breite=\wd\@BILD\fi% \c@breite=\d@breite\divide\c@breite by65536% \multiply\c@piccaption\c@piccaptionpos% \d@hoehe=#2\d@hoehe=\the\d@hoehe% \ifdim\d@hoehe=0pt\d@hoehe=\ht\@BILD\advance\d@hoehe by\dp\@BILD\fi% \c@hoehe=\d@hoehe\divide\c@hoehe by65536% \d@xoff=#3\c@xoff=\d@xoff\divide\c@xoff by65536% \d@yoff=\d@hoehe% \advance\d@yoff by-#4\c@yoff=\d@yoff\divide\c@yoff by65536% \c@pos=1\unitlength1pt% \if@offset% \setbox\@BILD=\hbox{% \begin{picture}(\c@breite,\c@hoehe)% \put(0,0){\makebox(\c@breite,\c@hoehe){}}% \put(\c@xoff,\c@yoff){\box\@BILD}% \end{picture}% }% \else% \setbox\@BILD=\hbox{% \begin{picture}(\c@breite,\c@hoehe)% \put(0,0){\makebox(\c@breite,\c@hoehe)[#6]{\box\@BILD}}% \end{picture}% }% \fi% \ifnum\c@piccaption=2% \make@piccaption% \advance\d@hoehe\ht\@TEXT\advance\d@hoehe\dp\@TEXT% \c@hoehe=\d@hoehe\divide\c@hoehe by65536% \setbox\@BILD=\vbox{\box\@BILD\vspace{-5pt}% \hbox{\hspace{\fboxsep}\box\@TEXT}% \vspace{4pt}}% \fi% \@tfor\@tempa := #5\do{% \if\@tempa f\setbox\@BILD=\hbox{\Rahmen(\c@breite,\c@hoehe){\box\@BILD}}\fi% \if\@tempa s\setbox\@BILD=\hbox{\Schatten(\c@breite,\c@hoehe){\box\@BILD}}\fi% \if\@tempa o\setbox\@BILD=\hbox{\Oval(\c@breite,\c@hoehe){\box\@BILD}}\fi% \if\@tempa d\setbox\@BILD=\hbox{\Strich(\c@breite,\c@hoehe){\box\@BILD}}\fi% \if\@tempa x\setbox\@BILD=\hbox{\Kasten(\c@breite,\c@hoehe){\box\@BILD}}\fi% \if\@tempa l\c@pos=1\fi% \if\@tempa r\c@pos=2\fi% }% \ifnum\c@piccaption=1% \make@piccaption% \advance\d@hoehe\ht\@TEXT\advance\d@hoehe\dp\@TEXT% \c@hoehe=\d@hoehe\divide\c@hoehe by65536% \setbox\@BILD=\vbox{\box\@BILD\vspace{-5pt}\hbox{\box\@TEXT}\vspace{4pt}}% \fi% \ifodd\count0\c@picpos=0\else\c@picpos=\@changemode\fi% \pagetotal=\the\pagetotal% \d@tmp=\pagegoal\advance\d@tmp by-\pagetotal\advance\d@tmp by-\baselineskip% \ifdim\d@hoehe>\d@tmp% \vskip 0pt plus\d@hoehe\relax\pagebreak[3]\vskip 0pt plus-\d@hoehe\relax% \ifnum\c@picpos=1\c@picpos=0\else\c@picpos=\@changemode\fi% \fi% \ifnum\c@picpos=1\ifnum\c@pos=1\c@pos=2\else\c@pos=1\fi\fi% \ifnum\@listdepth>0 \@listtrue\parshape 0% \advance\hsize -\rightmargin% \d@leftskip \leftskip% \leftskip \@totalleftmargin% \if@inlabel\rule{\linewidth}{0pt}\vskip-\baselineskip\relax\fi% \else\@listfalse\medskip% \fi% \if@list\d@tmpa=\linewidth\else\d@tmpa=\hsize\fi% \ifnum\c@piccaption=3% \make@piccaption% \d@tmp\ht\@TEXT\advance\d@tmp\dp\@TEXT% \ifdim\d@hoehe>\d@tmp% \setbox\@TEXT=\vbox to\d@hoehe{\vfill\box\@TEXT\vspace{.2\baselineskip}\vfill}% \else% \setbox\@BILD=\vbox to\d@tmp{\vfill\box\@BILD\vfill}% \d@hoehe\d@tmp% \fi% \fi% \ifnum\c@piccaption=4% \make@piccaption% \d@tmp\ht\@TEXT\advance\d@tmp\dp\@TEXT% \setbox\@TEXT=\vbox to\d@hoehe{\vspace{-10pt}\box\@TEXT\vfil}% \advance\d@hoehe-\d@tmp% \fi% \ifnum\c@pos=1\d@tmpa=0pt% \ifnum\c@piccaption>2% \setbox\@BILD=\hbox{\box\@BILD\hspace{\d@pichskip}\hbox{\box\@TEXT}}% \fi% \else\advance\d@tmpa by-\wd\@BILD\d@breite=-\d@breite% \ifnum\c@piccaption>2% \d@tmpa=0pt% \setbox\@BILD=\hbox{\hbox{\box\@TEXT}\hspace{\d@pichskip}\box\@BILD}% \fi% \fi% \p@getot@l\the\pagetotal% \d@bskip\d@hoehe\advance\d@bskip by\parskip\advance\d@bskip by.3\baselineskip% {\noindent\hspace*{\d@tmpa}\relax% \box\@BILD\nopagebreak\vskip-\d@bskip\relax\nopagebreak}% \d@tmp=-\d@hoehe\divide\d@tmp by\baselineskip% \c@zeilen=\d@tmp\advance\c@zeilen by-1% \ifdim\d@breite<0pt\advance\d@breite by-\d@pichskip% \else\advance\d@breite by\d@pichskip% \fi% \hangindent=\d@breite% \hangafter=\c@zeilen% \let\par=\x@par% \ifnum\c@piccaption=3% \hangindent0pt\hangafter1\let\par=\old@par% \vskip\d@hoehe\vskip.2\baselineskip% \fi% \c@piccaption=0% } \newdimen\ptoti \newdimen\ptotii \def\x@par{% \ptoti\pagetotal \old@par \ptotii\pagetotal \ifdim\ptoti=\ptotii \d@tmp\d@hoehe \else \d@tmp\baselineskip \multiply\d@tmp by\prevgraf \advance\d@tmp by\parskip \global\advance\d@hoehe by-\d@tmp\d@tmp=\d@hoehe \fi \ifdim\d@hoehe>0pt \divide\d@tmp by\baselineskip\c@zeilen=-\d@tmp\advance\c@zeilen by-1 \c@zeilen=\the\c@zeilen \else\c@zeilen=0 \fi \ifnum\c@zeilen<0\hangafter=\c@zeilen\hangindent=\d@breite \else\let\par=\old@par \hangindent 0pt \leftskip \d@leftskip \if@list\parshape \@ne \@totalleftmargin \linewidth \advance\hsize \rightmargin \fi \fi } \def\picskip#1{% \let\par=\old@par \par \pagetotal\the\pagetotal \c@tmp=#1\relax \ifnum\c@tmp=0 \d@tmp\baselineskip\multiply\d@tmp by\prevgraf\advance\d@tmp\parskip \ifdim\p@getot@l<\pagetotal \advance\d@hoehe by-\d@tmp\advance\d@hoehe by1ex \ifdim\d@hoehe>0pt\vspace*{\d@hoehe}\fi \fi \ifdim\p@getot@l=\pagetotal \advance\d@hoehe by-\d@tmp\advance\d@hoehe by1ex \ifdim\d@hoehe>0pt\vspace*{\d@hoehe}\fi \fi \else\hangafter=-\c@tmp\hangindent=\d@breite \fi \leftskip \d@leftskip \if@list\parshape \@ne \@totalleftmargin \linewidth \advance\hsize \rightmargin \fi } \def\hpic{% \@ifnextchar ({\ihpic}{\ihpic(0pt,0pt)}%) } \def\ihpic(#1,#2){% \@ifnextchar ({\@offsettrue\iihpic(#1,#2)}%) {\@offsetfalse\iihpic(#1,#2)(0pt,0pt)}% } \def\iihpic(#1,#2)(#3,#4){% \@ifnextchar [{\iiihpic(#1,#2)(#3,#4)}{\iiihpic(#1,#2)(#3,#4)[l]}%] } \def\iiihpic(#1,#2)(#3,#4)[#5]{% \@ifnextchar [{\ivhpic(#1,#2)(#3,#4)[#5]}{\ivhpic(#1,#2)(#3,#4)[#5][]}%] } \def\ivhpic(#1,#2)(#3,#4)[#5][#6]#7{% \setbox\@BILD=\hbox{#7}% \d@breite=#1\d@breite=\the\d@breite% \ifdim\d@breite=0pt\d@breite=\wd\@BILD\fi% \c@breite=\d@breite\divide\c@breite by65536% \d@hoehe=#2\d@hoehe=\the\d@hoehe% \ifdim\d@hoehe=0pt\d@hoehe=\ht\@BILD\advance\d@hoehe by\dp\@BILD\fi% \c@hoehe=\d@hoehe\divide\c@hoehe by65536% \d@xoff=#3\c@xoff=\d@xoff\divide\c@xoff by65536% \d@yoff=\d@hoehe% \advance\d@yoff by-#4\c@yoff=\d@yoff\divide\c@yoff by65536% \c@pos=0\d@tmpa=\parindent\parindent=0pt\unitlength1pt% \if@offset \setbox\@BILD=\hbox{% \begin{picture}(\c@breite,\c@hoehe)% \put(0,0){\makebox(\c@breite,\c@hoehe){}}% \put(\c@xoff,\c@yoff){\box\@BILD}% \end{picture}% }% \else% \setbox\@BILD=\hbox{% \begin{picture}(\c@breite,\c@hoehe)% \put(0,0){\makebox(\c@breite,\c@hoehe)[#6]{\box\@BILD}}% \end{picture}% }% \fi% \@tfor\@tempa := #5\do{% \if\@tempa f\setbox\@BILD=\hbox{\Rahmen(\c@breite,\c@hoehe){\box\@BILD}}\fi% \if\@tempa s\setbox\@BILD=\hbox{\Schatten(\c@breite,\c@hoehe){\box\@BILD}}\fi% \if\@tempa o\setbox\@BILD=\hbox{\Oval(\c@breite,\c@hoehe){\box\@BILD}}\fi% \if\@tempa d\setbox\@BILD=\hbox{\Strich(\c@breite,\c@hoehe){\box\@BILD}}\fi% \if\@tempa x\setbox\@BILD=\hbox{\Kasten(\c@breite,\c@hoehe){\box\@BILD}}\fi% \if\@tempa t\c@pos=1\fi% \if\@tempa b\c@pos=2\fi% }% \ifnum\c@pos=0\parbox{\d@breite}{\makebox[0cm]{}\\\box\@BILD\smallskip}\fi% \ifnum\c@pos=1\parbox[t]{\d@breite}{\makebox[0cm]{}\\\box\@BILD\smallskip}\fi% \ifnum\c@pos=2\parbox[b]{\d@breite}{\makebox[0cm]{}\\\box\@BILD\smallskip}\fi% \parindent=\d@tmpa% } \def\Rahmen(#1,#2)#3{% \c@whole=\@wholewidth\divide\c@whole by65536% \c@half=\@halfwidth\divide\c@half by65536% \c@tmpa=#1\advance\c@tmpa by\c@whole\advance\c@tmpa by\c@whole% \c@tmpb=#2\advance\c@tmpb by\c@whole\advance\c@tmpb by\c@whole% \begin{picture}(\c@tmpa,\c@tmpb)% \put(\c@whole,\c@half){\framebox(#1,#2){#3}}% \end{picture}% \global\advance\d@breite by2\@wholewidth% \global\advance\d@hoehe by2\@wholewidth% } \def\Schatten(#1,#2)#3{% \c@whole=\@wholewidth\divide\c@whole by65536% \c@half=\@halfwidth\divide\c@half by65536% \c@shad=\d@shad\divide\c@shad by65536% \c@tmp=\c@whole\advance\c@tmp by\c@whole\c@tmpd=\c@tmp% \advance\c@tmp by\c@shad% \advance\c@tmpd by#1% \advance\c@half by\c@shad% \c@tmpa=#1\advance\c@tmpa by\c@tmp% \c@tmpb=#2\advance\c@tmpb by\c@tmp% \begin{picture}(\c@tmpa,\c@tmpb)% \put(\c@whole,\c@half){\framebox(#1,#2){#3}}% \put(\c@shad,0){\rule{\c@tmpd pt}{\c@shad pt}}% \put(\c@tmpd,0){\rule{\c@shad pt}{#2 pt}}% \end{picture}% \global\advance\d@breite by2\@wholewidth\global\advance\d@breite by\d@shad% \global\advance\d@hoehe by2\@wholewidth\global\advance\d@hoehe by\d@shad% } \def\Oval(#1,#2)#3{% \@wholewidth=0.4pt% \c@tmpa=\the#1\divide\c@tmpa by2% \c@tmpb=\the#2\divide\c@tmpb by2% \begin{picture}(#1,#2)% \put(\c@tmpa,\c@tmpb){\oval(#1,#2)}% \put(0.4,0.4){#3}% \end{picture}% \global\advance\d@breite by1pt\global\advance\d@hoehe by1pt% } \def\Strich(#1,#2)#3{% \c@whole=\@wholewidth\divide\c@whole by65536% \c@half=\@halfwidth\divide\c@half by65536% \c@dash=\d@dash\divide\c@dash by65536% \c@tmp=\c@whole\advance\c@tmp by\c@whole% \c@tmpa=#1\advance\c@tmpa by\c@tmp% \c@tmpb=#2\advance\c@tmpb by\c@tmp% \c@tmpc=#1\advance\c@tmpc by\c@whole% \c@tmpd=#2\advance\c@tmpd by\c@whole% \begin{picture}(\c@tmpa,\c@tmpb)% \put(\c@half,\c@half){\dashbox{\c@dash}(\c@tmpc,\c@tmpd){#3}}% \end{picture}% \global\advance\d@breite by2\@wholewidth% \global\advance\d@hoehe by2\@wholewidth% } \def\Kasten(#1,#2)#3{% \@wholewidth=0.4pt% \c@boxl=\d@boxl\divide\c@boxl by65536\c@boxl=\the\c@boxl% \c@tmpa=#1\advance\c@tmpa by\c@boxl% \c@tmpb=#2\advance\c@tmpb by\c@boxl% \c@tmp=#2% \begin{picture}(\c@tmpa,\c@tmpb)% \put(0,\c@boxl){\framebox(#1,#2){#3}}% \put(\c@boxl,0){\line(-1,1){\c@boxl}}% \put(\c@boxl,0){\line(1,0){#1}\line(-1,1){\c@boxl}}% \put(\c@boxl,0){\put(#1,0){\line(0,1){\c@tmp}% \put(0,\c@tmp){\line(-1,1){\c@boxl}}}}% \end{picture}% \global\advance\d@breite by\d@boxl% \global\advance\d@hoehe by\d@boxl% } \newbox\env@box% \newdimen\d@envdp \newcount\c@hsize \newcount\c@envdp \newdimen\d@envb \long\def\frameenv{\@ifnextchar [{\@frameenv}{\@frameenv[\textwidth]}} \long\def\@frameenv[#1]{% \hsiz@=\textwidth \textwidth=#1 \d@envb=#1 \advance\textwidth by-2\@wholewidth \advance\textwidth by-2\fboxsep \hsize=\textwidth \linewidth=\textwidth \setbox\env@box=\vbox\bgroup}% \def\endframeenv{% \egroup% \hsize=\hsiz@ \textwidth=\hsiz@ \linewidth=\hsiz@ \c@breite=\d@envb \divide\c@breite by65536 \advance\d@envb by-2\@wholewidth \c@hsize=\d@envb \divide\c@hsize by65536% \d@envdp=\dp\env@box \advance\d@envdp by\ht\env@box% \advance\d@envdp by2\fboxsep% \d@hoehe=\d@envdp \advance\d@hoehe by2\@wholewidth \c@hoehe=\d@hoehe \divide\c@hoehe by65536 \c@envdp=\d@envdp \divide\c@envdp by65536% \c@tmp=\@wholewidth \divide\c@tmp by65536 \vskip\@wholewidth% \unitlength 1pt\noindent% \begin{picture}(\c@breite,\c@hoehe)(0,0) \put(\c@tmp,\c@tmp){\framebox(\c@hsize,\c@envdp){\box\env@box}} \end{picture}% } \long\def\shadowenv{\@ifnextchar [{\@shadowenv}{\@shadowenv[\textwidth]}} \long\def\@shadowenv[#1]{% \hsiz@=\textwidth \textwidth=#1 \d@envb=#1 \advance\textwidth by-2\@wholewidth \advance\textwidth by-2\fboxsep \advance\textwidth by-\d@shad% \hsize=\textwidth \linewidth=\textwidth \setbox\env@box=\vbox\bgroup}% \def\endshadowenv{% \egroup \hsize=\hsiz@ \textwidth=\hsiz@ \linewidth=\hsiz@ \d@tmpa=\d@envb \c@breite=\d@envb \divide\c@breite by65536 \advance\d@envb by-2\@wholewidth \advance\d@envb by-\d@shad \c@hsize=\d@envb \divide\c@hsize by65536% \d@envdp=\dp\env@box \advance\d@envdp by\ht\env@box% \advance\d@envdp by2\fboxsep% \c@envdp=\d@envdp \divide\c@envdp by65536% \d@hoehe=\d@envdp \advance\d@hoehe by2\@wholewidth \advance\d@hoehe by\d@shad \c@hoehe=\d@hoehe \divide\c@hoehe by65536 \c@shad =\d@shad \divide\c@shad by65536 \c@tmp=\@wholewidth \divide\c@tmp by65536 \advance\d@tmpa by-2\d@shad \c@xoff =\d@tmpa \divide\c@xoff by65536 \advance\c@xoff by\c@shad \advance\c@xoff by-1 \advance\d@envdp by\@wholewidth \vskip\@halfwidth \unitlength 1pt\noindent% \begin{picture}(\c@breite,\c@hoehe)(0,0) \put(\c@tmp,\c@shad){\framebox(\c@hsize,\c@envdp){\box\env@box}} \put(\c@shad,0){\rule{\d@tmpa}{\d@shad}}% \put(\c@xoff,0){\rule{\d@shad}{\d@envdp}}% \end{picture}% \vskip\@halfwidth } \long\def\dashenv{\@ifnextchar [{\@dashenv}{\@dashenv[\textwidth]}} \long\def\@dashenv[#1]{% \hsiz@=\textwidth \textwidth=#1 \d@envb=#1 \advance\textwidth by-2\@wholewidth \advance\textwidth by-2\fboxsep \hsize=\textwidth \linewidth=\textwidth \setbox\env@box=\vbox\bgroup}% \long\def\enddashenv{% \egroup \hsize=\hsiz@ \textwidth=\hsiz@ \linewidth=\hsiz@ \c@breite=\d@envb \divide\c@breite by65536 \advance\d@envb by-\@wholewidth \c@hsize=\d@envb \divide\c@hsize by65536% \d@envdp=\dp\env@box \advance\d@envdp by\ht\env@box% \advance\d@envdp by2\fboxsep% \advance\d@envdp by\@wholewidth \d@hoehe=\d@envdp \advance\d@hoehe by2\@wholewidth \c@hoehe=\d@hoehe \divide\c@hoehe by65536 \c@envdp=\d@envdp \divide\c@envdp by65536% \c@dash=\d@dash \divide\c@dash by65536% \c@whole=\@wholewidth \divide\c@whole by65536 \c@half=\@halfwidth \divide\c@half by 65536 \noindent\unitlength 1pt \begin{picture}(\c@breite,\c@hoehe)(0,0) \put(\c@half,\c@whole){\dashbox{\c@dash}(\c@hsize,\c@envdp){\box\env@box}} \end{picture}% } \long\def\ovalenv{\@ifnextchar [{\@ovalenv}{\@ovalenv[\textwidth]}}% \long\def\@ovalenv[#1]{% \hsiz@=\textwidth \textwidth=#1 \d@envb=#1 \advance\textwidth by-4\fboxsep \hsize=\textwidth \linewidth=\textwidth \setbox\env@box=\vbox\bgroup}% \long\def\endovalenv{% \egroup \hsize=\hsiz@ \textwidth=\hsiz@ \linewidth=\hsiz@ \@wholewidth=0.4pt \c@breite=\d@envb \divide\c@breite by65536 \advance\d@envb by-2\@wholewidth \c@hsize=\d@envb \divide\c@hsize by65536% \d@envdp=\dp\env@box \advance\d@envdp by\ht\env@box% \advance\d@envdp by4\fboxsep% \c@envdp=\d@envdp \divide\c@envdp by65536% \d@hoehe=\d@envdp \advance\d@hoehe by2\@wholewidth \c@hoehe=\d@hoehe \divide\c@hoehe by65536 \c@tmpa=\c@hsize \divide\c@tmpa by2% \c@tmpb=\c@envdp \divide\c@tmpb by2% \d@tmpa=2\fboxsep \advance\d@tmpa by\@wholewidth \c@xoff=\d@tmpa \divide\c@xoff by65536% \advance\d@tmpa by\dp\env@box \c@yoff=\d@tmpa \divide\c@yoff by65536% \unitlength 1pt\noindent \begin{picture}(\c@breite,\c@hoehe)(0,0) \put(\c@tmpa,\c@tmpb){\oval(\c@hsize,\c@envdp)} \put(\c@xoff,\c@yoff){\box\env@box}% \end{picture}% } % \end{macrocode} % \section{Overprint} % \begin{macrocode} \let\set@op\relax \newif\if@op \def\overprint{% \@optrue \set@op \ignorespaces } \def\knockout{% \@opfalse \set@op \ignorespaces } \def\testname{pdftex.def} \ifx \Gin@driver \testname \AtBeginDocument{ \immediate\pdfobj{<< /Type /ExtGState /op false /OP false /OPM 0 >>} \edef\op@off{\the\pdflastobj} \immediate\pdfobj{<< /Type /ExtGState /op true /OP true /OPM 1 >>} \edef\op@on{\the\pdflastobj} \immediate\pdfobj{ << % /GSko \op@off\space 0 R % /GSop \op@on\space 0 R >>} \edef\@extgs{\the\pdflastobj} \edef\next{\global\noexpand\pdfpageresources={\the\pdfpageresources \space /ExtGState \@extgs\space 0 R }} \next } \def\set@op{% \if@op \pdfliteral direct {/GSop gs}% \else \pdfliteral direct {/GSko gs}% \fi \aftergroup\reset@op} \def\reset@op{% \if@op \pdfliteral direct {/GSop gs}% \else \pdfliteral direct {/GSko gs}% \fi } \fi \def\testname{dvips.def} \ifx \Gin@driver \testname \def\set@op{% \if@op \special{ps:true setoverprint}% \else \special{ps:false setoverprint}% \fi \aftergroup\reset@op} \def\reset@op{% \if@op \special{ps:true setoverprint}% \else \special{ps:false setoverprint}% \fi } \fi \@opfalse \overprint % \end{macrocode} % \iffalse % %<*package> % \fi % \section{Package} % On crée également un package qui va reprendre les éléments % syntaxiques sans la mise en page générale. Cela doit servir à % compiler des petits bouts de codes extraits de toute la gangue % propre à un manuel complet et de pouvoir utiliser une autre classe, % particulièrement \class{beamer}. % % L'idée générale est de reprendre les commandes et environnements % concernant: % \begin{itemize} % \item les tableaux : % \item les algorithmes ; % \item les unités ; % \item les macros |\TopStrut| et |\BottomStrut| ; % \item les listes. % \end{itemize} % Il n'y a donc rien de très sorcier : c'est essentiellement de la % recopie verbatim de certaines sections de la classe % \class{sesamanuel}. Il n'y a que les listes qui posent un tout petit % problème. On ne commentera donc quaisment pas le code qui suit (les % explications (sont données plus haut). % % On commence par les initialisations habituelles et le chargement % d'un certain nombre d'extensions. On garde l'option pour indiquer le % codage d'entrée. % \begin{macrocode} \def\filedate{2015/03/03} \def\fileversion{0.4} \NeedsTeXFormat{LaTeX2e}[1995/06/01] \ProvidesPackage{sesamanuel}[% \filedate\space v\fileversion\space Package pour Sesamath (SM/JCC/SM)% ] \def\smc@enc@opt#1{\DeclareOption{#1}{\def\smc@encoding{#1}}} \smc@enc@opt{ascii} \smc@enc@opt{latin1} \smc@enc@opt{latin2} \smc@enc@opt{latin3} \smc@enc@opt{latin4} \smc@enc@opt{latin5} \smc@enc@opt{latin9} \smc@enc@opt{latin10} \smc@enc@opt{decmulti} \smc@enc@opt{cp850} \smc@enc@opt{cp852} \smc@enc@opt{cp858} \smc@enc@opt{cp437} \smc@enc@opt{cp437de} \smc@enc@opt{cp865} \smc@enc@opt{applemac} \smc@enc@opt{macce} \smc@enc@opt{next} \smc@enc@opt{cp1250} \smc@enc@opt{cp1252} \smc@enc@opt{cp1257} \smc@enc@opt{ansinew} \smc@enc@opt{utf8} \ExecuteOptions{utf8} \ProcessOptions \newif\ifxetex \begingroup\expandafter\expandafter\expandafter\endgroup \expandafter\ifx\csname XeTeXrevision\endcsname\relax \xetexfalse \else \xetextrue \fi \RequirePackage{etex} \ifxetex \RequirePackage{fontspec} \RequirePackage{xunicode} \defaultfontfeatures{Ligatures=TeX} \unless\ifx\smc@encoding\smc@string@utfviii \ClassError{sesamanuel}{Vous ne pouvez pas utiliser un codage autre que utf8 avec xelatex}{Changez les codages de tous vos fichiers pour les transformer en utf8.}% \fi \else \RequirePackage[T1]{fontenc} \RequirePackage[\smc@encoding]{inputenc} \fi \RequirePackage[scaled=0.87]{helvet} \RequirePackage{mathpazo} \renewcommand{\ttdefault}{lmtt} \RequirePackage{mathrsfs} \RequirePackage{pifont} \RequirePackage[official]{eurosym} \RequirePackage{ifmtarg} \RequirePackage{mathtools} \RequirePackage{amssymb} \RequirePackage{longtable, tabularx} \RequirePackage{multirow} % \end{macrocode} % Certaines classes comme beamer peuvent appeler |xcolor| avec % d'autres options d'extension. Il faut donc se prémunir d'un clash % avec le test suivant. % \begin{macrocode} \ifdefined \XC@catcodes \RequirePackage{colortbl} \else \RequirePackage[table]{xcolor} \fi \RequirePackage{multido} \RequirePackage{multicol} \RequirePackage[french]{babel} \RequirePackage[autolanguage]{numprint} % \end{macrocode} % On reprend le même nuancier complet que celui de la classe. % \begin{macrocode} \definecolor{A1} {cmyk}{1.00, 0.00, 0.00, 0.50} \definecolor{A2} {cmyk}{0.60, 0.00, 0.00, 0.10} \definecolor{A3} {cmyk}{0.30, 0.00, 0.00, 0.05} \definecolor{A4} {cmyk}{0.10, 0.00, 0.00, 0.00} \definecolor{B1} {cmyk}{0.00, 1.00, 0.60, 0.40} \definecolor{B2} {cmyk}{0.00, 0.85, 0.60, 0.15} \definecolor{B3} {cmyk}{0.00, 0.20, 0.15, 0.05} \definecolor{B4} {cmyk}{0.00, 0.05, 0.05, 0.00} \definecolor{C1} {cmyk}{0.00, 1.00, 0.00, 0.50} \definecolor{C2} {cmyk}{0.00, 0.60, 0.00, 0.20} \definecolor{C3} {cmyk}{0.00, 0.30, 0.00, 0.05} \definecolor{C4} {cmyk}{0.00, 0.10, 0.00, 0.05} \definecolor{D1} {cmyk}{0.00, 0.00, 1.00, 0.50} \definecolor{D2} {cmyk}{0.20, 0.20, 0.80, 0.00} \definecolor{D3} {cmyk}{0.00, 0.00, 0.20, 0.10} \definecolor{D4} {cmyk}{0.00, 0.00, 0.20, 0.05} \definecolor{F1} {cmyk}{0.00, 0.80, 0.50, 0.00} \definecolor{F2} {cmyk}{0.00, 0.40, 0.30, 0.00} \definecolor{F3} {cmyk}{0.00, 0.15, 0.10, 0.00} \definecolor{F4} {cmyk}{0.00, 0.07, 0.05, 0.00} \definecolor{G1} {cmyk}{1.00, 0.00, 0.50, 0.00} \definecolor{G2} {cmyk}{0.50, 0.00, 0.20, 0.00} \definecolor{G3} {cmyk}{0.20, 0.00, 0.10, 0.00} \definecolor{G4} {cmyk}{0.10, 0.00, 0.05, 0.00} \definecolor{H1} {cmyk}{0.40, 0.00, 1.00, 0.10} \definecolor{H2} {cmyk}{0.20, 0.00, 0.50, 0.05} \definecolor{H3} {cmyk}{0.10, 0.00, 0.20, 0.00} \definecolor{H4} {cmyk}{0.07, 0.00, 0.15, 0.00} \definecolor{J1} {cmyk}{0.00, 0.50, 1.00, 0.00} \definecolor{J2} {cmyk}{0.00, 0.20, 0.50, 0.00} \definecolor{J3} {cmyk}{0.00, 0.10, 0.20, 0.00} \definecolor{J4} {cmyk}{0.00, 0.07, 0.15, 0.00} \definecolor{FondOuv} {cmyk}{0.00, 0.05, 0.10, 0.00} \definecolor{FondAutoEvaluation}{cmyk}{0.00, 0.03, 0.15, 0.00} \definecolor{FondTableaux} {cmyk}{0.00, 0.00, 0.20, 0.00} \definecolor{FondAlgo} {cmyk}{0.07, 0.00, 0.30, 0.00} \definecolor{BleuOuv} {cmyk}{1.00, 0.00, 0.00, 0.00} \definecolor{PartieFonction} {cmyk}{1.00, 0.00, 0.00, 0.00} \definecolor{PartieGeometrie} {cmyk}{0.80, 0.80, 0.00, 0.00} \definecolor{PartieStatistique} {cmyk}{0.60, 0.95, 0.00, 0.20} \definecolor{PartieStatistiqueOLD}{cmyk}{0.95, 0.60, 0.20, 0.00} \definecolor{PartieStatistique*}{cmyk}{0.30, 1.00, 0.00, 0.00} \definecolor{U1} {cmyk}{0.50, 0.10, 0.00, 0.10} \definecolor{U2} {cmyk}{0.20, 0.15, 0.00, 0.00} \definecolor{U3} {cmyk}{0.50, 0.00, 1.00, 0.00} \definecolor{U4} {cmyk}{0.40, 0.00, 0.00, 0.00} \definecolor{Blanc} {cmyk}{0.00, 0.00, 0.00, 0.00} \definecolor{Gris1} {cmyk}{0.00, 0.00, 0.00, 0.20} \definecolor{Gris2} {cmyk}{0.00, 0.00, 0.00, 0.40} \definecolor{Gris3} {cmyk}{0.00, 0.00, 0.00, 0.50} \definecolor{Noir} {cmyk}{0.00, 0.00, 0.00, 1.00} \AtBeginDocument{\def\default@color{cmyk 0 0 0 1}\normalcolor} % \end{macrocode} % Code pour tout ce qui concerne les tableaux. On a regroupé ici les % macros de couleurs et de longueurs utilisées pour construire les tableaux. % \begin{macrocode} \def\BeforeTableVSpace{1.5mm} \def\AfterTableVSpace{1.5mm} \colorlet{FiletTableauColor}{Gris3} \newcommand{\tableau}[1][c]{% \arrayrulecolor{FiletTableauColor}% \renewcommand\tabularxcolumn[1]{>{\centering\arraybackslash}m{##1}}% \ifcsname#1tableau\endcsname \expandafter\let\expandafter\smc@next\csname#1tableau\endcsname \expandafter\let\expandafter\endtableau\csname end#1tableau\endcsname \else \ClassError{sesamanuel} {Le type de tableau #1 n'existe pas} {Les types possibles sont 't', 'c', 'l', 'cl', 'T', 'C', 'L', 'CL' et 'pr'.}% \let\smc@next\ctableau \let\endtableau\endctableau \fi \par\addvspace{\BeforeTableVSpace} \smc@next } \newenvironment{ttableau}[2] {\tabularx{#1}{|*{#2}{X|}}} {\endtabularx\par\addvspace{\AfterTableVSpace}} \newenvironment{Ttableau}[3] {\tabularx{#1}{|#3|*{\numexpr#2-1}{X|}}} {\endtabularx\par\addvspace{\AfterTableVSpace}} \newenvironment{ctableau}[2] {% \tabularx{#1}{% |>{\columncolor{FondTableaux}[\dimexpr\tabcolsep-0.5pt]}X| *{\numexpr#2-1}{X|}}% } {\endtabularx\par\addvspace{\AfterTableVSpace}} \newenvironment{Ctableau}[3] {% \tabularx{#1}{% |>{\columncolor{FondTableaux}[\dimexpr\tabcolsep-0.5pt]}#3| *{\numexpr#2-1}{X|}}% } {\endtabularx\par\addvspace{\AfterTableVSpace}} \newenvironment{ltableau}[2] {% \tabularx{#1}{|*{#2}{X|}} \rowcolor{FondTableaux} } {\endtabularx\par\addvspace{\AfterTableVSpace}} \newenvironment{Ltableau}[3] {% \tabularx{#1}{|#3|*{\numexpr#2-1}{X|}} \rowcolor{FondTableaux} } {\endtabularx\par\addvspace{\AfterTableVSpace}} \newenvironment{cltableau}[2] {% \tabularx{#1}{% |>{\columncolor{FondTableaux}[\dimexpr\tabcolsep-0.5pt]}X| *{\numexpr#2-1}{X|}}% \rowcolor{FondTableaux} } {\endtabularx\par\addvspace{\AfterTableVSpace}} \newenvironment{CLtableau}[3] {% \tabularx{#1}{% |>{\columncolor{FondTableaux}[\dimexpr\tabcolsep-0.5pt]}#3| *{\numexpr#2-1}{X|}}% \rowcolor{FondTableaux} } {\endtabularx\par\addvspace{\AfterTableVSpace}} \let\lctableau\cltableau \let\endlctableau\endcltableau \let\LCtableau\CLtableau \let\endLCtableau\endCLtableau \newenvironment{prtableau}[1] {% \def\propriete{% \refstepcounter{propriete}% \psframebox*[fillcolor=TablePropertyTitleBkgColor]{% \ProprieteFont \textcolor{TablePropertyTitleTextColor}{ \MakeUppercase{\StringPropriete}} \NumProprieteFont \textcolor{TablePropertyTitleTextColor}{\thepropriete} } }% \longtable{% >{\leavevmode\endgraf\vspace{-0.3\baselineskip}} m{0.24\dimexpr#1-6\tabcolsep} <{\endgraf\vspace{-0.3\baselineskip}} >{% \leavevmode\endgraf\vspace{-0.3\baselineskip} \columncolor{TablePropertyBkgColor} } m{0.46\dimexpr#1-6\tabcolsep} <{\endgraf\vspace{-0.3\baselineskip}} >{% \centering\arraybackslash \leavevmode\endgraf\vspace{-0.3\baselineskip} } m{0.30\dimexpr#1-6\tabcolsep} <{\endgraf\vspace{-0.3\baselineskip}} }% } {\endlongtable\par\addvspace{\AfterTableVSpace}} \newcommand\tabX[1][\ht\@arstrutbox,\dp\@arstrutbox]{% \smc@GetVTabX#1,,\@nil \vrule width0pt height\smc@htTabX depth-\smc@dpTabX \pnode(-\tabcolsep,\smc@htTabX){ul} \pnode(-\tabcolsep,\smc@dpTabX){dl} \hspace*{\stretch{1}}% \pnode(\tabcolsep,\smc@htTabX){ur} \pnode(\tabcolsep,\smc@dpTabX){dr} \psline(ul)(dr) \psline(dl)(ur) } \def\smc@GetVTabX#1,#2,{% \edef\smc@htTabX{\the\dimexpr#1}% \edef\smc@dpTabX{-\the\dimexpr#2}% \smc@gobblenil } \def\smc@gobblenil#1\@nil{} % \end{macrocode} % Code pour les algorithmes. Comme pour les tableaux, on a besoin d'un % certains nombre de longueurs et de couleurs. On les définit en % premier lieu. % \begin{macrocode} \definecolor{FondAlgo} {cmyk}{0.07, 0.00, 0.30, 0.00} \colorlet{AlgorithmeRuleColor}{D2} \colorlet{AlgorithmeBkgColor}{FondAlgo} \colorlet{CouleurAlgoAffiche}{Noir} \colorlet{CouleurAlgoDemander}{Noir} \colorlet{CouleurAlgoSaisir}{Noir} \colorlet{CouleurAlgoStocker}{Noir} \colorlet{CouleurAlgoSi}{Noir} \colorlet{CouleurAlgoTantque}{Noir} \colorlet{CouleurAlgoPour}{Noir} \colorlet{CouleurAlgoCalcule}{Noir} \colorlet{CouleurAlgoInitialiser}{Noir} \colorlet{CouleurAlgoIncrementer}{Noir} \colorlet{CouleurAlgoCommentaire}{Noir} \colorlet{CouleurAlgoDonnerValeur}{Noir} \def\AlgorithmeRuleWidth{1pt} \def\AlgorithmeSep{2mm} \def\AlgorithmeNumWidth{6mm} \def\AlgoIndent{1em} \def\BeforeAlgorithmeVSpace{1.5mm} \def\AfterAlgorithmeVSpace{1.5mm} % \end{macrocode} % On garde les deux façons de composer les algorithmes. L'ancienne % façon en premier. % \begin{macrocode} \newcounter{smc@line} \newenvironment{oldalgorithme}{% \ttfamily \c@smc@line \z@ \def\par{% \@@par \afterassignment\smc@displaynum\let\next=% }% \def\smc@displaynum{% \ifx\next\end \expandafter\end \else \global\advance\c@smc@line\@ne% \leavevmode\hb@xt@\AlgorithmeNumWidth{\the\c@smc@line.\hss}% \expandafter\next \fi% }% \shorthandoff{;:!?}% \@vobeyspaces \obeylines \begin{lrbox}{\smc@boxa}% \minipage{\dimexpr\linewidth-\AlgorithmeRuleWidth*2-\AlgorithmeSep*2}% } {% \endminipage \end{lrbox}% \@@par\addvspace{\BeforeAlgorithmeVSpace} \psframebox[linecolor=AlgorithmeRuleColor, linewidth=\AlgorithmeRuleWidth, fillstyle=solid, fillcolor=AlgorithmeBkgColor, framesep=\AlgorithmeSep, cornersize=absolute, linearc=\AlgorithmeSep]% {\usebox{\smc@boxa}}% \@@par\addvspace{\AfterAlgorithmeVSpace} } % \end{macrocode} % La nouvelle façon ensuite. % \begin{macrocode} \newcount\smc@indent \newcommand*\smc@inc@indent{% \advance\smc@indent\@ne } \newcommand*\smc@dec@indent{% \ifnum\smc@indent>\z@ \advance\smc@indent\m@ne \fi } \newcommand*\smc@write@indent{% \par \refstepcounter{smc@line}% \dimen0 \dimexpr\AlgoIndent*\smc@indent \leavevmode\hb@xt@\AlgorithmeNumWidth{\texttt{\the\c@smc@line.}\hss}% \hspace*{\dimen0}% } \newcommand*\BlocVariables{% \smc@dec@indent \smc@write@indent \textit{Liste des variables utilis\'ees}% \smc@inc@indent } \newcommand*\BlocEntrees{% \smc@dec@indent \smc@write@indent \textit{Entr\'ees}% \smc@inc@indent } \newcommand*\BlocTraitements{% \smc@dec@indent \smc@write@indent \textit{Traitements} \smc@inc@indent } \newcommand*\BlocAffichage{% \smc@dec@indent \smc@write@indent \textit{Affichage} \smc@inc@indent } \newcommand\BlocTraitementsEtAffichage{% \smc@dec@indent \smc@write@indent \textit{Traitements et affichage} \smc@inc@indent } \newcommand*\DeclareVar[3]{% \smc@write@indent \texttt{#1 \string: }% \textit{#2}\hfill \textcolor{CouleurAlgoCommentaire}{#3}% } \newcommand*\TantQue[2]{% \smc@write@indent \texttt{\textcolor{CouleurAlgoTantque}{\bfseries Tant que} (\texttt{#1})} \texttt{\bfseries faire} \smc@inc@indent #2 \smc@dec@indent \smc@write@indent \texttt{\textcolor{CouleurAlgoTantque}{\bfseries Fin Tant que}}% } \newcommand*\Pour[4]{% \smc@write@indent \texttt{\textcolor{CouleurAlgoPour}{\bfseries Pour}} \texttt{#1} \textcolor{CouleurAlgoPour}{\bfseries variant de} \texttt{#2} \textcolor{CouleurAlgoPour}{\bfseries \`a} \texttt{#3} \texttt{\bfseries faire} \smc@inc@indent #4 \smc@dec@indent \smc@write@indent \texttt{\textcolor{CouleurAlgoTantque}{\bfseries Fin Pour}}% } \newcommand*\PourAvecPas[5]{% \smc@write@indent \texttt{\textcolor{CouleurAlgoPour}{\bfseries Pour}} \texttt{#1} \textcolor{CouleurAlgoPour}{\bfseries variant de} \texttt{#2} \textcolor{CouleurAlgoPour}{\bfseries \`a} \texttt{#3} \textcolor{CouleurAlgoPour}{\bfseries avec un pas de} \texttt{#4} \texttt{faire} \smc@inc@indent #5 \smc@dec@indent \smc@write@indent \texttt{\textcolor{CouleurAlgoTantque}{\bfseries Fin Pour}}% } \newcommand*\SiAlors[2]{% \smc@write@indent \texttt{\textcolor{CouleurAlgoSi}{\bfseries Si}} {#1} \texttt{\textcolor{CouleurAlgoSi}{\bfseries Alors}} \smc@inc@indent #2 \smc@dec@indent \smc@write@indent \texttt{\textcolor{CouleurAlgoSi}{\bfseries Fin Si}}% } \newcommand*\SiAlorsSinon[3]{% \smc@write@indent \texttt{\textcolor{CouleurAlgoSi}{\bfseries Si}} {#1} \texttt{\textcolor{CouleurAlgoSi}{\bfseries Alors}} \smc@inc@indent #2 \smc@dec@indent \smc@write@indent \texttt{\textcolor{CouleurAlgoSi}{\bfseries Sinon}} \smc@inc@indent #3 \smc@dec@indent \smc@write@indent \texttt{\textcolor{CouleurAlgoSi}{\bfseries Fin Si}}% } \newcommand*\AfficherVar[1]{% \smc@write@indent \textcolor{CouleurAlgoAffiche}{Afficher la valeur de} \texttt{#1}% } \newcommand*\Afficher[1]{% \smc@write@indent \textcolor{CouleurAlgoAffiche}{Afficher} #1% } \newcommand*\Calculer[1]{% \smc@write@indent \textcolor{CouleurAlgoCalcule}{Calculer} #1% } \newcommand*\Demander[1]{% \smc@write@indent \textcolor{CouleurAlgoDemander}{Demander} \texttt{#1}% } \newcommand*\Saisir[1]{% \smc@write@indent \textcolor{CouleurAlgoSaisir}{Saisir} \texttt{#1}% } \newcommand*\Stocker[1]{% \smc@write@indent \textcolor{CouleurAlgoStocker}{Stocker} la r\'eponse dans \texttt{#1}% } \newcommand*\DonnerValeur[2]{% \smc@write@indent \textcolor{CouleurAlgoDonnerValeur}{Donner} \`a \texttt{#1} la valeur de \texttt{#2}% } \newcommand*\TitreAlgo[1]{% \smc@write@indent \textit{Algorithme \string: }#1 } \newcommand*\FinAlgo{% \smc@dec@indent \smc@write@indent \textit{Fin de l'algorithme}% } \newenvironment{algorithme}{% \c@smc@line\z@ \shorthandoff{;:!?}% \begin{lrbox}{\smc@boxa}% \minipage{\dimexpr\linewidth-\AlgorithmeRuleWidth*2-\AlgorithmeSep*2}% } {% \endminipage \end{lrbox}% \par\addvspace{\BeforeAlgorithmeVSpace} \psframebox[linecolor=AlgorithmeRuleColor, linewidth=\AlgorithmeRuleWidth, fillstyle=solid, fillcolor=AlgorithmeBkgColor, framesep=\AlgorithmeSep, cornersize=absolute, linearc=\AlgorithmeSep]% {\usebox{\smc@boxa}}% \par\addvspace{\AfterAlgorithmeVSpace} } % \end{macrocode} % Code pour les unités. % \begin{macrocode} \let\uori\u \let\Uori\U \let\U\relax \newcommand\U[1]{\ensuremath{#1}} \renewcommand\u[1]{\ensuremath{\nombre{#1}}} \newcommand\newunit[2]{% \expandafter\newcommand\csname u#1\endcsname[1]{% \@ifmtarg{##1} {\ensuremath{#2}} {\ensuremath{\nombre{##1}\,#2}}% }% \expandafter\newcommand\csname U#1\endcsname[1]{% \@ifmtarg{##1} {\ensuremath{#2}} {\ensuremath{##1\,#2}}% }% } \newcommand\renewunit[2]{% \expandafter\renewcommand\csname u#1\endcsname[1]{% \@ifmtarg{##1} {\ensuremath{#2}} {\ensuremath{\nombre{##1}\,#2}}% }% \expandafter\renewcommand\csname U#1\endcsname[1]{% \@ifmtarg{##1} {\ensuremath{#2}} {\ensuremath{##1\,#2}}% }% } \newunit{ym}{\text{ym}} \newunit{zm}{\text{zm}} \newunit{am}{\text{am}} \newunit{fm}{\text{fm}} \newunit{pm}{\text{pm}} \newunit{nm}{\text{nm}} \newunit{micron}{\mu\text{m}} \newunit{mm}{\text{mm}} \newunit{cm}{\text{cm}} \newunit{dm}{\text{dm}} \newunit{m}{\text{m}} \newunit{dam}{\text{dam}} \newunit{hm}{\text{hm}} \newunit{km}{\text{km}} \newunit{Mm}{\text{Mm}} \newunit{Gm}{\text{Gm}} \newunit{Tm}{\text{Tm}} \newunit{Pm}{\text{Pm}} \newunit{Em}{\text{Em}} \newunit{Zm}{\text{Zm}} \newunit{Ym}{\text{Ym}} \newunit{mmq}{\text{mm}^2} \newunit{cmq}{\text{cm}^2} \newunit{dmq}{\text{dm}^2} \newunit{mq}{\text{m}^2} \newunit{damq}{\text{dam}^2} \newunit{hmq}{\text{hm}^2} \newunit{kmq}{\text{km}^2} \newunit{ha}{\text{ha}} \newunit{mmc}{\text{mm}^3} \newunit{cmc}{\text{cm}^3} \newunit{dmc}{\text{dm}^3} \newunit{mc}{\text{m}^3} \newunit{damc}{\text{dam}^3} \newunit{hmc}{\text{hm}^3} \newunit{kmc}{\text{km}^3} \newunit{hl}{\text{hl}} \newunit{dal}{\text{dal}} \newunit{l}{\text{l}} \newunit{dl}{\text{dl}} \newunit{cl}{\text{cl}} \newunit{ml}{\text{ml}} \newunit{hel}{\text{h$\ell$}} \newunit{dael}{\text{da$\ell$}} \newunit{el}{\text{$\ell$}} \newunit{del}{\text{d$\ell$}} \newunit{cel}{\text{c$\ell$}} \newunit{mel}{\text{m$\ell$}} \newunit{s}{\text{s}} \newunit{min}{\text{min}} \newunit{h}{\text{h}} \newunit{ms}{\text{m$\cdot$s}^{-1}} \newunit{mh}{\text{m$\cdot$h}^{-1}} \newunit{kms}{\text{km$\cdot$s}^{-1}} \newunit{kmmin}{\text{km$\cdot$min}^{-1}} \newunit{kmh}{\text{km$\cdot$h}^{-1}} \newunit{ls}{\text{$\ell\cdot$s}^{-1}} \newunit{mg}{\text{mg}} \newunit{cg}{\text{cg}} \newunit{dg}{\text{dg}} \newunit{g}{\text{g}} \newunit{dag}{\text{dag}} \newunit{hg}{\text{hg}} \newunit{kg}{\text{kg}} \newunit{T}{\text{T}} \newunit{pc}{\%} \newunit{deg}{\text{\degre}} \newunit{degc}{\text{\degre C}} \newunit{euro}{\text{\euro}} % \end{macrocode} % Code pour les strut % \begin{macrocode} \newcommand*\Strut[1][1]{% \leavevmode \vrule \@height #1\ht\strutbox \@depth #1\dp\strutbox \@width\z@ } \newcommand*\TopStrut[1][1]{% \leavevmode \vrule \@height #1\ht\strutbox \@depth \z@ \@width \z@ } \newcommand*\BotStrut[1][1]{% \leavevmode \vrule \@height \z@ \@depth #1\dp\strutbox \@width \z@ } % \end{macrocode} % \begin{macro}{\setlist} % Code pour les listes. Ici, il faut choisir le type de liste qu'on % veut obtenir. Pour cela, on utilise la macro |\setlist| qui va % permettre à l'utilisateur de pouvoir choisir lui-même l'aspect des % listes. % % Le principe est de passer en paramètre le code de la partie % voulue. On a les possibilités : % \begin{itemize} % \item prerequis ; % \item AE ; % \item exapp ; % \item def ; % \item activite ; % \item rem ; % \item exemple ; % \item proof ; % \item exercice ; % \item acquis ; % \item commentaire ; % \item recreation ; % \item annexe ; % \item lexique ; % \item libre. % \end{itemize} % \begin{macrocode} \newcommand\setlist[1]{% \expandafter\let\expandafter\itemize \csname smc@#1itemize\endcsname \expandafter\let\expandafter\enditemize \csname endsmc@#1itemize\endcsname \expandafter\let\expandafter\colitemize \csname smc@#1colitemize\endcsname \expandafter\let\expandafter\endcolitemize \csname endsmc@#1colitemize\endcsname \expandafter\let\expandafter\enumerate \csname smc@#1enumerate\endcsname \expandafter\let\expandafter\endenumerate \csname endsmc@#1enumerate\endcsname \expandafter\let\expandafter\colenumerate \csname smc@#1colenumerate\endcsname \expandafter\let\expandafter\endcolenumerate \csname endsmc@#1colenumerate\endcsname } % \end{macrocode} % \end{macro} % Auparavant, il faut toutes les couleurs et les longueurs utilisées % par les listes. % \begin{macrocode} \colorlet{CommentaireItemColor}{Noir} \colorlet{PrerequisItemColor}{B2} \colorlet{AEItemColor}{B2} \colorlet{ActiviteItemColor}{C1} \colorlet{DefItemColor}{B2} \colorlet{RemItemColor}{H1} \colorlet{ExempleItemColor}{J1} \colorlet{ExAppItemColor}{A2} \colorlet{ProofItemColor}{J2} \colorlet{ExerciceItemColor}{G1} \colorlet{AcquisItemColor}{F1} \colorlet{RecreationItemColor}{U3} \colorlet{LexiqueItemColor}{B2} \def\ListLabelWidth{4mm} \def\EnumerateLabelWidth{5mm} % \end{macrocode} % Listes de type itemize et corritemize % \begin{macrocode} \newcommand*\DeclareCorrItemize[2]{% \newenvironment{smc@corr#1itemize}{% \def\item{\par#2~}% \ignorespaces } {\par} } \def\smc@setalllist{% \setlength{\leftmargin}{\ListLabelWidth}% \setlength{\rightmargin}{0mm}% \setlength{\labelwidth}{\ListLabelWidth}% \setlength{\labelsep}{0mm}% \setlength{\itemindent}{0mm}% \setlength{\listparindent}{0mm}% \setlength{\topsep}{0mm}% \setlength{\partopsep}{\baselineskip}% \setlength{\itemsep}{0mm}% \setlength{\parsep}{0mm}% \def\makelabel##1{##1\hss}% } \let\smc@setallfirstlist\smc@setalllist \def\smc@setallbiglist{% \setlength{\leftmargin}{\EnumerateLabelWidth}% \setlength{\rightmargin}{0mm}% \setlength{\labelwidth}{\EnumerateLabelWidth}% \setlength{\labelsep}{0mm}% \setlength{\itemindent}{0mm}% \setlength{\listparindent}{0mm}% \setlength{\topsep}{0mm}% \setlength{\partopsep}{\baselineskip}% \setlength{\itemsep}{0mm}% \setlength{\parsep}{0mm}% \def\makelabel##1{##1\hss}% } \newenvironment{smc@prerequisitemize}{% \ifnum\@listdepth=\z@ \list{\textcolor{PrerequisItemColor}{$\blacktriangleright$}} {\smc@setalllist}% \else \list{\textcolor{PrerequisItemColor}{$\blacktriangleright$}} {\smc@setalllist}% \fi } {\endlist} \DeclareCorrItemize{prerequis} {\textcolor{PrerequisItemColor}{$\blacktriangleright$}} \newenvironment{smc@AEitemize}{% \ifnum\@listdepth=\z@ \list{\textcolor{AEItemColor}{$\bullet$}} {\smc@setalllist}% \else \list{\textcolor{AEItemColor}{$\bullet$}} {\smc@setalllist}% \fi } {\endlist} \DeclareCorrItemize{AE}{\textcolor{AEItemColor}{$\bullet$}} \newenvironment{smc@exappitemize}{% \ifnum\@listdepth=\z@ \list{\textcolor{ExAppItemColor}{$\bullet$}} {\smc@setalllist}% \else \list{\textcolor{ExAppItemColor}{$\bullet$}} {\smc@setalllist}% \fi } {\endlist} \DeclareCorrItemize{exapp}{\textcolor{ExAppItemColor}{$\bullet$}} \newenvironment{smc@defitemize}{% \ifnum\@listdepth=\z@ \list{% \color{DefItemColor}% \vrule width \ItemRuleWidth height \ItemRuleHeight depth \ItemRuleDepth \relax} {\smc@setalllist}% \else \list{% \color{DefItemColor}% \vrule width \ItemRuleWidth height \ItemRuleHeight depth \ItemRuleDepth \relax} {\smc@setalllist}% \fi } {\endlist} \DeclareCorrItemize{def}{% \textcolor{DefItemColor}{% \vrule width \ItemRuleWidth height \ItemRuleHeight depth \ItemRuleDepth }% } \newenvironment{smc@activiteitemize}{% \ifnum\@listdepth=\z@ \list{\textcolor{ActiviteItemColor}{$\bullet$}} {\smc@setalllist}% \else \list{\textcolor{ActiviteItemColor}{$\bullet$}} {\smc@setalllist}% \fi } {\endlist} \DeclareCorrItemize{activite}{\textcolor{ActiviteItemColor}{$\bullet$}} \newenvironment{smc@remitemize}{% \ifnum\@listdepth=\z@ \list{% \color{RemItemColor} \vrule width \ItemRuleWidth height \ItemRuleHeight depth \ItemRuleDepth \relax} {\smc@setalllist}% \else \list{% \color{RemItemColor} \vrule width \ItemRuleWidth height \ItemRuleHeight depth \ItemRuleDepth \relax} {\smc@setalllist}% \fi } {\endlist} \DeclareCorrItemize{rem}{% \textcolor{RemItemColor}{% \vrule width \ItemRuleWidth height \ItemRuleHeight depth \ItemRuleDepth }% } \newenvironment{smc@exempleitemize}{% \ifnum\@listdepth=\z@ \list{\textcolor{ExempleItemColor}{$\bullet$}} {\smc@setalllist}% \else \list{\textcolor{ExempleItemColor}{$\bullet$}} {\smc@setalllist}% \fi } {\endlist} \DeclareCorrItemize{exemple}{\textcolor{ExempleItemColor}{$\bullet$}} \newenvironment{smc@proofitemize}{% \ifnum\@listdepth=\z@ \list{\textcolor{ProofItemColor}{$\bullet$}} {\smc@setalllist}% \else \list{\textcolor{ProofItemColor}{$\bullet$}} {\smc@setalllist}% \fi } {\endlist} \DeclareCorrItemize{proof}{\textcolor{ProofItemColor}{$\bullet$}} \newenvironment{smc@exerciceitemize}{% \ifnum\@listdepth=\z@ \list{\textcolor{ExerciceItemColor}{$\bullet$}} {\smc@setalllist}% \else \list{\textcolor{ExerciceItemColor}{$\bullet$}} {\smc@setalllist}% \fi } {\endlist} \DeclareCorrItemize{exercice}{\textcolor{ExerciceItemColor}{$\bullet$}} \newenvironment{smc@acquisitemize}{% \ifnum\@listdepth=\z@ \list{\textcolor{AcquisItemColor}{\footnotesize$\blacktriangleright$}} {\smc@setalllist}% \else \list{\textcolor{AcquisItemColor}{$\bullet$}} {\smc@setalllist}% \fi } {\endlist} \DeclareCorrItemize{acquis}{\textcolor{AcquisItemColor}{$\bullet$}} \newenvironment{smc@commentaireitemize}{% \ifnum\@listdepth=\z@ \list{\textcolor{CommentaireItemColor}{$\bullet$}} {\smc@setalllist}% \else \list{\textcolor{CommentaireItemColor}{$\bullet$}} {\smc@setalllist}% \fi } {\endlist} \DeclareCorrItemize{commentaire}{\textcolor{CommentaireItemColor}{$\bullet$}} \newenvironment{smc@recreationitemize}{% \ifnum\@listdepth=\z@ \list{\textcolor{RecreationItemColor}{$\bullet$}} {\smc@setalllist}% \else \list{\textcolor{RecreationItemColor}{$\bullet$}} {\smc@setalllist}% \fi } {\endlist} \DeclareCorrItemize{recreation}{\textcolor{RecreationItemColor}{$\bullet$}} \newenvironment{smc@annexeitemize}{% \ifnum\@listdepth=\z@ \list{% \color{AnnexeItemColor} \vrule width \ItemRuleWidth height \ItemRuleHeight depth \ItemRuleDepth \relax} {\smc@setalllist}% \else \list{% \color{AnnexeItemColor} \vrule width \ItemRuleWidth height \ItemRuleHeight depth \ItemRuleDepth \relax} {\smc@setalllist}% \fi } {\endlist} \newenvironment{smc@lexiqueitemize}{% \ifnum\@listdepth=\z@ \list{\textcolor{LexiqueItemColor}{$\bullet$}} {\smc@setalllist}% \else \list{\textcolor{LexiqueItemColor}{$\bullet$}} {\smc@setalllist}% \fi } {\endlist} \newenvironment{smc@libreitemize}{% \ifnum\@listdepth=\z@ \list{% \color{LibreItemColor} \vrule width \ItemRuleWidth height \ItemRuleHeight depth \ItemRuleDepth \relax} {\smc@setalllist}% \else \list{% \color{LibreItemColor} \vrule width \ItemRuleWidth height \ItemRuleHeight depth \ItemRuleDepth \relax} {\smc@setalllist}% \fi } {\endlist} \DeclareCorrItemize{libre}{% \textcolor{LibreItemColor}{% \vrule width \ItemRuleWidth height \ItemRuleHeight depth \ItemRuleDepth }% } % \end{macrocode} % Listes de type enumerate % \begin{macrocode} \newenvironment{bigenumerate} {% \let\smc@setallfirstlist\smc@setallbiglist \begin{enumerate} } {\end{enumerate}} \newcommand\DeclareEnumerate[3]{% \newenvironment{smc@#1enumerate}{% \gdef\smc@curr@itemcmd{#2}% \gdef\smc@curr@itemcolor{#3}%( \renewcommand\labelenumi{\textcolor{#3}{#2\theenumi)}}%( \renewcommand\labelenumii{\textcolor{#3}{#2\theenumii)}}%( \renewcommand\labelenumiii{\textcolor{#3}{#2\theenumiii)}}% \advance\@enumdepth \@ne \ifnum\@enumdepth>\thr@@ \ClassError{sesamanuel}{Pas plus de 3 niveaux de liste} {Consultez la documentation pour plus de renseignements.} \else\ifnum\@enumdepth=\@ne \edef\@enumctr{enum\romannumeral\the\@enumdepth}% \expandafter \list \csname label\@enumctr\endcsname {% \usecounter{\@enumctr}% \smc@setallfirstlist }% \else \edef\@enumctr{enum\romannumeral\the\@enumdepth}% \expandafter \list \csname label\@enumctr\endcsname {% \usecounter{\@enumctr}% \smc@setalllist }% \fi\fi } {\endlist} \newenvironment{smc@corr#1enumerate}{% \gdef\smc@curr@itemcmd{#2}% \gdef\smc@curr@itemcolor{#3}%( \setcounter{enumi}{0}% \setcounter{enumii}{0}% \setcounter{enumiii}{0}% \renewcommand\labelenumi{\textcolor{#3}{#2\theenumi)}}%( \renewcommand\labelenumii{\textcolor{#3}{#2\theenumii)}}%( \renewcommand\labelenumiii{\textcolor{#3}{#2\theenumiii)}}% \advance\@enumdepth \@ne \ifnum\@enumdepth>\thr@@ \ClassError{sesamanuel}{Pas plus de 3 niveaux de liste} {Consultez la documentation pour plus de renseignements.} \else \def\smc@enum{% \refstepcounter{enum\romannumeral\@enumdepth}% \csname labelenum\romannumeral\@enumdepth\endcsname~ }% \def\item{% \smc@enum \def\item{\par\smc@enum}% }% \fi \ignorespaces } {\par} } \DeclareEnumerate{prerequis}{}{PrerequisItemColor} \DeclareEnumerate{exapp}{\bfseries}{ExAppItemColor} \DeclareEnumerate{def}{\bfseries}{DefItemColor} \DeclareEnumerate{AE}{\bfseries}{AEItemColor} \DeclareEnumerate{activite}{\bfseries}{ActiviteItemColor} \DeclareEnumerate{rem}{}{RemItemColor} \DeclareEnumerate{exemple}{}{ExempleItemColor} \DeclareEnumerate{proof}{}{ProofItemColor} \DeclareEnumerate{exercice}{\bfseries}{ExerciceItemColor} \DeclareEnumerate{acquis}{\bfseries}{AcquisItemColor} \DeclareEnumerate{commentaire}{}{CommentaireItemColor} \DeclareEnumerate{recreation}{\bfseries}{RecreationItemColor} \DeclareEnumerate{annexe}{}{AnnexeItemColor} \DeclareEnumerate{lexique}{}{LexiqueItemColor} \DeclareEnumerate{libre}{}{LibreItemColor} % \end{macrocode} % Listes de type colitemize. On a besoin d'une longueur, de deux % compteurs et de deux chaînes fixes pour les \environ{colitemize} et % \environ{colenumerate} % \begin{macrocode} \def\ListHSep{2mm} \newcount\smc@nbitem \newcount\smc@nbline \newcommand*\StringColitemize{colitemize} \newcommand*\StringColenumerate{colenumerate} \newcommand*\DeclareColItemize[3]{% \newenvironment{#1}[1]{% \par \def\smc@nbcolumn{##1}% \smc@nbitem \z@ \edef\StringColCurrent{\StringColitemize}% \toks@{}% \smc@getbody }% {% \expandafter\smc@splititem\the\toks@\item\@nil\item \smc@nbline \numexpr \smc@nbitem+\smc@nbcolumn-1 \divide\smc@nbline \smc@nbcolumn \multido{\n=1+1}{\smc@nbline}{% \multido{\ni=\n+\the\smc@nbline}{\smc@nbcolumn}{% \unless\ifnum\ni>\smc@nbitem \makebox[\ListLabelWidth]{\textcolor{#2}{#3}\hss}% \begin{minipage}[t]{\dimexpr (\linewidth-\ListHSep*(\smc@nbcolumn-1))% /\smc@nbcolumn-\ListLabelWidth} \strut\@nameuse{smc@item\ni}\strut \end{minipage}% \hspace{\ListHSep}% \fi }% \ifnum\n=\smc@nbline \endgraf \else \\ \fi }% }% } \long\def\smc@getbody#1\end{% \toks@\expandafter{\the\toks@#1}\smc@testend } \long\def\smc@testend#1{% \def\smc@arg{#1}% \ifx\smc@arg\StringColCurrent \end{#1}% \else \toks@\expandafter{\the\toks@\end{#1}}% \expandafter\smc@getbody \fi } \long\def\smc@splititem#1\item{% \smc@@splititem } \long\def\smc@@splititem#1\item{% \def\smc@arg{#1}% \ifx\smc@arg\@nnil \else \advance\smc@nbitem\@ne \@namedef{smc@item\the\smc@nbitem}{#1}% \expandafter\smc@@splititem \fi } \DeclareColItemize{smc@prerequiscolitemize} {PrerequisItemColor}{$\blacktriangleright$} \DeclareColItemize{smc@AEcolitemize} {AEItemColor}{$\bullet$} \DeclareColItemize{smc@exappcolitemize} {ExAppItemColor}{$\bullet$} \DeclareColItemize{smc@defcolitemize} {DefItemColor} {% \vrule width \ItemRuleWidth height \ItemRuleHeight depth \ItemRuleDepth \relax } \DeclareColItemize{smc@activitecolitemize} {ActiviteItemColor}{$\bullet$} \DeclareColItemize{smc@remcolitemize} {RemItemColor} {% \vrule width \ItemRuleWidth height \ItemRuleHeight depth \ItemRuleDepth \relax } \DeclareColItemize{smc@exemplecolitemize} {ExempleItemColor}{$\bullet$} \DeclareColItemize{smc@proofcolitemize} {ProofItemColor}{$\bullet$} \DeclareColItemize{smc@exercicecolitemize} {ExerciceItemColor}{$\bullet$} \DeclareColItemize{smc@acquiscolitemize} {AcquisItemColor}{$\bullet$} \DeclareColItemize{smc@commentairecolitemize} {CommentaireItemColor}{$\bullet$} \DeclareColItemize{smc@recreationcolitemize} {RecreationItemColor}{$\bullet$} \DeclareColItemize{smc@annexecolitemize} {AnnexeItemColor} {% \vrule width \ItemRuleWidth height \ItemRuleHeight depth \ItemRuleDepth \relax } \DeclareColItemize{smc@lexiquecolitemize} {LexiqueItemColor}{$\bullet$} \DeclareColItemize{smc@librecolitemize} {LibreItemColor} {% \vrule width \ItemRuleWidth height \ItemRuleHeight depth \ItemRuleDepth \relax } % \end{macrocode} % Listes de type colenumerate. % \begin{macrocode} \newcommand*\DeclareColEnumerate[3]{% \newenvironment{#1}[1]{% \par\leavevmode \advance\@enumdepth \@ne \ifnum\@enumdepth>\thr@@ \ClassError{sesamanuel}{Pas plus de 3 niveaux de liste} {Consultez la documentation pour plus de renseignements.} \else \ifcase\@enumdepth \or %( \def\@enumlabel{\textcolor{#3}{#2\ni)}}%( \or \def\@enumlabel{\textcolor{#3}{#2{\@alph\ni})}}%( \or \def\@enumlabel{\textcolor{#3}{#2{\@roman\ni)}}}% \fi \fi \def\smc@nbcolumn{##1}% \smc@nbitem \z@ \edef\StringColCurrent{\StringColenumerate}% \toks@{}% \smc@getbody } {% \expandafter\smc@splititem\the\toks@\item\@nil\item \smc@nbline \numexpr \smc@nbitem+\smc@nbcolumn-1 \divide\smc@nbline \smc@nbcolumn \multido{\n=1+1}{\smc@nbline}{% \multido{\ni=\n+\the\smc@nbline}{\smc@nbcolumn}{% \unless\ifnum\ni>\smc@nbitem \makebox[\ListLabelWidth]{\@enumlabel\hss}% \begin{minipage}[t]{\dimexpr (\linewidth-\ListHSep*(\smc@nbcolumn-1))% /\smc@nbcolumn-\ListLabelWidth} \strut\@nameuse{smc@item\ni}\strut \end{minipage}% \hspace{\ListHSep}% \fi }% \ifnum\n=\smc@nbline \endgraf \else \\ \fi }% }% } \DeclareColEnumerate{smc@prerequiscolenumerate} {}{PrerequisItemColor} \DeclareColEnumerate{smc@exappcolenumerate} {\bfseries}{ExAppItemColor} \DeclareColEnumerate{smc@defcolenumerate} {\bfseries}{DefItemColor} \DeclareColEnumerate{smc@AEcolenumerate} {\bfseries}{AEItemColor} \DeclareColEnumerate{smc@activitecolenumerate} {}{ActiviteItemColor} \DeclareColEnumerate{smc@remcolenumerate} {}{RemItemColor} \DeclareColEnumerate{smc@exemplecolenumerate} {}{ExempleItemColor} \DeclareColEnumerate{smc@proofcolenumerate} {}{ProofItemColor} \DeclareColEnumerate{smc@exercicecolenumerate} {\bfseries}{ExerciceItemColor} \DeclareColEnumerate{smc@acquiscolenumerate} {\bfseries}{AcquisItemColor} \DeclareColEnumerate{smc@commentairecolenumerate} {\bfseries}{CommentaireItemColor} \DeclareColEnumerate{smc@recreationcolenumerate} {\bfseries}{RecreationItemColor} \DeclareColEnumerate{smc@annexecolenumerate} {\bfseries}{AnnexeItemColor} \DeclareColEnumerate{smc@lexiquecolenumerate} {\bfseries}{RecreationItemColor} \DeclareColEnumerate{smc@librecolenumerate} {\bfseries}{LibreItemColor} % \end{macrocode} % \iffalse % %<*packageTIKZ> % \fi % \section{Package TIKZ} % Cette extension propose un certains nombre d'outils spécifiques (la % majorité concernant TikZ d'où son nom) pour composer l'ouvrage de % seconde. % \begin{macrocode} \def\filedate{2015/03/03} \def\fileversion{1.0} \NeedsTeXFormat{LaTeX2e}[1995/06/01] \ProvidesPackage{sesamanuelTIKZ}[% \filedate\space v\fileversion\space compagnon de Sesamanuel (SM/JCC/SM)% ] % \end{macrocode} % On commence par charger quelques extensions annexes. La première % pour les vecteurs, les autres pour TikZ. % \begin{macrocode} \RequirePackage{esvect} \RequirePackage{tikz} \RequirePackage{tkz-tab} \RequirePackage{pgf} \usetikzlibrary{arrows} \usetikzlibrary{patterns} % \end{macrocode} % \begin{macro}{\chapeaumelon} % La macro |\chapeaumelon| est utilisée pour noter les arcs de cercle. % \begin{macrocode} \newcommand{\chapeaumelon}[1]{\stackrel{\Large \frown}{#1}} % \end{macrocode} % \end{macro} % \begin{macro}{\Logosesa} % La macro |\Logosesa| sert à composer le logo en couleur de Sesamath. % \begin{macrocode} \newcommand{\Logosesa}{% \textcolor{orange}{% \boldmath $ \overline{\textcolor{gray}{S}} \acute{\textcolor{gray}e} \overline{ \textcolor{gray}{sa} \textcolor{black}{math} } $% }% } % \end{macrocode} % \end{macro} % \begin{macro}{\TikZ} % La macro |\TikZ| sert à composer le logo officiel de TikZ. % \begin{macrocode} \newcommand\TikZ{Ti\textit{k}Z} % \end{macrocode} % \end{macro} % \begin{macro}{\UniteGras} % La macro |\UniteGras| met en gras ce qui suit indifféremment en mode % mathématique ou texte (à condition que la fonte correspondant grasse % existe bien). % \begin{macrocode} \newcommand\UniteGras[1]{{\bfseries \boldmath #1}} % \end{macrocode} % \end{macro} % \begin{macro}{couleurs} % On définit ici deux couleurs qui ont servi lors de l'impression de % l'ouvrage car les couleurs B1 et H1 posaient des problèmes de % passage dans la rotative. Ces couleurs peuvent être certainement % ignorées par un utilisateur non professionnel de l'imprimerie. % \begin{macrocode} \definecolor{B1prime}{cmyk}{0.00, 1.00, 0.00, 0.50} \definecolor{H1prime}{cmyk}{0.50, 0.00, 1.00, 0.00} % \end{macrocode} % \end{macro} % \begin{macro}{macros TikZ} % Le reste du code de cette extension sert pour les figures en % TikZ. On ne détaillera pas outre mesure ces macros. % \begin{macrocode} \definecolor{CyanTikz40}{cmyk}{.4,0,0,0} \definecolor{CyanTikz20}{cmyk}{.2,0,0,0} \tikzstyle{general}=[line width=0.3mm, >=stealth, x=1cm, y=1cm, line cap=round, line join=round] \tikzstyle{quadrillage}=[line width=0.3mm, color=CyanTikz40] \tikzstyle{quadrillageNIV2}=[line width=0.3mm, color=CyanTikz20] \tikzstyle{quadrillage55}=[line width=0.3mm, color=CyanTikz40, xstep=0.5, ystep=0.5] \tikzstyle{cote}=[line width=0.3mm, <->] \tikzstyle{epais}=[line width=0.5mm, line cap=butt] \tikzstyle{tres epais}=[line width=0.8mm, line cap=butt] \tikzstyle{axe}=[line width=0.3mm, ->, color=Noir, line cap=rect] \newcommand{\quadrillageSeyes}[2]{% \draw[line width=0.3mm, color=A1!10, ystep=0.2, xstep=0.8] #1 grid #2; \draw[line width=0.3mm, color=A1!30, xstep=0.8, ystep=0.8] #1 grid #2; } \newcommand{\axeX}[4][0]{% \draw[axe] (#2,#1)--(#3,#1); \foreach \x in {#4} {% \draw (\x,#1) node {\small $+$}; \draw (\x,#1) node[below] {\small $\x$}; }% } \newcommand{\axeY}[4][0]{% \draw[axe] (#1,#2)--(#1,#3); \foreach \y in {#4} {% \draw (#1, \y) node {\small $+$}; \draw (#1, \y) node[left] {\small $\y$}; }% } \newcommand{\axeOI}[3][0]{% \draw[axe] (#2,#1)--(#3,#1); \draw (1,#1) node {\small $+$}; \draw (1,#1) node[below] {\small $I$}; } \newcommand{\axeOJ}[3][0]{% \draw[axe] (#1,#2)--(#1,#3); \draw (#1, 1) node {\small $+$}; \draw (#1, 1) node[left] {\small $J$}; } \newcommand{\axeXgraduation}[2][0]{% \foreach \x in {#2} {% \draw (\x,#1) node {\small $+$}; }% } \newcommand{\axeYgraduation}[2][0]{% \foreach \y in {#2} {% \draw (#1, \y) node {\small $+$}; }% } \newcommand{\origine}{\draw (0,0) node[below left] {\small $0$};} \newcommand{\origineO}{\draw (0,0) node[below left] {$O$};} \newcommand{\point}[4]{\draw (#1,#2) node[#4] {$#3$};} \newcommand{\pointGraphique}[4]{% \draw (#1,#2) node[#4] {$#3$}; \draw (#1,#2) node {$+$}; } \newcommand{\pointFigure}[4]{% \draw (#1,#2) node[#4] {$#3$}; \draw (#1,#2) node {$\times$}; } \newcommand{\pointC}[3]{\draw (#1) node[#3] {$#2$};} \newcommand{\pointCGraphique}[3]{% \draw (#1) node[#3] {$#2$}; \draw (#1) node {$+$}; } \newcommand{\pointCFigure}[3]{% \draw (#1) node[#3] {$#2$}; \draw (#1) node {$\times$}; } % \end{macrocode} % \end{macro} % \iffalse % % \fi % \setcounter{IndexColumns}{2}\PrintIndex % \newpage % \PrintChanges % \endinput