summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/formation-latex-ul/commandes.tex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2016-11-23 23:32:59 +0000
committerKarl Berry <karl@freefriends.org>2016-11-23 23:32:59 +0000
commit69896cc8b4b0a309ca3df978f585df5d49abc2af (patch)
tree960c127c35d6b2ff213bfeca8d934c30b8d63420 /Master/texmf-dist/source/latex/formation-latex-ul/commandes.tex
parentaa600844d37917089773452899b770c1c2f9f1ea (diff)
formation-latex-ul (23nov16)
git-svn-id: svn://tug.org/texlive/trunk@42562 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/formation-latex-ul/commandes.tex')
-rw-r--r--Master/texmf-dist/source/latex/formation-latex-ul/commandes.tex436
1 files changed, 436 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/formation-latex-ul/commandes.tex b/Master/texmf-dist/source/latex/formation-latex-ul/commandes.tex
new file mode 100644
index 00000000000..e6135f34888
--- /dev/null
+++ b/Master/texmf-dist/source/latex/formation-latex-ul/commandes.tex
@@ -0,0 +1,436 @@
+\chapter{Commandes et environnements définis par l'usager}
+\label{chap:commandes}
+
+{\LaTeX} est un ensemble de macro-commandes conçu pour faciliter
+l'utilisation du système {\TeX}. Dès lors, il est assez naturel de
+permettre à l'usager de définir à son tour ses propres commandes. Il
+suffit généralement d'avoir rédigé quelques documents --- ou quelques
+chapitres d'un long document --- avec {\LaTeX} pour réaliser combien
+cette possibilité est de nature à faciliter le travail.
+
+La définition de nouvelles commandes et de nouveaux environnements
+peut servir à créer des extensions à {\LaTeX} --- c'est d'ailleurs ce
+que font plusieurs paquetages. Cependant, en usage courant, on fera
+principalement appel à ces fonctionnalités pour l'une ou l'autre des
+trois raisons suivantes:
+
+\begin{enumerate}
+\item créer des raccourcis pour de longues commandes utilisées
+ fréquemment;
+\item créer des commandes sémantiques afin d'uniformiser la
+ présentation du texte;
+\item modifier le comportement de commandes existantes --- car il est
+ également possible de redéfinir une commande existante.
+\end{enumerate}
+
+\begin{exemple}
+ \label{ex:commandes:intro}
+ Nous avons créé ou modifié des commandes pour chacune des raisons
+ ci-dessus dans la préparation du présent document.
+ \begin{enumerate}
+ \item Une nouvelle commande \cmdprint{\doc} facilite et systématise
+ l'insertion de liens vers la documentation. D'un seul appel, elle
+ crée un hyperlien dans le texte suivi de l'icône {\faExternalLink}
+ et elle ajoute le nom du fichier de documentation dans la marge
+ précédé de l'icône {\faBookmark}.
+ \item Une nouvelle commande sémantique \cmdprint{\pkg} sert pour la
+ mise en forme des noms de paquetages. Ainsi, leur présentation est
+ toujours la même et si nous souhaitons en changer, il suffit de
+ modifier la définition de la commande.
+ \item La redéfinition de la commande \cmd{\chaptitlefont} de la
+ classe \class{memoir} permet de modifier la police et la mise en
+ forme des titres de chapitres.
+ \end{enumerate}
+ Nous reviendrons sur les détails de ces exemples dans la suite du
+ chapitre. %
+ \qed
+\end{exemple}
+
+
+\section{Nouvelles commandes}
+\label{sec:commandes:commandes}
+
+Les commandes \cmd{\newcommand} et \cmd{\renewcommand} permettent
+respectivement de définir une nouvelle commande et de redéfinir une
+commande existante --- c'est-à-dire d'en modifier la définition. On
+place généralement les appels à ces commandes dans le préambule du
+document.
+
+\subsection{Commandes sans arguments}
+\label{sec:commandes:commandes:sans_arg}
+
+Certaines commandes ne requièrent pas d'argument; pensons à
+\cmdprint{\LaTeX} ou \cmdprint{\bfseries}. Ce sont les commandes les
+plus simples à créer. La syntaxe des commandes \cmd{\newcommand} et
+\cmd{\renewcommand} pour de tels cas est la suivante:
+\begin{lstlisting}
+\newcommand{`\bs\meta{nom\_commande}'}`\marg{définition}'
+\renewcommand{`\bs\meta{nom\_commande}'}`\marg{définition}'
+\end{lstlisting}
+Le premier argument, \bs\meta{nom\_commande}, est le nom de la
+commande, avec le symbole \bs. Ce nom doit être différent de celui
+de toute commande active\footnote{%
+ Les commandes actives dans un document sont les commandes de base de
+ {\TeX} et {\LaTeX} ainsi que les commandes de tous les paquetages
+ chargés dans le préambule.} %
+dans le document dans le cas de \cmdprint{\newcommand}. À l'inverse,
+une commande active doit nécessairement porter le même nom lorsque
+l'on fait appel à \cmdprint{\renewcommand}.
+
+Le second argument, \meta{définition}, contient la définition de la
+commande. Il peut s'agir de caractères à insérer dans le texte, de
+commandes à exécuter ou d'une combinaison de tout cela.
+
+\begin{exemple}
+ La commande \cmd{\mathbb}, présentée à la
+ \autoref{sec:math:symboles:mathcal}, permet de créer une lettre
+ majuscule ajourée pour représenter un ensemble de nombres en
+ mathématiques. Plutôt que de l'utiliser à divers endroits dans un
+ document, il est préférable de définir une commande sémantique comme
+ \cmdprint{\R} pour représenter l'ensemble des nombres réels:
+\begin{lstlisting}
+\newcommand{\R}{\mathbb{R}}
+\end{lstlisting}
+ Ainsi, si l'on souhaite pour une raison quelconque modifier la
+ représentation de l'ensemble des nombres réels, il suffit de
+ modifier la définition de la commande \cmdprint{\R} pour que le
+ changement prenne effet dans tout le document. %
+ \qed
+\end{exemple}
+
+\begin{exemple}
+ Tel que mentionné à l'\autoref{ex:commandes:intro}, nous avons
+ modifié la police des titres de chapitres dans le présent document
+ en redéfinissant la commande \cmdprint{\chaptitlefont} de la classe
+ \class{memoir}. Pour obtenir des titres de chapitres sans
+ empattements, en caractères gras, de dimension \cmdprint{\Huge} et
+ alignés à gauche, on trouve dans le préambule du document la
+ déclaration
+\begin{lstlisting}
+\renewcommand{\chaptitlefont}{\normalfont%
+ \sffamily\bfseries\Huge\raggedright}
+\end{lstlisting}
+ \qed
+\end{exemple}
+
+
+\subsection{Commandes avec arguments}
+\label{sec:commandes:commandes:avec_arg}
+
+Les commandes \cmdprint{\newcommand} et \cmdprint{\renewcommand} ont
+d'autres tours dans leur sac. Leur syntaxe étendue permet également de
+définir ou de redéfinir des commandes acceptant un ou plusieurs
+arguments:
+\begin{lstlisting}
+\newcommand{`\bs\meta{nom\_commande}'}`\oarg{narg}\marg{définition}'
+\renewcommand{`\bs\meta{nom\_commande}'}`\oarg{narg}\marg{définition}'
+\end{lstlisting}
+Le nouvel argument \meta{narg} est un nombre entre 1 et 9
+spécifiant le nombre d'arguments de la commande. La \meta{définition}
+de la commande doit alors contenir des jetons \code{\#1}, \code{\#2},
+\dots\ pour identifier les endroits où les arguments 1, 2, \dots\
+doivent apparaître.
+
+\begin{exemple}
+ La nouvelle commande \cmdprint{\pkg} mentionnée à
+ l'\autoref{ex:commandes:intro} affiche les noms de paquetages en
+ caractères gras. La commande prend en argument le nom du paquetage.
+ Sa définition est donc
+\begin{lstlisting}
+\newcommand{\pkg}[1]{\textbf{#1}}
+\end{lstlisting}
+ Il s'agit encore d'une commande sémantique permettant de changer
+ aisément la mise en forme en modifiant une seule définition dans le
+ préambule du document. %
+ \qed
+\end{exemple}
+
+\begin{exemple}
+ \label{ex:commandes:doc}
+ La commande \cmdprint{\doc} mentionnée à
+ l'\autoref{ex:commandes:intro} requiert trois arguments:
+ \begin{enumerate}
+ \item le texte de l'hyperlien qui sera placé au fil du texte;
+ \item le nom du fichier de documentation à placer dans la marge dans
+ une police non proportionnelle;
+ \item l'URL vers le fichier de documentation en ligne.
+ \end{enumerate}
+ Voici une version simplifiée de la définition de la commande:
+\begin{lstlisting}
+\newcommand{\doc}[3]{%
+ \href{#3}{#1~\raisebox{-0.2ex}{\faExternalLink}}%
+ \marginpar{\faBookmark~\texttt{#2}}}
+\end{lstlisting}
+ La commande \cmd{\href} qui permet d'insérer un hyperlien dans le
+ texte provient du paquetage \pkg{hyperref} \citep{hyperref}. Les
+ commandes \cmdprint{\faEx\-ter\-nal\-Link} et \cmdprint{\faBookmark}
+ proviennent du paquetage \pkg{fontawesome} \citep{fontawesome}; elles
+ insèrent dans le texte des icônes de la police libre %
+ \link{http://fortawesome.io/}{Font~Awesome}. %
+
+ Avec la définition ci-dessus, la déclaration
+\begin{lstlisting}
+\doc{documentation}{hyperref}{%
+ http://texdoc.net/pkg/hyperref}
+\end{lstlisting}
+ produit: \doc{hyperref}{http://texdoc.net/pkg/hyperref}. %
+ \qed
+\end{exemple}
+
+
+\section{Nouveaux environnements}
+\label{sec:commandes:environnements}
+
+Tel que mentionné en introduction du chapitre, {\LaTeX} permet
+également à l'utilisateur de définir ou de modifier des
+environnements. La mécanique est similaire à celle de la définition de
+commandes, sauf qu'un environnement compte trois parties: le début,
+marqué par la déclaration \cmdprint{\begin\marg{...}} et, parfois, des
+ commandes de configuration de l'environnement; le contenu en tant
+ que tel; la fin, marquée par la déclaration
+ \cmdprint{\end\marg{...}}.
+
+On crée ou modifie des environnements avec les commandes
+\begin{lstlisting}
+\newenvironment`\marg{nom\_env}\oarg{narg}\marg{début\_déf}\marg{fin\_déf}'
+\renewenvironment`\marg{nom\_env}\oarg{narg}\marg{début\_déf}\marg{fin\_déf}'
+\end{lstlisting}
+Les nombreux arguments sont les suivants:
+\begin{list}{}{%
+ \setlength{\labelsep}{1.5ex}
+ \settowidth{\labelwidth}{\meta{début\_déf}}
+ \setlength{\leftmargin}{\labelwidth}
+ \addtolength{\leftmargin}{\labelsep}
+ \setlength{\parsep}{0.5ex plus0.2ex minus0.2ex}
+ \setlength{\itemsep}{0.3ex}
+ \renewcommand{\makelabel}[1]{\meta{#1}\hfill}}
+%
+
+\item[nom\_env] nom de l'environnement à créer ou à modifier.
+ Il est fortement recommandé de ne pas modifier les environnements de
+ base de {\LaTeX};
+\item[narg] un nombre entre 1 et 9 représentant le nombre
+ d'arguments de l'environnement, lorsqu'il y en a. Les arguments sont
+ utilisés de la même manière que dans les définitions de commandes;
+\item[début\_déf] commandes et texte à insérer au début de
+ l'environnement, lors de l'appel \cmdprint{\begin\marg{nom\_env}}.
+ C'est dans ce bloc que doivent se trouver les jetons \code{\#1},
+ \dots, \code{\#}\meta{narg} lorsque l'environnement a des
+ arguments.
+\item[fin\_déf] commandes et texte à insérer à la fin de
+ l'environnement, lors de l'appel \cmdprint{\end\marg{nom\_env}}.
+ \end{list}
+
+\begin{exemple}
+ \label{ex:commandes:citation}
+ On souhaite composer les citations hors paragraphe de la
+ manière suivante:
+ \begin{quote}
+ \small\itshape%
+ Texte en italique, dans une police de taille inférieure au texte
+ normal et en retrait des marges gauche et droite.
+ \end{quote}
+ Ceci est simple à réaliser en se basant sur l'environnement standard
+ \Ie{quote} et en modifiant les attributs de police:
+\begin{lstlisting}
+\begin{quote}
+ \small\itshape%
+ Texte en italique...
+\end{quote}
+\end{lstlisting}
+
+ Pour automatiquement composer toutes les citations de la même
+ manière, il suffit de créer un nouvel environnement \Ie{citation}:
+\begin{lstlisting}
+\newenvironment{citation}%
+ {\begin{quote}\small\itshape}%
+ {\end{quote}}
+\end{lstlisting}
+ Le bloc de code ci-dessus peut ensuite être remplacé par
+\begin{lstlisting}
+\begin{citation}
+ Texte en italique...
+\end{citation}
+\end{lstlisting}
+ \qed
+\end{exemple}
+
+\begin{exemple}
+ Nous avons créé pour les fins du présent document un environnement
+ \Pe{conseil} servant à mettre en forme les rubriques «Conseil du
+ {\TeX}pert». La définition --- relativement élaborée --- de
+ l'environnement est la suivante:
+\begin{lstlisting}
+\newenvironment{conseil}{%
+ \colorlet{TFFrameColor}{black}
+ \colorlet{TFTitleColor}{white}
+ \begin{table}
+ \begin{titled-frame}{\sffamily Conseil du {\TeX}pert}
+ \noindent
+ \begin{minipage}{0.1\linewidth}
+ \raisebox{-1.5em}[0em][0em]{\HUGE\faThumbsOUp}
+ \end{minipage}
+ \begin{minipage}[t]{0.88\linewidth}}%
+ {\end{minipage}\end{titled-frame}\end{table}}
+\end{lstlisting}
+ Dans le second argument, on:
+ \begin{enumerate}
+ \item définit des couleurs requises par l'environnement
+ \Pe{titled-frame};
+ \item ouvre un élément flottant \Pe{table} pour disposer la rubrique sur la
+ page;
+ \item ouvre un environnement \Ie{titled-frame} (fourni par le paquetage
+ \pkg{framed}) pour encadrer la rubrique et afficher son titre;
+ \item crée une première \Pe{minipage} pour disposer le symbole
+ {\faThumbsOUp} tiré de la police Font~Awesome;
+ \item ouvre une seconde \Pe{minipage} à côté de la première pour
+ accueillir le texte de la rubrique.
+ \end{enumerate}
+ Le troisième argument sert à refermer tous les environnements
+ ouverts dans le second argument et qui n'ont pas déjà été fermés.
+
+ Une fois ce travail accompli, créer une nouvelle rubrique est très
+ simple:
+\begin{lstlisting}
+\begin{conseil}
+ N'hésitez pas à créer des nouvelles commandes...
+\end{conseil}
+\end{lstlisting}
+ On trouvera le résultat ci-dessus. %
+ \qed
+\end{exemple}
+
+\begin{conseil}
+ N'hésitez pas à créer des nouvelles commandes et des nouveaux
+ environnements dès lors qu'une mise en forme particulière revient
+ plus d'une ou deux fois dans un document.
+\end{conseil}
+
+
+
+%%%
+%%% Exercices
+%%%
+
+\section{Exercices}
+\label{sec:commandes:exercices}
+
+\Opensolutionfile{solutions}[solutions-commandes]
+
+\begin{Filesave}{solutions}
+\section*{Chapitre \ref*{chap:commandes}}
+\addcontentsline{toc}{section}{Chapitre \protect\ref*{chap:commandes}}
+
+\end{Filesave}
+
+\begin{exercice}
+ Certains auteurs composent les sigles et les acronymes\footnote{%
+ Un sigle est une abréviation formée par une suite de lettres qui
+ sont les initiales d'un groupe de mots. Un acronyme est un sigle
+ qui se prononce comme un mot ordinaire.} %
+ en petites capitales, avec ou sans les points: \textsc{c.q.f.d.},
+ \textsc{nasa}.
+ \begin{enumerate}
+ \item Créer une commande \cmdprint{\NASA} qui insère l'acronyme
+ \textsc{nasa} dans le texte. Rappelons que l'on compose du texte en petites
+ capitales avec la commande \cmd{\textsc}.
+ \item Créer une commande plus générale \cmdprint{\sigle} qui affiche
+ son argument en petites capitales. La commande devra convertir
+ l'argument en minuscules avec \cmd{\MakeLowercase} afin que le
+ résultat soit toujours le même peu importe la casse utilisée dans
+ le code. Ainsi, \lstinline=\sigle{nasa}=, \lstinline=\sigle{Nasa}= et
+ \lstinline=\sigle{NASA}= donneront toujours
+ \textsc{nasa}.
+ \item Après avoir utilisé la commande \cmdprint{\sigle} à quelques
+ reprises dans un document, modifier sa définition pour plutôt
+ composer les sigles en majuscules.
+ \end{enumerate}
+ Utiliser le gabarit de document \fichier{exercice\_gabarit.tex} pour
+ créer et tester les commandes ci-dessus.
+ \begin{sol}
+ \begin{enumerate}
+ \item \lstinline=\newcommand{\NASA}{\textsc{nasa}}=
+ \item \lstinline=\newcommand{\sigle}[1]{\textsc{\MakeLowercase{#1}}}=
+ \item \lstinline=\newcommand{\sigle}[1]{\MakeUppercase{#1}}=
+ \end{enumerate}
+ \end{sol}
+\end{exercice}
+
+\begin{exercice}
+ Nous n'avons pas abordé dans le chapitre une fonctionnalité plus
+ avancée de \cmd{\newcommand} et \cmd{\renewcommand}, soit celle de
+ pouvoir définir des commandes dont un argument est optionnel ou,
+ plus précisément, de donner une valeur par défaut à un argument.
+
+ La syntaxe réellement complète de \cmd{\newcommand} et
+ \cmd{\renewcommand} est la suivante:
+\begin{lstlisting}
+\newcommand{`\bs\meta{nom\_commande}'}`\oarg{narg}\oarg{option}\marg{déf}'
+\renewcommand{`\bs\meta{nom\_commande}'}`\oarg{narg}\oarg{option}\marg{déf}'
+\end{lstlisting}
+ L'argument additionnel \meta{option} contient la valeur par défaut
+ du \emph{premier} argument de \bs\meta{nom\_commande}. Dès lors, la
+ commande ne compte plus \meta{narg} arguments obligatoires, mais
+ bien $\text{\meta{narg}} - 1$ arguments obligatoires et un optionnel.
+
+ Modifier la définition de la commande \cmdprint{\doc} de
+ l'\autoref{ex:commandes:doc} pour que «documentation» soit le texte
+ par défaut de l'hyperlien qui est placé au fil du texte.
+ \begin{sol}
+ Avec la définition
+\begin{lstlisting}
+\newcommand{\doc}[3][documentation]{%
+ \href{#3}{#1~\raisebox{-0.2ex}{\faExternalLink}}%
+ \marginpar{\faBookmark~\texttt{#2}}}
+\end{lstlisting}
+ la déclaration à deux arguments
+\begin{lstlisting}
+\doc{hyperref}{http://texdoc.net/pkg/hyperref}
+\end{lstlisting}
+ produit toujours \doc{hyperref}{http://texdoc.net/pkg/hyperref}.
+ \end{sol}
+\end{exercice}
+
+\begin{exercice}
+ Modifier l'environnement \Ie{citation} de
+ l'\autoref{ex:commandes:citation} afin de composer les citations
+ hors paragraphe comme suit:
+ \begin{quote}
+ \begin{tabularx}{\linewidth}{X}
+ \toprule
+ \small\sffamily%
+ La citation est toujours en retrait des marges gauche et droite,
+ mais également surmontée et suivie de filets horizontaux. Le
+ texte est en police de taille \cmdprint{\small}, droite et sans
+ empattements. \\
+ \bottomrule
+ \end{tabularx}
+ \end{quote}
+ \emph{Astuce}: utiliser un tableau pleine largeur à l'intérieur de
+ l'environnement \Pe{quote} pour disposer le texte et créer les
+ filets horizontaux.
+ \begin{sol}
+ La définition suivante donne les résultats demandés:
+\begin{lstlisting}
+\newcommand{citation}
+ {\begin{quote}
+ \begin{tabularx}{\linewidth}{X}
+ \toprule\small\sffamily}%
+ {\\ \bottomrule
+ \end{tabularx}
+ \end{quote}}
+\end{lstlisting}
+ On remarquera dans le troisième argument la présence de la
+ commande de fin de ligne {\bs\bs} qui doit absolument précéder
+ \cmdprint{\bottomrule}.
+ \end{sol}
+\end{exercice}
+
+\Closesolutionfile{solutions}
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-engine: xetex
+%%% TeX-master: "formation-latex-ul"
+%%% coding: utf-8
+%%% End: