<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">%%% Copyright (C) 2015-2024 Vincent Goulet
%%%
%%% Ce fichier fait partie du projet
%%% Â«RĂ©daction avec LaTeXÂ»
%%% https://gitlab.com/vigou3/formation-latex-ul
%%%
%%% Cette crĂ©ation est mise Ă&nbsp; disposition sous licence
%%% Attribution-Partage dans les mĂŞmes conditions 4.0
%%% International de Creative Commons.
%%% https://creativecommons.org/licenses/by-sa/4.0/

\chapter{Trucs et astuces divers}
\label{chap:trucs}

En clĂ´ture de l'ouvrage, ce chapitre traite de diffĂ©rents sujets que
mĂŞme une personne dĂ©butant avec {\LaTeX} voudra assez rapidement
aborder, comme le contrĂ´le des sauts de ligne et des sauts de page, la
modification de la police du document, l'utilisation de la couleur ou
l'insertion d'hyperliens dans le fichier de sortie PDF. J'offre
Ă©galement de courtes introductions Ă&nbsp; des usages plus spĂ©cialisĂ©s de
{\LaTeX} comme la mise en page de code informatique, la production de
diapositives ou la programmation lettrĂ©e. Enfin, j'explique
sommairement comme assurer de maniĂ¨re efficace la gestion des versions
de ses documents, surtout dans un contexte de travail collaboratif.

\section{ContrĂ´le de la disposition du texte}
\label{sec:trucs:controle}

Des algorithmes Ă©laborĂ©s permettent gĂ©nĂ©ralement Ă&nbsp; {\LaTeX} de
disposer le texte harmonieusement sur la page. NĂ©anmoins, il
est parfois nĂ©cessaire  d'effectuer soi-mĂŞme de menus ajustements,
notamment pour les sauts de page et la coupure de mots.

\subsection{Sauts de ligne et de page}
\label{sec:trucs:controle:sauts}

Il est rarement nĂ©cessaire, avec {\LaTeX}, de forcer les retours Ă&nbsp; la
ligne. Chose certaine, vous devriez toujours utiliser une ligne
blanche dans le code source pour identifier un changement de
paragraphe.

Cela dit, les commandes suivantes permettent d'insĂ©rer un saut de
ligne manuellement lorsque requis:
\begin{lstlisting}
\\
\\`\oarg{longueur}'
\newline
\end{lstlisting}
La commande {\pixbsbs} est connue: elle sert aussi Ă&nbsp; dĂ©limiter les
lignes dans les tableaux (\autoref{sec:tableaux:tableaux}) et les lignes
d'une suite d'Ă©quations (\autoref{sec:math:align}). L'argument optionnel
\oarg{longueur} permet d'insĂ©rer un blanc entre les deux lignes; la
\autoref{sec:bases:longueurs} explique comment spĂ©cifier une
longueur.

GĂ©nĂ©ralement Ă©quivalente Ă&nbsp; {\pixbsbs}, la commande \cmd{\newline} est
parfois nĂ©cessaire, notamment pour insĂ©rer un changement de ligne Ă&nbsp;
l'intĂ©rieur d'une cellule d'un tableau ou Ă&nbsp; l'intĂ©rieur d'un titre de
section. Quand {\pixbsbs} ne fonctionne pas, essayez
\cmdprint{\newline}.

\begin{exemple}
  La commande {\pixbsbs} est particuliĂ¨rement utile --- voire
  nĂ©cessaire --- pour disposer des boites Ă&nbsp; l'intĂ©rieur d'une figure.
  L'utilisation de l'argument \meta{longueur} permet alors de
  contrĂ´ler l'espacement vertical entre les Ă©lĂ©ments. Comparez les
  deux exemples ci-dessous.
  \begin{demo}
    \begin{texample}[0.55\linewidth]
\begin{lstlisting}
\begin{minipage}{1.0\linewidth}
  \framebox[\linewidth]{texte}
\end{minipage} \\
\begin{minipage}{1.0\linewidth}
  \framebox[\linewidth]{texte}
\end{minipage}
\end{lstlisting}
      \producing
      \begin{minipage}{1.0\linewidth}
        \framebox[\linewidth]{texte}
      \end{minipage}
      \begin{minipage}{1.0\linewidth}
        \framebox[\linewidth]{texte}
      \end{minipage}
    \end{texample}

    \begin{texample}[0.55\linewidth]
\begin{lstlisting}
\begin{minipage}{1.0\linewidth}
  \framebox[\linewidth]{texte}
\end{minipage} \\`\textbf{[6pt]}'
\begin{minipage}{1.0\linewidth}
  \framebox[\linewidth]{texte}
\end{minipage}
\end{lstlisting}
      \producing
      \begin{minipage}{1.0\linewidth}
        \framebox[\linewidth]{texte}
      \end{minipage} \\[6pt]
      \begin{minipage}{1.0\linewidth}
        \framebox[\linewidth]{texte}
      \end{minipage}
    \end{texample}
  \qed
  \end{demo}
\end{exemple}

Les commandes
\begin{lstlisting}
\newpage
\clearpage
\cleartorecto              % classe memoir seulement
\cleartoverso              % classe memoir seulement
\end{lstlisting}
permettent d'insĂ©rer manuellement un saut de page pour Ă©viter une
coupure malheureuse. La commande de base pour insĂ©rer un saut
n'importe oĂą dans la page est \cmd{\newpage}. La commande
\cmd{\clearpage}, quant Ă&nbsp; elle, va Ă©galement s'assurer d'afficher tous
les Ă©lĂ©ments flottants (\autoref{sec:tableaux:floats}) en attente de
disposition.

