Utiliser verbatim dans un document Beamer

Aujourd'hui, je me suis encore fait avoir : pour insérer un paragraphe en verbatim dans une frame (quand vous faites du LaTeX beamer), il est nécessaire d'ajouter l'option fragile à la frame. Exemple :

\begin{frame}[fragile]
  \frametitle{\color{white}\textbf{Migration v4 vers v6}}

  \begin{block}{Approche Comcast}
  \begin{verbatim}
-----------------
| IPv6          | DSlite    --
|         CGN ============ |  |
|               |           --
-----------------
  \end{verbatim}
  \end{block}

  \begin{block}{Approche FT}
  \begin{verbatim}
-----------------
|               | IPv6      -----------
|             ============ | NAT (A+P) |
|               |           -----------
-----------------
  \end{verbatim}
  \end{block}

\end{frame}

Listing de code sous LaTeX

Souvent, quand on fait des docs LaTeX, le réflexe pour citer du code est souvent d'utiliser verbatim. Or moi, je suis pas vraiment un adepte de verbatim, c'est pas très configurable, pas très joli, ça gère extrêmement mal les sauts de lignes, bref, j'étais vraiment pas fan. Ce que je vous propose après cette longue interruption dans l'écriture de ce blog, c'est d'utiliser le package listings, qui est très configurable et qui rend relativement bien.

Les langages supportés

Le package supporte une bonne cinquantaine de langages différents, en voilà une rapide sélection :

  • C (ANSI, Handel, Objective, Sharp), C++ (ANSI, GNU, ISO, Visual), Caml
  • Java (empty, AspectJ)
  • Matlab, Scilab, R
  • Python, Perl, PHP
  • TeX (AlLaTeX, common, LaTeX, plain, primitive)
  • XML

La forme

Les options sont vraiment nombreuses. Par exemple, vous pouvez numéroter les lignes (ici toutes les 5 lignes) :

\lstset{numbers=left, numberstyle=\tiny, stepnumber=5, numbersep=5pt}

Vous pouvez également rendre visibles les espaces et les tabulations :

\lstset{showspaces=true,showtabs=true,tab=\rightarrowfill}

Vous pouvez entourer le code d'un rectangle :

\begin{lstlisting}[frame=single] ... \end{lstlisting}

Vous pouvez même ajouter un arrière-plan :

\lstset{backgroundcolor=\color{red}}

Il y a 60 pages de documentation, alors je vais dans la section qui suit vous donner un exemple d'utilisation que j'utilise et qui rend plutôt pas mal.

Exemple d'utilisation

\usepackage{listings}

\lstset{language=[Visual]C++,basicstyle=\small,frame=leftline,captionpos=b,linewidth=175mm,breaklines=true, commentstyle=\color{green},stringstyle=\color{red},identifierstyle=\ttfamily,keywordstyle=\color{blue}}

\begin{lstlisting}[caption={Construction simplifiée du graphe DirectShow}]
CoCreateInstance(CLSID_FilterGraph,NULL, CLSCTX_INPROC_SERVER,IID_IGraphBuilder, (void**) &pGraph);
hr = pGraph->AddSourceFilter (wFileAddress, L"Source", &pSrcFilter);
\end{lstlisting}

N'hésitez pas à apporter votre contribution en proposant des modèles sympathiques !

Trac pour CookTeX

Et voilà, un svn ne peut pas exister sans un petit Trac, c'est maintenant chose faite ! Le projet CookTeX (livre de cuisine collaboratif sous LaTeX) a maintenant sa page. Un accès anonyme est suffisant pour pouvoir allègrement se balader à travers les sources.

Beamer et les tables des matières

Il existe un effet assez génial dans les présentations : d'abord montrer le plan global du document, puis à chaque fois qu'on attaque une nouvelle partie, on met en évidence la partie courante, en grisant les autres. Cela permet à l'auditoire de savoir, à chaque début de partie, combien de temps il aura à attendre avant de pouvoir sortir de la salle de conférence.

Sous Beamer donc, on peut utiliser ceci pour le plan global :

\begin{frame}
\frametitle{Plan}
\tableofcontents
\end{frame}

Et voici l'astuce du jour, pour la section courante :

\begin{frame}
\frametitle{Plan}
\tableofcontents[currentsection]
\end{frame}

C'est tout... pour le moment.

Alignement d'images dans un tableau

Fin de l'année rime avec rédaction de rapports, c'est pourquoi ce mois-ci, il se peut qu'il y ait un certain nombre de posts... Aujourd'hui, on va s'intéresser aux images dans un tableau.

Le plus normal, habituellement, c'est de faire un tableau ainsi :

