# TeX

TeX est un système logiciel libre de composition de documents, indépendant du matériel utilisé pour la visualisation ou l'impression. Il a été créé à partir de 1977 par le mathématicien et informaticien Donald Knuth, excédé par la piètre qualité de la typographie des logiciels d'édition de l'époque. TeX a vu le jour pour la première fois en 1978. Il est principalement conçu pour l'édition de documents techniques et est largement utilisé par les scientifiques, particulièrement en mathématiques, physique, bio-informatique, astronomie et informatique. Il est également extensible et permet notamment l'édition de documents plus complexes (affiches, plaquettes publicitaires, partitions musicales...).

## Origine et historique
### Origines du programme

Lorsque les premiers volumes du premier livre de Donald Knuth,The Art of Computer Programming, ont été publiés en 1968, ils ont d'abord été imprimés par composition au métal chaud, une technique datant du XIXe siècle qui donnait un caractère « ancien » apprécié par Knuth. Cependant, lors de la seconde édition du second volume en 1976, le livre entier a dû être recomposé parce que les éditeurs utilisaient une nouvelle technique appelée photocomposition qui ne fonctionnait plus avec les anciennes polices. En effet, les anciennes imprimeries avaient été remplacées par des imprimeries à impression photographique. Lorsque Knuth reçut les premiers essais de cette édition, il fut profondément déçu par la qualité du rendu typographique, qu’il jugea « horrible ».
Frustré par l’incapacité de cette technologie à restituer la clarté et l’élégance visuelle des textes scientifiques, Knuth décida de résoudre le problème lui-même. Il entreprit de créer un outil d’édition typographique qui ne reposerait pas sur des techniques photographiques, mais sur des principes informatiques afin d’avoir un contrôle plus précis sur la mise en page et la composition des formules mathématiques.
Knuth prévoyait initialement de le terminer en six mois pour la fin de son année sabbatique. Il prendra finalement presque 10 ans, soit de 1977 à 1989. Bien qu'il fût principalement seul à le concevoir, il reçut l'aide de nombreux collaborateurs, notamment des typographes renommés comme Hermann Zapf, Chuck Bigelow, Kris Holmes, Matthew Carter et Richard Southall.
Plutôt que de travailler dans les laboratoires de Xerox de Palo Alto, Knuth décida de poursuivre son projet dans les locaux de l’université de Stanford. Il s’inspira d’un grand nombre d’ouvrages de typographie, notamment ceux de l'ancienne collection Aldine, pour retranscrire les anciens caractères typographiques dans son programme, en utilisant des formules mathématiques. Son objectif était de comprendre la logique derrière les lettres. Cette recherche le conduisit également à développer Metafont, un logiciel permettant de créer des polices de caractères personnalisés.
Le premier prototype de TeX fut implémenté à l'été 1977 par deux étudiants de Knuth, Michael F. Plass et Frank M. Liang, selon les spécifications qu'il leur avait données. Le programme ne contenait initialement que quelques définitions de macros et d'opérations élémentaires sur les boîtes.

### Première version

La première version de TeX, également dénommé Tau Epsilon Chi, a été achevée en 1978 par Knuth sur base du prototype. Celle-ci était implémentée en langage SAIL, un langage de compilation semblable à Algol, et le premier manuel utilisateur fut rédigé durant l'été 1978.
Au début de 1979, Trabb Pardo et Knuth commencèrent à planifier une conversion du SAIL au WEB. Cela se traduira par une conversion complète entre 1979 et 1980 faite par Ignacio A. Zabala. Parallèlement, Knuth sortit la première version de Metafont en 1979.

### Deuxième version

En 1982 est publiée une nouvelle version nommée TeX82, pratiquement réécrite de A à Z. Cette version inclut notamment des idées de l'implémentation de 1979 en MESA écrite par Leonidas Guibas, Robert Sedgewick et Douglas Wyatt du centre de recherche Xerox de Palo Alto. L'algorithme de césure original fut remplacé par un nouvel algorithme écrit par Frank Liang en 1983. TeX82 utilisa une représentation à virgule fixe à la place de virgule flottante afin de renforcer la portabilité sur plusieurs hardwares. Knuth inclut également un véritable langage de programmation certifié Turing-complet sous la pression de programmeurs, notamment Guy Steele.
En août 1989, Donald Knuth entame de nouvelles modifications dans le code de TeX et Metafont. En effet, jusque-là les caractères étaient codés sur 7 bits, ce qui est suffisant pour afficher 128 lettres, soit l'alphabet anglais plus quelques caractères spéciaux, mais nettement insuffisant pour des alphabets étrangers (notamment en Europe et en Asie). Il dut donc réadapter entièrement TeX et Metafont pour fonctionner en 8 bits, soit 256 caractères différents, ce qui le rendit utilisable pour une bonne partie des langues d'Europe occidentale. Il introduisit également dans TeX la capacité de faire la césure dans d'autres langues que l'anglais, basée sur plusieurs idées de Michael J. Ferguson. TeX passa alors dans sa version stable 3.0.

### Troisième version

À partir de la version 3, TeX utilisa un système idiosyncrasique de numérotation de version, les mises à jour étant indiquées en ajoutant un chiffre supplémentaire après le point décimal, le numéro de version approchant ainsi asymptotiquement le nombre $\pi$. La version actuelle de TeX est la 3.141592653, la dernière mise à jour datant de février 2021. Les caractéristiques essentielles de TeX ont été figées après la version 3.0, et toutes les versions suivantes ne contiennent que des corrections de bugs. Donald Knuth, bien qu'ayant signalé des améliorations possibles, a insisté sur le fait qu'avoir un système fixe qui produira toujours la même sortie est plus important que d'introduire des caractéristiques nouvelles.

## Fonctionnement
### Principales caractéristiques

Dès le départ, le système TeX a été conçu afin d'être :
* ergonomique, le système étant conçu afin que les auteurs puissent directement l'utiliser, c'est-à-dire les personnes sans grande connaissance en informatique ;
* gratuit, le logiciel provenant d'une source universitaire.
Durant le développement, le logiciel devint indépendant par rapport à son support. Pour un même fichier d'entrée, il délivre le même fichier de sortie quel que soit l'ordinateur ou système d'exploitation sur lequel il est installé.

### Le langage TeX

Le langage TeX est un langage balisé. Il utilise à la fois du texte brut pour le corps du texte ainsi que des commandes commençant par une barre oblique inversée « \ ».
Les commandes reconnues par le compilateur TeX sont divisées en « primitives » (on en compte environ 300), et « macros », créées à partir des primitives. Les macros rendent possibles des structures assez complexes (boucles, conditions, etc) ainsi que la réalisation de calculs.
Afin de simplifier la préparation d'un document, D. Knuth a défini un ensemble d'environ 600 macros appelé plain TeX qui est décrit dans son livre The TeXbook en même temps que les primitives et les mécanismes internes. Cela fait qu'il y a souvent confusion entre plain TeX et le compilateur TeX. Afin d'accélérer la création d'un document, cet ensemble de macros, appelé format, est précompilé.
L'utilisation directe du format plain TeX étant assez ardue, il a été étendu en LaTeX (là encore, pas de distinction avec le nom du langage dans lequel est décrit le document que l'on appelle également LaTeX), écrit à l'origine par Leslie Lamport, qui constitue en fait un jeu de macro-commandes basées sur TeX. D'autres formats sont aussi disponibles, comme ConTeXt, AMS-LaTeX.
Les commandes TeX ont de nombreuses utilisations. Elles servent par exemple à définir les polices à utiliser, ajouter des espaces, etc.

#### Exemples

Voici un exemple de code TeX pour afficher "Hello World!".
Voici un exemple de code de formule mathématique. Celui-ci montre les solutions d'une équation du second degré.
| Balisage | Rendu |
| '"`UNIQ--syntaxhighlight-00000016-QINU`"' | ${\hbox{Les solutions de }}ax^{2}+bx+c=0{\hbox{ sont }}\textstyle {-b\pm {\sqrt {b^{2}-4ac}} \over 2a}$. |

### Le programme TeX

TeX interprète un langage de description formel de document défini par D. Knuth (couramment, on ne fait pas la distinction entre le logiciel TeX et ce langage que l'on appelle également TeX). Autrement dit, ce n'est pas un formateur de texte à rendu immédiat où le document en préparation apparaît à l'écran comme il est censé être une fois imprimé, mais un logiciel traduisant une description textuelle en un document graphique.
TeX prend en entrée un document écrit en langage TeX et crée un fichier au format dvi contenant une description des pages, c'est-à-dire les positions des caractères, images, figures, etc sur la page. Afin d'être imprimé ou exporté, le dvi doit être traduit dans un autre format reconnu par l'appareil. PostScript (pour les imprimantes notamment) et PDF sont les formats les plus populaires pour TeX.
TeX lit l'entrée octet par octet. Dans un premier temps, il va assembler ces octets en unités lexicales. Pour cela TeX utilise un système très souple de catégorisation des caractères. Dès qu'il rencontre un caractère d'échappement, il lit tout ce qui suit jusqu'à rencontrer un caractère qui n'est pas catégorisé comme une lettre. Cet ensemble de caractères est stocké comme un nom de commande. Celle-ci peut ou bien servir d'abréviation, et elle sera simplement développée lors de la composition, ou bien être exécutée, un peu comme une fonction ou une procédure d'un langage de programmation.
Certains des algorithmes utilisés par TeX sont assez complexes. Par exemple, l'un d'entre eux lit un paragraphe en entier afin de décider de l'endroit où faire un retour à la ligne. Celui de la césure est notamment décrit peu après.

#### Algorithme de césure de Frank Liang

Il a été écrit par Frank Liang lors de sa thèse de doctorat en 1983 au département informatique de Stanford. C'est cet algorithme qui détermine à quels endroits un mot doit être correctement coupé entre deux lignes. L'implémentation utilisée dans TeX, le programme Patgen, utilise peu de place et son taux de réussite se trouve vers 90-95 % de chances de trouver une césure correcte. Son principe repose sur l'utilisation de dictionnaires et sur la reconnaissance de motifs dans les mots.

#### Metafont

Metafont est un logiciel également conçu par Knuth qui permet de créer des caractères et, par extension, des polices de caractères. Bien que Metafont ne fasse pas partie de TeX à proprement parler, il reste très lié à celui-ci. En effet, la police de caractère utilisée par TeX, Computer Modern, a été conçue à l'aide de Metafont.
Metafont utilise de nombreuses techniques pour tracer les lettres, comme les courbes de Bézier. Lors de sa conception, Knuth essayait de trouver une certaine logique entre lettres. Par exemple la lettre n prend exactement 2 fois la largeur de la lettre i, la lettre m prend 3 fois la largeur de la lettre i et la lettre u prend la même largeur que la lettre n.
Sous Metafont, les lettres sont créées à partir d'équations.

## Utilisation

TeX est souvent utilisé dans les milieux académiques et scientifiques afin de produire des documents techniques, cela principalement dû à son rendu de formules et autres symboles.
Cependant, il a d'autres usages notamment dans le milieu professionnel. Il peut par exemple produire des cartes de visites, des lettres, des programmes de concert ou encore des livres (la motivation de départ de Knuth).
Il est possible d'utiliser TeX pour générer de manière complètement automatique la mise en page délicate de données XML. Ceci permet la conciliation des différences syntaxiques entre les deux langages descriptifs à l'aide de TeXML. On peut donc considérer TeX comme une alternative à XSL-FO dans le cadre de publication en XML.

### Licence

Donald Knuth a répété plusieurs fois que le code source de TeX était dans le domaine public et qu'il encourageait fortement les modifications de celui-ci. D'autre part, bien qu'il soit dans le domaine public, Knuth demande que, lorsqu'une modification de TeX est publiée, celle-ci porte une autre dénomination que TeX, pour permettre de la distinguer (exemple avec LaTeX ou ConTeXt).

## Extensions

Le compilateur TeX a fait l'objet de quelques extensions (à ne pas confondre avec des formats comme LaTeX, ConTeXt), parmi lesquelles :
* pdfTeX : crée directement des fichiers au format Portable Document Format ;
* MlTeX : multi-lingual TeX ;
* TeX-XeT : supporte les écritures allant de droite à gauche ;
* VTeX : compilateur commercial de MicroPress ;
* Omega : pour traiter des documents multilingues ;
* epsilon-TeX : ajoute quelques primitives à TeX ;
* XeTeX : une version Unicode de TeX avec gestion de polices modernes ;
* LuaTeX : une version Unicode qui embarque un interpréteur pour le langage Lua ;
* XyMTeX (en) : une extension pour afficher des formules chimiques.

## Communauté

Il existe de nombreux groupes d'utilisateurs de TeX/LaTeX de par le monde, qui sont généralement liés à une langue : GUTenberg (francophone), TUG (anglophone, signifie TeX Users Group), DANTE (germanophone), CervanTeX (hispanophone), GuIT (italophone), NTG (néerlandophone)…
Certains de ces groupes publient des journaux (les Cahiers GUTenberg, la Lettre GUTenberg, PracTeX, TUGboat…) et organisent aussi des conférences, parfois de façon conjointe (EuroTeX…).

### Chasse aux bugs

Donald Knuth encourage quiconque à trouver des bugs et des erreurs de typographie dans le code source de TeX et dans le reste de son œuvre — logiciels ou livres. Jusqu'en 2008, il offrait même une récompense (en) financière. Celle-ci s’élevait à 2,56 $ (un « dollar hexadécimal ») pour une erreur (coquille ou autre) dans un livre imprimé. Pour un bug logiciel, le montant augmentait avec l’âge : de 1,28 $ la première année d’existence du bug, il était ensuite doublé chaque année jusqu’à un plafond de 327,68 $ (soit 128 « dollars hexadécimaux », atteint après huit ans).
Malgré le grand nombre de chèques envoyés et leur montant parfois élevé, très peu d’entre eux étaient encaissés, leurs destinataires préférant les encadrer.
Depuis 2008, Knuth n’envoie plus de chèques réels, leur préférant des certificats de dépôt de la banque de la nation imaginaire de San Serriffe, pour faire jeu de mots typographique avec une police sans serif, tout en évoquant un douteux paradis fiscal offshore ; l'adresse qu'il en donne poursuit le jeu.

## Étymologie, prononciation et typographie du nom

Selon son auteur, le mot « TeX » a été créé à partir du grec ancien τέχνη / tékhnē (« art, habileté à faire quelque chose », racine étymologique du mot « technique ») ; le logotype TEX serait en fait composé des lettres grecques tau, epsilon et chi sous leur forme capitale.
Selon les époques, cette dernière lettre s’est prononcée [k] (comme k dans « kayak » et ch dans « technique ») puis [ x] (comme ch dans l'allemand « Buch » et j dans l’espagnol « Juan Carlos »). Donald Knuth recommande la seconde prononciation, [tɛx]. Cependant, le son [ x] n’étant connu ni en français ni en anglais (hors mots d’emprunt), de nombreux utilisateurs emploient plutôt la première prononciation, [tɛk].
On entend aussi, particulièrement de la part des novices, la prononciation jugée erronée [tɛks], comme dans le mot « texte ».
Le nom du logiciel s’écrit avec un « X » majuscule qui rappelle la forme du logotype, « TEX ». Ce dernier évoque les possibilités de mise en forme offertes par TeX (en l’occurrence : formules mathématiques avec exposants, indices et lettres grecques).