Les commandes \cmd{\cleartorecto} et \cmd{\cleartoverso}, propres Ă&nbsp; la
classe \class{memoir} permettent respectivement de passer
automatiquement Ă&nbsp; une page recto ou Ă&nbsp; une page verso. Ă‰videmment, elles
n'ont d'utilitĂ© que dans les documents recto verso.

Moins directives, les commandes
\begin{lstlisting}
\pagebreak`\oarg{n}'
\enlargethispage`\marg{longueur}'
\end{lstlisting}
permettent de seulement aider {\LaTeX} Ă&nbsp; gĂ©rer les sauts de page Ă&nbsp; un
endroit prĂ©cis. La commande \cmd{\pagebreak} est intĂ©ressante lorsque
utilisĂ©e avec son argument optionnel \meta{n}: celui-ci indique, par
le biais d'un nombre entier entre 0 et 4, Ă&nbsp; quel point vous
\emph{recommandez} Ă&nbsp; {\LaTeX} d'insĂ©rer un saut de page Ă&nbsp; l'endroit oĂą
la commande apparait (0 Ă©tant une faible recommandation et 4, une
forte).

La commande \cmd{\enlargethispage}, comme son nom l'indique, permet
d'allonger une page de \meta{longueur} pour y faire tenir plus de
texte. C'est une commande particuliĂ¨rement utile pour Ă©viter que la
toute derniĂ¨re ligne d'un chapitre ou d'un document se retrouve seule
sur une page.

\subsection{Coupure de mots}
\label{sec:trucs:controle:coupure}

La coupure automatique des mots en fin de ligne est toujours active
avec {\LaTeX}. C'est d'ailleurs pourquoi il est important d'indiquer Ă&nbsp;
{\LaTeX}, Ă&nbsp; l'aide du paquetage \pkg{babel}, la langue d'un texte
lorsque ce n'est pas l'anglais.

Il existe deux faĂ§ons de contrĂ´ler la coupure de mots. La premiĂ¨re,
principalement utilisĂ©e lorsque {\LaTeX} refuse de couper un mot en
fin de ligne, consiste Ă&nbsp; insĂ©rer des \emph{suggestions} d'endroits oĂą
couper le mot avec la commande \cmd{\-}. Par exemple, en Ă©crivant
\verb=vrai\-sem\-blance=, vous indiquez Ă&nbsp; {\LaTeX} qu'il est possible
de diviser le mot en \emph{vrai-semblance} ou \emph{vraisem-blance}.