\begin{tabular}[c]{p{3cm}p{13cm}}
\includegraphics[height=1cm]{img/chap01/partenaires-telecom.png} &
\textbf{Telecom Bretagne}, \textit{via} le département SID\myfootnotemark, est experte en informatique, réseaux et usage des TIC. Companym@ges est l'un des nombreux projets de recherche dont elle fait partie.
\end{tabular}

Et avec ce code, on obtient ceci :

latex-tabular-mauvais.png

Or on voudrait que l'image ne soit pas au-dessus du texte mais centré verticalement par rapport au texte. En utilisant le package array, on peut utiliser cette astuce :

\begin{tabular}[c]{p{3cm}m{13cm}}
\begin{minipage}[c]{2.5cm}
\includegraphics[height=1cm]{img/chap01/partenaires-telecom.png}
\end{minipage} &
\textbf{Telecom Bretagne}, \textit{via} le département SID\myfootnotemark, est experte en informatique, réseaux et usage des TIC. Companym@ges est l'un des nombreux projets de recherche dont elle fait partie.
\end{tabular}

Ce qui donne quelque chose de ce genre :

latex-tabular-bon.png

La page de garde

Chose à ne jamais négliger lorsque l'on construit un document LaTeX, la page de garde. C'est elle qui va être la première accroche du lecteur, il faut donc qu'elle soit jolie et complète. Ceux qui ont déjà utilisé la simple commande \maketitle ont pu se rendre compte de son aspect minimaliste. Je vais ici vous proposer deux modèles de page de garde que j'utilise couramment : le premier m'a gracieusement été prêté par Belette un jour de désespoir en pleine rédaction de rapport de projet de second semestre, et le deuxième honteusement copié de la Not So Short Introduction To LaTeX2e de Tobi Oetiker.

Le modèle Belettien

Quand il est bien fait, il ressemble à ça :

frontpage1.png

Certains détails ont été floutés pour des raisons de confidentialité :-)

