Suivant: Recovering from errors, Précédent: Command line input, Monter: Command line interface [Table des matières][Index]
Exécuter LaTeX crée plusieurs fichiers, dont la sortie principale en
PDF (ou DVI) et bien d’autres. Ces fichiers sont nommés selon ce qu’on
appelle le nom d’ouvrage. Le cas le plus fréquent est aussi le
plus simple : la commande pdflatex these
crée these.pdf
et
aussi these.log
et these.aux
. Ici le nom d’ouvrage est
these
.
En général, LaTeX est invoqué comme moteur-latex
options arguments
, où moteur-latex est
pdflatex
, lualatex
, etc. (voir TeX engines). Si
arguments ne commence pas par une controblique, comme c’est le
cas ci-dessus avec these
, alors TeX insère un argument
\input
en tête de la liste d’arguments arguments et
considère le texte formé en joignant les éléments de cette liste séparés
par des blancs comme un code source pris en entrée. Ainsi la ligne de
commande pdflatex these
conduit LaTeX à compiler le code
source suivant :
\input these
Ceci permet de faire une indirection vers le fichier these.tex qui est censé contenir l’entièreté du code source à compiler, et qu’on appelle à ce titre fichier racine (voir Splitting the input).
On appelle nom racine le nom du fichier racine, sans l’extension .tex s’il en a une. Voir \input, pour la gestion de l’extension .tex.
Notez bien, que si on a toujours un nom d’ouvrage, on n’a pas systématiquement de nom racine. En effet, dès lors qu’on a du code LaTeX passé sur la ligne de commande (voir Command line input), l’entièreté du code compilé n’est pas issu d’un seul fichier. En supposant ici et ci-après que le shell est bash, et donc que les guillemets anglais simples ou doubles sont interprétés par le shell (voir (info "(bash) Quoting")), considérez par exemple ligne de commande suivante :
pdflatex '\documentclass{article}\input' corps
Dans l’exemple précédent, on ne peut pas considérer corps.tex
comme un fichier racine, puisqu’il ne peut pas être compilé de façon
autonome vu qu’il ne contient pas la commande \documentclass
. Par
abus de langage on continue toutefois de parler de fichier racine si le
code LaTeX passé en ligne de commande ne sert qu’à configurer la
façon dont le fichier est compilé, comme dans :
pdflatex '\PassOptionsToClass{printout}{beamer}\input' mapresentation
où mapresenation.tex contient une présentation beamer
, et
on veut juste la compiler de façon adéquate pour une impression plutôt
que pour une projection.
Voici par contre un exemple extrême où on n’a pas de fichier racine, considérez la ligne de commande :
pdflatex fic "Bonjour tout le monde~!" '\end{document}'
ce qui conduit pdflatex à compiler le code source suivant :
\input fic Bonjour tout le monde~! \end{document}
À supposer que fic.tex soit un fichier contenant
\documentclass{minimal}\begin{document}
le résultat sera un
document PDF nommé fic.pdf et contenant le texte ‘Bonjour
tout le monde !’.
Dans la mesure où on n’a pas systématiquement de fichier racine, la
règle que TeX utilise pour déterminer implicitement le nom d’ouvrage,
c.-à-d. lorsqu’il n’est pas spécifié explicitement par l’option
-jobname
(voir Command line options), est que le nom d’ouvrage
soit le nom du fichier correspondant à l’argument passé au premier
\input
rencontré durant la compilation, débarrassé de l’extension
.tex s’il en a une. Dans l’exemple précédent, le nom d’ouvrage
est donc bien fic. Voir aussi plus bas la primitive
\jobname
pour une dérogation à cette règle.
Ce qui précède vaut également si TeX est en mode interactif, la seule
différence est alors que arguments n’est pas passé entièrement sur
la ligne de commande, mais saisi interactivement par l’utilisateur. Par
exemple si dans le shell vous tapez la ligne de commande
pdflatex
, puis qu’à l’invite de TeX vous tapez these
,
vous aurez le même résultat que dans le premier exemple donné, à savoir
si vous aviez tapé directement pdflatex these
depuis le shell.
Dans la même veine, la seule différence si arguments commence avec
une controblique est que le \input
n’est pas inséré, et donc
pdflatex "\input" these
est sensiblement équivalent à
pdflatex these
.
Il y a deux autres possibilités pour le nom d’ouvrage. Pour ce qui est de
la première, il peut être directement spécifié avec l’option
-jobname
, comme dans pdflatex -jobname=monnom
(voir Command line input pour un véritable exemple).
La seconde possibilité est texput, c’est la valeur par défaut de
repli si aucun autre nom n’est disponible pour TeX. Par exemple si
aucune option -jobname
n’a été spécifiée et que la compilation
s’arrête avant qu’une commande \input
ne soit trouvée, alors le
fichier journal s’appelle texput.log.
Au sein du document, la primitive \jobname
se comporte comme une
macro qui se développe en le nom d’ouvrage. Quand le nom d’ouvrage
contient au moins un blanc, un guillemet anglais est ajouté et début et
fin de la chaîne renvoyée par \jobname
et tout blanc est remplacé
par un espace, c.-à-d. qu’un caractère tabulation est remplacé par un
espace. De plus, au cours du développement, tous les caractères sont de
catcode 12 (other), y compris les lettres qui normalement sont de
catcode 11, mais à l’exception des espaces auquel un catcode 10 est
attribué.
À cause de cette situation des catcodes, utiliser le nom d’ouvrage dans
une expression conditionnelle peut devenir compliqué. Une solution est
d’utiliser la macro \IfBeginWith
du paquetage xtring dans
sa forme étoilée pour être insensible au catcode. Dans le texte suivant
par exemple, la note en bas de page « dont la Respublica
Bananensis Francorum. » n’est présente que si le nom d’ouvrage commence
par moi-meme.
Si une démocratie est juste un régime où les citoyens votent alors toutes les républiques bananières\IfBeginWith*{\jobname}{moi-meme}% {\footnote{dont la Respublica Bananensis Francorum.}}{} sont des démocraties.
Redéfinir \jobname
dans le code source avec un
\renewcommand
peut s’avérer vain et risqué. Tout d’abord, si
c’était ce qui vous cherchiez, cela ne changera pas le nom d’ouvrage au
sens où les fichiers créés directement par le moteur continuent à
utiliser le nom d’ouvrage original : il s’agit notamment du fichier de
sortie principale .pdf ou .dvi, du journal de compilation
.log et du fichier de liste fichiers .fls si l’option
-recorder
a été utilisée. Par contre les fichiers auxiliaires
.aux, .bib, etc. pourront être renommés car leur nom est
produit par le noyau LaTeX en développant \jobname
et non
directement par le moteur, mais à condition bien sûr que la redéfinition
soit faite avant l’ouverture des fichiers en question. Le paquetage
multibib utilise ce truc pour gérer plusieurs fichiers de
référence bibliographique.
La séquence de contrôle \jobname
se comporte comme une macro, au
sens où on peut faire dessus toutes les opérations qu’on ferait sur une
macro, et notamment la développer, mais ce n’est pas une macro, c’est
une primitive TeX. Ainsi, une seconde règle de détermination du nom
d’ouvrage est que le premier développement de \jobname
fige le
nom d’ouvrage. Dans l’exemple suivant de ligne de commande :
pdflatex '\typeout{\jobname}\input' these
le nom d’ouvrage sera la valeur par défaut texput, et non
these. En effet le code LaTeX \typeout{\jobname}
a
pour effet que \jobname
est développé avant que le premier
\input
ne soit rencontré, et donc on déroge à la première règle
énoncée plus haut, c.-à-d. que dans ce cas le nom d’ouvrage n’est pas
donné par le premier \input
.
Cette seconde règle a pour autre conséquence que dans l’exemple suivant de ligne de commande :
pdflatex '\documentclass{article}\input' corps
le nom d’ouvrage sera également texput, en effet en sous-main les
commandes \documentclass
et \RequirePackage
développent
\jobname
, et donc la seconde règle déroge à la première règle,
celle du premier \input
rencontré.
Il est à noter que ce qui précède n’était pas vrai avec de vieilles
versions de LaTeX (approximativement) antérieures à 2020. Avec ces
vieilles versions \documentclass
et \RequirePackage
faisaient un \input
sans développement préalable de
\jobname
et donc dans l’exemple précédent le nom d’ouvrage aurait
été article, ce qui était déroutant.
Par ailleurs, l’équivalence entre pdflatex "\input" these
et
pdflatex these
peut être mise en défaut lorsque le nom du fichier
comprend un blanc. Comparer par exemple les deux lignes de commande
suivantes :
pdflatex '\input' 'to\space\space to' pdflatex 'to\space\space to'
En remplaçant les espaces par des espaces visibles
␣
pour la clarté de l’exposé, la première ligne de
commande qui a un \input
explicite cherche un fichier
to.tex, ou à défaut to, et ajoute à la suite de
l’\input
de ce fichier, le code source
\space␣to
, en effet le premier des deux
\space
est consommé par l’\input
. Elle aura donc pour nom
d’ouvrage to. La seconde, qui a un \input
implicite, a par
contre un comportement qui dépend de la distribution. Avec MiKTeX elle
est équivalente à la première. Mais avec TeX Live, elle cherche un
fichier to␣␣to.tex, ou à défaut
to␣␣to, et n’ajoute rien à la suite
de l’\input
de ce fichier. Elle aura donc pour nom d’ouvrage
"to␣␣to".
Suivant: Recovering from errors, Précédent: Command line input, Monter: Command line interface [Table des matières][Index]