Suivant: , Précédent: , Monter: Command line interface   [Table des matières][Index]


28.3 Nom d’ouvrage de TeX

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

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: , Précédent: , Monter: Command line interface   [Table des matières][Index]