La seconde mĂ©thode, celle-lĂ&nbsp; surtout utilisĂ©e lorsque {\LaTeX} ne
reconnait pas des mots qui reviennent souvent dans le document,
consiste Ă&nbsp; fournir dans le prĂ©ambule une liste d'exceptions avec la
commande
\begin{lstlisting}
\hyphenation`\marg{liste}'
\end{lstlisting}
La \meta{liste} est une suite de mots, sĂ©parĂ©s par des virgules, des
blancs ou des retours Ă&nbsp; la ligne, dans lesquels les points de coupure
sont identifiĂ©s par un trait d'union.

\enlargethispage{5mm}           % pour \qed
\begin{exemple}
  La commande suivante, insĂ©rĂ©e dans le prĂ©ambule, permet d'ajouter
  des points de coupure aux mots Â«puisqueÂ», Â«constanteÂ» et
  Â«vraisemblanceÂ» pour l'ensemble du document.
\begin{lstlisting}
\hyphenation{puis-que,cons-tante,vrai-sem-blance}
\end{lstlisting}
  \qed
\end{exemple}

\importantbox{RĂ¨gle gĂ©nĂ©rale, garder les opĂ©rations d'ajustements de
  la mise en page --- position des Ă©lĂ©ments flottants, sauts de page,
  lignes trop longues, etc. --- pour la toute fin de la rĂ©daction.}


\section{Au-delĂ&nbsp; de la police Computer Modern}
\label{sec:trucs:polices}

{\CM%
  Les documents {\LaTeX} standards sont facilement reconnaissables par
  leur police par dĂ©faut Computer Modern --- celle utilisĂ©e dans ce
  paragraphe. Pour qui souhaitait briser la relative monotonie induite
  par cette uniformitĂ©, il a longtemps Ă©tĂ© difficile d'utiliser une
  autre police. Fort heureusement, la situation a beaucoup Ă©voluĂ© et
  il est aujourd'hui assez simple de produire des documents {\LaTeX}
  utilisant des polices variĂ©es.
}

Avant d'aller plus loin, une mise en garde: si un document contient
plus que quelques Ă©quations mathĂ©matiques trĂ¨s simples, le choix de
police devient trĂ¨s restreint. En effet, peu de polices comprennent
des symboles mathĂ©matiques et les informations nĂ©cessaires pour les
assembler selon les hauts standards de qualitĂ© usuels de {\LaTeX}.

Cela dit, si vous souhaitez aller au-delĂ&nbsp; de la police Computer Modern
sans trop vous compliquer la vie, il existe deux solutions
principales.
\begin{enumerate}
\item Utiliser une police OpenType ou TrueType prĂ©sente sur son
  systĂ¨me avec le moteur {\XeLaTeX}. C'est aujourd'hui la meilleure
  solution. La gestion des polices avec {\XeLaTeX} repose sur le
  paquetage standard \pkg{fontspec}; consultez sa %
  \doc{fontspec}{https://texdoc.net/pkg/fontspec}.
\item Utiliser l'une ou l'autre des polices PostScript standards
  convenant pour du texte normal %
  ({\Times Times}, %
  {\Palatino Palatino}, %
  {\Bookman Bookman}, %
  {\Charter Charter}, %
  {\NewCent New Century Schoolbook}, %
  {\Helvet Helvetica}). %
  C'est la solution Ă&nbsp; privilĂ©gier si vous utilisez toujours
  pdf{\LaTeX}. Il suffit alors de charger le paquetage appropriĂ©.
  Consultez Ă&nbsp; ce sujet la %
  \doc{psnfss2e}{https://texdoc.net/pkg/psnfss} %
  de l'ensemble de paquetages PSNFSS.
\end{enumerate}

Le texte principal du prĂ©sent document est en %
\link{https://tug.org/store/lucida}{Lucida Bright~OT}, %
une police commerciale de trĂ¨s haute qualitĂ© offrant Ă©galement un
excellent support pour les mathĂ©matiques. Ses auteurs ont toujours Ă©tĂ©
proches de la communautĂ© {\LaTeX}. La BibliothĂ¨que de l'UniversitĂ©
Laval dĂ©tient une licence d'utilisation de cette police. Les Ă©tudiants
et le personnel de l'UniversitĂ© peuvent s'en procurer une copie
gratuitement en Ă©crivant Ă&nbsp;
\href{mailto:lucida@bibl.ulaval.ca}{lucida@bibl.ulaval.ca}.



\section{Couleurs}
\label{sec:trucs:couleurs}

L'ajout de couleur dans un document {\LaTeX} requiert le paquetage
\pkg{xcolor} \citep{xcolor}. Celui-ci dĂ©finit d'abord plusieurs
dizaines de couleurs que vous pouvez ensuite utiliser directement dans
votre document; consultez la %
\doc{xcolor}{https://texdoc.net/pkg/xcolor} %
pour en connaitre les diffĂ©rentes listes. Le
\autoref{tab:trucs:couleurs} fournit la liste des couleurs toujours
disponibles.

\begin{table}
  \centering
  \caption{Couleurs toujours disponibles lorsque le paquetage
    \pkg{xcolor} est chargĂ©}
  \label{tab:trucs:couleurs}
  \begin{tabularx}{1.0\linewidth}{XlXll}
    \toprule
    \fcolorbox{black}{black}{\phantom{xx}}\, black &amp;
    \fcolorbox{black}{blue}{\phantom{xx}}\, blue &amp;
    \fcolorbox{black}{brown}{\phantom{xx}}\, brown &amp;
    \fcolorbox{black}{cyan}{\phantom{xx}}\, cyan &amp;
    \fcolorbox{black}{darkgray}{\phantom{xx}}\, darkgray \\
    \addlinespace[3pt]
    \fcolorbox{black}{gray}{\phantom{xx}}\, gray &amp;
    \fcolorbox{black}{green}{\phantom{xx}}\, green &amp;
    \fcolorbox{black}{lightgray}{\phantom{xx}}\, lightgray &amp;
    \fcolorbox{black}{lime}{\phantom{xx}}\, lime &amp;
    \fcolorbox{black}{magenta}{\phantom{xx}}\, magenta \\
    \addlinespace[3pt]
    \fcolorbox{black}{olive}{\phantom{xx}}\, olive &amp;
    \fcolorbox{black}{orange}{\phantom{xx}}\, orange &amp;
    \fcolorbox{black}{pink}{\phantom{xx}}\, pink &amp;
    \fcolorbox{black}{purple}{\phantom{xx}}\, purple &amp;
    \fcolorbox{black}{red}{\phantom{xx}}\, red \\
    \addlinespace[3pt]
    \fcolorbox{black}{teal}{\phantom{xx}}\, teal &amp;
    \fcolorbox{black}{violet}{\phantom{xx}}\, violet &amp;
    \fcolorbox{black}{white}{\phantom{xx}}\, white &amp;
    \fcolorbox{black}{yellow}{\phantom{xx}}\, yellow \\
    \bottomrule
  \end{tabularx}
\end{table}

Un peu comme pour les changements d'attributs de police, il existe
deux commandes pour modifier la couleur du texte:
\begin{lstlisting}
\color`\marg{nom}'
\textcolor`\marg{nom}\marg{texte}'
\end{lstlisting}
La premiĂ¨re modifie la couleur de tout ce qui suit (Ă&nbsp; moins d'en
limiter la portĂ©e avec des accolades) et la seconde, seulement pour
\meta{texte}. Dans les deux cas, \meta{nom} est le nom d'une couleur.
\begin{demo}
  \begin{texample}
\begin{lstlisting}
texte {\color{red} en rouge}
et \textcolor{blue}{en bleu}
\end{lstlisting}
  \producing
  texte {\color{red} en rouge} et \textcolor{blue}{en bleu}
  \end{texample}
\end{demo}

La commande \cmd{\definecolor} permet de dĂ©finir de nouvelles couleurs
selon plusieurs systĂ¨mes de codage. Le plus usuel demeure \emph{Rouge,
  vert, bleu} (RVB ou RGB, en anglais), dans lequel une couleur est
reprĂ©sentĂ©e par une combinaison de teintes --- exprimĂ©es par un nombre
entre $0$ et $1$ --- de rouge, de vert et de bleu. Dans ce cas, la
syntaxe de \cmd{\definecolor} est
\begin{lstlisting}
\definecolor`\marg{nom}'{rgb}`\marg{valeur\_r,valeur\_v,valeur\_b}
\end{lstlisting}
oĂą \meta{valeur\_r}, \meta{valeur\_v} et \meta{valeur\_b} sont
respectivement les teintes de rouge, de vert et de bleu.

