TeXShop (Mac)

TeXShop est apparu sur internet le 23 juillet 2000, huit mois avant la mise en vente de Mac OS X 10.0. Richard Koch, mathématicien à l'université de l'Oregon, avait écrit une interface LaTeX pour un système d'exploitation qui n'existait pas encore officiellement, et le pari fut gagnant : vingt-six ans plus tard, l'éditeur que MacTeX dépose dans /Applications/TeX/ reste TeXShop, toujours gratuit, toujours sous GPLv2, toujours réservé à macOS. Cette page parle de ce que cette histoire a laissé derrière elle — un menu de moteurs qui n'est en réalité qu'un dossier de scripts shell, les lignes % !TEX qui figent les réglages fichier par fichier, le SyncTeX en ⌘-clic — et du moment où TeXShop cesse d'être le bon outil.

Pourquoi TeXShop affiche un PDF et jamais un DVI

Parce que macOS dessine lui-même en PDF. Lorsque Apple a racheté NeXT fin 1996, le modèle d'affichage Display PostScript de NeXTSTEP a été abandonné et la couche graphique du Mac, Quartz, reconstruite sur PDF — ce qui, selon les mots mêmes de Koch, a rendu le PDF fondamental pour le système, facile à produire et trivial à afficher. Écrire un visualiseur DVI, c'était des mois de travail ; un visualiseur PDF était presque gratuit. Il venait par ailleurs de découvrir pdfTeX, alors en version 0.14, qui transformait .tex directement en .pdf sans passer par dvips. Toute la forme de TeXShop — une fenêtre source, une fenêtre d'aperçu à côté, pdflatex au milieu — découle donc d'une décision d'Apple sur la manière de dessiner des rectangles à l'écran.

Les premières versions publiques sont sorties en juillet 2000, alors que Mac OS X n'était encore qu'une bêta publique, et elles portaient un défaut spectaculaire dont Koch n'était pas responsable. Le code PDF d'Apple ne savait pas encore lire les polices incorporées : un document TeX composé en Times s'affichait magnifiquement, mais chaque formule apparaissait comme un rectangle vide. C'était précisément ce dont un mathématicien avait besoin. À la conférence des développeurs de 2000, Koch est rentré en hâte à son motel avec la dernière bêta, l'a installée, a lancé TeXShop — et les polices manquaient toujours. Apple n'a corrigé cela que pour la première version non bêta, en mars 2001. En 2002, TeXShop 1.19 a reçu un Apple Design Award, dans une catégorie consacrée aux portages open source, ce qui a fait sourciller la liste de diffusion TeX du Mac : TeXShop n'avait jamais été le portage de quoi que ce soit. Et lorsque Jonathan Kew, auteur de XeTeX, a voulu rendre TeX aussi accessible sous Windows et Linux, il a pris pour modèle, selon ses propres termes, « le TeXShop primé de Dick Koch » — ce fut TeXworks.

Installer TeXShop : il est fourni dans MacTeX

Il n'y a pas d'installeur TeXShop à chercher séparément : MacTeX l'apporte. MacTeX-2026 contient TeX Live 2026, place la distribution sous /usr/local/texlive/2026/ et installe cinq applications graphiques — TeXShop, TeX Live Utility, LaTeXiT, BibDesk et hintView — dans /Applications/TeX/. Il demande macOS 11 Big Sur ou plus récent et tourne nativement sur Intel comme sur Apple silicon. Le point essentiel pour tout ce qui suit : TeXShop ne contient aucun TeX. C'est une interface, et chaque composition ne fait que lancer pdflatex, lualatex ou latexmk depuis /Library/TeX/texbin. Supprimez TeXShop et TeX fonctionne toujours depuis le Terminal ; supprimez /usr/local/texlive/ et TeXShop ne compose plus une seule ligne.

Les deux moitiés se mettent à jour à des rythmes différents, et c'est là que beaucoup trébuchent. Les mises à jour de packages passent par TeX Live Utility, la deuxième application du dossier : à l'ouverture, elle propose tout ce que CTAN a modifié depuis la dernière fois. TeXShop, lui, se met à jour depuis la page de Koch à l'université de l'Oregon. La version 5.57 (octobre 2025) demande macOS 10.13 High Sierra ou plus récent et fonctionne jusqu'à Tahoe. Pour macOS 26 Tahoe, TUG propose un installeur supplémentaire qui ajoute TeXShop 5.58 à côté de 5.57 au lieu de le remplacer ; 5.58 est le même programme recompilé sur Tahoe, ce qui est précisément la condition pour qu'une application adopte l'apparence Liquid Glass d'Apple. Plusieurs millésimes de TeX Live peuvent cohabiter sous /usr/local/texlive/, et c'est le menu Configure de TeX Live Utility qui désigne celui qui est actif.

Le bouton Typeset, ⌘T et le menu des moteurs

⌘T enregistre le fichier puis le compose ; ce qui s'exécute réellement est décidé par le menu déroulant voisin du bouton Typeset, intitulé Program dans la barre d'outils. Ces entrées ne sont pas codées en dur dans l'application. TeXShop lit le dossier ~/Library/TeXShop/Engines/ et affiche un élément par fichier .engine qu'il y trouve — et un fichier .engine n'est rien d'autre qu'un court script shell qui reçoit le nom de fichier dans $1. Celui livré sous le nom LuaLaTeX.engine fait quatre lignes. C'est le fait le plus utile à connaître sur TeXShop : tout ce qui se tape dans le Terminal peut être placé dans ce menu. Le menu TeXShop → Open ~/Library/TeXShop mène directement au dossier.

terminal
#!/bin/tcsh

set path= ($path /Library/TeX/texbin /usr/texbin /usr/local/bin)
lualatex -file-line-error -synctex=1 "$1"

Les deux options de ce script ne sont pas là par hasard et doivent figurer dans tout moteur écrit à la main. -synctex=1 produit le fichier .synctex.gz sans lequel le ⌘-clic décrit plus bas ne fonctionne pas. -file-line-error change la forme de chaque message d'erreur : au lieu du traditionnel l.42, on obtient ./main.tex:42: Undefined control sequence. — un nom de fichier et un numéro de ligne où l'on peut sauter. La commande LaTeX interne de TeXShop transmet déjà les deux (pdflatex --file-line-error --synctex=1), les réglages par défaut sont donc sains ; ce sont les moteurs maison qui perdent silencieusement la synchronisation. Le moteur qui accueille un nouveau document est celui du dernier choix, et Préférences → Typeset → Default Command décide de la route sous-jacente — pdfTeX, TeX + DVI ou un script personnel — lorsque aucun moteur n'est nommé.

Entrée du menuCe qui est exécutéQuand la choisir
LaTeXpdflatex --file-line-error --synctex=1 (intégré)Le réglage par défaut ; suffit aux documents en alphabet latin
XeLaTeXxelatex -file-line-error -synctex=1Polices du système via fontspec, écritures mêlées
LuaLaTeXlualatex -file-line-error -synctex=1Polices du système et Lua ; premier choix pour un nouveau document japonais
pdflatexmklatexmk -pdf (pilotant pdfLaTeX)Documents avec bibliographie, index ou références croisées ; une seule pression suffit
lualatexmk / xelatexmklatexmk -pdf (pilotant LuaLaTeX / XeLaTeX)Les mêmes réexécutions automatiques sur la route Lua ou Xe
latexmklatexdvipsps2pdfAnciens manuscrits reposant sur des figures EPS ou PSTricks

Pourquoi une seule composition ne suffit pas : pdflatexmk et l'avertissement de réexécution

Si la console se termine par LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right., le PDF affiché a une compilation de retard. LaTeX écrit les étiquettes, les numéros de page et la table des matières dans .aux et .toc au premier passage et les relit au suivant : un document à références croisées demande donc réellement deux passages, et un document avec bibliographie exige bibtex ou biber entre les deux. Appuyer trois fois sur ⌘T fonctionne. Mais compter les passages n'est pas un travail humain : latexmk compare les fichiers auxiliaires et relance exactement autant de fois qu'il le faut, passages d'index et de bibliographie compris.

TeXShop livre ces moteurs mais les laisse désactivés : c'est une configuration de deux minutes, à faire une fois. Ouvrez ~/Library/TeXShop/Engines/Inactive/Latexmk/ et déplacez pdflatexmk.engine — ou lualatexmk.engine, ou xelatexmk.engine — deux dossiers plus haut, dans ~/Library/TeXShop/Engines/, puis relancez TeXShop : le nom apparaît dans le menu Program. Pour essayer sans rien déplacer, il existe un raccourci : l'élément de menu Typeset with Alternate Engine exécute ce qui figure dans Préférences → Engine → Alternate Engine, et ce champ contient déjà pdflatexmk à la sortie de l'usine. Quand une compilation devient étrange — un .aux périmé, une étiquette qui refuse de se résoudre —, la touche Option transforme Typeset en Trash Aux & Typeset (⌥⌘T), qui supprime d'abord les fichiers intermédiaires.

Les lignes % !TEX : root, TS-program et encoding

Un fichier peut transporter ses propres réglages, et dans un projet partagé il le doit. Une ligne % !TEX placée dans les vingt premières lignes d'un document est lue par TeXShop ; LaTeX l'ignore, puisque tout ce qui suit % est un commentaire. Cette asymétrie est toute l'astuce : le fichier dit lui-même à l'éditeur comment le compiler et emporte la consigne jusqu'à la machine du coauteur. Trois directives suffisent presque à tout.

