diff options
author | Karl Berry <karl@freefriends.org> | 2016-11-23 23:32:59 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2016-11-23 23:32:59 +0000 |
commit | 69896cc8b4b0a309ca3df978f585df5d49abc2af (patch) | |
tree | 960c127c35d6b2ff213bfeca8d934c30b8d63420 /Master/texmf-dist/source/latex/formation-latex-ul/commandes.tex | |
parent | aa600844d37917089773452899b770c1c2f9f1ea (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.tex | 436 |
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: |