\begin{exemple}
  La commande
\begin{lstlisting}
\definecolor{acier}{rgb}{0.3,0.4,0.6}
\end{lstlisting}
  dĂ©finit une nouvelle couleur nommĂ©e \code{acier} composĂ©e de rouge
  30~\%, de vert 40~\% et de bleu 60~\%: %
  \fcolorbox{black}[rgb]{0.3,0,0}{\phantom{xx}} $+$ %
  \fcolorbox{black}[rgb]{0,0.4,0}{\phantom{xx}} $+$ %
  \fcolorbox{black}[rgb]{0,0,0.6}{\phantom{xx}} $=$ %
  \fcolorbox{black}[rgb]{0.3,0.4,0.6}{\phantom{xx}}. %
  Une fois la couleur  \code{acier} dĂ©finie dans le prĂ©ambule, elle
  devient disponible pour ĂŞtre utilisĂ©e dans les commandes
  \cmdprint{\color} et \cmdprint{\textcolor}. %
  \qed
\end{exemple}

La commande \cmd{\colorlet}, dont la syntaxe simplifiĂ©e est
\begin{lstlisting}
\colorlet`\marg{nom}\marg{couleur}'
\end{lstlisting}
permet de faire rĂ©fĂ©rence Ă&nbsp; la \meta{couleur} dĂ©jĂ&nbsp; existante par
\meta{nom}. C'est pratique pour assigner un nom sĂ©mantique Ă&nbsp; une
couleur.



\section{Hyperliens et mĂ©tadonnĂ©es de documents PDF}
\label{sec:trucs:hyperliens}

J'en ai dĂ©jĂ&nbsp; traitĂ© Ă&nbsp; quelques reprises, notamment Ă&nbsp; la
\autoref{sec:organisation:renvois}: le paquetage \pkg{hyperref}
\citep{hyperref} permet de transformer les rĂ©fĂ©rences dans le texte en
hyperliens cliquables lorsque le document est produit avec pdf{\LaTeX}
ou {\XeLaTeX}. C'est trĂ¨s pratique lors de la consultation
Ă©lectronique d'un document.

Le paquetage offre une multitudes d'options de configuration; je n'en
prĂ©sente que quelques unes. On accĂ¨de aux options de configuration de
\pkg{hyperref} via la commande \cmd{\hypersetup} dans le prĂ©ambule.
Celle-ci prend en arguments des paires \code{option=valeur} sĂ©parĂ©es
par des virgules.

Une des principales choses que vous pourrez souhaiter configurer dans
\pkg{hyperref}, c'est le comportement et la couleur des divers types
d'hyperliens. Voici les options de configuration pertinentes, leur
valeur (avec en gras la valeur par dĂ©faut) ainsi qu'une brĂ¨ve
explication de chacune.

\begin{table}[h]
  \begin{tabularx}{1.0\linewidth}{@{}p{7em}p{6em}X@{}}
    \code{colorlinks} &amp; \code{true}|\code{\textbf{false}} &amp; colorer les
                                                            liens selon
                                                            leur type \\
    \code{linktocpage} &amp; \code{true}|\code{\textbf{false}} &amp; faire du
                                                             numĂ©ro de
                                                             page
                                                             plutĂ´t que
                                                             du titre l'hyperlien dans
                                                             la table
                                                             des
                                                             matiĂ¨res \\
    \code{linkcolor} &amp; \meta{couleur} &amp; couleur des liens internes \\
    \code{urlcolor}  &amp; \meta{couleur} &amp; couleur des adresses URL \\
    \code{citecolor} &amp; \meta{couleur} &amp; couleur des citations \\
    \code{allcolor}  &amp; \meta{couleur} &amp; couleur pour tous les types d'hyperliens
  \end{tabularx}
\end{table}

Les fichiers PDF peuvent contenir diverses mĂ©tadonnĂ©es sur leur
contenu. Le paquetage \pkg{hyperref} permet d'en dĂ©finir certaines,
notamment le titre ou l'auteur du document.

\begin{table}[!h]
  \begin{tabularx}{1.0\linewidth}{@{}p{7em}p{6em}X@{}}
    \code{pdftitle}  &amp; texte &amp; titre du document PDF \\
    \code{pdfauthor} &amp; texte &amp; auteur du document PDF
  \end{tabularx}
\end{table}

Consultez la %
\doc{hyperref}{https://texdoc.net/pkg/hyperref} %
de \pkg{hyperref} pour obtenir la liste complĂ¨te des options de
configuration des mĂ©tadonnĂ©es.

\begin{exemple}
  \label{ex:trucs:couleurs}
  Le prĂ©ambule du prĂ©sent document contient les dĂ©finitions de
  couleurs et d'options de \pkg{hyperref} suivantes:
\begin{lstlisting}
\definecolor{link}{rgb}{0,0.4,0.6}   % liens internes
\definecolor{url}{rgb}{0.6,0,0}      % liens externes
\definecolor{citation}{rgb}{0,0.5,0} % citations
\hypersetup{%
  pdfauthor = {Vincent Goulet},
  pdftitle = {RĂ©daction avec LaTeX},
  colorlinks = true,
  linktocpage = true,
  urlcolor = url,
  linkcolor = link,
  citecolor = citation}
\end{lstlisting}
  \qed
\end{exemple}

\tipbox{L'interaction du paquetage \pkg{hyperref} avec les autres est
  souvent dĂ©licate. Pour cette raison, il est fortement recommandĂ©
  qu'il soit le tout dernier paquetage chargĂ© dans le prĂ©ambule.}



\section{PrĂ©sentation de code informatique}
\label{sec:trucs:listings}

L'environnement standard \Ie{verbatim} de {\LaTeX} permet de prĂ©senter
du texte tel qu'il est entrĂ© dans le code source du document. Le texte
qu'il contient est composĂ© en police non proportionnelle et sa
disposition exacte est respectĂ©e.

\begin{demo}
  \begin{texample}
\begin{lstlisting}[deletetexcs={int,include}]
\begin{verbatim}
/* Hello World en C */
#include &lt;stdio.h&gt;

int main()
{
    printf("Hello world\n");
    return 0;
}
\end{verbatim}
\end{lstlisting}
    \producing
\begin{verbatim}
/* Hello World en C */
#include &lt;stdio.h&gt;

int main()
{
    printf("Hello world\n");
    return 0;
}
\end{verbatim}
  \end{texample}
\end{demo}

Si un document doit contenir beaucoup de code informatique et que vous
souhaitez exercer un fin contrĂ´le sur sa disposition et sa mise en
forme, il vaut mieux vous tourner vers un paquetage spĂ©cialisĂ© comme
\pkg{listings} \citep{listings}. La %
\doc{listings}{https://texdoc.net/pkg/listings} %
du paquetage compare ses fonctionnalitĂ©s Ă&nbsp; celles de plusieurs autres
paquetages similaires.

Le paquetage \pkg{listings} peut effectuer automatiquement le marquage
des mots-clĂ©s de nombreux langages de programmation, ajouter des
numĂ©ros de ligne, importer du code de fichiers externes ou mĂŞme
indexer les mots-clĂ©s des extraits de code. Ă€ titre d'illustration,
l'environnement \Ie{lstlisting} pourrait composer ainsi l'extrait de
code C ci-dessus:
\begin{demo}
  \begin{texample}
    \begin{vglisting}
\begin{lstlisting}
/* Hello World en C */
#include &lt;stdio.h&gt;

int main()
{
  printf("Hello world\n");
  return 0;
}
\end{lstlisting}
    \end{vglisting}
    \producing
\begin{lstlisting}[language=C,%
  deletetexcs={int,include},
  frame=single,%
  backgroundcolor=\color{Azure2},%
  rulecolor=\color{black},%
  framerule=0.4pt,%
  numbers=left,%
  numberstyle=\tiny\sffamily,%
  stringstyle=\color{orange}\itshape,%
  identifierstyle=\color{cyan}\mdseries,%
  xleftmargin=12pt,%
  keywordstyle=\color{blue}\bfseries,
  index=]
/* Hello World en C */
#include &lt;stdio.h&gt;

int main()
{
  printf("Hello world\n");
  return 0;
}
\end{lstlisting}
  \end{texample}
\end{demo}

Il serait trop long et nettement hors de la portĂ©e du prĂ©sent ouvrage
d'expliquer les nombreuses fonctionnalitĂ©s de \pkg{listings}. Je
prĂ©cise simplement que c'est Ă&nbsp; l'aide du paquetage que j'ai composĂ©
les extraits de code et construit une grande partie de l'index.

\begin{exemple}
  \label{ex:trucs:listings}
  Pour parvenir Ă&nbsp; la prĂ©sentation des extraits de code source {\LaTeX}
  de ce document, le paquetage \pkg{listings} est configurĂ© dans le
  prĂ©ambule de la maniĂ¨re suivante:
\begin{lstlisting}
%% Couleurs
\definecolor{comments}{rgb}{0.5,0.55,0.6}

%% Configuration de listings
\lstset{language=[LaTeX]TeX,
  basicstyle=\ttfamily\NoAutoSpacing,
  keywordstyle=\mdseries,
  commentstyle=\color{comments}\slshape,
  extendedchars=true,
  showstringspaces=false,
  backgroundcolor=\color{LightYellow1},
  frame=leftline,
  framerule=2pt,
  framesep=5pt,
  xleftmargin=7.4pt}
\end{lstlisting}
  (La couleur \code{LightYellow1} est dĂ©finie par \pkg{xcolor} lorsque
  le paquetage est chargĂ© avec l'option \code{x11names}.)
  \qed
\end{exemple}



\section{Production de rapports avec l'analyse intĂ©grĂ©e}
\label{sec:trucs:sweave}

Les publications scientifiques reposent souvent sur une forme ou une
autre d'analyse numĂ©rique ou statistique, la production de code
informatique, une simulation stochastique, etc. La portion
dĂ©veloppement et analyse est alors produite avec un certain outil
et la publication, avec un outil d'Ă©dition sĂ©parĂ© --- {\LaTeX} dans le cas
qui nous occupe. Or, tous les auteurs ont vĂ©cu cette situation: les
rĂ©sultats de l'analyse changent et il faut modifier le rapport en
consĂ©quence, refaire les tableaux et les graphiques, retracer cette
valeur isolĂ©e au fil du texte directement tirĂ©e de l'analyse\dots\
Seule la quantitĂ© de temps perdu rivalise avec le risque d'erreur.

Il existe pourtant une meilleure faĂ§on de travailler.

Cette meilleure faĂ§on de faire, tirĂ©e du concept de
\emph{programmation lettrĂ©e}, consiste Ă&nbsp; combiner dans un seul et mĂŞme
document l'analyse et le rapport, puis de produire automatiquement une
partie du second Ă&nbsp; partir de la premiĂ¨re.

Les utilisateurs du systĂ¨me statistique R bĂ©nĂ©ficient d'une mise en
Ĺ“uvre simple et Ă©lĂ©gante du concept ci-dessus avec l'outil Sweave
\citep{Sweave}. Un fichier Sweave est Ă&nbsp; la base un document {\LaTeX}
dans lequel on a insĂ©rĂ© du code R Ă&nbsp; l'intĂ©rieur de balises spĂ©ciales
\verb|&lt;&lt;&gt;&gt;=| et \verb|@| tirĂ©e de la syntaxe \code{noweb}
\citep{noweb}, comme ceci:
\begin{lstlisting}
\section{Commandes R}

L'utilisateur de R interagit avec l'interprĂ¨te en entrant
des commandes Ă&nbsp; l'invite de commande:
&lt;&lt;&gt;&gt;=
2 + 3
pi
cos(pi/4)
@
La commande \verb=exp(1)= donne \Sexpr{exp(1)},
la valeur du nombre $e$.
\end{lstlisting}

Par convention, on enregistre un tel document sous un nom se terminant
par l'extension \code{.Rnw}. Sa compilation s'effectue
en deux Ă©tapes:
\begin{enumerate}
\item Le fichier \code{.Rnw} est passĂ© Ă&nbsp; la commande \code{Sweave()}
  de R. Celle-ci retrace les extraits de code et les remplace par des
  environnements {\LaTeX} contenant, par dĂ©faut, les expressions R et
  leur rĂ©sultat dans des environnements \Ie{Sinput} et \Ie{Soutput}.
  Elle Ă©value Ă©galement les expressions R se trouvant dans les
  commandes \cmd{\Sexpr} pour les remplacer par leur rĂ©sultat. Cela
  produit un fichier \code{.tex}:
\begin{lstlisting}
\section{Commandes R}

L'utilisateur de R interagit avec l'interprĂ¨te en entrant
des commandes Ă&nbsp; l'invite de commande:
\begin{Schunk}
\begin{Sinput}
&gt; 2 + 3
\end{Sinput}
\begin{Soutput}
[1] 5
\end{Soutput}
\begin{Sinput}
&gt; pi
\end{Sinput}
\begin{Soutput}
[1] 3.141593
\end{Soutput}
\begin{Sinput}
&gt; cos(pi/4)
\end{Sinput}
\begin{Soutput}
[1] 0.7071068
\end{Soutput}
\end{Schunk}
La commande \verb=exp(1)= donne 2.71828182845905,
la valeur du nombre $e$.
\end{lstlisting}
\item Le fichier \code{.tex} est compilĂ© comme d'habitude.
\end{enumerate}

Sweave se rĂ©vĂ¨le particuliĂ¨rement utile pour crĂ©er des graphiques Ă&nbsp;
partir de R: tout ce que l'on doit conserver dans son fichier
\code{.Rnw}, c'est le code pour crĂ©er le graphique. Il est Ă©galement
possible de contrĂ´ler l'exĂ©cution des blocs de code et l'affichage du
code source et des rĂ©sultats par le biais d'options placĂ©es Ă&nbsp;
l'intĂ©rieur de la balise d'ouverture \verb|&lt;&lt;&gt;&gt;=|.

Vous pouvez consulter la documentation de Sweave en entrant dans R la
commande
\begin{lstlisting}[language=R]
&gt; vignette("Sweave", package = "utils")
\end{lstlisting}

\link{https://mpastell.com/pweave}{Pweave} est un systĂ¨me similaire Ă&nbsp;
Sweave pour le langage Python.

InspirĂ© de Sweave, knitr \citep{knitr} permet Ă©galement d'entrelacer
du code {\LaTeX} et du code R. Cet outil offre plus d'options de
traitement que Sweave, mais au prix d'une complexitĂ© accrue.

En terminant, je souligne que Sweave n'est qu'un exemple de systĂ¨me de
programmation lettrĂ©e. Il en existe plusieurs autres. Je vous invite Ă&nbsp;
identifier celui qui correspond le mieux Ă&nbsp; vos besoins.

\notebox{On doit le concept de programmation lettrĂ©e au crĂ©ateur de
  {\TeX}, Donald Knuth. En fait, tout le code source de {\TeX} est
  Ă©crit en programmation lettrĂ©e! La %
  \link{https://fr.wikipedia.org/wiki/Programmation_lettrĂ©e}{page
    Wikipedia} %
  consacrĂ©e au sujet offre un trĂ¨s bon survol de l'historique et de la
  nature du concept.}


\section{Diapositives}
\label{sec:trucs:diapositives}

Il n'est pas rare qu'une publication scientifique fasse l'objet d'une
prĂ©sentation dans le cadre d'un colloque ou d'un sĂ©minaire. Lorsque le
texte a Ă©tĂ© rĂ©digĂ© avec {\LaTeX}, il est tout naturel de souhaiter le
rĂ©utiliser pour la prĂ©paration de diapositives --- surtout si le texte
comporte de nombreuses Ă©quations mathĂ©matiques qu'il serait
extrĂŞmement long de retranscrire dans un logiciel de prĂ©sentation
comme PowerPoint.

Fort heureusement, il est tout Ă&nbsp; fait possible de composer ses
diapositives avec {\LaTeX}. La classe standard \class{slides} produit
des diapositives Ă©lĂ©gantes, quoique minimalistes. Elles vous
conviendront si vous ne recherchez rien de plus que du texte noir sur
fond blanc.

Cependant, l'outil devenu le standard \emph{de facto} pour la
production de diapositives est la classe \class{beamer}
\citep{beamer}. Celle-ci compte un grand nombre de thĂ¨mes et de
gabarits Ă©laborĂ©s, elle rend trĂ¨s simple l'insertion d'animations
d'une diapositive Ă&nbsp; l'autre et\dots\ elle produit des diapositives en
couleur. Consultez la %
\doc{beamer}{https://texdoc.net/pkg/beameruserguide} %
de \class{beamer} pour apprendre Ă&nbsp; utiliser la classe. Produire des
diapositives de grande qualitĂ© avec les gabarits fournis avec la
classe se rĂ©vĂ¨le simple et rapide.

Quelle que soit la classe utilisĂ©e, les diapositives produites avec
{\LaTeX} se prĂ©sentent sous forme de fichier PDF que l'on les projette
avec une liseuse PDF en mode plein Ă©cran.



\section{Gestion des versions et travail collaboratif}
\label{sec:trucs:cvs}

Plusieurs personnes travaillent sur un mĂŞme fichier, ou encore, une
seule personne y travaille, mais de plusieurs postes de travail
diffĂ©rents. Quelle est la plus rĂ©cente version du fichier? Un ajout
fait hier dans le fichier a-t-il Ă©tĂ© pris en compte par une collĂ¨gue
aujourd'hui? Une modification apportĂ©e au fichier n'est plus
nĂ©cessaire; comment retourner en arriĂ¨re facilement?

Les informaticiens ont rĂ©solu ce genre de problĂ¨mes il y a des
dizaines d'annĂ©es avec les systĂ¨mes de gestion de versions. Le systĂ¨me
le plus populaire dans le monde en ce moment est Git \citep{git} (que
l'on prononce avec un Â«gÂ» dur, comme dans Â«guitareÂ»).

Bien que dĂ©veloppĂ©s Ă&nbsp; l'origine pour la gestion du code source de
logiciels, les systĂ¨mes de gestion de versions conviennent
parfaitement pour les sources {\LaTeX}. L'utilisation d'un tel systĂ¨me
permet de:
\begin{itemize}
\item toujours savoir quelle est la plus rĂ©cente version d'un fichier;
\item travailler Ă&nbsp; plusieurs personnes simultanĂ©ment sur un mĂŞme
  fichier;
\item revenir aisĂ©ment Ă&nbsp; une version antĂ©rieure d'un fichier;
\item comparer deux versions d'un fichier pour connaitre les
  modifications qui y ont Ă©tĂ© apportĂ©es;
\item gĂ©rer automatiquement les Ă©ventuels conflits de modification
  d'un fichier;
\item disposer en tout temps d'une copie de secours de son travail
  lorsque l'on a recours Ă&nbsp; un dĂ©pĂ´t centralisĂ©.
\end{itemize}
Un systĂ¨me de gestion de versions est un outil qui vous permettra
d'augmenter considĂ©rablement votre productivitĂ© ou celle de votre Ă©quipe
de travail au moment de rĂ©diger un ouvrage scientifique.

\notebox{Le code source de cet ouvrage prĂ©sente est conservĂ© dans un
  dĂ©pĂ´t Git public duquel vous pouvez en tout temps obtenir la plus
  rĂ©cente version. L'adresse URL du dĂ©pĂ´t se trouve dans la page des
  notices de copyright au dĂ©but du document.}



%%%
%%% Exercices
%%%

\section{Exercices}
\label{sec:trucs:exercices}

\Opensolutionfile{solutions}[solutions-trucs+astuces]

\begin{Filesave}{solutions}
\section*{Chapitre \ref*{chap:trucs}}
\addcontentsline{toc}{section}{Chapitre \protect\ref*{chap:trucs}}

\end{Filesave}

\noindent%
Pour les exercices
\nolink{\ref{exercice:trucs:1}}--\nolink{\ref{exercice:trucs:n}},
utiliser le fichier \fichier{exercice-trucs.tex}. Celui-ci reprend une
partie de la documentation de la classe \class{ulthese} pour les
thĂ¨ses et mĂ©moires de l'UniversitĂ© Laval. Avant toute chose, passez
rapidement en revue le prĂ©ambule du document. Vous constaterez que le
document:
\begin{itemize}
\item est compatible tant avec pdf{\LaTeX} qu'avec {\XeLaTeX} grĂ˘ce Ă&nbsp;
  un test sur le moteur utilisĂ© effectuĂ© dans le prĂ©ambule;;
\item dĂ©finit des nouvelles commandes \cmdprint{\class} et
  \cmdprint{\fichier} pour composer, respectivement, les noms de
  classes et les noms de fichiers;
\item utilise la commande \cmdprint{\doc} de
  l'\autoref{ex:commandes:doc};
\item charge le paquetage \pkg{hyperref}, ce qui transforme les titres
  de la table des matiĂ¨res, les renvois aux notes de bas de page et
  les liens externes en hyperliens.
\end{itemize}
\medskip

\begin{exercice}[nosol]
  \label{exercice:trucs:1}
  Compiler et visualiser le fichier sans aucune modification. Le texte
  est composĂ© dans la police par dĂ©faut Computer Modern.

  Ensuite, modifier le prĂ©ambule du document pour composer le
  document avec les polices suivantes:
  \begin{itemize}
  \item \link{https://www.stixfonts.org}{STIX} (version 2) %
    pour le texte romain;
  \item \link{https://bboxtype.com/typefaces/FiraSans}{Fira Sans} pour
    le texte sans empattements;
  \item \link{https://bboxtype.com/typefaces/FiraMono}{Fira Mono} pour
    le texte Ă&nbsp; largeur fixe.
  \end{itemize}

  Avec {\XeLaTeX}, insĂ©rer les lignes suivantes aprĂ¨s le chargement du
  paquetage \pkg{fontspec}:
\begin{lstlisting}
\setmainfont{STIXTwoText}
[
  Extension = .otf,
  UprightFont = *-Regular,
  BoldFont = *-SemiBold,
  ItalicFont = *-Italic,
  BoldItalicFont = *-SemiBoldItalic,
]
\setsansfont{FiraSans}
[
  Extension = .otf,
  UprightFont = *-Regular,
  BoldFont = *-SemiBold,
  ItalicFont = *-Italic,
  BoldItalicFont = *-SemiBoldItalic,
  Scale = 0.92
]
\setmonofont{FiraMono}
[
  Extension = .otf,
  UprightFont = *-Regular,
  BoldFont = *-Medium,
  ItalicFont = *-Oblique,
  BoldItalicFont = *-MediumOblique,
  Scale = 0.90
]
\end{lstlisting}
  Avec pdf{\LaTeX}, insĂ©rer les lignes suivantes aprĂ¨s le chargement
  du paquetage \pkg{fontenc}:
\begin{lstlisting}
\usepackage{stix2}
\usepackage[scale=0.92]{FiraSans}
\usepackage[scale=0.90]{FiraMono}
\end{lstlisting}
\end{exercice}

\begin{exercice}
  Configurer le paquetage \pkg{hyperref} pour que les hyperliens dans
  la table des matiĂ¨res soient ancrĂ©s aux numĂ©ros de page plutĂ´t
  qu'aux titres de section.
  \begin{sol}
    Tel qu'expliquĂ© Ă&nbsp; la \autoref{sec:trucs:hyperliens}, il faut
    insĂ©rer dans le prĂ©ambule du document la commande
\begin{lstlisting}
\hypersetup{linktocpage=true}
\end{lstlisting}
    ou, plus simplement,
\begin{lstlisting}
\hypersetup{linktocpage}
\end{lstlisting}
  \end{sol}
\end{exercice}

\begin{exercice}
  Charger le paquetage \pkg{xcolor} et ajouter l'option
  \code{colorlinks} Ă&nbsp; \pkg{hyperref}, puis recompiler le document.
  Observer les changements.
  \begin{sol}
    En conservant l'ajout de l'exercice prĂ©cĂ©dent, le prĂ©ambule doit
    contenir la commande
\begin{lstlisting}
\hypersetup{colorlinks, linktocpage}
\end{lstlisting}
    Les hyperliens apparaitront alors en couleur selon les paramĂ¨tres
    par dĂ©faut de \pkg{hyperref}.
  \end{sol}
\end{exercice}

\begin{exercice}
  En s'inspirant de l'\autoref{ex:trucs:couleurs}, modifier la couleur
  des liens internes et externes.
  \begin{sol}
    Il est possible soit d'utiliser des couleurs prĂ©dĂ©finies de
    \pkg{xcolor} (\autoref{tab:trucs:couleurs}), soit d'en dĂ©finir de
    nouvelles avec \cmd{\definecolor}. Les couleurs sont ensuite
    sĂ©lectionnĂ©es via les options \code{linkcolor} (liens internes) et
    \code{urlcolor} (liens externes) de \pkg{hyperref}.

    Exemple utilisant des couleurs prĂ©dĂ©finies:
\begin{lstlisting}
\hypersetup{colorlinks, linktocpage,
  linkcolor=brown, urlcolor=blue}
\end{lstlisting}

    Exemple avec de nouvelles couleurs:
\begin{lstlisting}
\definecolor{link}{rgb}{0,0.4,0.6}
\definecolor{url}{rgb}{0.6,0,0}
\hypersetup{colorlinks, linktocpage,
  urlcolor=url, linkcolor=link}
\end{lstlisting}
  \end{sol}
\end{exercice}

\begin{exercice}
  \label{exercice:trucs:n}
  Charger le paquetage \pkg{listings} et modifier l'environnement
  \Pe{verbatim} que l'on trouve dans le document pour un environnement
  \Pe{lstlisting}. En s'inspirant de l'\autoref{ex:trucs:listings},
  configurer la prĂ©sentation des extraits de code pour utiliser une
  police non proportionnelle (\cmdprint{\ttfamily}) et un arriĂ¨re-plan
  de la couleur standard \code{lightgray}.
  \begin{sol}
    S'il y avait plusieurs extraits de code dans le document, mieux
    vaudrait les configurer tous Ă&nbsp; l'identique dans le prĂ©ambule du
    document avec
\begin{lstlisting}
\lstset{basicstyle=\ttfamily,
  backgroundcolor=\color{lightgray}}
\end{lstlisting}
    Ensuite,
\begin{vglisting}
\begin{lstlisting}
latex ulthese.ins
\end{lstlisting}
\end{vglisting}
    donne le rĂ©sultat demandĂ©.

    Pour un seul extrait, il est Ă©galement possible de simplement
    charger le paquetage dans le prĂ©ambule et d'effectuer la
    configuration Ă&nbsp; l'ouverture de l'environnement, comme ceci:
\begin{vglisting}
\begin{lstlisting}[basicstyle=\ttfamily,
  backgroundcolor=\color{lightgray}]
latex ulthese.ins
\end{lstlisting}
\end{vglisting}
  \end{sol}
\end{exercice}

\Closesolutionfile{solutions}


%%% Local Variables:
%%% mode: latex
%%% TeX-master: "formation-latex-ul"
%%% TeX-engine: xetex
%%% coding: utf-8
%%% End:
</pre></body></html>