DirectiveExempleEffet
% !TEX root% !TEX root = ../thesis.texNomme le fichier maître. En tête de chaque chapitre, ⌘T dans un chapitre compose la thèse entière — et SyncTeX retrouve son chemin
% !TEX TS-program% !TEX TS-program = lualatexmkNomme le moteur, d'après le nom du fichier dans Engines/ sans .engine. % !TEX program est synonyme. Prime sur le menu Program
% !TEX encoding% !TEX encoding = UTF-8 UnicodeNomme l'encodage de ce document et supplante, pour ce seul fichier, la valeur par défaut des Préférences
latex
% !TEX root = ../thesis.tex
% !TEX TS-program = lualatexmk
% !TEX encoding = UTF-8 Unicode

% This chapter has no preamble of its own.
% Pressing Typeset here builds ../thesis.tex instead.
\chapter{Method}
\label{chap:method}

Des trois, c'est root qui sauve un après-midi. Découpez une thèse en chapitres, appuyez sur ⌘T dans chapter3.tex sans cette ligne, et TeX se met à lire un fichier dépourvu de \documentclass : il s'arrête au premier texte courant sur ! LaTeX Error: Missing \begin{document}. Le chemin est relatif au fichier de chapitre ; un chapitre rangé dans chapters/ pointe donc vers ../thesis.tex. La même ligne indique à SyncTeX à quel chapitre et à quelle ligne correspond un ⌘-clic dans le PDF. Elle s'ajoute au moment où l'on découpe le document, pas la première fois que quelque chose casse.

Encodage : pourquoi un fichier .tex s'ouvre en charabia, ou pas du tout

Depuis TeXShop 4.00, la valeur d'usine est Unicode (UTF-8), et c'est la bonne réponse pour tout ce qui s'écrit aujourd'hui ; le réglage se trouve dans Préférences → Source → Encoding. Les fichiers texte ne portent aucun en-tête annonçant leur encodage : TeXShop ne peut pas deviner, et se refuse délibérément à le faire. Lorsqu'un fichier n'est pas de l'UTF-8 valide — une coautrice d'Europe de l'Ouest écrivant des trémas en IsoLatin9, un vieux manuscrit sorti des archives du laboratoire —, le décodage échoue et TeXShop propose de le rouvrir dans un encodage de repli, IsoLatin9, fixe et non configurable. Acceptez la proposition, lisez la ligne \usepackage[...]{inputenc} pour savoir ce qu'est vraiment le fichier, fermez sans enregistrer, rouvrez-le avec le bon encodage depuis la boîte de dialogue Ouvrir — et seulement alors ajoutez une ligne % !TEX encoding, pour que personne n'ait à recommencer.

La prise en charge du japonais dans TeXShop est arrivée exactement par ce chemin, et c'est la plus belle histoire de son passé. Sous Mac OS 9, les polices japonaises dessinaient la barre oblique inverse comme un signe yen, et la touche yen d'un clavier japonais émettait un octet de barre oblique inverse : \section et ¥section étaient les mêmes octets, et TeX n'y voyait rien. Puis Unicode a séparé les deux caractères, les claviers se sont mis à produire un vrai signe yen, et le TeX japonais a réagi en acceptant ¥ comme caractère d'échappement de TeX — laissant TeXShop massacrer les fichiers. Koch a entendu pendant environ un an que les utilisateurs japonais rencontraient des difficultés, jusqu'à ce que Seiji Zenitani lui envoie à la fois l'explication et le code ; on lui doit aussi la localisation japonaise. Zenitani l'a ensuite orienté vers Mitsuhiro Shishikura, mathématicien, qui a fourni une correction plus propre du problème du yen et, presque incidemment, la loupe de la fenêtre d'aperçu ainsi que l'éditeur de macros. Les deux noms figurent toujours dans les remerciements de la page de TeXShop, aux côtés de Yusuke Terada et Isao Sonobe.

Japonais et CJC : LuaLaTeX, ou upLaTeX avec dvipdfmx

Pour un document commencé aujourd'hui, choisir LuaLaTeX dans le menu Program règle la question. Il lit l'UTF-8 nativement et s'adresse aux polices déjà installées sur le Mac : avec le package luatexja ou une classe comme ltjsarticle, il compose le japonais sans machinerie supplémentaire. Pour le chinois et le coréen, XeLaTeX associé à xeCJK ou ctex occupe la même place. La seule route à éviter ici est pdflatex : pdfTeX est antérieur à l'accès commode aux polices Unicode, et y faire passer du CJC ramène au vieux package CJK et aux polices préconverties — un chemin que personne ne prend volontairement aujourd'hui.