Voici ce que ça donne (j'ai enlevé les lignes concernant les logos et à vous de répartir comme vous le souhaitez les champs verticalement) :

\documentclass[10pt,titlepage]{report}
\setlength{\textwidth}{175mm}
\usepackage[francais]{babel}
\usepackage[utf8x]{inputenc}  %pour Linux
\usepackage[pdftex]{graphicx}
\usepackage[pdftex,colorlinks=true,linkcolor=blue,citecolor=blue,urlcolor=blue]{hyperref}
\usepackage{anysize}
\marginsize{22mm}{14mm}{12mm}{8mm}

\begin{document}
\thispagestyle{empty}
\newenvironment{vcenterpage}
{\newpage\vspace*{\fill}}
{\vspace*{\fill}\par\pagebreak}
\begin{titlepage}
\begin{tabular}{p{10cm}p{5cm}}
\end{tabular}
\vspace*{1.5cm}

\center{\textcolor[gray]{0.4}{\LARGE Titre du projet}}
\center{\LARGE \textbf{Sous-titre du projet}}
\vspace*{0.9cm}

\begin{center}
\begin{tabular}{l}
\hline
\\
\textcolor[gray]{0.4}{Auteurs :}\\
Auteur 1\\
Auteur 2\\
\\
\\
\textcolor[gray]{0.4}{Encadrants :} \\
Encadrant1, \textit{titre}\\
Encadrant2, \textit{titre}\\
\\
\textcolor[gray]{0.4}{Destinataires :} \\
Destinataire1\\
Destinataire2\\
\\
\textcolor[gray]{0.4}{Version $n$ -- date}

\end{tabular}
\end{center}

\end{titlepage}

\strut

\end{document}

Le modèle Oetiker

Illustration disponible ici :

frontpage3.png

\documentclass[10pt,titlepage]{report}
\setlength{\textwidth}{175mm}
\usepackage[francais]{babel}
\usepackage[utf8x]{inputenc}  %pour Linux
\usepackage[pdftex]{graphicx}
\usepackage[pdftex,colorlinks=true,linkcolor=blue,citecolor=blue,urlcolor=blue]{hyperref}
\usepackage{anysize}
\marginsize{22mm}{14mm}{12mm}{8mm}

\begin{document}
\newlength{\centeroffset}
\setlength{\centeroffset}{-0.5\oddsidemargin}
\addtolength{\centeroffset}{0.5\evensidemargin}

\vspace*{\stretch{1}}
\noindent\hspace*{\centeroffset}\makebox[0pt][l]{\begin{minipage}{\textwidth}
\flushright
{\Huge\bfseries Titre}
\noindent\rule[-1ex]{\textwidth}{5pt}\\[2.5ex]
\hfill\emph{\Large Sous-titre}
\end{minipage}}

\vspace{\stretch{1}}
\noindent\hspace*{\centeroffset}\makebox[0pt][l]{\begin{minipage}{\textwidth}
\flushright
{\bfseries
Auteur\\[1.5ex]}
Version $n$, date du jour
\end{minipage}}

\end{document}

Et voilà, à vous de compléter et de compiler !

Ecrire une lettre sous LaTeX

Il arrive un moment où finalement, pour le moindre truc (un CV, un livre de cuisine, une liste de courses, un rapport de sécu de soirée mousse), on préfère faire les choses sous LaTeX. En ces temps de forum entreprises (pour les jeunes), ça peut toujours être intéressant de savoir écrire une lettre sous LaTeX. Pour cela, on utilisera la classe lettre.

Première compil

Le dossier contenant votre lettre va se composer de deux fichiers : le fichier lettre.tex (votre lettre) et le fichier default.ins qui sera l'en-tête de la lettre. Voici comment se présente le fichier lettre.tex, il se comprend tout seul :

\documentclass{lettre}
\usepackage[francais]{babel}
\usepackage[latin1]{inputenc}
\usepackage[francais]{layout}

\name{Bertrand Grelot}
\signature{Bertrand Grelot}

\begin{document}
\begin{letter}{\ }
\def\concname{Objet : }
\conc{Sujet du document}
\opening{Ouverture,}
blah
\closing{Formule de politesse}
\end{letter}
\end{document}

Bon voilà, ça compile, on est contents. Mais, ô rage ! ô desespoir ! l'en-tête est bidon et c'est plutôt moche. Alors avant toute chose, la police LaTeX, je la trouve un peu lassante, je vous propose d'utiliser plutôt la police helvetica (qui demande la présence du fichier helvetica.sys présent là : helvetica.sty). On peut aussi ajouter les en-têtes "habituels". Mais jetons un oeil au document, il y a un trait de pliure. Pratique mais un peu moche... Avant le \begin{document}, on va écrire un bout de code pour l'enlever :

\makeatletter
\newcommand*{\NoRule}{\renewcommand*{\rule@length}{0}}
\makeatother

et après le <i>\begin{letter}{\ }</i> il vous suffira d'insérer :

\NoRule

L'en-tête

Par défaut, le compilateur va chercher l'en-tête dans un fichier default.ins qui se présente comme ca :

\address{\begin{large}Bertrand Grelot\end{large}\\\textsc{Une Ecole}\\29238 Brest \textsc{Cedex} 3}
\telephone{+ 33 (0)1 23 45 67 89}
\nofax
\lieu{Brest}
\francais
\renewcommand*{\rule@length}{0}
\email{\texttt{guiling@host.com}}</p></pre></blockquote>

Celui que j'utilise habituellement est un peu plus compliqué car il possède de quoi faire un peu de mise en forme :
<blockquote><pre><p>\def\pict@let@width{185}%
\def\pict@let@height{65}%
\def\pict@let@hoffset{0}%
\def\pict@let@voffset{10}%
\def\rule@hpos{-25}%
\def\rule@vpos{-15}%
\def\rule@length{10}%
\def\fromaddress@let@hpos{-10}%
\def\fromaddress@let@vpos{70}%
\fromaddress@let@width=69mm
\def\fromlieu@let@hpos{90}%
\def\fromlieu@let@vpos{62}%
\fromlieu@let@width=69mm
\def\toaddress@let@hpos{10}%
\def\toaddress@let@vpos{40}%
\toaddress@let@width=80mm

\def\pict@fax@width{185}%
\def\pict@fax@height{0}%
\def\pict@fax@hoffset{0}%
\def\pict@fax@voffset{0}%
\def\fromaddress@fax@hpos{-10}%
\def\fromaddress@fax@vpos{30}%
\fromaddress@fax@width=69mm
\def\faxstring@hpos{90}%
\def\faxstring@vpos{20}%
\faxstring@width=69mm%
\faxbox@width=170mm%
\toaddress@fax@width=69mm%
\fromname@fax@width=69mm%

Alors maintenant, imaginons que vous vouliez avoir plusieurs modèles d'en-tête. Il vous suffit d'appeler votre fichier default.ins travail.ins (par exemple) et ensuite d'insérer après le \signature{} :

\institut{travail}

et le tour est joué !

Résumé des faits

Pour résumer, je recolle ici mon lettre.tex complet :

\documentclass{lettre}
\usepackage[francais]{babel}
\usepackage[latin1]{inputenc}
\usepackage[LGR]{fontenc}
\usepackage{url}
\usepackage[official]{eurosym}
\usepackage{textcomp}
\usepackage[francais]{layout}
\usepackage[cyr]{aeguill}
\usepackage{helvetica}

\name{Bertrand Grelot}
\signature{Bertrand Grelot}
\institut{bgrelot}
\makeatletter
\newcommand*{\NoRule}{\renewcommand*{\rule@length}{0}}
\makeatother

\begin{document}
\begin{letter}{\ }
\NoRule

\def\concname{Objet : }
\conc{Sujet du document}
\opening{Ouverture,}
blah
\closing{Formule de politesse}
\end{letter}
\end{document}

Quand Jeb se met à LaTeX...

ça donne ça. Voilà, comme ce blog est destiné aux premiers pas sous Linux et sous LaTeX, ça valait bien le coup de mettre un lien ! Merci Jeb !

La rédaction d'une bibliographie avec BibTeX

Il y a quelques jours, on a vu comment faire une bonne typo de bibliographie. Maintenant, voyons comment on peut utiliser LaTeX pour générer une jolie bibliographie. On utilisera pour ça BibTeX. Globalement, comment ça va se passer ? On va commencer par écrire un fichier texte qui va contenir les différentes sources (fichier biblio.bib) puis dans le fichier LaTeX, on fera des appels à ces sources. A la compil, les sources utilisées apparaîtront dans une section "bibliographie", les sources non utilisées n'apparaîtront pas.

Les types de documents

Globalement, chaque source se présente de la même manière dans le fichier biblio.bib :

@Document_Type{reference,
  champ_1 =        "ba",
  champ_2 =         "by",
  champ_3 =       "bel",
}

Pour chaque type, il y a des champs obligatoires et des champs... ben pas obligatoires. Voici les champs obligatoires :

  • @ARTICLE : author, title, journal, year
  • @BOOK : author (ou editor), title, publisher, year
  • @CONFERENCE : author (ou editor), chapter (ou pages), publisher, year
  • @PHDTHESIS : author, title, school, year
  • @MISC : rien d'obligatoire (optionnel : author, title, month, year, note)

Citer le document dans le fichier LaTeX

Dans l'en-tête du fichier LaTeX, il faut insérer :

\usepackage{cite}

et à l'endroit voulu, on insère la référence par un :

\cite{reference}

ou reference est le mot-clé que l'on a inséré dans l'entrée correspondante.

Ensuite, il faut insérer la bibliographie :

\bibliography{biblio}{}
\bibliographystyle{plain-fr}

Et voilà, le tour est joué ! (et en plus vous aurez une biblio en francais...)

Compiler et savourer

Bon alors par contre, l'ordre de compilation est important... admettons que votre fichier LaTeX s'appelle toto :

latex toto
bibtex toto
latex toto
latex toto

Il est presque intéressant de faire un fichier dans le même dossier que votre fichier toto.tex et votre fichier biblio.bib, que nous appellerons Makefile (attention, ceci ne marche que sous Linux) :

all:
latex toto.tex
bibtex toto
pdflatex toto
pdflatex toto

Ensuite, dans un terminal, il ne reste qu'à faire :

make

et tout le fichier sera compilé.

La typographie d'une bibliographie

C'est toujours marrant, au moment où les élèves d'une école s'empressent de rédiger un rapport de stage ou de projet, de voir qu'ils galèrent sur des règles simples de typographie... en particulier dans la gestion de leur bibliographie. Pour éviter de se poser encore la question à chaque fois, je vais tenter de répertorier les différents types de documents ainsi que la typo associée.

  • Pour un livre : P. Nom (en petites majuscules), Titre du livre, édition Edition, année, nombre de pages.
  • Pour un chapitre : P. Nom (en petites majuscules), « Nom du chapitre », Titre du livre, édition Edition, année, numéro du chapitre, nombre de pages du chapitre.
  • Pour un article de revue : P. Nom (en petites majuscules), « Nom de l'article », Titre de la revue, numéro de la revue, année, numéro des pages de l'article.
  • Pour un extrait de conférence : P. Nom (en petites majuscules), « Titre de la communication », Intitulé du congrès, société organisatrice, date, numéro des pages (dans le cas d'un compte-rendu).
  • Pour une thèse ou un mémoire : P. Nom (en petites majuscules), Titre de la thèse, université concernée, date.
  • Pour une url : P. Nom (en petites majuscules) ou institution rédactrice de la page (sans petites majuscules), Titre de la page, url (en monospace), dernière consultation le (en précisant la date).

- page 1 de 2