TeX

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
Page d'aide sur l'homonymie Pour les articles homonymes, voir Tex.
TeX
Logo

Image illustrative de l'article TeX

Développeur Donald KnuthVoir et modifier les données sur Wikidata
Première version Voir et modifier les données sur Wikidata
Dernière version 3.14159265 ()[1]Voir et modifier les données sur Wikidata
Écrit en WEB et PascalVoir et modifier les données sur Wikidata
Environnement multiplate-forme
Type Logiciel de composition (d)
Langage de programmation
Langage de balisageVoir et modifier les données sur Wikidata
Licence Licence publique générale GNUVoir et modifier les données sur Wikidata
Site web http://www.tug.org/

TeXprononciation ou TeX est un système logiciel libre de composition de documents, indépendant du matériel utilisé pour la visualisation ou l'impression. TeX fut 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. 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...). TeX vient de τεχ, début du mot τέχνη (« art, science », en grec ancien), et se prononce /tɛx/[2] ou /tɛk/, au choix.

Origine et historique[modifier | modifier le code]

Lorsque le premier volume de The Art of Computer Programming fut publié en 1968, le premier livre de Donald Knuth, celui-ci était encore imprimé par composition par métal chaud, une technique datant du 19ièmesiè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 réimprimé 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é par des imprimeries à impression photographique. Lorsque Knuth reçu les premiers essais de son deuxième livre, il les trouva horribles[3]. Tant et si bien qu'il décida de résoudre le problème et de réaliser lui-même son outil d'édition typographique qui ne serait d'aucun ressort photographique mais bien informatique[4].

Knuth prévoyait initialement de le terminer en 6 mois pour la fin de son année sabbatique. Il prendra presque 10 ans au final, soit de 1977 à 1989. Bien qu'il fut seul à le développer, il reçut cependant de l'aide de nombreux collaborateurs dont Hermann Zapf, Chuck Bigelow, Kris Holmes, Matthew Carter ou encore Richard Southall[5].

Décidant d'aller travailler dans les locaux de Stanford au lieu des laboratoires Xerox de Palo Alto[6], Knuth se mit au travail sur TeX lors du printemps 1977. En tenant comme référence un grand nombre de livres de typographie, notamment ceux de la collection Gunst[Quoi ?], il se mit en tête de retranscrire les anciens caractères dans son programme en utilisant des formules mathématiques, en tentant de comprendre la logique derrière les lettres. C'est ainsi qu'il se mit à travailler sur son propre logiciel de polices de caractères Metafont.

Le premier prototype de TeX fut conçu pendant l'été 1977 par 2 étudiants[Quoi ?], MIchael F. Plass et Frank M. Liang, d'après les spécifications de Knuth. Il ne contenait initialement que quelques définitions de macro et d'opérations élémentaires sur les boites[7].

La première version de TeX fut achevée en 1978 par Knuth sur base du prototype. Il était alors implémenté en langage SAIL. Le premier manuel utilisateur de TeX est écrit lors de l'été par Knuth.

Au début de 1979, Trabb Pardo et Knuth commencent à planifié une conversion du SAIL au WEB. Cela se traduira par une conversion complète entre 1979 et 1980 faite par Ignacio A. Zabala[Qui ?]. Parallèlement, Knuth sortit la première version de Metafont en 1979.

En 1982 est publiée une nouvelle version nommée TeX82, pratiquement réécrite de A à Z. Cette version inclue 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 (en) original fut remplacé par un nouvel algorithme écrit par Frank Liang en 1983. TeX82 utilise une représentation à virgule fixe à la place de virgule flottante pour renforcer la portabilité sur plusieurs hardware[8]. Elle inclus également un véritable langage de programmation certifié Turing-complet suivant les pressions de Guy Steele[Qui ?][9].

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 des caractères spéciaux, mais nettement insuffisant pour les 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 rend utilisable pour une bonne partie des langues d'Europe occidentale[10]. Il introduisit également la capacité à TeX de faire la césure dans d'autres langages que l'anglais, basé sur plusieurs idées de Michael J. Ferguson. TeX passa alors dans sa version stable de 3.0.

À partir de la version 3, TeX a utilisé un système idiosyncratique 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 [11]. La version actuelle de TeX est la 3.14159265, la dernière mise à jour datant du 12 janvier 2014[12]. 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[modifier | modifier le code]

Principales caractéristiques[modifier | modifier le code]

Dès le départ, le système TeX fut conçu afin d'être :

  • ergonomique, le système étant conçu afin que les auteurs puisse directement l'utiliser, c'est-à-dire les personnes sans grandes connaissances informatiques.
  • gratuit, le logiciel provenant d'une source académique.

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 quelque soit l'ordinateur ou système d'exploitation sur lequel il est installé.

Le langage TeX[modifier | modifier le code]

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 contre-oblique « \ ».

Les commandes reconnues par le compilateur TeX sont divisées en « primitives » (on en compte environ 300), et « macros », créées à partir des précédentes[Quoi ?]. 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 (en)

Les commandes TeX ont de nombreuses utilisations. Elles servent par exemple à définir quelles polices à utiliser, ajouter des espaces, etc.

Exemples[modifier | modifier le code]

Voici un exemple de code TeX pour afficher "Hello World!".

Hello World!
\bye
%\Bye désigne la fin du fichier

Voici un exemple de code de formule mathématique. Celui-ci montre la formule quadratique.

Balisage Rendu

La formule quadratique est $-b \pm \sqrt{b^2 - 4ac} \over 2a$
\bye
 

Le programme TeX[modifier | modifier le code]

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 qui soit 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, il lit un paragraphe en entier pour décider 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[modifier | modifier le code]

Il a été écrit par Frank Liang lors de sa thèse de doctorat en 1983 au département informatique de Stanford. C'est lui qui détermine où correctement couper dans un mot entre deux lignes. L'implémentation utilisée dans TeX 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 patterns (ou motifs) dans les mots[13].

Il procède en deux étapes :

  1. Avant toute chose, TeX vérifie que le mot concerné ne fait pas partie d'exceptions en regardant dans un dictionnaire définissant les points de césure pour les mots spéciaux.
  2. Si il n'en trouve pas, il passe à la reconnaissance de patterns (motifs). Ces patterns sont contenu dans un autre dictionnaire et correspondent à des ensembles de lettres redondants.

Avant toute chose, TeX entoure le mot concerné de marqueurs spéciaux. Prenons le mot coquelicot. Avec ces marqueurs, cela donne : . c o q u e l i c o t .. Ensuite nous découpons le mot en sous-mots de longueur k, le découpage précédent correspondant à une longueur 1. Voici à titre d'illustration le découpage en longueur 2 et puis 3 :

. c co oq qu ue el li ic co ot t .

. co oqu que uel eli lic ico cot ot .

et ainsi de suite.

Chaque sous-mot (ou motif) de longueur k possède k+1 coefficients entier de poids de césure. Ce poids permet de savoir où il est préférable de couper le mot. Le coefficient est un chiffre compris entre 0 à 9 et est placé entre chaque lettre. Un poids de 0 signifie qu'il est absolument interdit de couper entre ces deux lettres, un poids pair désigne une interdiction de couper (comme 0) et un poids impair une préférence pour couper. Si deux motifs s'affrontent, celui ayant le plus de poids l'emporte.

Par exemple dans les mots périscope et discophile, nous avons le pattern scop. Cependant ils se coupent différemment, pé-ri-scope et dis-co-phile. Les patterns seront alors 1s2c0o0p0, 0i2s3c0o0p0e0 et 0d0i3s4c0o0p0. Par défaut le 1ier schéma s'applique. Si il y a concurrence avec un autre pattern, on prend les coefficients plus grands.

Comme ces motifs sont dépendant des mots, il est donc impératif d'avoir un dictionnaire de mots (et d'exceptions) propre à chaque langue.

Metafont[modifier | modifier le code]

Article principal : Metafont.
Logo de Metafont
Logo de 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 soit pas partie de TeX à proprement dit, 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 afin de tracer les lettres, comme par exemple 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[14].

Pour créer des lettres avec Metafont, il faut décrire les lettres à l'aide d'équations mathématiques.

Utilisation[modifier | modifier le code]

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.

License[modifier | modifier le code]

Donald Knuth a répété plusieurs fois que le code source de TeX était dans le domaine public[15] et qu'il encourageait fortement les modifications de celui-ci. D'autres 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[modifier | modifier le code]

Le compilateur TeX a fait l'objet de quelques extensions (à ne pas confondre avec des formats comme LaTeX, ConTeXt), parmi lesquelles :

Communauté[modifier | modifier le code]

Logo TUG
Logo communauté anglophone de TeX
Article détaillé : Groupe d'utilisateurs de TeX.

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…).

Références[modifier | modifier le code]

  1. http://mirrors.ctan.org/systems/knuth/dist/tex/tex.web
  2. (en) Donald E. Knuth, The TeXbook, Ch. 1: The Name of the Game, p. 1
  3. (en) Donald Knuth E., Digital Typography, p.5 :

    « "I had spent 15 years writing those books, but if they were going to look awful I didn't want to write any more" »

  4. (en) « Interview of Donald Knuth - Deciding to make my own typesetting program » [vidéo], sur webofstories.com, (consulté le 7 juin 2017)
  5. (en) Donald E. Knuth, Computers & Typesetting, Volume E: Computer Modern Typefaces, Massachussetts, Addison-Wesley, , 483 p. (ISBN 0-201-13448-9), p. Introduction
  6. (en) « Interview de Donald Knuth - Working on my typesetting program » [vidéo], sur webofstories.com, (consulté le 7 juin 2017)
  7. (en) Donald E. Knuth, TeX : The Program, vol. B, Addison-Wesley, (1re éd. 1986), 600 p. p. (ISBN 0-201-13437-3), p2
  8. Knuth and Plass, p. 144
  9. (en) Christina Thiele, « Knuth meets NTG members », sur aanhet.net, (consulté le 7 juin 2017)
  10. (en) Donald E. Knuth, « The New Versions of TeX and METAFONT », sur TUGboat, (consulté le 7 juin 2017)
  11. (en) Donald E. Knuth. The future of TeX and METAFONT, NTG journal MAPS (1990), 489. Réimprimé comme chapitre 30 de Digital Typography, p. 571.
  12. (en) « En-tête du code source de TeX », donnant la liste des mises à jour.
  13. (en) Donald E. Knuth, The TeXBook, vol. A, American Mathematical Society et Addison Wesley, , Appendix H - p449
  14. (en) « Interview de Donald Knuth - Mathematical formula for letter shapes » [vidéo], sur webofstories.com, (consulté le 7 juin 2017)
  15. (en) Donald Knuth, « Computers and Typesettings » [PDF], sur TUGboat, 1995-1998 (consulté le 11 juin 2017)

Voir aussi[modifier | modifier le code]

Articles connexes[modifier | modifier le code]

Bibliographie[modifier | modifier le code]

Liens externes[modifier | modifier le code]

Sur les autres projets Wikimedia :