TeXworks

« L’homme qui a écrit XeTeX a ensuite écrit un éditeur presque dépourvu de fonctions. » TeXworks part de là. Après avoir donné à TeX l’Unicode et les polices du système, Jonathan Kew s’est attaqué à un autre problème : le nombre d’endroits où un débutant en LaTeX peut se perdre. Sa conférence au TUG s’intitulait « TeXworks: lowering the barrier to entry », abaisser la barrière d’entrée. TeXworks n’a donc ni gestion de projet, ni script de compilation, ni arborescence de fichiers sur le côté. Une fenêtre, un bouton, et une seule chose à choisir : le moteur. Cette page explique quelles distributions fournissent réellement TeXworks (la réponse dépend de la plateforme, et bien des présentations se trompent), comment réécrire son unique écran de configuration — les outils de composition — et comment une seule ligne % !TeX root tient lieu de gestion de projet.

TeXworks est l’œuvre de l’auteur de XeTeX

TeXworks est l’œuvre de Jonathan Kew, l’auteur de XeTeX. Son modèle fut TeXShop de Richard Koch, longtemps le choix par défaut sur Mac. Kew a estimé que la disposition sans apprêt de TeXShop — source et PDF côte à côte dans une seule fenêtre — convenait bien aux débutants, et TeXworks apporte cette sensation à Windows et à Linux. Les environnements intégrés alors disponibles sous Windows comptaient tout simplement trop de boutons pour qui découvrait LaTeX. La réponse de Kew ne fut pas d’ajouter des fonctions, mais de réduire le nombre de décisions.

Cette rareté est concrète. À l’ouverture, TeXworks présente une zone d’édition, dans la barre d’outils une liste déroulante de moteurs flanquée d’un bouton triangulaire vert, et un second volet affichant le PDF. Pas d’arborescence, pas de plan des chapitres, pas de fichier de configuration de compilation. L’interface est écrite en Qt et se présente de la même façon sous Windows, macOS et Linux ; la licence est la GPL v2 et l’encodage par défaut UTF-8. L’outillage embarqué est lui aussi réduit — complétion des commandes, aide à la saisie, vérification orthographique. Lorsque cela ne suffit plus, les greffons de script Lua et Python, facultatifs, permettent d’ajouter ses propres traitements (ce sont des options de compilation ; Lua est actif par défaut, Python non). Le numéro de version mérite d’être signalé : plus de dix ans après la première publication, il en est toujours à la série 0.6, avec une petite mise à jour vers février la plupart des années. Empiler des fonctions en route vers une 1.0 n’a jamais été le projet.

Quelles distributions fournissent TeXworks

Sous Windows, il est très probablement déjà installé : le programme d’installation de MiKTeX comme celui de TeX Live pour Windows déposent TeXworks sur la machine. Sous macOS et sous Linux, en revanche, il n’accompagne pas la distribution. Que TeX Live ne livre que l’exécutable Windows n’est pas une conjecture : c’est écrit dans la base de paquets texlive.tlpdb de TeX Live elle-même. La description du paquet texworks indique « TeX Live includes executables and support files only for Windows », et la collection qui l’englobe, collection-texworks, s’intitule « TL includes only the Windows binary ».

terminal
# from texlive.tlpdb, the package database TeX Live installs from
name texworks
category TLCore
shortdesc friendly cross-platform front end
longdesc TeX Live includes executables and support files only for Windows.
postaction shortcut type=menu name="TeXworks editor" \
           cmd=TEXDIR/bin/windows/texworks.exe

C’est là que naît la confusion. TeX Live embarque aussi une courte note, texmf-dist/doc/texworks/README, qui affirme que TeX Live inclut un binaire Windows et MacTeX un binaire macOS. Mais cette note date de 2009, et ce sur quoi s’appuie réellement l’installateur, c’est la base de paquets. L’éditeur graphique que fournit MacTeX aujourd’hui s’appelle TeXShop, pas TeXworks. Sous Linux, TeXworks est entièrement découplé de TeX Live et arrive sous la forme du paquet texworks de la distribution. En somme, la phrase « TeXworks est fourni avec TeX Live » est vraie sous Windows, et seulement là.

ProvenancePlateformeCe que l’on obtient
MiKTeXWindowsfourni comme éditeur par défaut
TeX LiveWindowstexworks.exe, une entrée du menu Démarrer et l’association des fichiers .tex
MacTeXmacOSl’éditeur fourni est TeXShop ; TeXworks s’installe à part
apt / dnf / pacmanLinuxinstaller le paquet texworks, distinct de TeX Live

