Accueil > LaTeX > Compilation en série > XeLaTeX et Latexmk
XeLaTeX et Latexmk
jeudi 19 janvier 2017, par
La version 4.52 de Latexmk
vient de sortir. Elle intègre directement le support de XeLaTeX. Ceci ne facilite pas que la création d’un fichier de configuration, mais permet de gagner un temps substantiel lors de la compilation. Explications.
Rappel : ce qu’est Latexmk
La compilation complète d’un document LaTeX suit en général les étapes suivantes :
– compilation (Xe)LaTeX
– compilation Biber [1]
– compilation (Xe)LaTeX
– encore une compilation (Xe)LaTeX pour s’assurer que tous les liens soient corrects et que la table des matières soit bien positionnée.
Cependant, il faut parfois plus de compilation, parfois moins, parfois il faut compiler deux fois avec Biber [2].
Or, il est difficile de déterminer à l’avance le nombre de compilations à exécuter.
Latexmk
est un logiciel qui permet d’automatiser le processus sans se soucier du nombre de compilations. Pour se faire, Latexmk
lance d’abord une compilation (Xe)LaTeX, puis regarde les fichiers intermédiaires produits (.aux
, .bcf
etc) et lance alors les scripts tels que Biber, puis à nouveau (Xe)LaTeX, jusqu’à ce que le contenu des fichiers intermédiaires soit stabilisé. On est ainsi assuré d’exécuter exactement toutes les compilations nécessaires, mais pas une de plus.
En outre, Latexmk
indique en fin de compilation les clefs bibliographiques indéfinies et les labels problématiques.
Compatibilité avec XeLaTeX
Les anciennes versions de latexmk
ne prenaient pas directement XeLaTeX en charge, et il fallait ajouter des lignes dans le fichier de configuration latexmkr
les lignes suivantes :
$pdflatex = "xelatex %";
$pdf_mode = "1";
La nouvelle version de latexmk
prend directement en charge XeLaTeX. Pour ce faire, il suffit :
– soit de lancer latexmk
avec l’option -xelatex
: latexmk -xelatex fichier.tex
– soit de mettre dans son fichier de configuration latexmkrc
(à côté des sources à compiler) ou .latexmkrc
(dans son répertoire utilisateur [3]) la ligne suivant :
$pdf_mode = 5;
Avantage de la compatibilité directe avec XeLaTeX
"À quoi bon écrire un article juste pour expliquer une petite modification de configuration ?" me diriez-vous. En réalité, le fait que latexmk
gère directement XeLaTeX permet d’accélérer la compilation.
En effet, lorsque vous compilez avec XeLaTeX, celui-ci ne produit pas directement un fichier .pdf
, mais passe par un fichier .xdy
intermédiaire, qu’il transforme ensuite en fichier .pdf
.
Le processus est transparent pour l’utilisateur, si bien que vous ne voyez pas ce fichier intermédiaire.
Mais si vous consultez le fichier de log de XeLaTeX, vous devrez trouver la ligne suivante :
File: l3xdvidpfmx.def 2016/08/18 v6679 L3 Experimental driver: xdvipdfmx
Cette ligne indique que le programme xdvipdfmx
est appelé pour convertir les .xdy
en .pdf
.
Cette transformation est toutefois chronophage. C’est pourquoi, lorsque Latexmk
est configuré pour utiliser XeLaTeX
, il appelle ce dernier de sorte à ne produire que le fichier .xdy
. Puis, lorsque les fichiers intermédiaires sont stabilisés, latexmk
appelle xdvipdfmx
pour produire le .pdf
final à partir du .xdy
.
Ainsi, si vous avez trois compilations XeLaTeX, xdvipdfmx
n’est appelé qu’une fois, et non trois fois. Autant de temps et d’énergie gagnés.
[1] Ou BibTeX si vous êtes de l’ancienne école… mais dans ce cas vous ne lisez pas mon blog…
[2] Si vous utilisez mon package pour gérer les manuscrits avec BibLaTeX
[3] Ou ailleurs sur l’ordinateur pour partage entre plusieurs utilisateurs, voir la documentation de latexmk
.
Messages
26 septembre 2017, 18:41, par Carg
Bonjour,
Merci pour cette information. Pardon pour cette question naïve, mais j’ai un fichier de configuration .latexmkrc qui commence actuellement par :
Est-ce que je dois conserver la seconde ligne définissant $pdflatex :
Merci !
26 septembre 2017, 18:42, par Maïeul
Non justement, le but est de ne pas avoir cette deuxième ligne.
13 octobre 2021, 11:11, par Joseph Tux
Merci pour cet article (et pour tous les autres !)
Dans mon ancien .latexmkrc, j’avais mis les 3 lignes suivantes :
$pdflatex= "xelatex - -shell-escape %S"
$pdfmode=1
$makeindex = "texindy -L french -I xelatex %S"
pour utiliser xindy.
avec la seule ligne que vous préconisez, est-il possible de mettre
$xelatex= "xelatex —shell-escape %S"
ou une autre façon d’imposer l’option « - -shell-excape » exigé par xindy (si j’ai bien compris !) ?
Voir en ligne : https://joseph-tux.fr
13 octobre 2021, 18:11, par Joseph Tux
Merci pour cet article (et pour tous les autres !)
Dans mon ancien .latexmkrc, j’avais mis les 3 lignes suivantes :
$pdflatex= "xelatex - -shell-escape %S"
$pdfmode=1
$makeindex = "texindy -L french -I xelatex %S"
pour utiliser xindy.
avec la seule ligne que vous préconisez, est-il possible de mettre
$xelatex= "xelatex —shell-escape %S"
ou une autre façon d’imposer l’option « - -shell-excape » exigé par xindy (si j’ai bien compris !) ?