Previous Contents Next

Chapter 29   Divers

Toutes les questions qui n'ont pas pu être classées dans les chapitres précédents sont regroupées ici. Il s'agit le plus souvent de petits trucs très utiles que tout bon LATEX nicien devrait connaître.

29.1   A quoi sert la commande \par ?

Elle permet de marquer explicitement la fin d'un paragraphe pour permettre à LATEX de le mettre en page. L'utilité de cette commande se justifie par le fait que LATEX met en page un texte par paragraphe. Elle est, le plus souvent, utilisée dans la définition de macros.

29.2   Comment commenter une partie d'un source LATEX ?

Exemple:
 
Un paragraphe qui intéresse tout le monde et qui est donc 
visible par tout le monde. 
\begin{comment} 
   Un paragraphe qui n'intéresse que moi et qui n'est visible 
   que dans le source de mon document. 
\end{comment} 
Un autre paragraphe qui intéresse tout le monde. 
%%%% fin exemple %%%%

29.3   Comment utiliser LATEX sur des petites machines ?

La capacité de TeX est limitée de manière interne. Cela signifie que ce sont des variables de TeX qui fixent le nombre de variables (et la taille mémoire) maximal que TeX s'autorisera à utiliser. Si vous utilisez plus de variables que prévu, TeX s'arrêtera sur le message d'erreur :

   sorry, TeX capacity exceeded.
Tout ceci est destiné à < < préserver > > votre machine, c'est à dire à empêcher TeX d'utiliser la totalité de la mémoire de la machine, ce qui conduit la plupart du temps à un plantage.

Sur une station, aucun problème, mais sur un micro-ordinateur, les configurations peuvent-être nombreuses. C'est pourquoi le TeX fournit en < < standard > > sur les macs, par exemple, des variables fixées assez bas (on suppose que le Mac a une toute petite mémoire comparée à une station). Mais il existe également un BigTeX, dont la seule différence avec le TeX normal est qu'il est autorisé à utiliser plus de mémoire (les variables en questions ont des valeurs plus importantes).

Du coup, si votre micro a une configuration plutôt musclée, vous pouvez compiler des documents plus gros, plus complexes, etc...

Heureusement Kiffe a changé de stratégie et dans les futures versions des outils les paramètres internes seront configurables (en passant par ResEdit) et donc on décidera soi-même la < < bigness > > de son TeX (cf. distributions emTeX et AsTeX). Pour changer les paramètres de compilation (pool size, stack, font mem, main mem etc.) cf. fichier emtex/doc/english/tex.doc, chapitre ??.

La version 7.0 de web2c est configurable par le fichier texmf.cnf.

Remarque : pour un gros document, il peut être utile de le découper en chapitres à inclure par la commande \include (cf. paragraphe ??).

29.4   Comment visualiser des paramètres ?

\message{Valeur de /baselinestretch = \the\baselinestretch}
Exemple :
 
\documentclass{report} 
\usepackage{french} 
\pagestyle{empty} 
\begin{document} 
Texte. 
\showthe\baselineskip 
Texte. 
\end{document} 
%%%% fin exemple %%%%
Remarque :
ce package n'est pas compatible avec les styles multicolonnes ni avec l'option leqno.

29.5   Comment visualiser des compteurs ?

Pour visualiser la valeur d'un compteur, il suffit de demander

\immediate\write{16}{\the\nomducompteur} 
ou

\message{\the\nomducompteur}

29.6   A quoi servent \makeatletter et \makeatother ?

Le caractère ``@'' est spécial pour LATEX, et ne peut pas être utilisé directement comme partie d'un nom de macro dans un document LATEX. Pour utiliser certaines macros internes de LATEX (celles qui contiennent un ``@''), directement dans un document (au lieu d'utiliser un fichier .sty), il faut les encapsuler dans une macro dont le nom ne contient pas de ``@''. En outre, cette macro doit impérativement être déclarée dans le préambule du document, et être encadrée par les commandes \makeatletter et \makeatother.

En fait ces commandes permettent d'indiquer à LATEX que l'on veut effectivement travailler sur ses commandes internes  en le forçant à considérer le ``@'' (at) comme une lettre (makeatletter).

ATTENTION :
les commandes internes de LATEX sont à manipuler avec précaution.

29.7   Comment numéroter les lignes d'un document ?

Le package 'lineno' disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/lineno/ permet de numéroter les lignes d'un document.

Il existe également le package 'numline' de M. Jaegermann et J. Fortune, pour du texte essentiellement. Ce package est disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/numline/.

Pour numéroter les lignes d'un document inclu en mode verbatim, il faut utiliser la commande \listinginput du package 'moreverb' disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/moreverb/.

Le package 'vruler' disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/vrsion/ permet également de numéroter les lignes d'un document.

29.8   A quoi sert la commande \special ?

La commande \special permet à TeX d'envoyer des instructions particulières (non TeX) à un driver sans les interpréter. Les instructions ainsi passées sont généralement dépendantes du driver qui lui, saura les interpréter. L'utilisateur n'a en général pas à se soucier de cette commande (\special), elle est gérée par des packages tels que 'psfig' pour LATEX2.09 ou 'graphics' et 'graphicx' pour LATEX 2e.

Remarque :
\includegraphics est standard dans LATEX 2e et indépendant de la plateforme alors que le format de \special est dramatiquement dépendant de la plateforme de travail. Seul, le \includegraphics préserve l'aspect universel d'un document source et donc l'esprit universel de TeX.

29.9   Comment réaliser des calculs avec les variables LATEX ?

Pour pouvoir utiliser des expressions du type \truc * \machin dans une macro, il faut charger le package 'calc' disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/calc/.

Exemple :
 
\setcounter{x}{3*\real{1.3}} 
%%%% fin exemple %%%%
Une autre solution consiste à utiliser les commandes \addtolength\dim\dim, \divide \dim by \dim, etc.

Le package 'realcalc' disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/generic/realcalc/ permet de faire des calculs sur des réels.