La liste déroulante de composition et les Processing tools

Tout ce que TeXworks sait de la compilation tient dans une seule liste déroulante, à gauche de la barre d’outils. On y choisit le moteur (pdfLaTeX, XeLaTeX, LuaLaTeX, ConTeXt, etc.) ; une pression sur le triangle vert voisin ou sur Ctrl/Cmd-T compile le document ouvert et fait apparaître l’aperçu PDF. Des auxiliaires comme BibTeX et MakeIndex sont enregistrés dès le départ, si bien qu’un document ordinaire atteint le PDF sans qu’on ait jamais ouvert les réglages.

Cette liste se réécrit à volonté. Edit → Preferences → onglet Typesetting place dans sa moitié inférieure la liste Processing tools, avec + pour ajouter, - pour retirer et Edit... pour modifier. Un outil ne comporte que quatre éléments : le Name affiché dans la liste déroulante, le Program à lancer, les Arguments et la case View PDF after running. L’accident le plus fréquent concerne les Arguments : il faut y mettre un argument par ligne. Ce n’est pas une ligne de commande de shell ; écrire -interaction=nonstopmode %.tex d’un seul tenant transmet toute la chaîne comme argument unique, et le moteur part à la recherche d’un fichier au nom très étrange.

Les Arguments acceptent des variables propres à TeXworks. $fullname, qui désigne le fichier traité, est la plus connue, mais il en existe cinq ; pouvoir n’extraire que l’extension ou que le répertoire est précisément ce qui rend exprimables les parcours passant par DVI et l’appel des auxiliaires. Les variables sont développées juste avant le lancement de l’outil.

VariableCe qu’elle produit
$fullnamele fichier traité, extension comprise (par exemple main.tex)
$basenamele nom de fichier sans extension (par exemple main)
$suffixl’extension seule (par exemple tex)
$directoryle chemin absolu du répertoire du document
$synctexoption-synctex=1 si l’outil gère SyncTeX, chaîne vide sinon

Enregistrer latexmk comme un outil unique

Ce qui manque à TeXworks, c’est la tête qui décide du nombre de passes. Des références croisées bloquées sur ??, un \tableofcontents toujours en retard d’une version : autant de questions de nombre de compilations, et TeXworks ne compte pas à votre place. L’usage est donc de confier entièrement ce jugement à latexmk et de ne garder du côté de TeXworks qu’un seul outil qui l’appelle. Mettre latexmk dans Program, saisir les Arguments un par ligne comme ci-dessous, et cocher View PDF after running.

terminal
-e
$pdflatex=q/pdflatex $synctexoption %O %S/
-pdf
$fullname

En japonais, la voie établie de longue date consiste à composer avec upLaTeX et à produire le PDF avec dvipdfmx. Le TeXworks livré avec TeX Live contient déjà des outils japonais, mais pour en créer un soi-même, ptex2pdf est le plus court car il enveloppe les deux étapes. Mettre ptex2pdf dans Program et les Arguments comme suit (-l choisit le format LaTeX, -u choisit upLaTeX, -ot introduit les options supplémentaires transmises à TeX). Le réglage fin de latexmk fait l’objet d’une autre page ; seul l’appel importe ici.

terminal
-l
-u
-ot
-kanji=utf8 -no-guess-input-enc $synctexoption
$fullname

L’outil le plus utilisé se désigne comme moteur de composition par défaut en haut de l’onglet Typesetting ; les documents ouverts ensuite l’emploieront. Lorsqu’un fichier réclame un autre moteur, le commentaire magique de la section suivante prend le pas sur ce réglage.

% !TeX root : la ligne qui remplace la gestion de projet

Dès que le document se scinde en fichiers par chapitre appelés depuis un parent par \input ou \include, l’absence de toute notion de « projet » dans TeXworks devient gênante. Composer alors que chapter1.tex est ouvert échoue, et pour cause : ce fichier ne contient ni \documentclass ni \begin{document}. Un autre éditeur demanderait ici de créer un projet et d’y déclarer un document maître ; la réponse de TeXworks fut d’écrire une seule ligne en tête du fichier.

latex
% !TeX root = main.tex

\chapter{Introduction}
The body of the chapter goes here.

