Billy the Kid a écrit:J'ai consulté ton fichier exemple_trm.pdf et il me semble pas mal (oui peut-être moins kitch). Peux-tu me dire si tu as mis le code en ligne et, si oui, où afin que je le consulte ?
Il me faut le temps de l'adapter pour être utilisable, mais j'essaierai de le mettre en ligne ici prochainement.
Billy the Kid a écrit:j'ai quelques questions sans réponse malgré mes recherches :
La partie sur la reprogrammation de \chapter nécessite un certain nombre de connaissances sur les commandes TeX (malheureusement, on ne peut pas rester avec LaTeX seul).
Le but de \newtitlingelement est de se simplifier la vie. Au lieu d'écrire
- Code: Tout sélectionner
\newcommand{\theanneescolaire}{}
\newcommand{\anneescolaire}[1]{\renewcommand{\theanneescolaire}{#1}}
puis la même chose pour lycee, classe, etc., il suffira d'écrire
- Code: Tout sélectionner
\newtitlingelement{anneescolaire}
et idem pour les autres. C'est juste une facilité d'écriture.
Le fait de définir à la fois \theanneescolaire et \anneescolaire permet d'écrire
- Code: Tout sélectionner
\anneescolaire{2009-2010}
au lieu de
- Code: Tout sélectionner
\renewcommand{\theanneescolaire}{2009-2010}
ce qui est plus "user-friendly". C'est le même principe que pour \title, \author et \date, sauf que ces commandes définissent \@title, \@author et \@date respectivement. Le @ dans le nom de ces commandes est là pour marquer le fait que l'utilisateur ne devrait pas les utiliser (ce qui est un peu contestable, mais c'est ainsi). Pour pouvoir quand même accéder à \@author, on peut faire
- Code: Tout sélectionner
\newcommand*{\theauthor}{\@author}
(Le \def que j'avais utilisé n'était pas nécessaire donc devrait être remplacé par un \newcommand*.) En fait, pour éviter tout problème d'interaction avec \maketitle (qui efface \@author) il vaudrait carrément mieux redéfinir \author :
- Code: Tout sélectionner
\makeatletter
\newcommand*{\theauthor}{}
\renewcommand*{\author}[1]{\gdef\@author{#1}\renewcommand*{\theauthor}{#1}}
\makeatother
Les histoires de \long sont un peu ma faute, j'ai fait ça trop vite et j'aurais dû étoiler toutes les définitions pour éviter ce genre de considérations. Voici une version rectifiée du code source donné précédemment :
- Code: Tout sélectionner
\documentclass[11pt,a4paper,twoside]{report}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%INDISPENSABLE%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage[cp1252]{inputenc} % pour compiler correctement sous Windows
\usepackage[T1]{fontenc} % pour accéder aux glyphes des fontes
\usepackage[frenchb]{babel} % pour adapter la typographie aux conventions françaises
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{lmodern} % charge la famille de fontes lmodern
\usepackage[headheight=14.05pt,width=173mm,lines=52]{geometry} % réglages format page
\usepackage{amsmath,amssymb} % extensions pour écrire des mathématiques
\usepackage{calc} % pour faire des calculs sur les compteurs
\usepackage{enumitem} % extension pour personnaliser les listes
\frenchbsetup{StandardLists=true} % à charger avec enumitem pour éviter les conflits avec frenchb
\setenumerate[1]{font=\upshape,label=\arabic*)} % fonte normale, chiffre arabe
\setitemize[1]{label=--,noitemsep,topsep=0pt} % tirets pour les listes et même espacement que le standard de frenchb
% pour avoir des boîtes de mêmes largeurs choisies par une étiquette
\usepackage{eqparbox}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% NON UTILISE ICI
% Utilisation de ntheorem pour créer les environnements % théorèmes
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\usepackage[thmmarks]{ntheorem} % option thmmarks pour modifier la présentation des théorèmes
%\theoremstyle{break} % pour aller à la ligne après le nom du théorème
%\theoremseparator{~:} % spécifie le séparateur de théorème
%\theorembodyfont{\normalfont} % police du texte du théorème
%\theoremsymbol{$\blacklozenge$}
%\newtheorem{dfn}{Définition}[section]\newtheorem{pro}{Proposition}[section]\newtheorem{theo}{Théorème}[section]\newtheorem{cor}{Corollaire}
%\theoremstyle{nonumberbreak} % pas de numéro de théorème et un saut de ligne après le nom du théorème
%\theoremheaderfont{\itshape} % écrit le nom du théorème en italique
%\newtheorem {rem}{Remarques}\newtheorem {csq}{Conséquence}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Numéro de section, Compteurs de "théorèmes"
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\renewcommand{\thesection}{\Roman{section}} % change le numéro de section en chiffres romains
\newcounter{cpttheo}[section]\newcounter{cptpro}[section]\newcounter{cptdfn}[section]
% Avec l'option [section], cpttheo est réinitialisé à un à chaque changement de section
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Utilisation de bclogo pour créer les environnements % "théorèmes"
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{pstricks,graphicx,pst-grad,xkeyval,pst-coil,ifthen,pst-blur} % extensions nécessaires à bclogo
\usepackage{bclogo}
%\newcommand\bclosange{\centering$\blacklozenge$} % définir un bclogo à partir des caractères existants
\newcommand\bcblanc{{}} % définit un logo vide
% refstepcounter incréménte de un le compteur désigné
\newenvironment{theo}[1][]{\refstepcounter{cpttheo}\begin{bclogo}[logo=\bcspadesuit,ombre=true,arrondi=0.1]{Théorème \thesection -\thecpttheo\ : #1}}{\end{bclogo}}
\newenvironment{pro}[1][]{\refstepcounter{cptpro}\begin{bclogo}[logo=\bcplume,couleurBord=white]{Propriété \thesection -\thecptpro\ : #1}}{\end{bclogo}}
\newenvironment{cor}[1][]{\begin{bclogo}[logo=\bcrosevents,couleurBord=white]{Corollaire \thesection -\thecptpro\ : #1}}{\end{bclogo}}
% Le numéro du corollaire est le même que celui de la proposition qui le précède
\newenvironment{dfn}[1][]{\refstepcounter{cptdfn}\begin{bclogo}[logo=\bcbook,couleurBord=white]{Définition \thesection -\thecptdfn\ : #1}}{\end{bclogo}}
\newenvironment{remar}{%
% le code {% est utilisé dans les environnements personnels ou les commandes perso pour éviter les effets de bord (insertion d'espaces superflus par exemple)
\begin{bclogo}[logo=\bcblanc,couleurBord=white,barre=none,sousTitre=Remarques :]{}\vskip 0.5em}
{\end{bclogo}}
%em est le symbole du cadratin, il est proportionnel au corps de la police
\newenvironment{csq}{%
\begin{bclogo}[logo=\bcblanc,couleurBord=white,barre=none,sousTitre=Conséquence :]{}}
{\end{bclogo}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Commandes personnelles
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \mathbin s'assure que son argument est bien un opérateur binaire (le \hat ôte à son argument de ce statut)
\newcommand{\hatplus}{\mathbin{\hat{+}}}
\newcommand{\hattimes}{\mathbin{\hat{\times}}}
\newcommand\zed{\ensuremath{\mathbb{Z}}}
\newcommand{\air}{\ensuremath{\mathbb{R}}}
\newcommand{\ain}{\ensuremath{\mathbb{N}}}
% ensuremath s'assure que son argument est toujours composé en mode mathématique. Si l'on veut utiliser la commande \air par exemple dans du texte, il faut la faire suivre de \espace pour insérer l'espace nécessaire après le symbole R des réels.
\renewcommand{\leq}{\ensuremath{\leqslant}} % redéfinir le signe inférieur ou égal
\renewcommand{\geq}{\ensuremath{\geqslant}} % redéfinir le signe supérieur ou égal
% pour écrire correctement Z/nZ :
\newcommand*{\Sfrac}[2]{%
\hspace*{.1em}\raisebox{.5ex}{$#1$}\hspace*{-.1em}%
/\hspace*{-.15em}\raisebox{-.25ex}{$#2$}%
}
%La version étoilée du newcommand permet de circonscrire à un paragraphe les erreurs %dues à un éventuel oubli d'accolade fermante. Ainsi, on retrouve plus facilement %l'emplacement de l'erreur.
% raccourci pour Z/nZ afin de pouvoir changer l'apparence facilement
\newcommand{\ZnZ}{\Sfrac{\zed}{n\zed}}
\newcommand{\modulo}[1]{\ [#1]}% car c'est répété souvent
\newcommand{\congru}[3]{#1\equiv #2 \modulo{#3}}
% les ensembles { ... ; ... } sont souvent répétés et il faut qu'ils soient présentés pareils, donc on fait un raccourci
\newcommand{\enstq}[2]{\{#1\mathrel{;}#2\}}
% il faut utiliser \lvert pour une valeur absolue ouvrante et \rvert pour une valeur absolue fermante
\newcommand{\abs}[1]{\lvert#1\rvert}
% Afin de grouper correctement plusieurs équations les unes au-dessus l'autre avec une accolade ouvrante devant celles-ci :
\newenvironment{regroup}{%
\left\lbrace\def\arraystretch{1.2}%
\begin{array}{@{}l@{}}%
}
{\end{array}\right.}
% \def\arraystretch{1.2} permet d'augmenter la hauteur et la profondeur des lignes du tableau de 20 %
% @{} remplace l'espace intercolonne par l'argument (vide ici avec {})
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Modifier le titre courant et le pied de page
% avec le package fancydr
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{xcolor}
\usepackage{fancyhdr}\pagestyle{fancy} % appeler le style de page fancy afin de l'utiliser et le régler ensuite
% Définir un style de page nommé premierepage dont le titre courant est vide et qui % ne trace pas de trait horizontal séparant le texte du titre courant.
\fancypagestyle{premierepage}{\fancyhead{}\renewcommand\headrulewidth{0pt}}
% le style de page par défaut est fancy
\pagestyle{fancy}
\fancyhf{}
\fancyhead[RO,LE]{\thepage}
\fancyhead[CO]{\leftmark}
\fancyhead[CE]{\textbf{\rightmark}}
\cfoot{\scriptsize\textit{\theauthor, \theclasse{} -- Lycée \textsc{\thelycee}, \theanneescolaire}}
% on redéfinit \chaptermark pour ne pas avoir "Chapitre 1" devant le titre de chapitre "Arithmétique dans \zed"
\renewcommand{\chaptermark}[1]{\markboth{#1}{}}
% fancyhf{} efface tout
% \fancyhead[RO,LE]{\thepage}
% RO (à droite, page impaire) et LE (à gauche, page paire) : écrire numéro de page
% \fancyhead[CO]{#1}
% CO (au centre,page impaire) : écrire le titre donné comme premier argument de la commande entete
% \fancyhead[CE]{\textbf{\rightmark}}
% CE (au centre, page paire) : nom de la section courante (rightmark)
% \cfoot{\scriptsize\textsl{Freddy Mérit, #2 - Lycée \textsc{La Herdrie}, #3}}}
% pied de page en italique et en petite taille
% arguments de entete :
%\entete{titre courant}{classe}{Année}
% macro de séparation fond/forme
\newcommand{\definir}[1]{\textbf{\mathversion{bold}#1}}
\newcommand{\important}[1]{\textbf{\mathversion{bold}#1}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% PERSONNALISATION DES SECTIONS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% la commande \newtitlingelement permet de créer des commandes du type \title, \author ou \date
\newcommand{\newtitlingelement}[1]{%
\expandafter\newcommand\expandafter*\csname the#1\endcsname{}%
\expandafter\newcommand\expandafter*\csname #1\endcsname[1]{\expandafter\renewcommand\expandafter*\csname the#1\endcsname{##1}}%
}
% on définit des commandes analogues à \title, \author et \date pour l'image de chapitre, la classe, le lycée et l'année scolaire
\newtitlingelement{chapterimage}
\newtitlingelement{classe}
\newtitlingelement{lycee}
\newtitlingelement{anneescolaire}
% pour pouvoir accéder au nom d'auteur
\makeatletter
\newcommand*{\theauthor}{}
\renewcommand*{\author}[1]{\gdef\@author{#1}\renewcommand*{\theauthor}{#1}}
\makeatother
% commande pour tester si l'image est vide
\newcommand*{\emptyelement}{}
% utilisation de titlesec pour redéfinir les chapitres
\usepackage{titlesec}
\newcommand{\chaptercmd}{}
\titleformat{\chapter}
{\global\let\chaptercmd\chaptercmdstar}
{\global\let\chaptercmd\chaptercmdnostar}
{0pt}
{\thispagestyle{premierepage}\chaptercmd}
{}
\titlespacing*{\chapter}{0pt}{0pt}{30pt}
% chapitre non numéroté (table des matières, par exemple)
\newcommand{\chaptercmdstar}[1]{
\ifx\thechapterimage\emptyelement
% si l'image est vide,
\noindent\begin{tabular}{p{\textwidth-2\tabcolsep}}
\begin{center}\color{blue}
{\Huge\bfseries\MakeUppercase{#1}\par}
\end{center}\end{tabular}\par
\else
% si l'image est non vide,
\noindent\begin{tabular}{@{\hspace{2em}}p{.75\textwidth-4em}@{\hspace{2em}}p{.25\textwidth-2\tabcolsep}}
\begin{center}\color{blue}
{\Huge\bfseries\MakeUppercase{#1}\par}
\end{center}
&
\begin{center}
\includegraphics[width=.25\textwidth-2\tabcolsep]{\thechapterimage}
\end{center} \\
\end{tabular}\par
\fi
\gdef\thechapterimage{}% pour ne pas utiliser la même image pour le chapitre suivant
}
% chapitre numéroté
\newcommand{\chaptercmdnostar}[1]{%
\ifx\thechapterimage\emptyelement
% si l'image est vide,
\noindent\begin{tabular}{p{\textwidth-2\tabcolsep}}
\begin{center}\color{blue}
{\large\MakeUppercase{chapitre \thechapter}\par}
\vspace*{2em}
{\Huge\bfseries\MakeUppercase{#1}\par}
\end{center}
\end{tabular}\par
\else
% si l'image est non vide,
\noindent\begin{tabular}{@{\hspace{2em}}p{.75\textwidth-4em}@{\hspace{2em}}p{.25\textwidth-2\tabcolsep}}
\begin{center}\color{blue}
{\large\MakeUppercase{chapitre \thechapter}\par}
\vspace*{2em}
{\Huge\bfseries\MakeUppercase{#1}\par}
\end{center}
&
\begin{center}
\includegraphics[width=.25\textwidth-2\tabcolsep]{\thechapterimage}
\end{center} \\
\end{tabular}\par
\fi
\gdef\thechapterimage{}% pour ne pas utiliser la même image pour le chapitre suivant
}
\newcommand{\setchapternumber}[1]{\setcounter{chapter}{\numexpr#1-1 }}
% n'utiliser l'option dvips que pour une compilation dvi->ps->pdf
% sinon, ne rien mettre (c'est automatique pour pdftex)
\usepackage[dvips]{hyperref}
% pour que le niveau de zoom du PDF ne soit pas changé
\hypersetup{pdfstartview=XYZ}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% MÉTADONNÉES
% nom d'auteur, nom de la classe, nom du lycée et année scolaire
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\author{Freddy Mérit}
\classe{T\textsuperscript{ale}S1}
\lycee{La Herdrie}
\anneescolaire{2009-2010}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% CORPS DU DOCUMENT
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\chapterimage{bezout}% à mettre avant le chapitre ; si absent ou vide, aucune image n'est imprimée ; l'image d'un chapitre n'est pas réutilisée pour le chapitre suivant
%\setchapternumber{3}% au besoin, pour changer le numéro de chapitre
\chapter{Arithmétique dans~\zed}
\section{Divisibilité}
\begin{pro}
$(\zed,+,\times)$ est un anneau commutatif unitaire intègre (de caractéristique nulle).
\end{pro}
\begin{dfn}
Soit $(a,b)\in \zed^2$. On dit que $a$ \definir{divise} $b$, et on note $a\mid b$ si et seulement s'il existe $c\in\zed$ tel que $b=ac$.
On dit aussi que :
\begin{itemize}
\item $a$ est un \definir{diviseur} de $b$ ;
\item $b$ est un \definir{multiple} de $a$ ;
\item $b$ est \definir{divisible} par $a$.
\end{itemize}
\end{dfn}
% iff est préférable à \Longleftrightarrow, il insére un espace avant et un après.
% même chose pour mid au lieu de |.
\begin{remar}
\begin{enumerate}
\item \eqparbox{rem1}{$\forall a\in\zed,\quad a\mid a.$}\quad(Tout entier relatif est divisible par lui-même.)
\item \eqparbox{rem1}{$\forall a\in\zed,\quad 1\mid a \enspace \text{et} \enspace {-1}\mid a.$}\quad(Tout entier relatif est multiple de $1$ ou de $-1$.)
\item \eqparbox{rem1}{$\forall a\in\zed,\quad a\mid 0.$}\quad(Tout entier relatif divise $0$.)
\item \eqparbox{rem1}{$\forall a\in\zed,\quad 0\mid a\iff a=0.$}\quad(Le seul multiple de $0$ est $0$.)
\end{enumerate}
\end{remar}
\begin{pro}
$\forall (a,b,c) \in \zed^3, \quad
\begin{regroup}
a\mid b\\b\mid c
\end{regroup}
\implies a\mid c$
\end{pro}
\begin{pro}
\begin{enumerate}
\item $\forall (a,b,c) \in \zed^3, \quad a\mid b \implies a\mid bc$
\item $\forall (a,b,c,\alpha,\beta) \in \zed^5, \quad \begin{regroup}
a\mid b\\a\mid c
\end{regroup}
\implies a\mid(\alpha b+\beta c)$
\item $\forall (a,b,\alpha,\beta) \in \zed^4, \quad \begin{regroup}
a\mid b\\
\alpha\mid \beta
\end{regroup}
\implies a\alpha\mid b\beta$
\item $\forall (a,b,n) \in \zed\times\zed\times\mathbb{N}^*, \quad a\mid b\implies a^n\mid b^n$
\end{enumerate}
\end{pro}
\begin{pro}
\begin{enumerate}
\item $\forall (a,b) \in \zed^*\times\zed^*, \quad b\mid a\implies \abs{b} \leq \abs{a}$
\item $\forall (a,b) \in \zed^*\times\zed^*, \quad
\begin{regroup}
a\mid b\\b\mid a
\end{regroup}
\implies \abs{a} = \abs{b}$
\end{enumerate}
\end{pro}
\begin{csq}
L'ensemble des diviseurs d'un entier relatif non nul est fini.
\end{csq}
\begin{pro}
\air\ est archimédien, c'est-à-dire,
$\forall x \in \air^+, \forall y\in \air^{*+},\exists n\in \ain,\ ny>x.$
\end{pro}
\begin{csq}
$\ain$, $\zed$, $\mathbb{D}$, $\mathbb{Q}$ sont donc aussi archimédiens.
\end{csq}
\begin{pro}
\begin{enumerate}
\item Toute partie non vide de \ain\ admet un plus petit élément.
\item Toute partie non vide et majorée (resp. minorée) de \zed\ admet un plus grand (resp. plus petit) élément.
\end{enumerate}
\end{pro}
\begin{theo}
Soit $(a,b)\in \zed\times\ain^*$.
Il \important{existe} un \important{unique} couple $(q,r)$ appartenant à $\zed^2$ tel que $\begin{regroup}
a=bq+r\\
0\leq r<b
\end{regroup}$.
On dit que $q$ est le \definir{quotient} et $r$ est le \definir{reste} de la division euclidienne de $a$ par $b$.
\end{theo}
\section{Congruences}
\begin{dfn}
Soit $n\in\ain^*$. Soit $(a,b)\in\zed^2$.
On dit que $a$ est \definir{congru à $b$ modulo $n$} si $n$ divise $b-a$. On note $\congru{a}{b}{n}$ ou $a \equiv b \mod n$. Ainsi,
\[\congru{a}{b}{n}\iff n\mid (b-a).\]
\end{dfn}
\begin{pro}
Soit $n \in \ain^*$. Soit $(a,b) \in \zed^2$.
$a$ est congru à $b$ modulo $n$ équivaut à $a$ et $b$ ont le même reste dans la division euclidienne par $n$.
\end{pro}
\begin{pro}
Pour tout $n$ de $\ain^*$, la relation de congruence $\equiv\modulo{n}$ est une relation d'équivalence sur l'ensemble \zed. On note $\ZnZ$ l'ensemble-quotient de $\zed$ par la relation d'équivalence ($\equiv$) de congruence modulo~$n$.
\end{pro}
\begin{pro}
Il existe un unique entier naturel $r$ tel que $0\leq r<n$ et $\congru{r}{a}{n}$. Ce nombre est le reste de la division euclidienne de $a$ par $n$.
\end{pro}
\begin{dfn}
Pour tout $x$ de \zed, on note $\hat{x}$ (ou $\bar{x}$) la classe de $x$ dans $\ZnZ$ :
\[\hat{x} = \enstq{y\in \zed}{\congru{x}{y}{n}} = \enstq{x+kn}{k\in\zed}.\]
$\ZnZ$ est donc un ensemble fini à $n$ éléments et $\ZnZ = \{\hat{0},\hat{1},\dots,\widehat{n-1}\}$.
\end{dfn}
\begin{pro}
Soit $n \in \ain^*$. Pour tout $(a,b,c,d)$ de $\zed^4$, on a :
\[\left\{\begin{aligned}
a &\equiv b\modulo{n}\\
c &\equiv d\modulo{n}
\end{aligned}
\right.
\implies
\left\{\begin{aligned}
a+c &\equiv b+d\modulo{n}\\
ac &\equiv bd\modulo{n}
\end{aligned}
\right.\]
\end{pro}
\begin{cor}
\[\forall (a,b) \in \zed^2,\quad \forall k \in \ain^*, \quad \left(\congru{a}{b}{n}\implies \congru{a^k}{b^k}{n}\right).\]
\end{cor}
Comme la relation d'équivalence $\equiv\modulo{n}$ est compatible avec les lois de composition interne $+$ et $\times$ de \zed, on peut définir deux lois de composition interne dans $\ZnZ$, notées $\hatplus$ et $\hattimes$ par :
\[\forall (x,y) \in \zed^2, \quad \left\{\begin{aligned}
\hat{x}\hatplus\hat{y} &= \widehat{x+y}\\
\hat{x}\hattimes\hat{y} &= \widehat{x\times y}.
\end{aligned}
\right.\]
\end{document}
Voici maintenant quelques expliciations sur \long, \def, \gdef, \ifx, \csname...\endcsname.
\def est ce qui permet de définir des commandes avec TeX. La différence principale avec le \newcommand de LaTeX est que si une commande du même nom écrit déjà, elle est écrasée ; on peut donc avoir des surprises si on redéfinit des choses existant déjà et qui sont importantes. Pour une utilisation basique, on n'a pas besoin de \def, et on devrait utiliser \newcommand à la place ; si jamais on a vraiment besoin de \def, on aura intérêt à utiliser quelque chose du genre
- Code: Tout sélectionner
\newcommand{\macro}{}
\def\macro{...}
pour vérifier que la \macro n'existe pas déjà.
\gdef est une variante de \def qui est globale, autrement dit, elle aura un effet même en dehors du groupe où elle se trouve (les définition avec \def ou \newcommand sont locales donc sont délimitées à un groupe). Voici un exemple :
- Code: Tout sélectionner
\begin{center}\renewcommand*{\emph}{\textbf}
Ici, c'est du \emph{gras}.
\end{center}
Ici, c'est de l'\emph{italique}.
Par contre, avec un \gdef :
- Code: Tout sélectionner
\begin{center}\gdef\emph{\textbf}
Ici, c'est du \emph{gras}.
\end{center}
Ici, c'est aussi du \emph{gras}.
On est obligé d'utiliser \gdef dans \titleformat pour que la définition soit prise en compte au niveau global du document. La commande \gdef est équivalente à \global\def. Si on a besoin de \let au lieu de \def, on doit utiliser \global\let si on veut que ce soit global (\let capture la définition d'une macro au moment de la définition ; par exemple, si on fait \let\a\b et qu'après on change \b, la valeur de \a restera inchangée ; ce ne serait pas le cas si on avait utilisé \def\a{\b}).
\long est un attribut pour \def, de même que l'est \global. Il permet de rendre les définitions longues, c'est-à-dire pour qu'il soit possible d'avoir des changements de paragraphes à l'intérieur. Par exemple,
- Code: Tout sélectionner
\textbf{ligne 1
ligne 2}
renvoie une erreur car \textbf n'est pas longue. Par contre, par de problème avec une variante longue :
- Code: Tout sélectionner
\long\def\longtextbf#1{{\bfseries#1}}
\longtextbf{ligne 1
ligne 2}
les deux lignes seront bien en gras. \newcommand définit des macros longue tandis que \newcommand* ne le fait pas (c'est donc l'inverse par rapport à \def : il faut rajouter quelque chose pour que la macro soit courte).
\ifx compare deux macros pour savoir si elles sont "identiques". Si on veut comparer \a et \b et afficher "vrai" si elles sont identiques et "faux" sinon, la syntaxe est
- Code: Tout sélectionner
\ifx\a\b
vrai
\else
faux
\fi
Le \else est optionnel et il n'y a pas de signe = ou quoi que ce soit d'autre de ce style. Ce qui nous intéresse ici est de savoir si la macro \thechapterimage est vide ou pas pour afficher un titre de chapitre différent selon le cas. Pour tester si une macro est vide, on ne peut comparer à {} car ce n'est pas une macro ; il faut donc définir une macro vide pour pouvoir comparer ; il y a déjà \empty qui le fait, mais il vaut mieux définir sa propre commande, on ne sait jamais ce que certains packages peuvent faire à certaines macros. Pour tester si \macro est vide, on peut donc faire
- Code: Tout sélectionner
\newcommand{\macro}{}
\newcommand{\macrovide}{}
\ifx\macro\macrovide
vrai
\else
faux
\fi
Il faut faire attention, \ifx est sensible au fait que les macros soient longues ou pas, donc si \macro est définie par une \newcommand étoilée, il faut aussi que \macrovide le soit sinon le teste échoue ; c'est pourquoi dans le code de l'autre fois j'avais défini un \longempty pour tester si \thechapterimage était vide : il fallait que les deux soient longues en même temps.
Concernant le couple
\csname et
\endcsname, ils servent à fabriquer des noms de macros à partir d'un texte à peu près arbitraire. C'est très utile pour définir des commandes définissant des commandes (comme \titlingelement). Le principe est que
- Code: Tout sélectionner
\csname thechapterimage\endcsname
est la même chose que \thechapterimage. Donc si #1 est l'argument d'une macro (égal par exemple à"thechapter"), \csname#1\endcsname convertira cet argument en macro ("\thechapterimage" dans l'exemple précédent). Le problème quand on écrit
- Code: Tout sélectionner
\newcommand\csname thechapterimage\endcsname{...}
est que TeX croit qu'on veut définir \csname, alors qu'on veut définir \csname thechapterimage\endcsname. Pour éviter ces problèmes, on utilise \expandafter qui permet de lui dire de construire d'abord \csname thechapterimage\endcsname puis d'appliquer \newcommand. Ici, cela donnerait :
- Code: Tout sélectionner
\expandafter\newcommand\csname thechapterimage\endcsname{...}
C'est ce principe qui est utilisé dans
- Code: Tout sélectionner
\newcommand{\newtitlingelement}[1]{%
\expandafter\newcommand\csname the#1\endcsname{}%
\expandafter\newcommand\csname #1\endcsname[1]{\expandafter\renewcommand\csname the#1\endcsname{##1}}%
}
pour s'assurer que TeX voit la chose suivante :
- Code: Tout sélectionner
\newcommand{\newtitlingelement}[1]{%
\newcommand\the#1{}%
\newcommand\#1[1]{\renewcommand\the#1{##1}}%
}
(Ici, si #1 désigne chapterimage, \#1 désigne \chapterimage est \the#1 désigne \thechapterimage.) Il y a une dernière subtilité : quand on définit une commande à argument dans une autre, il faut doubler les # pour que TeX puisse faire la différence entre le #1 de la commande et celui de la sous-commande (##1).