Plus difficile à utiliser, il y a aussi le package 'trig'.

29.10   Où trouver une fonte 9pt ?

La classe de document 'amsart' disponible sur CTAN offre l'option 9pt.

De même les classes 'extarticle' et 'extreport' sont disponibles à http://www.informatik.uni-freiburg.de/ may/extsizes.html.

size9.clo de H. Steffani est disponible à http://www.tu-chemnitz.de/ hfst/size9.clo.

29.11   Comment automatiser les compilations LATEX ?

29.12   Comment obtenir des cadres gris ?

Le package 'shade' disponible sur ftp://ftp.fdn.org/pub/CTAN/macro/generic/ permet de tracer des cadres gris.

Le package 'psboxit', disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex2.09/contrib/misc/, permet d'obtenir du gris ou de la couleur.

29.13   Comment obtenir certaines abréviations ?

Pour obtenir des abréviations dont certaines lettres doivent être rehaussées et de taille réduite, on peut utiliser les indices mathématiques. Mais, ce n'est pas une technique recommandable.

Exemple :
 
M${\mathrm{lle}}$ 
%%%% fin exemple %%%%
Le package 'babel' propose la commande \ieme pour les quantièmes.

Le package 'french' de B. Gaulle, définit la commande \fup pour écrire une chaîne de caractères en exposant, ainsi que les commandes \ier \iers \iere \iere \ieme \iemes pour les quantièmes.

Exemple :
 
M\fup{lle} 
%%%% fin exemple %%%%
Remarque :
pour que la commande \fup suive les changements de taille de fonte, il faut utiliser l'une des extensions prévues à cet effet, à savoir les extensions ``smaller'' et ``relsize'' (\usepackage{smaller,french} par exemple). Une copie de l'extension smaller est distribuée depuis 94 avec la distribution des fichiers du style french (sous le nom mysmall.sty). En revanche, la surélévation ne tient pas compte de l'inclinaison de la police.
Le package 'smaller' de D. Taupin est disponible par ftp sur ftp://ftp.lps.u-psud.fr/pub/latex/contrib/smaller.sty. Il propose également une commande \fup qui définit smaller et l@rger pour être compris par french.sty. Cette commande gère l'inclinaison des \sl et des \it.

ATTENTION :
le fup de B. Gaulle étant installé au \begin{document}, pour utiliser mon \fup modifié avec french.sty, il faut après le \begin{document} écrire:
            \makeatletter 
            
\let\fup\f@up 
            
\makeatother
On peut également définir une nouvelle commande \abbr dans le préambule du document :