Pour TeX, ce n’est qu’un commentaire — tout ce qui suit % —, mais TeXworks lit les premières lignes d’un fichier et adapte son comportement. Cette ligne présente, composer depuis le fichier de chapitre amène TeXworks à compiler à la place le fichier parent (racine). Le chemin s’écrit relativement au fichier enfant. L’élégance tient à ce que l’information réside dans le fichier et non dans un réglage : un fichier de projet se casse au changement de machine, tandis qu’une ligne de commentaire part dans le dépôt et fonctionne encore chez le coauteur. La convention vient de TeXShop, et d’autres éditeurs que TeXworks lisent la même ligne.

Il existe d’autres commentaires magiques. % !TeX program = ... fixe le moteur employé pour ce document. Attention : ce qui s’écrit là n’est pas le nom du fichier exécutable mais le Name de l’outil tel qu’il est enregistré dans les Preferences — non pas pdflatex, mais l’intitulé exact affiché dans la liste. L’ancienne graphie % !TeX TS-program = ... a le même sens. % !TeX encoding = ... déclare l’encodage du fichier ; TeXworks utilisant UTF-8 par défaut, elle sert rarement quand on écrit en UTF-8. Placé en tête d’un document japonais, % !TeX program fait tourner le bon moteur même si l’on oublie de changer la liste déroulante.

latex
% !TeX program = upLaTeX (ptex2pdf)
% !TeX encoding = UTF-8
\documentclass{ujarticle}
\begin{document}
\input{chapter1}
\end{document}

TeXworks et TeXstudio : différences et moment de changer

La différence ne tient pas au nombre de fonctions mais à l’objectif de conception. TeXworks est optimisé pour réduire les endroits où l’on peut se perdre ; TeXstudio, Texmaker et Kile le sont au contraire pour mettre à portée tout ce dont on pourrait avoir besoin. Dire que « TeXworks a moins de fonctions » décrit donc son cahier des charges, ce n’est pas un jugement ; le bon axe de comparaison est ce qui coûte actuellement du temps. Si deux des points suivants au moins sont vrais, il est temps d’envisager un changement.

  • Le nombre de fichiers a grandi et l’on bute sans cesse sur des fichiers enfants où la ligne % !TeX root manque.
  • Une base bibliographique est entrée en jeu et la recherche des clés \cite dans une autre fenêtre prend un temps réel.
  • La compilation n’est plus un unique passage de pdfLaTeX, et la liste des Processing tools s’est remplie d’entrées.
  • Le même manuscrit doit désormais être produit avec plusieurs moteurs, pdfLaTeX et LuaLaTeX par exemple.

Lire le journal et les fichiers auxiliaires

C’est justement parce que rien d’autre n’encombre l’écran que TeXworks se prête bien à l’acquisition du réflexe de lire le journal. Le panneau de sortie après une composition dit plus que la seule production d’un PDF : références non résolues, packages introuvables et images non chargées y figurent tels quels. Une ligne comme ! Missing $ inserted ou ! Undefined control sequence est la première erreur, et le numéro de ligne qui la suit constitue le véritable indice. TeXworks est conçu pour faire lire plutôt que pour s’arrêter à votre place ; sauter ce panneau revient à en perdre la moitié.

  • Si les références restent à ??, recomposer une fois de plus avec le même outil pour que .aux soit rafraîchi (un outil latexmk le fait tout seul).
  • Ne supprimer .aux et .toc qu’après un remaniement important de la table des matières ou de la bibliographie, puis reconstruire ; les conserver est normalement plus rapide.
  • Quand une image n’apparaît pas, comparer le nom de fichier du journal au chemin réel. Éviter les espaces et les caractères hors ASCII dans les noms de fichiers.
  • Quand la liste des Processing tools se remplit, déplacer la logique de compilation dans un .latexmkrc et revenir à un unique outil latexmk.

Réglages de SyncTeX : recherche avant et inverse

TeXworks embarque un aperçu PDF intégré fondé sur Qt et Poppler : l’édition et la vérification se font dans la même fenêtre, sans lancer de visionneuse externe. La recherche avant — d’un point de la source vers l’endroit correspondant du PDF — se fait par Ctrl/Cmd-clic dans la source ; la recherche inverse, du PDF vers la ligne source, par Ctrl/Cmd-clic dans l’aperçu. Aucun réglage n’est requis : les outils fournis portent déjà $synctexoption dans leurs Arguments, ce qui fait écrire au moteur la table de correspondance .synctex.gz dont dépendent les sauts. Si la synchronisation échoue avec un outil écrit à la main, vérifier d’abord que cette variable n’a pas été oubliée. Le fonctionnement interne de SyncTeX fait l’objet d’une page distincte.