Path: tempo.univ-lyon1.fr!univ-lyon1.fr!news.imp.ch!fr.clara.net!heighliner.fr.clara.net!maredsous.noc.fr.clara.net!victor.teaser.fr!teaser.fr!fdn.fr!edgard.fdn.fr!not-for-mail Date: 08 Jun 2001 13:31:18 +0200 Newsgroups: fr.comp.text.tex,fr.usenet.reponses Subject: [FAQ] fr.comp.text.tex - parties 7 a 11 Message-ID: X-Posted-By: poste.sh version 1.1 From: bayartb@edgard.fdn.fr (Nono le robot) Supersedes: Expires: 08 Jul 2001 13:31:17 +0200 Followup-To: poster Organization: French Data Network Approved: bayartb@edgard.fdn.fr Lines: 2477 Xref: tempo.univ-lyon1.fr fr.comp.text.tex:23523 fr.usenet.reponses:20389 Archive-name: fr/faq-latex-francaise/part3 Author: Marie-Paule Kluth Posting-Frequency: mensuel (monthly) Version: 2.27 ================================================================ Cette FAQ, rédigée initialement par MP Kluth est maintenant tenue à jour autant que possible par B. Bayart et plusieurs volontaires (voir question [30]). ================================================================ ================================================================ [7] GESTION DES TABLEAUX ================================================================ # 7.1 # Comment faire un tableau ? ---------------------------------- En mode texte, il faut utiliser l'environnement tabular. Chaque colonne est ensuite décrite par r, l ou c pour obtenir une colonne de texte justifié à droite, à gauche ou centré. Chaque déclaration de colonne peut être délimitée par une séparation verticale : | ou rien. Une ligne horizontale entre deux lignes s'obtient par la commande \hline. Le contenu de chaque colonne est séparé de celui de la suivante par le symbole &. Le changement de ligne est obtenu par la commande \\. Lorsque plusieurs colonnes adjacentes ont la même définition, on peut grouper leurs déclarations avec la commande *{nb_colonnes}{déclaration} Exemple : \begin{tabular}{|*{2}{c|}l r|} \hline une & deux & trois & quatre \\ case centrée & encore centrée & à gauche & à droite \\ \hline \end{tabular} %%%% fin exemple %%%% # 7.2 # Comment gérer les tableaux de plus d'une page ? ------------------------------------------------------- * Le package 'supertabular' permet de gérer automatiquement (ou presque) les coupures de tableaux. Il est disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/supertabular/. Il calcule la longueur du tableau à chaque \\ et vérifie si la fin de page est atteinte. Si oui, il coupe le tableau. Les commandes à utiliser sont : + \tablefirsthead{...} pour définir le contenu de la première occurrence de la tête du tableau. Cette commande est optionnelle. + \tablehead{...} pour définir le contenu de la tête des tableaux suivants. + \tabletail{...} définit le contenu de la ligne qui doit être ajoutée avant une coupure + \tablelasttail{...} définit le contenu de la dernière ligne du tableau. Cette commande est optionnelle. + \topcaption{...}, \bottomcaption{...} et \tablecaption{...} permettent de nommer un tableau soit au début ou à la fin du tableau. \tablecaption{...} est l'option par défaut. Exemple : \begin{center} \tablefirsthead{\hline \multicolumn{1}{|c}{Nombre} & \multicolumn{1}{c}{Nombre$^2$} & Nombre$^4$ & \multicolumn{1}{c|}{Nombre!} \\ \hline} \tablehead{\hline \multicolumn{4}{|l|}{\small\sl continued from previous page}\\ \hline \multicolumn{1}{|c}{ Nombre} & \multicolumn{1}{c}{Nombre$^2$} & Nombre$^4$ & \multicolumn{1}{c|}{Nombre!} \\ \hline} \tabletail{\hline\multicolumn{4}{|r|}{\small\sl Suite page suivante~\ldots}\\\hline} \tablelasttail{\hline} \bottomcaption{Fin.} \par \begin{supertabular}{| r@{\hspace{6.5mm}}| r@{\hspace{5.5mm}}| r | r|} 1 & 1 & 1 & 1 \\ 2 & 4 & 16 & 2 \\ 3 & 9 & 81 & 6 \\ 4 & 16 & 256 & 24 \\ 5 & 25 & 625 & 120 \\ 6 & 36 & 1296 & 720 \\ 7 & 49 & 2401 & 5040 \\ 8 & 64 & 4096 & 40320 \\ 9 & 81 & 6561 & 362880 \\ 10 & 100 & 10000 & 3628800 \\ 11 & 121 & 14641 & 39916800 \\ 12 & 144 & 20736 & 479001600 \\ 13 & 169 & 28561 & 6.22702080E+9 \\ 14 & 196 & 38416 & 8.71782912E+10\\ 15 & 225 & 50625 & 1.30767437E+12\\ 16 & 256 & 65536 & 2.09227899E+13\\ 17 & 289 & 83521 & 3.55687428E+14\\ 18 & 324 & 104976 & 6.40237370E+15\\ 19 & 361 & 130321 & 1.21645100E+17\\ 20 & 400 & 160000 & 2.43290200E+18\\ \hline 1 & 1 & 1 & 1 \\ 2 & 4 & 16 & 2 \\ 3 & 9 & 81 & 6 \\ 4 & 16 & 256 & 24 \\ 5 & 25 & 625 & 120 \\ 6 & 36 & 1296 & 720 \\ 7 & 49 & 2401 & 5040 \\ 8 & 64 & 4096 & 40320 \\ 9 & 81 & 6561 & 362880 \\ 10 & 100 & 10000 & 3628800 \\ 11 & 121 & 14641 & 39916800 \\ 12 & 144 & 20736 & 479001600 \\ 13 & 169 & 28561 & 6.22702080E+9 \\ 14 & 196 & 38416 & 8.71782912E+10\\ 15 & 225 & 50625 & 1.30767437E+12\\ 16 & 256 & 65536 & 2.09227899E+13\\ 17 & 289 & 83521 & 3.55687428E+14\\ 18 & 324 & 104976 & 6.40237370E+15\\ 19 & 361 & 130321 & 1.21645100E+17\\ 20 & 400 & 160000 & 2.43290200E+18\\ \hline 1 & 1 & 1 & 1 \\ 2 & 4 & 16 & 2 \\ 3 & 9 & 81 & 6 \\ 4 & 16 & 256 & 24 \\ 5 & 25 & 625 & 120 \\ \end{supertabular} \end{center} %%%% fin exemple %%%% * Le package 'longtable', de D. Carlisle, disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/packages/tools/, fonctionne de la même manière mais mieux et permet de définir une taille de tableau commune sur toutes les pages. Les commandes associées à ce package sont \endfirsthead, \endhead, \endfoot et \endlastfoot. \begin{longtable} {|p{0.2\linewidth}|p{0.2\linewidth}|p{0.2\linewidth}|} \hline Premiere colonne & Deuxieme & Troisieme \endfirsthead \hline Premiere & Deuxieme & Troisieme \\ \multicolumn{3}{|p{0.6666\linewidth}|}{Suite ... } \\ \endhead \hline \multicolumn{3}{|p{0.6666\linewidth}|}{Suite page suivante} \\ \hline \endfoot \hline \multicolumn{3}{|p{0.6666\linewidth}|}{C'est fini} \\ \hline \endlastfoot \hline 1 & 1 & 1 \\ 2 & 4 & 16 \\ 3 & 9 & 81 \\ 1 & 1 & 1 \\ 2 & 4 & 16 \\ 3 & 9 & 81 \\ 1 & 1 & 1 \\ 2 & 4 & 16 \\ 3 & 9 & 81 \\ 1 & 1 & 1 \\ 2 & 4 & 16 \\ 3 & 9 & 81 \\ \end{longtable} au lieu de faire des calculs de largeurs de colonne, on peut aussi mettre un \setlongtables dans le préambule et déclarer ses tableaux comme à l'habitude en \begin{longtable}{|c|c|c|} et LaTeX se charge du reste. Dans ce cas, l'ajustement des colonnes peut nécessiter plusieurs (jusqu'à trois) compilations enchaînées. * Le package 'ltxtable' de D. Carlisle, disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/carlisle/ permet de profiter des fonctionnalités de tabularx et de longtable. # 7.3 # Comment modifier l'orientation d'un tableau ? ----------------------------------------------------- * On peut utiliser la commande \rotatebox du package 'graphics' de D. Carlisle. Ce package est disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/packages/graphics/. Exemple : \rotatebox{90}{ \begin{tabular}{|c|c|} \hline salut & coucou \\ \hline \end{tabular} } %%%% fin exemple %%%% * Le style 'lscape' de D. Carlisle marche aussi avec l'environnement longtable (du même). * De même l'environnement sidewaystable du package 'rotating' permet d'inclure des tableaux en mode landscape. Le sens de rotation peut être changé par l'option counterclockwise. Exemple : \documentclass{report} \usepackage[counterclockwise]{rotating} \usepackage{french} \pagestyle{empty} \begin{document} \rotatebox{90}{ \begin{tabular}{|c|c|} \hline vu & à voir \\ de Latour & Van Gogh \\ \hline \end{tabular} } \end{document} %%%% fin exemple %%%% * Le package 'rotfloat' disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/rotfloat/ permet de gérer la rotation des flottants. # 7.4 # Comment nommer un tableau ? ----------------------------------- Pour pouvoir associer une légende (\caption) à un tableau, il suffit de l'encapsuler dans un environnement table. Exemple : \begin{table}[htbp] \begin{center} \begin{tabular}{|c|c|} \hline un & deux \\ \hline trois & quatre \\ \hline \end{tabular} \caption{Nom du tableau. \label{table-nom}} \end{center} \end{table} %%%% fin exemple %%%% # 7.5 # Comment modifier l'épaisseur des lignes d'un tableau ? -------------------------------------------------------------- * Pour obtenir des lignes horizontales fines ou épaisses dans un tableau, il faut utiliser les commandes \setlength{\doublerulesep}{\arrayrulewidth} dans l'entête du document puis dans le tableau \\\hline pour une ligne fine \\\hline\hline pour une ligne épaisse * Autre solution : la macro de A. Kessi (alain.kessi@psi.ch) %%%% debut macro %%%% \makeatletter \def\hlinewd#1{% \noalign{\ifnum0=`}\fi\hrule \@height #1 % \futurelet\reserved@a\@xhline} \makeatother %%%% fin macro %%%% Exemple : \begin{tabular}{|l|r|} \hline premier & 1 \\ \hline second & 2 \\ \hlinewd{5pt} total & 3 \\ \hline \end{tabular} %%%% fin exemple %%%% Même chose pour les lignes verticales. %%%% debut macro %%%% \begin{tabular}{@{\,\vrule width 5pt\,}c|c|} %%%% fin macro %%%% * Le package 'easytable' disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/easy/ propose différents styles de lignes de séparation des cellules d'un tableau. # 7.6 # Comment griser des cellules d'un tableau ? -------------------------------------------------- * Le package 'colortab' disponible par ftp sur ftp://ftp.princeton.edu/pub/tvz/ ou sur ftp://ftp.fdn.org/pub/CTAN/graphics/pstricks/generic/ (accompagné de sa doc dans ftp://ftp.fdn.org/pub/CTAN/graphics/pstricks/origdoc/) permet de griser ou de mettre en couleur certaines parties de tableau. Remarque : colortab n'est pas actuellement maintenu par Van Zandt et l'extension longtable, avec laquelle il était compatible, ne fonctionne plus. AL: c'est toujours vrai, ça ? * Il est possible également d'utiliser le package 'shade' disponible sur {macros/generic/}. * D. Carlisle propose également le package 'colortbl' sur ftp://ftp.fdn.org/pub/CTAN/macros/contrib/supported/carlisle/. Ce package permet non seulement de gérer de la couleur mais il est en outre compatible avec le package 'longtable'. Il nécessite les packages 'array' et 'color'. Exemple : \begin{tabular}{|>{\columncolor[gray]{.8}}l% |>{\color{white}\columncolor[gray]{.2}}r|} \hline UN & DEUX \\ TROIS & QUATRE \\ \hline \end{tabular} %%%% fin exemple %%%% # 7.7 # Comment changer la fonte d'une colonne ? ------------------------------------------------ Pour préciser une fonte spécifique dans une colonne d'un tableau, on peut utiliser le package 'array'. Ce dernier est disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/packages/tools/. Exemple : \begin{tabular}{>{\bfseries}l >{\slshape}r c} gras & penché & normal \\ \end{tabular} %%%% fin exemple %%%% # 7.8 # Comment créer des notes de bas de page dans un tableau ? ---------------------------------------------------------------- * Il suffit d'encapsuler le tableau dans un environnement minipage et pour supprimer le trait de séparation des notes de bas de page de déclarer : \renewcommand{\footnoterule}{}. Exemple : \begin{minipage}[t]{5cm} \renewcommand{\footnoterule}{} % permet de supprimer le % trait de séparation \begin{tabular}{|c|c|} \hline Air & Terre\footnote{Feu}\\ \hline \end{tabular} \end{minipage} %%%% fin exemple %%%% Remarque : dans ce cas, la note apparaît juste après le tableau, dans l'environnement minipage. * On peut également utiliser : \footnote[cptr]{texte.} toujours dans un environnement minipage, et gérer soi-même ses compteurs (cptr est un entier alors que les marques qui apparaissent dans le tableau sont les lettres de l'alphabet). Remarque : ici aussi la note apparaît en dessous du tableau. * Il existe également deux commandes spécifiques \footnotemark[] et \footnotetext[]{}. \footnotemark permet de gérer le compteur de notes et \footnotetext permet d'insérer le texte correspondant en bas de page. Exemple : \begin{tabular}{|c|c|} \hline donnee1\footnotemark[1] & donnee2\footnotemark[2] \\ \hline \end{tabular} \footnotetext[1]{Note associ\'ee \`a la donn\'ee 1.} \footnotetext[2]{Note associ\'ee \`a la donn\'ee 2.} %%%% fin exemple %%%% Remarque : ici les notes apparaissent bien dans le bas de page. # 7.9 # Comment écrire un texte sur plusieurs colonnes ? -------------------------------------------------------- Il faut utiliser la commande : \multicolumn{nb_colonnes}{alignement}{Texte} Exemple : \begin{tabular}[b]{|l|c|} \hline \multicolumn{2}{|c|}{Texte sur 2 colonnes} \\ \hline \hline donnée1 & donnée2 \\ A & B \\ \hline \end{tabular} %%%% fin exemple %%%% Remarque : dans le cas où le nombre de colonnes à couvrir est égal à 1, cette commande peut être utilisée pour modifier l'alignement (c, l, r, |, etc) d'une cellule. # 7.10 # Comment passer certaines cellules en reverse vidéo ? ------------------------------------------------------------- Le package 'color' disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/packages/graphics/ permet entre autres de le faire. En fait, il permet de définir des couleurs de texte et de fond de page. Exemples : \tabcolsep=30pt \begin{tabular}{|c|c|c|} \hline 1&&\\ &\colorbox{black}{\strut{\color{white}Coucou}}&\\ &&2\\ \hline \end{tabular} ou (\LaTeXe) \newlength\Coucoulength \settowidth\Coucoulength{Coucou Coucou Coucou} \begin{tabular}{|c|c|c|} \hline 1&Coucou Coucou Coucou &\\ &\colorbox{black}{\makebox[\Coucoulength][c]{\color{white}Coucou}} &\\ &&2\\ \hline \end{tabular} %%%% fin exemple %%%% # 7.11 # Comment fixer la largeur d'une colonne ? ------------------------------------------------- * p{largeur} dans les descripteurs de colonne permet de fixer la largeur d'une colonne. Dans ce cas par défaut le texte est justifié à gauche. Les commandes \centering et \raggedright permettent respectivement de le centrer ou de le justifier à droite. Exemple : \begin{center} \begin{tabular}{|c|l|p{4cm}|r|} \hline centré & à gauche & largeur fixe & à droite \\ bla bla bla & bla bla bla & bla bla bla & bla bla bla \\ \hline \end{tabular} \end{center} %%%% fin exemple %%%% * Avec le package 'array', disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/packages/tools/, il faut utiliser l'option m{largeur}. * Le package 'easytable' disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/easy/ permet facilement d'écrire des tableaux dont les colonnes ont une largeur fixe. # 7.12 # Comment écrire un texte sur plusieurs lignes ? ------------------------------------------------------- Il existe le package 'multirow' disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex209/contrib/misc/. Il permet d'écrire un texte à cheval sur deux lignes. Exemple : \begin{table}[htbp] \begin{center} \begin{tabular}{|c|c||c|c|} \hline \multirow{2}{0.5cm}{k} & \multirow{2}{0.5cm}{$p_G$} & \multicolumn{2}{c|}{test} \\ \cline{3-4} & & DADWRD & RARWRD \\ \hline 2 & $1$ & 90 n & 228 n \\ 3 & $p_d$ & 202 n & 449 n \\ 4 & $p_d^2$ & 424 n & 891 n \\ 5 & $p_d^3$ & 866 n & 1774 n \\ \hline \end{tabular} \caption{Nombre d'opération par cellule des tests pseudo-aléatoires de fautes de type k-coupling. \label{table-compar}} \end{center} \end{table} %%%% fin exemple %%%% # 7.13 # Comment diviser une cellule par une diagonale ? -------------------------------------------------------- Il faut utiliser le package 'slashbox' disponible par ftp sur ftp://ftp.tohoku.ac.jp/pub/TeX/latex-styles/bear_collections/style-files/. Exemple (de la doc) : \begin{tabular}{|l||*{5}{c|}}\hline \backslashbox{Room}{Date} &\makebox[3em]{5/31}&\makebox[3em]{6/1}&\makebox[3em]{6/2} &\makebox[3em]{6/3}&\makebox[3em]{6/4}\\\hline\hline Meeting Room &&&&&\\\hline Auditorium &&&&&\\\hline Seminar Room &&&&&\\\hline \end{tabular} %%%% fin exemple %%%% # 7.14 # Comment définir une colonne en mode mathématique dans un tableau ? --------------------------------------------------------------------------- Avec le package 'array' disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/packages/tools/, il suffit de déclarer \begin{tabular}{>{$}c<{$}cc} pour avoir une colonne en mode mathématique et deux colonnes de texte. # 7.15 # Comment modifier le nombre de tableaux par page ? ---------------------------------------------------------- cf. question 8.4. # 7.16 # Comment mettre deux tableaux côte à côte ? --------------------------------------------------- cf. question 8.3. # 7.17 # Comment définir un séparateur de colonne ? --------------------------------------------------- @{symbole} entre deux descripteurs de colonnes permet de définir "symbole" comme séparateur de colonnes. Cela remplace |. Exemple : \begin{tabular}{|l @{\textbf{ est }} l|} \hline Le lion & féroce. \\ Le chien & fidèle. \\ \hline \end{tabular} %%%% fin exemple %%%% # 7.18 # Comment obtenir des lignes partielles dans un tableau ? ---------------------------------------------------------------- La commande \cline{ColonneDebut-ColonneFin} est faite pour ça. Exemple : \begin{center} \begin{tabular}{|c|c|c||c|c|c|c|c|c|c||c|} \hline \hline a & b & c & d & e & f & g & h & i & j & k \\ \cline{1-4} \cline{6-6} \cline{8-9} 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 \\ \hline \end{tabular} \end{center} %%%% fin exemple %%%% # 7.19 # Comment éviter que du texte de grande taille n'atteigne le cadre des cellules ? ---------------------------------------------------------------------------------------- * Il faut pour cela utiliser la commande \strut qui simule un objet vertical invisible, après le changement de fonte. Exemple : \begin{tabular}{|l|} \hline {\large HELLO} dfg \\ \hline \end{tabular} \begin{tabular}{|l|} \hline {\large\strut HELLO} dfg \\ \hline \end{tabular} %%%% fin exemple %%%% * Il existe l'équivalent mathématique : \mathstrut. * On peut également agrandir la hauteur des lignes avec la commande \arraystretch : \renewcommand{\arraystretch}{1.5} # 7.20 # Comment fixer la largeur d'un tableau ? ------------------------------------------------ * Le package 'tabularx' disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/packages/tools/ permet de définir une largeur de tableau. * Le package 'easytable' disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/easy/ permet facilement de fixer des largeur de colonnes ou de lignes. # 7.21 # Comment tracer des traits discontinus ? ------------------------------------------------ Il faut utiliser les packages 'hvdashln' et 'array'. Exemple : dans le préambule du document : \usepackage{hvdashln,array} \setlength{\hdashlinewidth}{.5pt} \setlength{\hdashlinegap}{2pt} dans le texte : \[ \left[ \begin{array}{ccc@{}>{\vdashline}c} a_1 & b_1 & c_1 & d_1 \\ a_2 & b_2 & c_2 & d_2 \\ a_3 & b_3 & c_3 & d_3 \\ a_4 & b_4 & c_4 & d_4 \end{array} \right] \] %%%% fin exemple %%%% # 7.22 # Comment fixer la taille et justifier une colonne ? ----------------------------------------------------------- Le problème qui se pose lorsqu'on utilise : \begin{tabular}{|>{\raggedright}p{0.33\textwidth}<{}| >{\raggedleft}p{0.66\textwidth}<{}|} A& \\ B&C \\ \end{tabular} vient du fait que \\ est redéfini par tabular et les commandes ragged. On ne peut donc plus utiliser \\ dans un texte. Il existe différentes solutions pour pallier ce problème : * on peut corriger ce problème en incluant les lignes suivantes dans le préambule du document : \makeatletter \newtoks\fintableau \let\fintableau\@arraycr \makeatother * avec le package 'array', il suffit d'utiliser la commande \tabularnewline[] à la place de la commande \\. Exemple : \begin{tabular}{|r|r|>{\raggedleft}m{190pt}|} \hline col1 & col 2 & col3 \tabularnewline une & deux & trois \\ quatre \tabularnewline \hline \end{tabular} %%%% fin exemple %%%% * on peut également inclure la nouvelle commande suivante dans le préambule du document : \newcommand\PreserveBackSlash[1]{\let\temp=\\#1\let\\=\temp} puis en utilisant : \begin{tabular}{|r|r|>{\PreserveBackSlash\raggedleft}m{190pt}|} # 7.23 # Comment faire une liste de tableaux ? ---------------------------------------------- Il suffit d'inclure la commande \listoftables à l'endroit où l'on veut inclure cette liste. Sachant que cette liste fait référence aux pages où apparaissent les tableaux, il faut enchaîner au moins deux compilations LaTeX pour que toutes les références soient exactes. ================================================================ [8] GESTION DES FIGURES ================================================================ # 8.1 # Comment inclure une figure ? ------------------------------------ Remarque : A. K. Goel a écrit un long document concernant les problèmes de gestion de figures et d'images dans LaTeX. Ce dernier est disponible par ftp anonyme sur ftp://math.uwaterloo.ca/pub/figsInLatex.ps.Z ou sur ftp://ftp.fdn.org/pub/CTAN/info/figsinltx.ps De même, K. Reckdahl a écrit "Using EPS Graphics in LaTeX2e Documents". Ce document est disponible sur ftp://ftp.fdn.org/pub/CTAN/info/epslatex.ps. * Sous LaTeX2e, il faut utiliser l'un des packages : 'graphics' ou 'graphicx' et la commande \includegraphics. Cette commande accepte des options telles que dvips ou oztex (cf. documentation pour plus de détails). Le package 'graphicx' a pour majeure différence avec 'graphics' d'en simplifier les commandes. Ces packages sont disponibles sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/packages/graphics/. Pour plus de détails, consulter http://www.loria.fr/services/tex/packages.html. Exemple : \begin{figure}[htbp] \begin{center} \includegraphics{images/fig1.ps} \end{center} \caption{\footnotesize blah blah blah} \end{figure} %%%% fin exemple %%%% La commande \includegraphics du package 'graphicx' peut prendre comme paramètres angle, width, height, scale, clip et draft. Exemple : \includegraphics[width=\linewidth, draft=true]{figure.eps} %%%% fin exemple %%%% * Sous LaTeX2.09, pour pouvoir appeler un fichier postscript, il suffit de mettre l'option epsf dans le \documentstyle. La figure peut ensuite être appelée par la commande \epsfbox{nom-figure.(e)ps} Une jolie façon d'inclure une figure dans un source LaTeX2.09 est d'utiliser la macro : \begin{figure}[htbp] \centerline{\epsfxsize=10cm \epsfbox{nom-figure.format}} \caption{. \label{fig-}} \end{figure} * Il y a aussi le package 'epsfig' disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/packages/graphics/ (LaTeX2.09 mais utilisable avec LaTeX2e). Exemple : \begin{figure}[p] \centerline{\epsfig{file=nom_figure.eps, width=largeur, height=hauteur}} \caption{Titre.} \label{nom_label} \end{figure} %%%% fin exemple %%%% * Une figure au format tex picture, tex picture + epic, tex picture + eepic, ... peut être appelée directement par une commande \input. En outre, si vous utilisez un format epic ou eepic, il faut penser à rajouter 'epic' ou 'eepic' à la ligne documentstyle ou d'inclure les packages 'epic' ou 'eepic'. # 8.2 # Comment nommer une figure ? ----------------------------------- C'est la commande \caption qui permet de faire cela. Par défaut le titre de la figure apparaîtra en dessous. Cf exemples ci-dessus. Pour que le titre apparaisse au-dessus, il faut redéfinir les longueurs suivantes. Exemple : \setlength\abovecaptionskip{0pt} \setlength\belowcaptionskip{10pt} puis appeler : \begin{figure} \caption{... ... ...} \includegraphics{dessin.eps} \end{figure} %%%% fin exemple %%%% # 8.3 # Comment placer des figures côte à côte ? ------------------------------------------------ * Sous LaTeX2e, il faut utiliser le package 'graphics' ou 'graphicx' disponibles sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/packages/graphics/. Exemples : \begin{figure} \begin{minipage}[c]{.46\linewidth} \includegraphics{figure1.format} \end{minipage} \hfill \begin{minipage}[c]{.46\linewidth} \includegraphics{figure2.format} \end{minipage} \end{figure} \begin{figure} \includegraphics[width=5cm]{fig1.eps}\hfill \includegraphics[width=5cm]{fig2.eps} \caption{Titre commun}\label{fig:somefiglabel} \end{figure} %%%% fin exemple %%%% * Une autre solution consiste à mettre chaque figure dans une case d'un tableau. Exemple (avec le package graphics ou graphicx) : \begin{tabular}{cc} \includegraphics{figure1.eps} & \includegraphics{figure2.eps} \\ \end{tabular} %%%% fin exemple %%%% * LaTeX2.09. Pour mettre des figures côte à côte, il suffit d'encapsuler leur appel dans des minipages. Exemples : + avec le package 'epsf' \begin{minipage}[t]{.46\linewidth} \center\epsfxsize= 5cm \epsfbox{fig1.eps} \end{minipage} % ne pas sauter de ligne \begin{minipage}[t]{.46\linewidth} \center\epsfxsize= 5cm \epsfbox{fig2.eps} \end{minipage} ou si l'on veut attacher des titres aux figures : + avec le package 'epsfig' \begin{figure} \begin{minipage}[b]{.46\linewidth} \centering\epsfig{figure=fig1.ps,width=\linewidth} \caption{premiere figure \label{fig1}} \end{minipage} \hfill \begin{minipage}[b]{.46\linewidth} \centering\epsfig{figure=fig2.ps,width=\linewidth} \caption{deuxieme figure \label{fig2}} \end{minipage} \end{figure} %%%% fin exemple %%%% * Si l'on veut un seul titre pour plusieurs figures voir le package 'subfigure' disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/subfigure/. Exemple : \begin{figure}[ht] \begin{center} \subfigure[I]{\epsfig{figure=st1.ps,width=6.58cm}}\quad \subfigure[II]{\epsfig{figure=st2.ps,width=5.0cm}}\\ \subfigure[III]{\epsfig{figure=st3.ps,width=5.0cm}} \end{center} \caption{Impermeable surface treatments} \label{fig:inf} \end{figure} %%%% fin exemple %%%% * Une autre possibilité pour obtenir un titre par figure est d'utiliser le package 'epslatex' disponible sur ftp://ftp.fdn.org/pub/CTAN/info/. # 8.4 # Comment modifier le nombre de figures par page ? -------------------------------------------------------- En fait, on ne peut agir que globalement sur le nombre de flottants autorisé par page. Il n'y a pas de sélection figure/tables/.... Il arrive fréquemment que lorsqu'un flottant dépasse 60% d'une page, LaTeX préfère changer de page plutôt que d'utiliser les 40% de l'espace restant. La commande \floatpagefraction permet de redéfinir l'espace minimum que peuvent occuper des flottants. Cela permet de limiter le "blanc" sur une page contenant des flottants. Exemple : \renewcommand{\floatpagefraction}{.9} utilisée avec la commande : \renewcommand{\textfraction}{.1} permet de dire que le texte peut n'occuper que 10% d'une page, et donc que des flottants peuvent occuper les 90% restant. %%%% fin exemple %%%% Il y a d'autres paramètres intéressants : \setcounter{totalnumber}{4} qui détermine le nombre de flottants autorisés par page, \renewcommand{\topfraction}{.8} et \renewcommand{\bottomfraction}{.8} qui indiquent la fraction maximum du haut ou du bas de la page que peuvent occuper des flottants. Remarque : Il est recommandé de ne jamais mettre 100% comme paramètre. # 8.5 # Comment superposer du texte sur des figures ? ----------------------------------------------------- * PSFrag (disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/psfrag/) donne cette possibilité. La solution consiste en fait à : 1+ faire le graphique .ps AVEC des textes et légendes MAIS approximatifs 2+ utiliser PSfrag pour qu'il remplace les textes approximatifs par des textes << LaTeX >> (3-) l'écriture << par dessus >> (le remplacement en fait) est fait par PSfrag. Pour plus de détails, consulter le document "Using EPS Graphics in LaTeX2e Documents" disponible sur ftp://ftp.fdn.org/pub/CTAN/info/epslatex.ps. * On peut également générer une courbe dans un fichier .eps, qui peux ensuite être inclu dans un environnement "picture", dans lequel il est ensuite possible d'ajouter du texte avec des \put. Cela demande pas mal de mises au point. Exemple : \setlength\unitlength{1cm} \begin{picture}(10,10) \put(0,0){\includegraphics{mondessin.eps}} \put(10,10){Mon commentaire \LaTeX{} avec des $maths$} \end{picture} %%%% fin exemple %%%% Cette technique permet de conserver la puissance de LaTeX et d'avoir une typographie homogène mais elle a l'inconvenient d'être assez lourde. * PSTricks est un ensemble de macros TeX, disponible sur ftp://ftp.fdn.org/pub/CTAN/graphics/pstricks/, qui permet également de faire cela. Il nécessite un gros investissement (il y a une centaine de pages de documentation). Cependant, si l'on se limite à des commandes simples (comme par exemple écrire un programme en C qui trace le dessin, avec simplement des points, des droites, et un peu de texte), la liste sommaire des commandes suffit (6 pages). * Xfig offre une autre solution. Après avoir inclu un fichier postscript généré par un autre programme, on peut rajouter du texte ou des commandes LaTeX dessus. xfig -sp Sauvegarder comme "combined PS/LaTeX" * Metapost est un langage graphique très proche de Metafont, mais qui génère du postscript. Il permet de produire des figures avec du texte et est bien interfacé avec TeX (Knuth l'utilise). Metapost est integré dans web2c 7.0. Metapost a déjà été porté sous MS-DOS et Mac (CMacTeX). Pour plus d'informations, vous pouvez consulter la page de D. Roegel : http://www.loria.fr/~roegel/metapost.html. * pstoedit permet également de visualiser des fichiers postscript (sans bitmaps) et d'ajouter du texte ou des figures par dessus. # 8.6 # Comment réaliser des captures d'écran ? ----------------------------------------------- * Un outil très utile pour effectuer des captures d'écran sous Unix est xv. xv est un éditeur d'images écrit par J. Bradley disponible sous unix. xv est capable de gérer différents formats d'image (encodage PS, GIF, JPEG, TIFF,...). Il permet de visualiser des images et aussi de réaliser des captures d'écran, soit partielles définies à la souris, soit par fenêtre X Window. Il suffit ensuite de sauvegarder la saisie d'écran de xv en format postscript et de l'appeler sous LaTeX. xv est accessible par ftp sur ftp://ftp.lip6.fr/. * Sur PC il y a pcxdump disponible sur http://micros.hensa.ac.uk/. Le package 'verbtext', disponible sur CTAN, permet ensuite d'appeler la saisie réalisée. * De même, le package 'scrdumps' et l'utilitaire scr2tex.exe sous DOS permettent d'inclure des saisies d'écran dans un document LaTeX. # 8.7 # Comment tracer une courbe ? ----------------------------------- * Xgraphic est un outil de tracé de courbes simple d'utilisation (les options sont accessibles en interactif) mais limité aux courbes 2D. Il est disponible avec une doc française à http://blanche.polytechnique.fr/ et ftp://barbes.polytechnique.fr/pub/Xgraphic/. * xmgr marche également très bien. * GNUplot est disponible sous Unix, sous Dos, sous Windows et sous macOS (http://www.ee.gatech.edu/users/schooley/gnuplot.html). Il possède une sortie LaTeX (eepic). Il permet de tracer des courbes (2D et 3D) à partir de valeurs ou d'une fonction. Les formats de sortie sont LaTeX ou postscript. En outre, sous Unix, il est possible de récupérer des fichiers GNUplot exportés par set terminal fig set output "graph.fig" puis de les modifier. La FAQ GNUplot est disponible à http://www.uni-karlsruhe.de/~ig25/gnuplot-faq/. * Xy-pic compatible plain TeX, LaTeX2.09 et LaTeX2e permet de tracer des courbes, de réaliser des diagrammes commutatifs, des automates, et plein d'autres choses. Pour plus de renseignements, consulter : ftp://ftp.mpce.mq.edu.au/pub/maths/TeX/ ou http://www.mpce.mq.edu.au/~ross/Xy-pic.html ou http://www.brics.dk/~krisrose/Xy-pic.html Le package 'xypic' est disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/generic/diagrams/xypic/. * Sur PC grapher et surfer permettent également de tracer des courbes et des surfaces (ils sont indépendants de LaTeX, mais une saisie d'écran est toujours possible). * Le package 'curves' disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/curves/ permet de définir des courbes dans l'environnement picture. * Mathematica est également utilisable pour tracer des courbes 2D et 3D. # 8.8 # Comment est géré le positionnement des figures ? -------------------------------------------------------- Comme mentionné précédemment (8.1), il existe différentes options de placement des figures. Les plus classiques sont \begin{figure}[htbp] pour laisser à LaTeX la possibilité de placer les figures suivant ses critères de beauté. (h) impose si possible le placement de la figure à l'appel de la macro ci-dessus. Sinon la figure sera placée en haut de la page suivante (t) ou en bas (b), voire sur une page seule (p). En revanche, pour forcer (dans la mesure du possible) LaTeX à placer une figure là où elle a été appelée, il faut utiliser le package 'float', de A. Lingnau, (\usepackage{float}) et l'option H (\begin{figure}[H]). Ce package permet de définir un tel placement par défaut via la commande \floatplacement{figure}{H}. Il est disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/float/. Voir la question 6.34 pour un exemple d'utilisation de ce package. De même l'utilisation du caractère ! devant une option de placement permet de forcer LaTeX2e à effectuer son placement au plus tôt (suivant l'option choisie). Remarque (D.Barbier) : si un flottant ne peut pas être placé avec les paramètres indiqués , celui-ci et tous les flottants qui viennent après seront mis à la fin du chapitre (en fait, ils seront insérés grâce à la commande \clearpage). Le package 'placeins' de D. Arsenau permet de mettre des garde-fous dans le texte. Par exemple, lorsqu'on place une figure en dur avec une commande du style : %%%% debut macro %%%% \makeatletter \newenvironment{figureH}{\begin{center} \newcommand{\@captype}{figure}}{\end{center}} \makeatother %%%% fin macro %%%% l'utilisation de \FloatBarrier juste avant, permet de vider le buffer de flottants actuellement stockés. # 8.9 # Comment placer une légende à côté d'une figure ? -------------------------------------------------------- * Pour placer une légende à côté d'une figure, il faut utiliser l'environnement minipage. Exemple (extrait du cahier GUTenberg 22 pour l'article sur esperluette) : + mettre dans le préambule : %%%% debut macro %%%% \newlength\jataille \newcommand{\figgauche}[3]% {\jataille=\textwidth\advance\jataille by -#1 \advance\jataille by -.5cm \begin{minipage}[c]{#1} \includegraphics[width=#1]{#2} \end{minipage}\hfill \begin{minipage}[c]{\jataille} \footnotesize #3 \normalsize \end{minipage}} %%%% fin macro %%%% + puis utiliser : \figgauche{5cm}{totor.eps}{Titre.} * On peut également utiliser des parbox. Exemple : \begin{figure} \parbox{7cm}{...figure}\parbox{7cm}{\caption{---}} \end{figure} %%%% fin exemple %%%% # 8.10 # Comment insérer des figures dans multicol ? ---------------------------------------------------- On ne peut insérer que des figures de la largeur de la page, et pas de la lageur d'une colonne, donc des figure* (resp. table*). Un flottant n'apparaîtra pas sur la page où il est defini, mais, au mieux, sur la page d'après. Le positionnement [h] n'a donc pas de sens. Exemple (avec le package 'graphicx') : \begin{figure*} \includegraphics[width=3cm]{totor.eps} \end{figure*} %%%% fin exemple %%%% Remarque : dans ce cas la gestion de \caption semble ne pas être correcte. # 8.11 # Comment faire apparaître toutes les figures en fin de document ? ------------------------------------------------------------------------- Le package 'endfloat', disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/endfloat/, permet de reporter toutes les figures en fin de document. ATTENTION : les classes AMS ne définissent pas les environnements figure* et table*. En outre, le package 'endfloat' a le mauvais goût de supposer qu'ils sont définis. Un remède est de faire : \documentclass[a4paper,11pt]{amsart} \newenvironment{figure*}{\figure}{\endfigure} \usepackage{endfloat} # 8.12 # Comment insérer des images Mathematica ? ------------------------------------------------- * Sous Unix ou sous DOS, il faut, à partir de Mathematica, demander : Display["machin",truc] qui sauve l'image truc dans le fichier machin dans un Postscript embryonnaire, puis !psfix -epsf machin > machin.eps et on a un fichier EPS comme il faut. * Sous Windows, après avoir sélectionné l'image désirée, il faut, dans le menu "Fichier" de Mathematica, "Exporter" vers un format qui peut être .EPS (PostScript Encapsulé). L'appel de ce fichier .eps sous LaTeX se fait alors de manière classique (cf. paragraphe 8.1). Il est également possible d'extraire par copier/coller l'image (.WMF) et de l'envoyer vers Ghostscript pour Windows, et là-dedans de l'enregistrer dans un fichier PostScript. L'avantage de cette solution est qu'elle peut permettre de retravailler l'image (avant collage dans GS au moyen de CorelDraw, par exemple). A noter que Y&Y TeX system supporte les images WMF (Windows MetaFile) aussi bien que les TIFF ou EPSF. Mathematica est l'un des seuls logiciels pour Windows qui utilise un format WMF plutôt que TIFF. * Dernière solution (multi-système) : se servir du notebook intitulé "GnuDisplay.m"(disponible sur MathSource chez Wolfram). Celui-ci permet d'exporter une image Mathematica en image GNUplot. Dans GNUplot, on peut alors exporter une image de deux façons : + vers un fichier ".mf" qui contient l'image sous forme de fonte. Avantage : on utilise MetaFont pour générer la fonte qui contiendra l'image et l'insérer dans le texte, ce qui permet sa prévisualisation immédiate par "dviscr", sans passer par "dvips" puis GhostScript ou GhostView ; + vers un fichier au format LaTeX eepic, que l'on insère facilement par la suite (commande \special). # 8.13 # Comment modifier la taille d'une bounding box ? -------------------------------------------------------- En format eps (encapsulated postscript), la `bounding box` permet de préciser la taille d'une image. La syntaxe est la suivante : %%BoundingBox: 0 0 507 257 Les coordonnées correspondent dans l'ordre : - coordonnée horizontale du point en bas à gauche de la figure; - coordonnée verticale du point en bas à gauche; - coordonnée horizontale du point en haut à droite; - coordonnée verticale du point en haut à droite. Les coordonnées verticales étant prises à partir du bas, et celles horizontales à partir de la gauche. De plus ces coordonnées sont exprimées en points PostScript, c'est-à-dire en soixante-douzième de pouce, i.e.: 1 pt PS = 1/72 pouce = 2.54/72 cm. Malheureusement, il arrive parfois que la taille de la bounding box soit supérieure à celle de la taille réelle du dessin qu'elle contient (il n'y a pas de mise à l'échelle). Le package 'boxedepsf', de L. Siebenmann, offre les commandes \Trim qui permettent de résoudre le probleme. A. J. Carr a adapté ce package à LaTeX2e. Son package s'appelle 'boxedeps'. Ce dernier est disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/generic/boxed/ ou sur ftp://matups.math.u-psud.fr/pub/TeX/Graphics.dir/ArtIntegration.dir/boxedeps.dir/. Exemple : \TrimTop{15pct}\BoxedEPSF{toto} avec pct = pourcentage de la hauteur. %%%% fin exemple %%%% # 8.14 # Comment obtenir une figure avec un titre non numéroté ? ---------------------------------------------------------------- Il faut utiliser la commande \unnumberedcaption dont voici la définition : %%%% debut macro %%%% \makeatletter % <=== in a .sty file delete this \newcommand{\unnumberedcaption}% {\@dblarg{\@unnumberedcaption\@captype}} \newcommand{\@unnumberedcaption}{}% undefined yet \long\def\@unnumberedcaption#1[#2]#3{\par \addcontentsline{\csname ext@#1\endcsname}{#1}{% % orig: \protect\numberline{\csname the#1\endcsname}% %{\ignorespaces #2} \protect\numberline{}{\ignorespaces #2}% }% \begingroup \@parboxrestore \normalsize % orig: \@makecaption{\csname fnum@#1\endcsname}% %{\ignorespaces #3}\par \@makeunnumberedcaption{\ignorespaces #3}\par \endgroup} % redefine \@makeunnumberedcaption (like \@makecaption) % for your own layout \newcommand{\@makeunnumberedcaption}[1]{% \vskip\abovecaptionskip \sbox\@tempboxa{#1}% \ifdim \wd\@tempboxa >\hsize #1\par \else \global \@minipagefalse \hbox to\hsize{\hfil\box\@tempboxa\hfil}% \fi \vskip\belowcaptionskip} % for LaTeX 2.09 compatibility, define \above/belowcaptionskip: \@ifundefined{abovecaptionskip}{% \newlength{\abovecaptionskip}% \setlength{\abovecaptionskip}{10pt}% }{} \@ifundefined{belowcaptionskip}{% \newlength{\belowcaptionskip}% \setlength{\belowcaptionskip}{0pt}% }{} \makeatother % <=== in a .sty file delete this %%%% fin macro %%%% Remarque : le package 'french' V3,49 inclut cette macro. # 8.15 # Comment redéfinir le style de caption ? ------------------------------------------------ * Par exemple pour changer la fonte de Figure : en gras, il faut utiliser : %%%% debut macro %%%% \makeatletter \renewcommand{\fnum@figure}{\small\textbf{\figurename~\thefigure}} \makeatother %%%% fin macro %%%% * Pour agir sur les espaces horizontaux de part et d'autre de la légende d'un flottant, on peut utiliser caption2.sty, et définir la longueur \captionmargin qui sera insérée à gauche et à droite de la légende. # 8.16 # Comment fondre une image dans du texte ? ------------------------------------------------- * Le package 'floatfig', de T. Kneser, disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/other/floatfig/, permet d'entourer une figure de texte de manière très efficace grâce à l'environnement floatingfigure. Ce package a été conçu pour LaTeX2.09, pour des documents sans colonnes. Exemple : \begin{floatingfigure}[l]{4cm} \includegraphics[width=4cm]{dessin} \caption{Titre} \end{floatingfigure} %%%% fin exemple %%%% Remarque : le [l] du \begin{float...} sert à mettre la figure à gauche. [r] permet de l'avoir à droite, [p] la met à gauche sur une page de gauche et à droite sur une page de droite. * Le package 'floatflt', de T. Kneser et M. Dahlgren, disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/other/floatflt/, a été écrit pour LaTeX2e. Il étend les possibilités de floatfig par de nombreuses options et est utilisable pour les figures et les tableaux. Exemple : \begin{floatingfigure}[options]{width of figure} figure contents \end{floatingfigure} %%%% fin exemple %%%% * Le package 'picinpar' pour LaTeX2.09 est disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex209/contrib/picinpar/ et sur ftp://ftp.fdn.org/pub/CTAN/systems/msdos/4alltex/disk04/. Il permet de définir un nombre de lignes avant lequel la figure pourra être insérée dans le texte. La taille de la figure dépend de son contenu, sa position est variable, et peut s'étaler sur plusieurs paragraphes. ATTENTION : Ce package n'est pas compatible avec amstex. Exemple : \begin{window}[#lines before, l|r|c, picture contents, caption} ... paragraph text ... \end{window} %%%% fin exemple %%%% * Mieux que le précédent, le package 'picins' disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex209/contrib/picins/ permet d'inclure des figures dans des paragraphes. Exemple : \parpic(width,height)(x-off,y-off)[Options][Position]{Picture} Paragraph text.... %%%% fin exemple %%%% * Le package 'wrapfig' permet de définir la hauteur de la figure, celle-ci ci peut apparaître à droite ou à gauche dans le texte ou encore dans une marge. Ce package n'est pas compatible avec les environnements de liste. Exemple : \begin{wrapfigure}[height in lines]{l|r}[overhang]{width} {figure, caption etc.} \end{wrapfigure} %%%% fin exemple %%%% * Le package 'flow' met obligatoirement la figure dans une boîte avec un cadre et ne permet pas de définir de caption. Exemple : \flow[L|R]{paragraph text}{figure box} %%%% fin exemple %%%% * Le package 'window' de E. Schaluck, permet également d'intégrer une figure dans un paragraphe mais il n'est plus maintenu. Il a été écrit pour LaTeX2.09 mais il est compatible LaTeX2e. Exemple : \windowbox[toplines][inwindow: contents][ratio: l r] ... paragraph text ... \par %%%% fin exemple %%%% Voici les résultats d'un test comparatif effectué par P. van Oostrum : A B C D E F G H I J K picinipar |+|+|+| |+|+| |+| | | | wrapfig |+|+|+|+| | |+|H|-|+| | flow |-|-|+| | | | |+| | | | floatfig |+|-|-|+| | |+| | |-| | floatflt |+|+|+|+| | |+| |-| |+| window |-|-|+| |+|+| |+| | | | picins |+|-|+|+| | | |+|+| | | avec : A: figure captions/counting/list of figures B: table captions/counting/list of tables C: Left/right possible (+ = both) D: Alternating left/right for twosided docs E: can be placed in the middle of text with twosided flowing F: possible to start after the beginning of paragraph G: can (more or less) float in the text H: auto detection of size of figure (H=height only) I: works with list environments J: works with twocolumn K: works with multicol Les meilleurs packages semblent être : picins, floatflt et wrapfig. * Voici également une macro de C. Mercat : %%%% debut macro %%%% \def\textdess#1#2 % #1={blabla} #2=\dessin{monbodessin} {\hbox{ \setbox2=\hbox{#2} %c'est le dessin \count2=\wd2 %c'est la largeur du dessin. %\showthe\count2 \multiply\count2 by-1 \advance\count2 by\hsize %count2 vaut le reste de la page \advance\count2 by-2000000 %c'est pour la marge droite \count1=\count2 \advance\count2 by-2000000 %c'est pour la marge du milieu \setbox1=\hbox to\count1sp{ %c'est le texte \vbox{\hsize=\count2sp %c'est la largeur #1 }\hfill} \count1=\ht1 %c'est la hauteur \advance\count1 \dp1 \count2=\ht2 \advance\count0 \dp2 \ifnum\count2<\count1 \count2=\count1 \fi %c'est la + grde des 2 hauteurs \vtop to \count2sp {\vfill \box1 \vfill} \vtop to \count2sp {\vfill \box2 \vfill} }} %%%% fin macro %%%% # 8.17 # Comment réaliser des diagrammes en bâtons ? ---------------------------------------------------- Il existe le package 'bar', disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex209/contrib/misc/, qui offre un environnement barenv. # 8.18 # Comment faire un organigramme ? ---------------------------------------- Il existe plusieurs contributions (toutes assez anciennes), disponibles sur CTAN, dédiées spécifiquement à la réalisation de différents types d'organigrammes : * ftp://ftp.fdn.org/pub/CTAN/macros/latex209/contrib/nassflow/ * ftp://ftp.fdn.org/pub/CTAN/macros/latex209/contrib/rail/ * ftp://ftp.fdn.org/pub/CTAN/support/flow/ A priori, le dernier est le plus évolué et est basé sur un pré-processeur écrit en langage C, ce qui fait qu'il offre une interface souple et puissante. # 8.19 # Comment centrer une figure très large ? ------------------------------------------------ Le package 'bigcenter' ci-dessous permet de centrer des figures très larges sans message d'erreur de type overful. %%%% debut macro %%%% %%% ----------debut de bigcenter.sty-------------- %%% nouvel environnement bigcenter %%% pour centrer sur toute la page (sans overfull) \newskip\@bigflushglue \@bigflushglue = -100pt plus 1fil \def\bigcenter{\trivlist \bigcentering\item\relax} \def\bigcentering{\let\\\@centercr\rightskip\@bigflushglue% \leftskip\@bigflushglue \parindent\z@\parfillskip\z@skip} \def\endbigcenter{\endtrivlist} %%% ----------fin de bigcenter.sty-------------- %%%% fin macro %%%% # 8.20 # Comment passer de ps à eps ? ------------------------------------- * S. Heiden : Pour faire ce travail de transformation il faut interpréter TOUT le code PostScript d'un fichier PS (être une imprimante PS en gros), identifier la boîte englobante de ce qui est composé sur UNE page et insérer vers le début ou la fin du fichier PS original la fameuse ligne de la forme : %%BoundingBox: 72 246 522 597 qui renseigne les macros graphics, donc dvips, donc l'imprimante sur cette fenêtre de clipping. Syntaxe: %%BoundingBox: llx lly urx ury Qui sont deux points (lower left)(x,y) et (upper right)(x,y) définissant la fenêtre. Si on n'est pas, soi-meme, une imprimante PostScript on peut faire interpréter le code PS original par une imprimante qui produira une page. On peut alors mesurer la boîte englobante et la position de la figure dans la page (la portion de toner qui nous intéresse) et composer la ligne %%BoundingBox en s'exprimant en points d'1/72 de pouces et sachant que le système de coordonnées est : - en bas à gauche de la page ; - vers la droite et vers le haut ; - légèrement décalé vers le centre. En effet, une imprimante n'imprime jamais sur le bord réel d'une page. Il y a une fenêtre de clipping systématique matérielle plus petite que la page A4 et centrée. L'origine du système correspond au coin de la feuille ; le décalage du système de coordonnées arrive surtout sur les coordonnées Y qui dépendent de l'avancement du papier contrairement aux X, calés par les bords (qui n'a pas connu de vieille imprimante LaserWriter pouvant louper de 5 cm le bord inférieur d'une feuille A4 ?-). Si on fait calculer et imprimer la bbox par l'imprimante (par le code de bbfig par ex.), ce problème ne se pose plus. Sans parler de ps2epsi qui est la meilleure solution mais alors il faut distinguer l'environnement de chaque système d'exploitation (Unix, Mac, PC) et les outils correspondants. Remarque : Si on a plus d'une figure, que l'on s'intéresse à la forêt amazonnienne ou que l'on est un peu riche, on peut acheter Adobe Distiller ou autre pour faire ce genre de travail. Par ailleurs Ghostview peut jouer le rôle de l'imprimante si l'écran est correctement calibré (à vérifier avec xdpyinfo et une règle...). En gros il faut un outil qui sait composer du PostScript. Après, tout dépend de ce qu'il propose. Suggestions : - utiliser l'option "draft" pour que TeX visualise les boîtes englobantes des figures (calculées à partir de %%BoundingBox). - générer du EPSF natif à partir de l'outil de dessin plutôt que de passer par PS->EPSF. * Le document "Using EPS graphics in LaTeX2e documents" de K. Reckdahl répond également à cette question cf section 3.1 Converting PS files to EPS. * ps2epsi, qui est livré avec GhostScript permet de convertir du postscript en postscript encapsulé. # 8.21 # Comment changer l'orientation d'une figure ? ----------------------------------------------------- * Le package 'rotfloat' disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/rotfloat/ permet de gérer la rotation des flottants. * On peut utiliser la commande \rotatebox du package 'graphics' de D. Carlisle. Ce package est disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/packages/graphics/. Exemple : \rotatebox{90}{ \includegraphics{dessin1.eps} } %%%% fin exemple %%%% * La commande \includegraphics du package 'graphicx' peut prendre comme paramètre un angle de rotation. Exemple : \begin{figure} \centering \includegraphics[angle=90,width=\textwidth]{dessin.eps} \end{figure} %%%% fin exemple %%%% # 8.22 # Comment gérer des sous-figures sur plusieurs pages ? ------------------------------------------------------------- Un seul environnement figure ne peut pas s'étendre sur plusieurs pages, il faut donc gérer le problème à la main en instanciant les numéros "à la main". Exemple : \documentclass{article} \usepackage{graphicx,subfigure} \begin{document} \begin{figure} \centering \subfigure[First Part]{% \label{fig:graphics:a}% label for subfigure \includegraphics[width=\textwidth]{box.eps}}% \caption{Large Graphics}% \label{fig:graphics}% label for figure \end{figure} \addtocounter{figure}{-1} \begin{figure} \addtocounter{subfigure}{1} \centering \subfigure[Second Part]{% \label{fig:graphics:b}% label for subfigure \includegraphics[width=\textwidth]{box.eps}}% \caption{Large Graphics (con't)}% \end{figure} \end{document} %%%% fin exemple %%%% # 8.23 # Comment générer une liste des figures d'un document ? -------------------------------------------------------------- Il existe pour cela la commande \listoffigures. Elle collecte tous les numéros de figures ainsi que leur titre et le numéro de la page où elles apparaissent. Remarque : une bonne mise à jour de cette liste nécessite au moins deux compilations successives. # 8.24 # Comment faire une figure sous LaTeX ? ---------------------------------------------- * On distingue deux techniques majeures : + soit on utilise un logiciel de dessin et on inclut une figure sous un format défini (en général PostScript ou Encapsulated PostScript). Pour une liste de logiciels, voir la question 25.1. + on utilise les commandes LaTeX disponibles. L'environnement picture permet ainsi de composer des figures comprenant du texte, des segments de droites, des cercles et des figures géométriques. Les commandes LaTeX les plus courantes pour le dessin sont : + \put(x, y){objet} + multiput + \line(x,y){longueur} + \vector + \shortstack + \circle + \circle* Exemple : \begin{picture}(largeur, hauteur) \put(0,0){\line(1,0){3}} \put(0,3){\line(1,1){4}} \end{picture} %%%% fin exemple %%%% * Le package epic définit un ensemble de commandes plus complet que l'ensemble par défaut de LaTeX. Il s'agit des commandes : \multiputlist, \matrixput, \grid, \dottedline, \dashline, \drawline, \jput, \picsquare et \putfile, ainsi que des environnements : dottedjoin, dashjoin et drawjoin. Exemple : \matrixput(0,0)(10,0){6}(0,10){3}{\circle{4}} \matrixput(2,0)(10,0){5}(0,10){3}{\line(1,0){6}} \matrixput(0,2)(10,0){6}(0,10){2}{\line(0,1){6}} %%%% fin exemple %%%% * PSTricks de T. Van Zandt propose un ensemble très complet de macros TeX qui permettent de jouer avec des dessins (dessin, couleur, rotation, superposition, ...). L'ensemble PSTricks est composé de plusieurs packages : pstricks, pst-plot, multido, pst-node, pst-coil, gradient, colortab, textpath, charpath et pst2eps. Une documentation d'une centaine de page est également fournie et nécessaire. ATTENTION : PSTricks fait appel à des macros postscript qui ne sont donc pas toujours visibles dans les previewer de .dvi. Exemple : \psellipse(.5,0)(1.5,1) \parametricplot[plotstyle=dots,plotpoints=13]% {-6}{6}{1.2 t exp 1.2 t neg exp} \psshadowbox{\textbf Grest!!} \pszigzag[coilarm=.5,linearc=.1{<->}(4,0) %%%% fin exemple %%%% # 8.25 # Comment mettre un commentaire à côté d'une figure ? ------------------------------------------------------------ Pour mettre un commentaire à côté d'une figure et pour que le texte soit centré verticalement par rapport à la figure, il faut utiliser des \parbox. Exemple : \begin{tabular}{lc} $M=0{,}01$ & \parbox[c]{12cm}{\includegraphics[width=12cm]{fig6a.eps}} \\ $M=0{,}1$ & \parbox[c]{12cm}{\includegraphics[width=12cm]{fig6b.eps}} % etc... \end{tabular} %%%% fin exemple %%%% ================================================================ [9] INCLUSION DE FICHIERS ================================================================ # 9.1 # Comment inclure des fichiers en mode verbatim ? ------------------------------------------------------- * Le package 'verbatim', de R. Schopf, permet via la commande \verbatiminput, qui prend en argument un nom de fichier, d'inclure un fichier en mode verbatim. Ce package est disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/distribs/ ou ftp://ftp.fdn.org/pub/CTAN/macros/latex/packages/tools/. * L'environnement alltt du package du même nom (package dû à J. Braams) permet la même prouesse tout en gardant active l'interprétation des commandes LaTeX dont le nom commence par le caractère \ (le "backslash" reste actif). Il est disponible dans sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/misc/ ou sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/base/. Exemple : \begin{alltt} Notez la différence subtile entre $f(x)$ et \(f(x)\) grâce à l'utilisation du "backslash". \end{alltt} %%%% fin exemple %%%% * Les commandes \listinginput et \verbatimtabinput du package 'moreverb' (disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/other/misc/) permettent d'inclure des documents en mode verbatim avec ou sans numérotation des lignes du fichier inclu. Exemple : { \small \listinginput[5]{10}{totor.c} } Les paramètres [5] et {10} indiquent que la numérotation des lignes doit se faire de 5 en 5 en commençant à 10. %%%% fin exemple %%%% * Il existe aussi le package 'verbtext' disponible sur CTAN. * Le package 'fancyvrb' est également disponible sur CTAN. * Pour insérer du code lisp dans un document LaTeX, il existe le package 'lispcode' disponible par ftp sur ftp://ki-server.informatik.uni-wuerzburg.de/pub/tex/. * On peut aussi essayer le package 'verbasef' (verbatim automatic segmentation of external files) disponible sur CTAN. Il utilise l'environnement figure. * Encore un autre, le package 'cprog' disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex209/contrib/misc/ permet d'inclure des morceaux de code dans un document et de les gérer comme des flottants. * Le package 'sverb' de M. Wooding propose un environnement listing. # 9.2 # Comment gérer un document par parties ? ----------------------------------------------- Pour travailler sur un gros document, il est plus agréable de le découper en plusieurs fichiers. Il y aura quoiqu'il en soit un fichier principal (celui qui comprend le préambule et les commandes \begin{document} et \end{document}). \input{fichier} permet d'inclure le fichier "fichier" dans le fichier principal. Cette commande réalise une importation pure et simple. Elle est plutôt réservée à l'importation de fichiers de macros. \include{chapitre} permet d'intégrer le fichier "chapitre.tex" dans le document principal en commençant une nouvelle page. Cette commande réinitialise la numérotation des titres. Utilisée avec la commande \includeonly{chapitre}, cette commande mise dans le préambule, permet de ne recompiler le fichier principal que sur les parties indiquées. Remarque : la commande \include ne permet pas d'intégrer un fichier contenant lui-même une commande \include. Exemple : \documentclass{report} \includeonly{chap1, chap3} \begin{document} \include{chap1} \include{chap2} \include{chap3} \end{document} %%%% fin exemple %%%% Remarque : avec le package 'french', pour que la numérotation des chapitres ne soit pas réinitialisée lorsqu'on change de partie, il faut ajouter la commande \noresetatpart en début de document après le \begin{document} # 9.3 # Comment isoler une partie d'un fichier ps ou dvi ? ---------------------------------------------------------- Il faut utiliser un outil qui permet de découper en page : + un fichier postscript, * il s'agit des outils PSnup, PStoPS, PSSelect, qui ont été portés sur Mac, aussi bien pour MPW qu'en "stand-alone" (dans la distribution CMacTeX) * on peut également utiliser ghostview (save marked pages) disponible par ftp sur ftp://iphthf.physik.uni-mainz.de/pub/gv/ + un fichier dvi ? DVIDVI pour MPW (utilitaire qui fait bien d'autres choses que de découper) doit permettre de faire cela. # 9.4 # Comment inclure un fichier PICT ? ----------------------------------------- On peut utiliser la commande \special{pictfile mondessin.pict} ou \put(0,0){\special{pict=Mondessin}}. # 9.5 # Comment spécifier un chemin pour les fichiers à inclure ? ----------------------------------------------------------------- * Il suffit d'utiliser la commande \import{chemin}{fichier}. Elle évite de préciser le chemin où se trouvent les fichiers appelés par la commande \input à chaque appel. %%%% debut macro %%%% % import.sty: allows input of a file from another directory: % % \import{path}{file} \def\import{\begingroup \protected@edef\@tempa{\endgroup \noexpand\@import{\@ifundefined{input@path}{}{\input@path}}% {\@ifundefined{Ginput@path}{}{\Ginput@path}}}% \@tempa} \def\@import#1#2#3#4{% \def\input@path{{#3}#1}\def\Ginput@path{{#3}#2}% \input{#4}% \def\input@path{#1}\ifx\input@path\@empty \let\input@path\@undefined \fi \def\Ginput@path{#2}\ifx\Ginput@path\@empty \let\Ginput@path\@undefined \fi } %%%% fin macro %%%% Exemple : \import{Chapitres/}{chapitre1} %%%% fin exemple %%%% * Pour les figures, la package 'graphicx' propose la commande \graphicspath à utiliser en tête de document. Exemple : \graphicspath{{Chapitre1/gfx/}{Chapitre2/gfx/}} %%%% fin exemple %%%% * On peut également modifier certaines variables d'environnement lorsqu'elles existent. Exemple (UNIX) : setenv TEXINPUTS= /home/figures/:"$TEXINPUTS" %%%% fin exemple %%%% ================================================================ [10] HAUTS ET BAS DE PAGES ================================================================ # 10.1 # Comment définir les hauts et bas de page ? --------------------------------------------------- Remarque : lorsque le haut ou bas de page défini est trop grand, on voit apparaître des messages d'erreur du style "Overfull \vbox". Il faut alors redimensionner la longueur correspondante. Exemple (dans le préambule) : \addtolength{\headheight}{1.5pt} %%%% fin exemple %%%% * Par défaut, LaTeX offre la numérotation des pages en bas de page (style plain). Mais, il propose également 3 autres styles de mise en page. Il s'agit des styles : + empty (hauts et bas de pages vides), + headings(la numérotation des pages apparaît en haut ainsi que différentes informations suivant la classe de document), et + myheadings (les commandes \markboth et \markright permettent de définir les informations qui devront apparaître dans le haut de page. \markboth{entête gauche}{entête droite} s'utilise pour un document recto-verso alors que \markright{entête} s'applique à toutes les pages d'un document en simple recto). L'appel d'un style pour tout le document se fait via la commande \pagestyle{style}. La commande \thispagestyle{} permet d'appeler un style sur une page particulière. Remarque : malgré une déclaration globale de style de page, il se peut que des déclarations locales de style soient également nécessaires, puisque certaines commandes LaTeX réinitialisent le style de la page sur laquelle elles apparaîssent. * Le package 'fancyheadings', de P. van Oostrum, est disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex209/contrib/fancyheadings/. Il est compatible LaTeX2.09 et LaTeX2e. Il permet de définir des entêtes et des pieds de page relativement facilement. La définition des pages spéciales se fait par : \thispagestyle{xxx} ou xxx peut être fancy (utilise les définitions ci-dessous sur une page en respectant le style plain pour les autres ), plain (style TeX) ou fancyplain(permet de redéfinir le style plain et donc de disposer de deux styles : fancy et plain). L'application d'un style à toutes les pages d'un document s'obtient par \pagestyle{nom_style}. Les macros principales sont : + pour les entêtes \lhead[paire gauche]{impaire gauche} \rhead[paire droit]{impaire droit} \chead{centre} + pour les pieds de page \lfoot[paire gauche]{impaire gauche} \rfoot[paire droit]{impaire droit} \cfoot{centre} On distingue les styles fancy et plain par : \lhead[\fancyplain{paire gauche plain}{paire gauche fancy}] {\fancyplain{paire gauche plain}{paire gauche fancy}} Le style par défaut est alors plain. Ce package définit quatre nouvelles longueurs : + \headrulewidth + \footrulewidth + \plainheadrulewidth + \plainfootrulewidth Exemple : \documentclass{article} \usepackage{fancyheadings} \pagestyle{fancy} \usepackage{graphicx} \renewcommand{\sectionmark}[1]{\markboth{#1}{}} \renewcommand{\subsectionmark}[1]{\markright{#1}} \rfoot{\leftmark\\\rightmark} \lhead{\includegraphics[width=0.5cm]{foobar.ps}} \begin{document} \section{Première section.} Intro. \subsection{Sous-section.} Texte. \end{document} %%%% fin exemple %%%% Remarque : sur certaines pages où le style de page est réinitialisé par certaines commandes (telles que \tableofcontents), il faut repréciser le style voulu via la commande \thispagestyle. Exemple : \addtocontents{toc}{\protect\thispagestyle{fancyplain}} %%%% fin exemple %%%% * Le package 'fancyhdr' est le successeur du package 'fancyheadings' pour LaTeX2e. Il est disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/fancyhdr/. # 10.2 # Comment obtenir une note de bas de page ? -------------------------------------------------- * La commande \footnote{texte} permet très facilement d'obtenir des notes de bas de page sans se préoccuper de leur mise en page. * Le package 'ftn' disponible sur CTAN dans ftp://ftp.fdn.org/pub/CTAN/macros/latex209/contrib/misc/ permet d'étendre la commande footnote à tous les environnements non flottants. # 10.3 # Comment mettre les notes de bas de page en fin de document ? --------------------------------------------------------------------- Le package 'endnotes', de J. Lavagnino, disponible sur CTAN permet de faire cela. # 10.4 # Comment réduire les rappels de titres dans un haut ou bas de page ? ---------------------------------------------------------------------------- Pour éviter que des titres trop longs n'apparaissent dans les entêtes ou les pieds de pages, il suffit de passer un titre plus court en option des commandes de structuration de document. Remarque : dans ce cas, ce sont les titres courts qui apparaîtront dans la table des matières. Exemple : \documentclass{article} \usepackage{fancyheadings} \pagestyle{fancy} \usepackage{graphicx} \renewcommand{\sectionmark}[1]{\markboth{#1}{}} \renewcommand{\subsectionmark}[1]{\markright{#1}} \rfoot{\leftmark\\\rightmark} \lhead{\includegraphics[width=0.5cm]{foobar.ps}} \begin{document} \section[Titre résumé.]{Un titre trop long pour les rappels.} Intro. \subsection{Sous-section.} Texte. \end{document} %%%% fin exemple %%%% # 10.5 # Comment référencer une note de bas de page ? ----------------------------------------------------- Il suffit simplement de définir un label à l'intérieur de la commande \footnote et de la référencer par \ref. Exemple : bla bla bla\footnote{Notons que ce bla l\`a est diff\'erent des pr\'ec\'edents\label{footnote-bla}}... [...] ..., comme l'indique la note~\ref{footnote-bla}, ... %%%% fin exemple %%%% # 10.6 # Comment supprimer la numérotation des pages ? ------------------------------------------------------ * Pour supprimer la numérotation des pages, il faut utiliser la commande \pagestyle{empty}. Si elle ne suffit pas, il faut en plus utiliser \thispagestyle{empty} sur les pages où la numérotation subsiste. Ce comportement se justifie par le fait que certaines commandes comme \tableofcontents ou \chapter réinitialisent le style de page sur laquelle ils apparaissent. * On peut également redéfinir le style plain à empty \let\ps@plain=\ps@empty. * Le package 'nopageno' de D. Carlisle, disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/carlisle/, de supprimer la numérotation de toutes les pages même celles qui réinitialisent le style de page. # 10.7 # Comment numéroter les pages par rapport à la dernière ? ---------------------------------------------------------------- Pour pouvoir référencer les pages d'un document par rapport à la dernière page (e.g. page 54/345), il faut utiliser le package 'lastpage' (disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/other/lastpage/). Exemple : \documentclass{report} \usepackage{french} \usepackage{lastpage} \makeatletter \renewcommand{\@evenfoot}% {\hfil \upshape page {\thepage} de \pageref{LastPage}} \renewcommand{\@oddfoot}{\@evenfoot} \makeatother \begin{document} Texte. \end{document} %%%% fin exemple %%%% Si l'on ne dispose pas du package 'lastpage', on peut définir ce label "à la main" en ajoutant \label{LastPage} juste avant \end{document} ou encore en utilisant la commande \AtEndDocument{\label{LastPage}} dans le préambule du document. # 10.8 # Comment supprimer le trait de séparation des notes de bas de page ? ---------------------------------------------------------------------------- Il suffit de mettre dans le préambule : \renewcommand{\footnoterule}{} # 10.9 # Comment modifier la numérotation des pages ? ----------------------------------------------------- * Il faut modifier la commande \thepage. Exemple (P. van Oostrum) : \documentclass{report} \usepackage{french} \makeatletter \renewcommand{\thepage}{\thechapter-\arabic{page}} % chapter-page numbering \@addtoreset{page}{chapter} % reset page number when chapter is stepped % The next magic makes the page counter be reset to one rather % than zero \def\@stpelt#1{\global\csname c@#1\endcsname \expandafter\ifx \csname#1\endcsname \page \@ne \else \z@ \fi} \makeatother \begin{document} \chapter{Introduction} Texte. \end{document} %%%% fin exemple %%%% * Il existe également le package ci-dessous de A. Kielhorn. %%%% debut macro %%%% %% %% This is page-per-chapter-package %% version 2.0 %% %% Don't use it with refrep! %% Refrep has these commands already implemented %% %% This version forces openright!! %% %% Index-commands should work in chapters and appedices, %% they will not work as expected in the preface when the %% pagenumbering is not arabic. (MakeIndex can't sort roman- %% numbers) %% %% Bugs: %% The index is sortet according to the pagenumber %% without looking at the chapternumber. %% I don't think MakeIndex could handle that. %% \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{pagepc}[1995/05/13] \@ifundefined{chapter} {\PackageError{pagepc}{% You can't number your pages per chapter\MessageBreak when you have no chapters }{% Use ``report'' or ``book'' instead. } }% {} %% Reset the pagecounter to 1 at the start of a new chapter %% \let\ppchapter=\@chapter \def\@chapter{\if@pageperchapter\setcounter{page}{1}\fi \ppchapter} %% Force a pagebreak at the start of the appendix, otherwise %% the number of the page right before the appendix comes %% out wrong %% \let\ppappendix=\appendix \def\appendix{\if@pageperchapter\newpage\fi\ppappendix} \newif\if@pageperchapter \@pageperchapterfalse %% This command enables Page-per-Chapter, it is *not* on by %% default to allow roman pagenumbers in the preface %% (see sample-document) %% \newcommand{\pageperchapter} {\@pageperchaptertrue \@openrighttrue % Remember old setting for chapter 0 = preface \let\ppthepage=\thepage % The new number needs more space \renewcommand\@pnumwidth{2.55em} % Here it comes :-) \renewcommand\thepage{% \ifnum \c@chapter = \z@ \ppthepage \else \thechapter\ -- \arabic{page} \fi } } %% This is a hack to make MakeIndex happy :-( %% You can't use the |-form of an indexentry because %% it is used to store the chapternumber. %% \def\@wrindex#1{% \ifnum \c@chapter = \z@ \protected@write\@indexfile{}% {\string\indexentry{#1}{\arabic{page}}}% % The above is wrong if pagenumbering!=arabic, % but I think this is better than nothing. \else \protected@write\@indexfile{}% {\string\indexentry{#1|ppc{\thechapter}}{\arabic{page}}}% \fi \endgroup \@esphack } %% This prints the pagenumber in the index %% \def\ppc#1#2{#1 -- #2} \endinput %%%% fin macro %%%% * Pour changer la valeur du compteur de page, il suffit d'utiliser : \setcounter{page}{17}. # 10.10 # Comment supprimer les entêtes et bas de page de pages vierges ? ------------------------------------------------------------------------- Lorsqu'on utilise l'option 'openright' pour faire débuter un nouveau chapitre sur une page de droite dans un document recto-verso, pour ne pas afficher les entêtes et bas de page sur une page de gauche restée vierge, on peut utiliser la commande suivante (cf. LaTeX Companion) : \newcommand{\clearemptydoublepage}{% \newpage{\pagestyle{empty}\cleardoublepage}} Il est alors nécessaire d'utiliser cette commande avant la commande \chapter. # 10.11 # Comment gérer des en-têtes avec des environnements verbatim multi-pages ? ----------------------------------------------------------------------------------- Le problème consiste à inclure un fichier avec la commande \input dans un haut ou bas de page alors que le corps du document comprend des environnements verbatim qui s'étalent sur plus d'une page. Dans ce cas, LaTeX au lieu d'interpréter la commande \input fait un copier-coller du contenu du fichier appelé par la commande \input (c'est comme s'il était en mode verbatim au moment de traiter le \input). La solution consiste à utiliser une boîte via \savebox. Remarque : cela ne marche que si les informations à imprimer ne varient pas au fil des pages. Exemple : \newsavebox{\logo} \savebox{\logo}[2cm][c]{\input{logo-late.pstex_t}} %%%% fin exemple %%%% # 10.12 # Comment utiliser \footnote dans un titre ? ---------------------------------------------------- * Il faut utiliser la commande \protect. Exemple : \section{Titre de section\protect\footnote{Commentaire sur ce titre.}.} %%%% fin exemple %%%% ATTENTION : le problème dans ce cas est que la note apparaîtra aussi bien dans l'en-tête si l'en-tête rappelle le titre des sections que dans la table des matières. Pour supprimer ces apparitions il faut alors utiliser la même technique que pour les titres résumés : \section[foo]{foo\protect\footnote{foooo}} * Il existe également le package 'stblftnt' de R. Fairbairns disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/other/misc/ qui gère le problème énoncé ci-dessus sans avoir à réécrire tout le titre. # 10.13 # Comment placer les notes de bas de page les unes à côté des autres ? ------------------------------------------------------------------------------ Il faut utiliser le package 'footnote', de R. Fairbairns, disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/footnote/ avec l'option para : \usepackage[para]{footnote}. # 10.14 # Comment réinitialiser le compteur de note de bas de page à chaque page ? ---------------------------------------------------------------------------------- * Il faut utiliser le package 'footnote', de R. Fairbairns, disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/footnote/ avec l'option perpage : \usepackage[perpage]{footnote} * Le package 'footnpag' disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/footnpag/ permet également de faire cela. # 10.15 # Comment modifier le style des notes de bas de page ? -------------------------------------------------------------- * Le package 'footmisc' disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/footmisc/ permet de définir son propre style de note de bas de page. * Le package 'ftnright' de F. Mittelbach redéfinit le placement des notes de bas de page dans un document multi-colonnes. Lors de l'utilisation de ce package, les notes de bas de page appelées dans une page seront réunies et placées à la fin de la dernière colonne de cette page. Remarque : Lorsque plusieurs packages sont utilisés simultanément dans un même document, ftnright doit, si possible, être appelé en dernier. # 10.16 # Comment utiliser le mode verbatim dans une note de bas de page ? -------------------------------------------------------------------------- Par défaut, le mode verbatim n'est pas accessible dans une note de bas de page (et de manière générale inutilisable dans un argument d'une autre commande). * On peut alors le forcer par : \DeclareRobustCommand\espacement{{\fontencoding{OT1} \selectfont \texttt{\char32}}} * ou utiliser \tt sous LaTeX2.09 \texttt sous LaTeX2e # 10.17 # Comment éviter qu'une note de bas de page s'étale sur plusieurs pages ? --------------------------------------------------------------------------------- * La commande \samepage peut permettre de forcer LaTeX à ne pas couper le contenu d'une note de bas de page. Exemple sans la commande : Texte texte texte (1). Texte texte texte (2). Texte texte texte (3). Texte texte texte (4). Texte texte texte (5). Un autre texte\footnote{Un long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long commentaire sur cet autre texte.}. Texte texte texte (6). Texte texte texte (7). Texte texte texte (8). Texte texte texte (9). Texte texte texte (10). Texte texte texte (11). Texte texte texte (12). Texte texte texte (13). Texte texte texte (14). Texte texte texte (15). Texte texte texte (16). Texte texte texte (17). Texte texte texte (18). Texte texte texte (19). Texte texte texte (20). Texte texte texte (21). Texte texte texte (22). %%%% fin exemple %%%% Exemple avec : Texte texte texte (1). Texte texte texte (2). Texte texte texte (3). Texte texte texte (4). Texte texte texte (5). Un autre texte\samepage\footnote{Un long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long commentaire sur cet autre texte.}. Texte texte texte (6). Texte texte texte (7). Texte texte texte (8). Texte texte texte (9). Texte texte texte (10). Texte texte texte (11). Texte texte texte (12). Texte texte texte (13). Texte texte texte (14). Texte texte texte (15). Texte texte texte (16). Texte texte texte (17). Texte texte texte (18). Texte texte texte (19). Texte texte texte (20). Texte texte texte (21). Texte texte texte (22). %%%% fin exemple %%%% * On peut également utiliser une \parbox mais cela peut modifier la structure de la page (empiètement du bas de page). Exemple : \footnote{\parbox[t]{0.94\linewidth}{This is a footnote ...} %%%% fin exemple %%%% * L'emploi de la commande \enlargethispage peut également suffire. * Une solution plus globale (et non pas au cas par cas comme les solutions précédentes) consiste à redéfinir la pénalité associée à \interfootnotelinepenalty. Cela permet de relâcher le critère de beauté associé au placement des bas de page. Exemple : Mettre dans le préambule \interfootnotelinepenalty=10000. %%%% fin exemple %%%% Remarque : \raggedbottom permet en plus à LaTeX de ne pas s'inquiéter si le corps de la note n'apparaît pas sur la même page que son appel. ================================================================ [11] LATEX, LE FRANÇAIS ET LES AUTRES LANGUES ================================================================ # 11.1 # Comment franciser un document LaTeX ? ---------------------------------------------- * 'babel' version 3.6 disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/packages/babel/, est un package de J. Braams. babel permet de composer des documents multilingues. Son appel sous LaTeX2e se fait par \usepackage[langue_1, langue_2, ..., langue_n]{babel}. Parmi les langues actuellement disponibles, on peut citer english, german, italian, french, français. Le changement de langue se fait via la commande \selectlanguage. Exemple : \selectlanguage{spanish} %%%% fin exemple %%%% La langue par défaut est la dernière de la liste passée en paramètre à babel (langue_n dans l'exemple précédent). Ce package est le plus courant sur le plan international mais il est souvent contesté en France. On lui préfère alors le package 'french'. * Le package 'french' de B. Gaulle est disponible par ftp sur ftp://ftp.gutenberg.eu.org/pub/gut/french/ ou sur ftp://ftp.loria.fr/pub/ctan/language/french/. Lors de l'installation, respectez les instructions d'installation accompagnant french.sty (une FAQ est également disponible). Le fichier des motifs de césure est désormais unique (frhyph.tex), que l'on travaille avec le codage de fontes T1 ou OT1 (avec option MlTeX). Vous pouvez également utiliser la série de commandes suivantes, gentiment envoyées par Denis Barbier: ---------- citation ---------- make -f Makefile.unx ALLTEXPATH=/usr/share/texmf \ install-hyphen install-config install-base install-index texhash Puis modifier le fichier /usr/share/texmf/web2c/fmtutil.cnf et ajouter la ligne ci-dessous: frlatex tex language.dat -mltex frlatex.ini Taper ensuite fmtutil --byfmt frlatex texlinks La commande pour compiler du LaTeX avec french est alors frlatex. ------------- fin ------------- Remarque : Dans un fichier source (.tex), il est conseillé de charger french après tous les autres packages. french prend notamment en charge la mise en page, la traduction des balises LaTeX visibles dans le document final (Chapitre, Table des matières, ...), .... ATTENTION : ces deux options (french et babel) ne sont pas toujours parfaitement compatibles (les dernières versions le sont french3,49 et babel 3.6). AL: A vérifier... + \usepackage[francais]{babel} et \usepackage[frenchb]{babel} font appel à l'option frenchb maintenue par D. Flipo. + \usepackage[french]{babel} fait appel au package french de B. Gaulle à condition que french ait été installé (et plus particulièrement french.ldf) + les versions de tous ces packages sont très importantes (babel, frenchb, french) pour une bonne coexistence. Une version 3.6 beta de Babel est sur CTAN mais il paraît qu'il y avait un problème avec french. Babel 3.5e et french V3.46 collaborent assez bien dans tous les sens. + les fichiers de césure sont les mêmes pour babel et pour french. ATTENTION : les dernières distributions de french (V4 et post) ne sont plus compatibles LaTeX 2.09 ! # 11.2 # Comment corriger les coupures de mots accentués ? ---------------------------------------------------------- * Une solution consiste à utiliser MlTeX (multilingual TeX). C'est le moteur TeX de M. Ferguson. Il permet en particulier de gérer les coupures de mots accentués. Certaines des idées utilisées dans ce moteur ont d'ailleurs été reprises par la suite dans TeX V3. * Suivant la fonte avec laquelle on travaille (i.e. suivant qu'elle dispose des caractères accentués ou non), il peut exister des problèmes d'interaction entre les lettres accentuées et les règles de coupure des mots. En effet, l'utilisation d'une fonte 7 bits impose que les caractères accentués soient fabriqués par la macro \accent de TeX qui inhibe toute coupure pour la suite du mot. En LaTeX2e l'utilisation de fontes respectant la norme T1 (codage de Cork + 8 bits) permet d'éviter ces problèmes. Il faut alors faire appel au package 'fontenc' : \usepackage[T1]{fontenc} Ce package nécessite que des fontes encodées T1 (suffisamment récentes) aient été installées (fontes dc par exemple). Il faut en outre utiliser des modèles de coupure de mot encodées T1. Il existe pour cela deux fichiers disponibles sur CTAN. Il s'agit des fichiers fr8hyph.dc (ou mieux f8hyph, beaucoup plus récent) pour un codage 8 bits (fonte avec caractères accentués telle que dc) et fr7hyph (respectivement f7hyph) pour un codage 7 bits (accents TeX). L'association GUTenberg propose également de tels fichiers (cf. french paragraphe 11.1). * Il peut y avoir également un problème de versions, l'algorithme de coupure des mots a changé entre les versions 2.9 et 3.0. Ainsi si vous utilisez Tex V.3.0 ou plus, il faut veiller à ce que les fichiers plain.tex et lplain.tex soient également en version 3.0 ou plus. # 11.3 # Comment utiliser les lettres accentuées ? -------------------------------------------------- * Les accents disponibles sous LaTeX sont présentés à la question 29.57. * Pour éviter ces commandes barbares d'accentuation des caractères, on peut utiliser une fonte contenant toutes les lettres accentuées nécessaires (code 8 bits). Si besoin, il faut préciser un codage d'entrée via l'instruction : \usepackage[codage d'entrée]{inputenc} L'option est rendue nécessaire par le fait que les codes de caractères au-delà de 127 sont différents sous Dos, MacOS et Unix... Ainsi, le codage à preciser est latin1 pour un système Unix ou un PC sous Windows, applemac sous Mac adapté au français ou encore cp850 pour le code-page 850 sur PC (sous MS-DOS). Il existe également ansinew, cp438, latin2 selon les systèmes. Exemple : \usepackage[applemac]{inputenc} %%%% fin exemple %%%% ATTENTION : inputenc.sty « casse » les efforts faits par mlTeX lorsqu'on utilise les fontes codées OT1 (fontes CMR ou PostScript). * mapcodes de M. Piotrowski autorise également un grand nombre de codages de caractères (iso8859-1 (latin1), iso8859-2 (latin2), ibm850 ou 852, hproman8, etc). # 11.4 # Comment composer du texte en grec moderne ou classique ? ----------------------------------------------------------------- Il suffit d'utiliser l'option greek du package babel disponible sur CTAN. Son site primaire est ftp://obelix.ee.duth.gr/pub/TeX/. La version 1.0 fournie avec babel ne supporte pas les accents ni les marques de respirations par contre la toute nouvelle version 1.1 les supporte. On trouvera un fichier de césure de mots dans ftp://obelix.ee.duth.gr/pub/TeX/hyphen.greek. # 11.5 # Comment composer du texte en hébreu moderne ou classique ? ------------------------------------------------------------------- Il suffit d'utiliser le package ArabTeX 3.05 disponible sur CTAN. Son site primaire est ftp://ftp.informatik.uni-stuttgart.de/pub/arabtex/. Ce package permet la vocalisation mais pas les marques de cantillation. Exemple: \documentclass{article} \usepackage{arabtex,hebtex} \setcode{standard} \sethebrew \begin{document} Voici du texte en hébreu \begin{arabtext} yOm tOb \end{arabtex} Fin du texte en hébreu \end{document} %%%% fin exemple %%%% # 11.6 # Comment composer du texte en arabe ? --------------------------------------------- Il suffit d'utiliser le package ArabTeX 3.05 disponible sur CTAN. Son site primaire est ftp://ftp.informatik.uni-stuttgart.de/pub/arabtex/. # 11.7 # Comment définir les césures de groupes de mots conjugués avec un trait d'union ? ----------------------------------------------------------------------------------------- (B. Gaulle) Par défaut, TeX coupe tout mot composé à l'endroit exact du trait d'union et uniquement à cet endroit. Mais cela peut se modifier. Dans ce but, j'ai ajouté à french (V4,02) une commande \allowhyphens qui permet de laisser à TeX le choix des autres coupures dans le mot. Remarque : la commande \hypenation ne permet pas d'intégrer un trait d'union car ce caractère sert à indiquer un point de coupure et uniquement cela. Voici donc la solution : \showhyphens{{définissez\allowhyphens-le} donne alors comme points de coupure : dé-fi-nis-sez-le -- Benjamin Bayart bayartb@edgard.fdn.fr