L'autre route est upLaTeX avec dvipdfmx, la combinaison qu'emploie l'édition japonaise depuis des décennies et que présuppose en général un modèle de laboratoire hérité. TeXShop lui réserve une case à cocher : Préférences → Engine → pTeX support (for Japan) bascule les commandes intégrées vers la famille pTeX, et ~/Library/TeXShop/Engines/Inactive/Latexmk/ contient également dvipdfmxmk.engine pour piloter cette route via latexmk. Un moteur écrit à la main tient en une ligne, et cette ligne montre comment les pièces s'emboîtent : ptex2pdf est le script livré avec TeX Live qui exécute TeX puis l'étape DVI vers PDF, -l choisit LaTeX plutôt que plain, -u le upTeX compatible Unicode, et -ot transmet des options au moteur lui-même.

terminal
#!/bin/sh

# a hand-written engine: upLaTeX, then dvipdfmx, with SyncTeX enabled
ptex2pdf -u -l -ot "-synctex=1 -file-line-error" "$1"

Ce choix pèse plus lourd qu'il n'y paraît, car il ne se défait pas à bon compte. Une classe écrite pour upLaTeX (jsarticle, ujarticle) ne compile pas sous LuaLaTeX, et réciproquement — pas plus que la moitié des macros d'un modèle de thèse maison. Décidez une fois, au départ ; et si vous héritez d'un modèle qui nomme son moteur, suivez-le plutôt que de migrer une semaine avant la date limite. La ligne qui fait survivre cette décision sur le Mac d'un autre, c'est % !TEX TS-program en tête du fichier maître.

SyncTeX : passer de la source au PDF en ⌘-clic

⌘-clic, et c'est toute l'interface. ⌘-cliquez sur un mot dans l'aperçu et la fenêtre source saute à la ligne qui l'a produit (recherche inverse) ; ⌘-cliquez sur une ligne de la source et l'aperçu défile jusqu'à l'endroit correspondant (recherche avant). TeXShop prend en charge SyncTeX depuis la version 2.18, et tous les moteurs standard transmettent -synctex=1 : cela fonctionne sans rien régler — le fichier .synctex.gz qui apparaît à côté du PDF à chaque composition en est la preuve. En cas de panne, vérifiez trois choses : que le fichier a bien été composé au moins une fois depuis la dernière modification, qu'un moteur maison n'a pas perdu -synctex=1, et que Préférences → Typeset → Sync Method est réglé sur SyncTeX et non sur l'ancien pdfsync.

C'est à la relecture que cela change la manière de travailler. La boucle qui consiste à lire le PDF, repérer une phrase bancale, puis la chercher à l'œil dans trois cents lignes de source disparaît entièrement : on ⌘-clique la phrase et l'on tape. Dans un projet à plusieurs fichiers, cependant, le saut n'atterrit correctement que si chaque fichier enfant porte sa ligne % !TEX root — sans elle, TeXShop ignore quel maître a produit la page et le clic ne mène nulle part. C'est la même ligne qui fait fonctionner ⌘T depuis un chapitre, et c'est précisément pourquoi elle vaut d'être ajoutée dès qu'un document est découpé.

TeXShop, TeXworks, TeXstudio ou VS Code : lequel choisir

TeXShop l'emporte sur ce dont un débutant a réellement besoin : il n'y a rien à configurer. On installe MacTeX, on ouvre un fichier, on appuie sur ⌘T. C'est aussi remarquablement agréable une fois cette étape passée — la complétion de commandes sur la touche Échap, des macros qui peuvent être en AppleScript, des thèmes modifiables — et le dossier de moteurs fait qu'il ne refuse jamais d'exécuter une commande qu'il ne connaît pas. Ses limites sont tout aussi nettes : pas de barre latérale de projet, pas de gestion de versions intégrée, pas de compilation au fil de la frappe, et rien du tout sur une machine qui n'est pas un Mac.

  • Sur Mac, en solo, sans envie de perdre du temps en configuration : TeXShop est le bon choix par défaut — le menu Program et les lignes % !TEX couvrent presque tout.
  • Besoin des mêmes sensations sous Windows ou Linux : TeXworks, conçu sur le modèle de TeXShop, se transpose presque tel quel.
  • Envie d'un explorateur de structure, de palettes de symboles et d'une gestion bibliographique dans une seule fenêtre : TeXstudio ou Texmaker.
  • Déjà installé dans un éditeur avec Git, LSP et terminal : VS Code avec LaTeX Workshop, MacTeX restant en dessous.
  • Des coauteurs qui n'installeront rien : Overleaf comme lieu commun, TeXShop comme copie locale pour la dernière passe.