\newcommand{\abbr}[1]{\raisebox{1ex}{\footnotesize #1}}
Cette solution a l'avantage d'éviter d'utiliser le mode mathématique improprement.

Il existe aussi la commande \textsuperscript qui permet d'obtenir un exposant sans passer en mode mathématique.

29.14   Comment gérer les espaces après une macro ?

Pour forcer LATEX à introduire un espace après une macro, il suffit de faire suivre son appel d'un backslash (\).

Exemple :
 
texte \oe\ texte \oe, texte 
texte 
\oe texte \oe, texte 
%%%% fin exemple %%%%
ce qui donne :

texte oe texte oe, texte
texte oetexte oe, texte

 

Pour que LATEX gère lui même les espaces, il suffit d'utiliser systématiquement les caractères {}.

Exemple :
 
texte \oe{} texte \oe{}, texte \oe{}uf 
%%%% fin exemple %%%%
ce qui donne :

texte oe texte oe, texte oeuf

 

On peut également définir une macro TeX \keepspace :

%%%% debut macro %%%% 
\def\keepspace{\ifnum\catcode`\ =10 
  
\let\next\keepspacebis \else \let\next\relax \fi 
  
\next} 
\def \keepspacebis{\obeyspaces 
  
\afterassignment\keepspaceaux\let\next= } 
{
\obeyspaces% 
\gdef\keepspaceaux{% 
\ifx \next\space\let\next\ignorespaces\fi% 
\catcode`\  =10\relax\next}} 
%%%% 
%%%% fin macro %%%%
puis l'utiliser dans une autre définition  de macro.

Exemple :
 
\newcommand{\macro}{\textit{blablabla}\keepspace} 
%%%% fin exemple %%%%
Le package 'xspace' intègre ces définitions qui lui permette de gérer automatiquement l'espace après une macro suivant le contexte.

Exemple :
 
\documentclass{report} 
\usepackage{french,xspace} 
\pagestyle{empty} 
\newcommand{\macro}{aaaaa\xspace} 
\begin{document} 
\macro bbbb \macro, bbbb 
\end{document} 
%%%% fin exemple %%%%
Remarque :
à noter que le package xspace est conforme aux règles de typographie anglo-saxones donc la gestion des caractères de ponctuation composés tels que : où ; ne sera pas correcte en français. La solution consiste alors à utiliser le blanc insécable qui de toutes façons est recommandé dans ce cas : \macro: blabla. On peut également se créer son propre package 'fxspace'.

29.15   Où trouver les notices d'utilisation des packages ?

Généralement la notice d'utilisation d'un package est incluse dans le package lui même (fichier .dtx). Il suffit alors de compiler ce fichier. Il existe également le fichier doc disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/base/ qui décrit comment exploiter ces notices.

Si on lance ``latex package.dtx'' il sera produit le fichier package.sty ou package.cls correspondant et le fichier package.dvi de documentation de l'extension.

29.16   Comment obtenir des listes d'objets flottants ?

Certaines sont disponibles par défaut, il s'agit des listes de figures et de tables, il suffit alors d'appeler les commandes \listoffigures et \listoftables. D'autres sont liées à certains packages. Par exemple, le package 'algorithm' de P. Williams offre la commande \listofalgorithms.

Remarque :
la mise à jour de ces listes nécessite généralement plusieurs compilations LATEX.
Exemple :
 
\documentclass{report} 
\usepackage{algorithm,algorithmic} 
\begin{document} 
\listofalgorithms 
\chapter{toto} 
\begin{algorithm}[h!tp] 
   
\begin{algorithmic}[2] 
      
\REQUIRE $T_1$ et $T_2$ doivent \etre des tableaux de 
      valeurs additionnables, et doivent 
\etre de la m\eme 
      longueur $n$. 
\ENSURE $\forall 0\leq k< n \;\
      Result
[k]=T_1[k]+T_2[k]$. 
      
\FOR{$i\rightarrow 0$ to $n$} 
      
\STATE $Result[i]\rightarrow T_1[i]+T_2[i]
      
\ENDFOR 
   
\end{algorithmic} 
   
\caption{Somme terme \`a terme de deux tableaux3} 
   
\label{algo-ex-3} 
\end{algorithm} 
[recopie en trois exemplaires] 
\end{document} 
%%%% fin exemple %%%%

29.17   Comment connaître les versions des fichiers utilisés lors d'une compilation ?

Il suffit d'utiliser la commande \listfiles.

Exemple :
 
\documentclass{report} 
\listfiles 
\usepackage{french} 
\usepackage{graphics} 
\begin{document} 
   texte  ... 
\end{document} 
%%%% fin exemple %%%%

29.18   Pourquoi certaines commandes sont elles indépendantes ?

Les commandes LATEX de type verbatim sont particulières du fait qu'elles changent les codes de catégorie de leurs arguments. De ce fait, elles ne sont plus compatibles avec d'autres commandes et ne doivent pas être appelées par ces dernières. Certains caractères spéciaux doivent alors être obtenus par \texttt.

Exemple :
 
\texttt{\char`\\
%%%% fin exemple %%%%
On peut également utiliser l'environement lrbox de LATEX 2e pour sauver le texte qui doit apparaître en verbatim dans une boîte et ensuite utiliser cette boîte.

29.19   Comment installer un package ?

Lorsqu'il s'agit d'un package conçu pour LATEX 2e et utilisant les procédures et outils définis dans ce cadre, c'est simple : un package est fourni avec deux (ou plus, pour les packages plus complexes) fichiers, package.ins et package.dtx

Il faut commencer par exécuter ``latex package.ins'' pour créer le(s) fichier(s) de commandes lui(eux)-même(s) (typiquement package.sty) puis ``latex package.dtx'' pour générer la documentation, avec si besoin construction d'un index :

makeindex -s gind.ist -o package.ind package.idx
et d'un glossaire :

makeindex -s gglo.ist -o package.gls package.glo.
Ces fichiers doivent ensuite être déclarés dans une variable d'environnement afin d'être rendus visibles.

Exemple (UNIX) :
 
TEXINPUTS=.:/usr/local/TEX/texmf/tex:/users/ADMIN/NG/LATEX: 
/users/home/kluth/Section-equit/Modele 
%%%% fin exemple %%%%
Remarques :
 
Néanmoins, il est clair que ce mode d'organisation et de distribution n'est que le mode encouragé par l'équipe de développement de LATEX et n'est en rien une obligation. Un bon nombre de packages disponibles ne le suit d'ailleurs pas (!), pour diverses raisons (packages qui se veulent utilisables aussi bien avec Plain TeX qu'avec LATEX, < < vieux > > packages écrits pour LATEX209, packages écrits par des personnes qui veulent faire < < comme ça leur plait > >, etc.)... Dans ces différents cas, il faut < < aller y voir de plus près > > pour comprendre l'organisation choisie.

C'est justement le cas pour slashbox (!) : un seul fichier .sty est fourni. Il faut l'éditer pour extraire le fichier de documentation qui se trouve après la ligne 80 ``\endinput''.

Pour WINDOWS :
 
  1. copier le fichier package.ins dans un répertoire temporaire et le compiler avec LATEX ;
  2. déplacer le fichier package.sty dans un répertoire visible par LATEX, soit commun à tous les utilisateurs, soit local, soit personnel : -- pour fpTeX, ce sont respectivement les répertoires (déclarés à l'installation de fpTeX) ./texmf/tex/latex/lerepertoiredemonpackage (à créer si besoin), ./texmf.local/tex/latex/lerepertoiredemonpackage (à créer si besoin), HOME/texmf/tex/latex/lerepertoiredemonpackage (à créer si besoin) ; -- pour MikTeX, ce sont les mêmes répertoires mais le répertoire local est ./localtexmf/ et que le HOME ne semble pas être prévu : [FMF : je ne suis pas sûre de ce dernier point]
  3. reconstruire la base de données des packages (rebuild ls-R filenames databases pour fpTeX, refresh filename database pour MikTeX).

29.20   Comment générer des codes barres ?

29.21   Comment gérer des abbréviations ?

Le package 'abbrevs' disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/monster/ permet automatiquement de remplacer des abbréviations par leur formule développée notamment lors d'un premier appel.

Le package 'acronym' disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/acronym/ permet de s'assurer que tous les acronymes utilisés dans un document apparaissent au moins une fois sous une forme développée.

29.22   Comment imprimer un fichier postscript sur une imprimante non postscript ?

alladin est un excellent programme qui permet d'imprimer du postscript sur à peu près n'importe quelle imprimante. Cet outil est disponible par ftp sur ftp://ftp.lip6.fr/pub/ghost/aladdin/.

Remarque :
on ne peut pas dire que ce soit d'une très grande facilité d'installation, mais une fois que ce mauvais moment est passé, on ne peut plus s'en passer :-)

29.23   Comment surcharger une commande déjà existante ?

Pour pouvoir ajouter des définitions sur une commande prédéfinie sans la réécrire complètement, il faut utiliser la commande \let.

Exemple :
 
\let\standardsection=\section 
\def\section{\newpage\standardsection} 
%%%% fin exemple %%%%
Il existe aussi la commande expandafter.

Exemples :
 
\toks0 \expandafter{\section} 
\edef\section{\noexpand\newpage\the\toks0 } 
\expandafter\def\expandafter\section\expandafter{\expandafter% 
\newpage\section} 
%%%% fin exemple %%%%
Le package 'babel' propose également la commande \addto.

29.24   Comment reporter l'exécution d'une commande à la fin d'une page ?

Il existe pour cela le package 'afterpage' disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/required/tools/.

Exemple :
 
\afterpage{\clearpage} 
%%%% fin exemple %%%%

29.25   Comment définir des scripts interactifs ?

Le package 'dialogl' disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/dialogl/ permet de définir des scripts LATEX interactifs.

29.26   Comment identifier une version provisoire ?

Le package 'draftcopy' disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/draftcopy/ permet par exemple d'écrire le mot DRAFT en grisé en diagonale sur toutes ou certaines pages d'un document. Il permet également de faire moins voyant.

Exemple :
 
\documentclass{report} 
\usepackage{french} 
\usepackage{draftcopy} 
\begin{document} 
Voici une version provisoire de mon texte. Pourriez-vous la 
relire et me faire part de vos commentaires avant la fin de 
la semaine? 
Merci d'avance. 
\paragraph{Proposition.} 
Texte provisoire -- Texte provisoire -- Texte provisoire -- 
Texte provisoire -- Texte provisoire -- Texte provisoire -- 
Texte provisoire -- Texte provisoire -- Texte provisoire -- 
Texte provisoire -- Texte provisoire -- Texte provisoire -- 
Texte provisoire -- Texte provisoire -- Texte provisoire -- 
Texte provisoire -- Texte provisoire -- Texte provisoire -- 
Texte provisoire -- Texte provisoire -- Texte provisoire -- 
Texte provisoire -- Texte provisoire -- Texte provisoire -- 
Texte provisoire -- Texte provisoire -- Texte provisoire 
\end{document} 
%%%% fin exemple %%%%
Le package 'drafthead' également disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex209/contrib/misc/ permet lui de n'agir que sur les en-têtes des documents.

On peut également utiliser la macro :

%%%% debut macro %%%% 
\special{ 
! userdict begin /bop-hook{ 
stroke 
gsave 240 100 translate 
65 rotate /Times-Roman findfont 220 scalefont setfont 
0 0 moveto 0.9 setgray (DRAFT) show grestore 
}def end} 
dans le préambule de son document. 
%%%% fin macro %%%%
Le package 'prelim2e' disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/prelim2e/ offre également un marquage des versions préliminaires d'un document.

29.27   Comment obtenir des caractères barrés ?

Le package 'ulem' disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/other/misc/ permet de barrer des caractères.

Exemple :
 
\sout{je barre tout} 
%%%% fin exemple %%%%

29.28   A quoi sert la commande \ensuremath ?

La commande \ensuremath assure que son argument sera imprimé en mode mathématique quel que soit le mode courant.

Exemple :
 
\documentclass{report} 
\usepackage{french} 
\pagestyle{empty} 
\newcommand{\mc}{\ensuremath{(\alpha, \beta)}} 
\begin{document} 
Le couple 
\mc\ définit par $\mc = x+y, x-y$, ... 
\end{document} 
%%%% fin exemple %%%%

29.29   A quoi servent les commandes \(re)newcommand ?

La commande \newcommand permet à l'utilisateur de définir ces propres commandes. La commande \renewcommand permet de redéfinir des commandes LATEX déjà existantes. Elle s'utilise dans le préambule du document :

        \newcommand{nom_commande}[nb_arguments]{définition}
nb_arguments définit le nombre d'arguments de la nouvelle commande LATEX. Il est compris entre 0 et 9. Ils sont référencés par #no_argument dans la définition.

Exemple :
 
\documentclass{report} 
\usepackage{french} 
\pagestyle{empty} 
\newcommand{\be}{\begin{enumerate}} 
\newcommand{\ee}{\end{enumerate}} 
\newcommand{\bold}[1]{\textbf{#1}} 
\begin{document} 
\bold{Faites votre choix:} 
\be 
\item premier choix: A 
\item deuxième choix: B 
\item troisième choix: C 
\ee 
\end{document} 
%%%% fin exemple %%%%
Remarques :
La commande \providecommand permet de ne prendre en compte la nouvelle commande que si elle n'existe pas déjà.
Pour définir un argument optionnel, on utilise la syntaxe :

                \newcommand{nom}[nb_arg][defaut]{definition}
defaut permet de préciser une valeur par défaut de la variable qui sera utilisée en l'absence d'argument. L'argument optionnel ne peut être que #1.

29.30   Où trouver des hirondelles ?

On peut trouver la package 'cropmark' sur ftp://ftp.fdn.org/pub/CTAN/macros/generic/.

29.31   Comment tracer des lignes ?

On peut mettre la définition suivante dans le préambule du document :

\def\ligne#1{\leaders\hrule height #1\linethickness \hfill}
puis utiliser :

\ligne{5}
dans le texte.

Il existe également la commande \rule qui prend en premier argument, la longueur horizontale du trait et, en deuxième, son épaisseur. Elle possède également un argument optionnel qui permet de positionner la ligne traçée par rapport à la ligne d'écriture.

Exemple :
 
\rule[0.5ex]{\textwidth}{0.1mm} 
%%%% fin exemple %%%%
On peut aussi utiliser les commandes \hrule pour des lignes horizontales et \vrule pour des lignes verticales.

29.32   Comment imprimer le caractère ?

LATEX 2e fournit la commande \textasciitilde sous fonte T1. Sous OT1, il faut définir :

\ProvideTextCommand{\textasciitilde}{OT1}{\{}}
Il est possible de passer par le mode verbatim via la commande :

\verb$$.
On peut aussi définir sa propre commande :

\def\mytilde{\raisebox{-.8ex}{\}\hspace{-0.15em}}
\{} permet également d'obtenir un tilde.

Une autre solution consiste à utiliser $\sim$.

Autre solution, utiliser : \char`\

Remarque :
la première solution est de loin la meilleure.

29.33   Comment visualiser tous les caractères d'une fonte ?

Le plus simple consiste à utiliser :

latex nfssfont
nfssfont.tex est un fichier disponible sur CTAN.

Il faut ensuite donner le nom de la fonte à examiner par exemple cmr10 puis construire la table des caractères en utilisant la commande \table. Cela permet de construire un fichier .dvi contenant les codes de tous les caractères.

L'appel d'un symbole se fait alors via la commande \symbol{x} où x est le code associé au caractère voulu (c'est un entier compris entre 0 et 255).

On peut également utiliser \char''<octal> ou \char<hexa> ou encore \char<decimal> mais ses commandes sont moins robustes.

29.34   A quoi sert % dans les macros ?

Le % en fin de ligne d'une macro permet d'indiquer à LATEX que la définition qu'il est en train de lire continue à la ligne suivante. De manière générale, les espaces après une macro sont ignorés, mais pas après les accolades. Ce caractère permet de s'assurer que des espaces non voulus ne seront pas pris en compte. Ainsi, il est prudent de mettre un % après chaque accolade qui se trouve en fin de ligne.

29.35   Comment inclure l'heure dans un document ?

La macro décrite ci-dessous, à inclure dans le préambule de votre document, définit la commande \timenow :

%%%% debut macro %%%% 
\makeatletter 
\def\timenow{\@tempcnta\time 
  
\@tempcntb\@tempcnta 
  
\divide\@tempcntb60 
  
\ifnum10>\@tempcntb0\fi\number\@tempcntb 
  
\multiply\@tempcntb60 
  
\advance\@tempcnta-\@tempcntb 
  :
\ifnum10>\@tempcnta0\fi\number\@tempcnta} 
\makeatother 
%%%% fin macro %%%%
Le package 'time' disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/generic/time.sty permet d'inclure l'heure courante dans un document.

En ajoutant la macro suivante de H. Hanche-Olsen dans le préambule de son document, on peut via la commande

%%%% debut macro %%%% 
%
\isodayandtime obtenir la date et l'heure courante : 
\begingroup 
\count0=\time \divide\count0by60 % Hour 
\count2=\count0 \multiply\count2by-60 \advance\count2by\time 
% Min 
\def\2#1{\ifnum#1<10 0\fi\the#1} 
\xdef\isodayandtime{\the\year-\2\month-\2\day\space\2{\count0}:% 
\2{\count2}} 
\endgroup 
%%%% fin macro %%%%
Autre exemple d'utilisation (qui nécessite dvips) :

%%%% debut macro %%%% 
\special{!userdict begin /bop-hook 
 {gsave -90 rotate -780 560 moveto 1.0 0.7 0.7 setrgbcolor 
 % 0.8 setgray 
 106 45 {dup mul exch dup mul add 1.0 exch sub} setscreen 
 /Times-Roman findfont 25 scalefont setfont (DRAFT 
 
\isodayandtime)  show grestore} def} 
%%%% fin macro %%%%
On peut également utiliser la macro \time qui donne l'heure en minutes. Pour afficher l'heure en heures et minutes, il faut les calculer puis les afficher avec la macro \the.

Exemple 1 :
 
\documentclass{article} 
\usepackage{french} 
\pagestyle{empty} 
\begin{document} 
Cette compilation a démarré à 
\the\time\ minutes après minuit 
le 
\today. 
\end{document} 
%%%% fin exemple %%%%
Exemple 2 :
 
\usepackage{calc} 
\newcounter{hours}\newcounter{minutes} 
\newcommand{\printtime}{% 
  
\setcounter{hours}{\time/60}% 
  
\setcounter{minutes}{\time-\value{hours}*60}% 
  
\thehours :\theminutes} 
%%%% fin exemple %%%%
Il existe également le package 'heure' de T. Bouche donné ci-dessous :

%%%% debut macro %%%% 
\NeedsTeXFormat{LaTeX2e} 
\ProvidesPackage{heure} 
[1996/6/11v0.1 affiche le jour et l'heure de production d'un 
document
] 
\newif\if@heure@fin\@heure@finfalse 
\newif\if@heure@final\@heure@finalfalse 
\DeclareOption{fin}{\@heure@fintrue} 
\DeclareOption{final}{\@heure@finaltrue} 
\DeclareOption{draft}{} 
\ProcessOptions 
%%% définition de hours prise dans testfont 
\newcount\\newcount\
\def\hours{\n=\time \divide\n 60 
  
\m=-\\multiply\m 60 \advance\\time 
  
\twodigits\n\ :\ \twodigits\m} 
\def\twodigits#1{\ifnum #1<10 0\fi \number#1} 
%%%%%%% Tant que ça n'est pas définitif. 
\if@heure@final\else 
\AtBeginDocument{\begin{center}% 
  {
\bfseries\itshape\large Version du \today\ à \hours }% 
\end{center}} 
\fi 
\if@heure@fin 
\AtEndDocument{% 
  
\begin{flushright}% 
    
\small \itshape (Le  \today\ à \hours )\hspace*{3em}% 
  
\end{flushright}} 
\fi 
\endinput 
%%%% fin macro %%%%
Utilisation : Il suffit de passer fin, final ou draft en option de classe.

Exemple 1 :
 
\documentclass[11pt,draft]{article} 
\usepackage{heure} 
\begin{document} 
Voici le résumé de notre expérience avec le Brome: 
Bla bla bla. 
\end{document} 
%%%% fin exemple %%%%
Exemple 2 :
 
\documentclass[11pt,fin]{article} 
\usepackage{heure} 
\begin{document} 
Voici le résumé de notre expérience avec le Brome: 
Bla bla bla. 
\end{document} 
%%%% fin exemple %%%%
Exemple 3 :
 
\documentclass[11pt,final]{article} 
\usepackage{heure} 
\begin{document} 
Voici le résumé de notre expérience avec le Brome: 
Bla bla bla. 
\end{document} 
%%%% fin exemple %%%%

29.36   Comment compter le nombre de mots d'un fichier ?

A priori, il n'y a pas de solution simple à ce problème :

ATTENTION :
aucune de ces méthodes n'est idéale comme l'indique l'essai comparatif de T. Bouche :
                detex -i grfguide.tex | wc -w   donne 4420 
                dvitty grfguide.dvi |wc -w      donne 4524 
                wc -w grfguide.tex              donne 4539 
                ps2ascii grfguide.ps |wc -w     donne 5066

29.37   Comment rendre inactif un caractère ?

La commande \string permet de désactiver un caractère rendu actif par une macro.

Exemple :
 
En français le : est rendu actif pour que LaTeX gère lui-même l'espace à mettre avant.  
En revanche, dans une URL ou une adresse mail cet espace est superflu. On utilise donc : 
mailto
\string:moi.meme@chez.mon.site 
%%%% fin exemple %%%%

29.38   Comment utiliser le mode verbatim dans une commande ?

LATEX 2e fournit l'environnement lrbox.

Exemple :
 
\documentclass{article} 
\usepackage{alltt} 
\pagestyle{empty} 
% --------------- 
\newsavebox{\inverbatim} 
\begin{lrbox}{\inverbatim}% 
\noindent\begin{minipage}{\linewidth} 
\begin{alltt} 
                           1 
 -8 + 7 Sqrt
[2] ArcTanh[-------] 
                        Sqrt
[2] 
\end{alltt} 
\end{minipage}% 
\end{lrbox}% box 
% ------------------------------------ 
\begin{document} 
\noindent 
L'expression : 
\usebox{\inverbatim} démontrée au paragraphe 
précédent prend ici tout son sens. 
En effet l'expression 
\usebox{\inverbatim} permet\ldots 
\end{document} 
%%%% fin exemple %%%%

29.39   Comment redéfinir la commande \year ?

Pour ne faire apparaître que deux chiffres au lieu de quatre, il faut utiliser :

\newcommand{\ignoretwo}[2]{} 
\newcommand{\shortyear}{\expandafter\ignoretwo\the\year}
dans le préambule du document.

29.40   Qu'est ce que la magnification ?

La commande magnification permet de faire un zoom d'un document.

Exemple :
 
\mag=1440 
\documentclass{...} 
%%%% fin exemple %%%%
On peut également travailler sur le fichier postscript via dvips avec l'option -x nombre où nombre vaut par exemple 1200 pour un agrandissement de 20%.

De la même manière, le package 'scale' disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/scale/ permet de modifier l'échelle d'un document avant impression.

29.41   Comment sont gérés les postscripts dans LATEX ?

P. Perichon :

TeX/LATEX + DVIPS procèdent en 2 temps :

Toutefois, certains visualiseurs DVI, par exemple XDVI sous UNIX pour ne pas le citer, détectent quelque chose du genre :

     PSfile="toto.eps" llx=0 lly=-1 urx=57 ury=29 rwi=4252
dans le fichier DVI, et appellent gentiment GostScript/GhostView qui vont préparer une image bitmap que le visualiseur DVI s'empressera de montrer (quand ça marche : avec psfig.sty pas de problème, mais avec l'extension graphicx...). Mais d'autres visualiseurs, comme DVIWIN, ne savent pas que faire d'un fichier PS.

DVI signifie DeVice Independent : ceci est un format de document indépendant du système d'impression. Donc non lié à un langage de description de page utilisé en interne par une quelconque imprimante (PostScript, PCL, HPGL, Windows GDI, ...). Il suffit après d'utiliser un convertisseur qui transforme le DVI en quelque chose que comprend votre imprimante (PostScript, HPGL, PCL, ...). Cette méthode permet d'imprimer sur n'importe quel type d'imprimante (il suffit d'avoir le bon convertisseur). Mais hélas en DVI, il n'a point été prévu d'y mettre une image (le problème n'est en effet pas simple). D'où l'utilisation de fichier EPS.

29.42   Pourquoi LATEX n'accepte-t'il pas tous les formats d'image ?

P. Perichon :

Le problème est le suivant : un fichier DVI + image TIFF, GIF, TGA,... comment faire digérer tout ça par votre imprimante ???? Le fichier DVI peut se faire convertir en un langage d'impression compréhensible par votre imprimante... mais vos formats d'images... faudrait-il en plus prévoir un système de conversion de TIFF, GIF, TGA, ... vers le langage d'impression de votre imprimante (Alladin avec GhostScript/GhostView propose quelques filtres, mais bon). A part quelques langages de description de pages comme PostScript et un ou deux autres qui pratiquent une compatibilité ascendante quant aux versions du langage qu'ils utilisent, les autres fabricants d'imprimantes changent de langage quasiment à chaque modèle ou série d'imprimante (impossible de tenir à jour autant de convertisseurs).

Pour tout cela le langage PostScript (PS et EPS) nous rend grandement service en nous simplifiant la vie (et pour d'autres raisons aussi). C'est peut-être un peu plus lourd à manipuler, mais plus simple pour tout le monde de convertir vos images en EPS. De plus, si vous ne disposez pas d'imprimante PostScript, GhostScript/GhostView se chargera d'interpréter le fichier PS (texte + images), fabriquera une bitmap à la bonne résolution et pourra l'envoyer à votre imprimante via votre pilote d'impression. Tout cela automatisé dans une bonne distribution est transparent à l'utilisateur.

Pour plus de détails, consulter le grfguide disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/packages/graphics/ et le document epslatex disponible sur ftp://ftp.fdn.org/pub/CTAN/info/.

29.43   A quoi sert la commande \(re)newenvironment ?

Les commandes \newenvironment et \renewenvironment permettent de définir des actions qui seront appliquées entre les commandes \begin{mon_environnement} et \end{mon_environnement}. Ces commandes doivent être appelées dans le préambule du document suivant la syntaxe :

        \newenvironment{nom}[nb_arg]{avant}{après}
avant et après sont les actions qui auront lieu à l'entrée et à la sortie du nouvel environnement.

Exemple :
 
\documentclass{report} 
\usepackage{french} 
\newenvironment{Relief}[1] 
{
\mbox{\Large{\uppercase{#1}}}} 
\begin{document} 
\begin{Relief} 
   {Il}était une fois
\ldots 
\end{Relief} 
\begin{Relief} 
   {U}n jour peut être
\ldots 
\end{Relief} 
%%%% fin exemple %%%%

29.44   Comment récupérer le nom du fichier compilé ?

Pour récupérer le nom du fichier compilé et l'afficher lors d'une compilation, il faut utiliser la commande \jobname.

Exemple :
 
Le fichier source est \texttt{\jobname.tex}. 
%%%% fin exemple %%%%

29.45   Comment gérer des conditions de traitement dans un style ?

Le package 'ifthen' disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/base/ permet d'implémenter des traitements conditionnels tels que \ifthenelse et \whiledo.

29.46   A quoi servent les commandes \setlength et \addtolength ?

Ces deux commandes permettent de modifier la longueur de certains paramètres.

Exemples :
 
\setlength{nom_parametre}{longueur} 
\addtolength{nom_parametre}{longueur} 
%%%% fin exemple %%%%

29.47   Quelles sont les unités de mesure de TeX ?

TeX comprend six unités de mesure :

29.48   A quoi sert la commande \mbox ?

La commande \mbox permet à LATEX de considérer son argument comme une seule entité. Elle peut ainsi empêcher la coupure d'un mot ou d'un groupe de mots.

Exemple :
 
Mon numéro de téléphone est le\mbox{01 69 63 12 68}. 
%%%% fin exemple %%%%
ce qui donne :

Mon numéro de téléphone est le 01 69 63 12 68.

29.49   Comment obtenir des points de suspension ?

La commande \ldots permet d'obtenir trois points de suspension espacés correctement.

29.50   Comment désactiver une ligature ?

Pour désactiver une ligature, il faut introduire {} ou une \mbox{} entre les lettres ligaturées.

Exemple :
 
comparez effacer, ef{}facer et ef\mbox{}facer 
%%%% fin exemple %%%%
ce qui donne :

comparez effacer, effacer et effacer

29.51   Comment gérer les versions d'un document ?

Pour les versions provisoires, voir la question ??.

Il existe le package 'vrsion' disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/vrsion/ qui permet via la commande \version d'inclure un numéro de version dans un document LATEX. Ce numéro est incrémenté à chaque compilation.

On peut également se reporter à la question ?? pour inclure le jour et l'heure de compilation dans un document.

29.52   Comment changer certains titres ?

Il suffit de renommer les variables suivantes :

   \def\refname{R\'ef\'erences}% 
   
\def\abstractname{R\'esum\'e}% 
   
\def\bibname{Bibliographie}% 
   
\def\prefacename{Pr\'eface}% 
   
\def\chaptername{Chapitre}% 
   
\def\appendixname{Annexe}% 
   
\def\contentsname{Table des mati\`eres}% 
   
\def\listfigurename{Table des figures}% 
   
\def\listtablename{Liste des tableaux}% 
   
\def\indexname{Index}% 
   
\def\figurename{{\scshape Fig.}}% 
   
\def\tablename{{\scshape Tab.}}% 
   
\def\partname{\protect\@Fpt partie}% 
   
\def\@Fpt{{\ifcase\value{part}\or Premi\`ere\or Deuxi\`eme\or 
   Troisi
\`eme\or Quatri\`eme\or Cinqui\`eme\or Sixi\`eme\or 
   Septi
\`eme\or Huiti\`eme\or Neuvi\`eme\or Dixi\`eme\or 
   Onzi
\`eme\or  Douzi\`eme\or Treizi\`eme\or Quatorzi\`eme\or 
   Quinzi
\`eme\or Seizi\`eme\or Dix-septi\`eme\or 
   Dix-huiti
\`eme\or Dix-neuvi\`eme\or Vingti\`eme\fi}}% 
   
\space\def\thepart{}}% 
   
\def\pagename{page}% 
   
\def\seename{{\emph{voir}}}% 
   
\def\alsoname{{\emph{voir aussi}}}% 
   
\def\enclname{P.J. }% 
   
\def\ccname{Copie \`a }% 
   
\def\headtoname{}% 
   
\def\proofname{D\'emonstration}% for AMS-LaTeX
Remarque : lorsque certains changements de noms sont déjà gérés par un package (french par exemple) il faut placer les définitions ci-dessus après le \begin{document}.

29.53   Comment insérer un code source dans un document ?

29.54   Comment tracer une ligne horizontale ?

Pour obtenir une ligne centrée par rapport à la mi-hauteur au dessus de la ligne d'écriture, on peut utiliser ceci :

\hbox{\raisebox{0.4em}{\vrule depth 0pt height 0.4pt width 1cm}Toto}
de qui donne :

0.4emdepth 0pt height 0.4pt width 1cmToto

29.55   Comment générer un espace invisible de taille donnée ?

Il existe pour cela la commande \phantom. Celle-ci génère un espace invisible de la même longueur que son argument.

Exemple :
 
Complète les mots qui manquent dans le texte suivant: 
Le petit chaperon 
\phantom{rouge} se promène\ldots. 
%%%% fin exemple %%%%
ce qui donne :

Complète les mots qui manquent dans le texte suivant :
Le petit chaperon rouge se promène ....

29.56   Qu'est ce qu'une correction italique ?

Pour que LATEX puisse gérer correctement le passage d'une fonte italique à une fonte droite, il peut être utile d'utiliser la commande \/. Cela permet d'augmenter légèrement l'espace qui sépare la dernière lettre en italique, de la première lettre droite.

Exemple :
 
Un \textit{cheval}\/ file au galop. 
%%%% fin exemple %%%%
ce qui donne :

Un cheval file au galop.

29.57   Quels sont les accents accessibles sous LATEX ?

Les accents accessibles sous LATEX sont les suivants :

29.58   Comment écrire dans un fichier pendant une compilation ?

On dispose pour cela des commandes \write et \newwrite.

Exemple :
 
\newwrite\test 
\openout\test=toto 
\write\test{Je m'appelle Paul} 
\write\test{\noexpand\thesection} 
\closeout\test 
\bye 
%%%% fin exemple %%%%
Remarque :
\noexpand permet d'inclure des commandes LATEX sans qu'elles soient interprêtées.
Le package 'french' propose la commande \originaloutput[fichier]{texte} pour écrire le ``texte'', tel qu'il est fourni, dans le ``fichier''. Dans ce cas, les caracteres actifs de french sont automatiquement desactivés. C'est donc l'equivalent de \immediate\write\fichier{texte}.

Le package 'sverb' disponible sur CTAN propose l'environnement verbwrite.

Exemple :
 
\begin{verbwrite}{fichier.tmp} 
   Ce texte va être sauvé dans le fichier fichier.tmp. 
\end{verbwrite} 
%%%% fin exemple %%%%

29.59   Comment gérer des compteurs ?

Un certain nombre de compteurs sont prédéfinis dans LATEX, il s'agit :

Pour définir son propre compteur, il faut utiliser la commande

\newcounter{nv_cptr}[ref_cptr]
Lorsque qu'un compteur déjà existant est passé en argument (ref_cptr), le nouveau compteur nv_cptr sera réinitialisé à chaque incrément via

\stepcounter 
ou

\refstepcounter 
du compteur ref_cptr.

Par défaut, la valeur d'un nouveau compteur est 0. La commande

\setcounter{cptr}{val} 
permet de lui donner une autre valeur. On peut également incrémenter la valeur d'un compteur via la commande

\addtocounter{cptr}{val} 
La valeur d'un compteur peut être récupérée, dans un calcul par exemple, grâce à la commande

\value{cptr}
\stepcounter{cptr} permet d'incrémenter le compteur cptr et de réinitialiser tous les compteurs liés par référence (argument ref_cptr de la commande \newcounter). La commande \refstepcounter{cptr} permet en outre de mettre à jour la valeur courante du compteur qui pourrait être appelé par un \ref.

\thecptr, où cptr est le nom d'un compteur permet d'afficher sa valeur.

Exemple :
 
\newcounter{section} 
\newcounter{subsection}[section] 
%%%% fin exemple %%%%

29.60   Quels sont les différents styles de compteurs ?

Il en existe six prédéfinis :

Exemple :
 
\renewcommand{\thesection}{\Roman{section}} 
\renewcommand{\thesubsection}{\thesection.\roman{subsection}} 
%%%% fin exemple %%%%

29.61   Comment programmer un traitement itératif ?

Le package 'multido' propose une commande \multido qui est une boucle TeX. Sa syntaxe est la suivante :

        \multido{variables}{nbiteration}{code}
Le code sera ainsi répété nbiteration fois. Les déclarations de variables sont séparées par des virgules. Un déclaration prend la forme :

        variable = valeurinitiale + increment
Elle est utile notamment pour le dessin de figures.

Exemple (doc package) :
 
\setlength{\unitlength}{1cm} 
\small 
\begin{picture}(8,1)(0,-.5) 
   
\put(0,0){\vector(1,0){8}} 
   
\multido{\i=0+1, \n=0+0.25}{8}{% 
   
\put(\i,-.1){\line(0,1){.2}} 
   
\put(\i,-.2){\makebox(0,0)[t]{\n}}} 
\end{picture} 
%%%% fin exemple %%%%

29.62   A quoi servent les commandes savebox ?

Il existe les commandes :

Exemple :
 
\newsavebox{\maboite} 
\sbox{\maboite}{\textbf{Alcatel Alsthom Recherche}} 
\usebox{\maboite} se situe à Marcoussis. Je travaille à 
\usebox{\maboite} depuis\ldots... 
%%%% fin exemple %%%%
ce qui donne :

Alcatel Alsthom Recherche se situe à Marcoussis. Je travaille à Alcatel Alsthom Recherche depuis ldots

29.63   Comment résoudre certaines incompatibilités de packages ?

Il arrive parfois lorsque plusieurs packages sont utilisés simultanément que des macros différentes portent le même nom, ou que certaines macros perturbent le fonctionnement d'autres macros. Dans certains cas le problème peut se résoudre en changeant l'ordre d'appel des packages.

Exemple (J.P. Drucbert) :
 
Le paquetage psboxit définit des commandes \psboxit qui engendrent \special{ps: ...}. Le problème vient de ce deux-points. Si vous chargez psboxit.sty AVANT babel (option french), pas de problème, le deux-points est un caractère ordinaire (other) lors de la déclaration de la macro \psboxit et donc le \special écrira bien un ``:``.

Par contre si psboxit.sty est chargé APRES babel (option french), le deux-points est alors un caractère actif au moment de la déclaration de la macro \psboxit, et le \special n'écrira pas un deux-points, mais un espace insécable (en fait une macro interne de babel) et un :, d'où les erreurs. C'est un cas classique de catcodes pas très bien gérés (en fait psboxit.sty devrait sauver le catcode de : , donner la catégorie other au caractère :, définir \psboxit, puis restaurer le catcode). %%%% fin exemple %%%%

29.64   Qu'est ce que Lollipop ?

C'est un jeu de macro de V. Eijkhout, destiné à faciliter l'écriture de macros TeX. Il est disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/lollipop/.

29.65   J'ai un problème avec babel !

En tentant d'utiliser babel, j'obtiens l'erreur suivante:

! Undefined control sequence. 
\add@accent ...l \mathchardef \accent@spacefactor 
                                                  
\spacefactor }\accent #1 #... 
l.3 
\begin{document}
Le problème est connu et a été corrigé par babel le 19 août 1999. Si vous ne pouvez pas mettre à jour votre paquetage de babel, utilisez le cache-bogue suivant, à mettre dans le préambule (donation de Javier Bezos):

\makeatletter 
\let\accent@spacefactor\relax 
\makeatother
Vous pouvez également ajouter la ligne suivante dans vos entêtes: \usepackage{t1enc}

En effet, le problème ne se manifeste pas en codage T1.

29.66   Qu'est ce que cette FAQ ?


Previous Contents Next