Langues exotiques

Dans cette page, nous allons voir comment utiliser LaTeX pour taper des langues « exotiques ». Par là, nous entendons des langues qui s'écrivent avec autre chose que l'alphabet latin, comme le russe ou le japonais.

Le point sur la situation

Anciennes et nouvelles méthodes

LaTeX a été conçu avant tout par des Américains, et à ce titre, prévu pour taper de l'anglais. Comme l'auteur principal est quelqu'un de soigneux, il est assez facile de rajouter des accents, et même de taper autre chose que de l'alphabet latin. Mais facile ne veut pas dire pratique : avec la manière directe de procéder, le code source d'un mot en grec ancien risque d'être moins lisible que les jurons de Fantasio.

Heureusement, LaTeX est programmable, et des extensions ont été écrites pour permettre plus de confort. Hélas, ces extensions sont toutes plus ou moins incompatibles entre elles, et souvent plutôt plus que moins. Par exemple, si vous voulez taper du français et du grec, vous avez un choix exclusif entre taper confortablement les caractères accentués français et taper confortablement les mots grecs.

Plus récemment, l'informatique a vu le développement d'Unicode, un système qui résout les problèmes de langues dans les fichiers textes (un fichier .tex est un fichier texte. L'architecture de LaTeX ne l'a pas rendu facile, mais petit a petit, il est devenu possible de bénéficier de ce progrès.

Difficultés encore présentes

Unicode résout certains problèmes, mais ne les résout pas tous. Le principal est bien sûr celui des polices : votre texte aura beau contenir, informatiquement parlant, des idéogrammes chinois, si ces idéogrammes ne sont disponibles dans aucune police que connaît LaTeX, vous n'irez pas loin.

Ensuite, Unicode est conçu pour la saisie du texte, pas son rendu : Unicode traite des entités plus ou moins abstraites appelées caractères, qui n'ont pas nécessairement un rapport direct avec les glyphes qu'on veut voir dans un document imprimé. Pour les langues européennes, ça se passe plutôt bien, mais certaines langues, l'arabe et surtout les langues indiennes, ont des interactions entre caractères très complexes : ligatures, réordonnancement, combinaisons, etc. Unicode n'aplanit pas ces difficultés, il se contente de fournir un point d'entrée confortable à une extension qui le fait — si elle existe.

Enfin, LaTeX est conçu presque exclusivement pour l'écriture de gauche à droite. Ses algorithmes sont incapables de gérer l'écriture de droite à gauche de l'arabe et de l'hébreu, et l'écriture en colonnes.

Finalement, qu'est-ce qui marche ?

Après toutes ces considérations défaitistes, on en vient à se demander s'il est possible de taper autre chose que de l'anglais. Voici une petite liste de ce qui marche bien.

La distribution standard de LaTeX comporte des polices latines, grecques et cyrilliques. Des polices chinoises et japonaises sont également disponibles, mais parfois plus techniques à installer. Il y en a installées à l'ENS.

Comment faire

Préparation

Avant de commencer, il y a un pré-requis qui n'est pas spécifique à LaTeX : savoir taper un texte quelconque, dans la langue qui vous intéresse, en Unicode. Heureusement, nous avons une documentation sur les éditeurs en Unicode, que nous vous invitons à lire avant d'aller plus loin si ce n'est déjà fait.

Tout ce que vous avez à faire maintenant, c'est de créer votre fichier LaTeX avec votre éditeur en Unicode. Nous allons voir dans un instant ce qu'il faut mettre dans le préambule.

Attention, sur certains PC FreeBSD, c'est une ancienne version de LaTeX qui est installée. Si vous éprouvez des problèmes, regardez la deuxième ligne des messages lors de la compilation : si elle indique « LaTeX2e <1999/12/01> patch level 1 », changez de machine (en vous loguant à distance, c'est le plus simple).

Ce qu'il faut écrire

Dans le cas général, il n'y a quasiment rien à changer. Il suffit d'avoir la ligne suivante dans le préambule :

\usepackage[utf8]{inputenc}

(à la place de l'habituel latin1). Avec cette ligne, un texte en alphabet latin étendu (y compris œ, , , , , , , , etc., tapés directement) fonctionne directement.

Pour d'autres langues, il faut quelques options supplémentaires, et en particulier informer babel du changement de langue.

Babel polyglotte

Jusqu'a présent, vous n'avez probablement utilisé du package babel que la ligne \usepackage[francais]{babel}. Il est temps d'apprendre à l'utiliser pour d'autres langues. Par chance, c'est assez simple. La première chose à faire est de charger les bons modules :

\usepackage[greek,russian,francais]{babel}

La dernière langue mentionnée est la langue « principale » du document, celle qui est sélectionnée s'il n'y a pas d'indication contraire. L'ordre des autres langues n'a pas d'importance.

Il faut ensuite, tout au long du texte, indiquer les changements de langue. Trois commandes permettent de faire ça :

\selectlanguage{langue}

sélectionne une nouvelle langue pour tout le reste du texte, ou jusqu'à la prochaine rencontre avec la même commande. De manière surprenante, cette commande s'échappe des groupes et des environnements ; à utiliser avec prudence donc.

\begin{otherlanguage}{langue}
\end{otherlanguage}

sélectionne une langue pour l'étendue de l'environnement. Aucune surprise ici.

\foreignlanguage{langue}{blabla}

sélectionne une langue pour le texte « blabla », et s'utilise de la même manière que \emph.

Souvent, des commandes plus compactes sont disponibles spécifiquement pour une langue donnée (comme \textgreek pour \foreignlanguage{greek}).

Attention, il est souvent nécessaire de bien informer LaTeX du changement de langue. En effet, le changement de langue s'accompagne d'un changement de police (plus précisément, d'encodage de police), ce dont LaTeX ne prend pas l'initiative tout seul.

Dans le cas d'un texte comportant beaucoup de mots étrangers, par exemple le commentaire en français d'un texte grec, changer sans arrêt de langue est fastidieux, même en ayant défini une macro très courte. Il est possible d'automatiser ça en utilisant le package autofe. Attention cependant si vous optez pour cette solution : si dans un mot certains caractères sont disponibles dans la police actuelle et d'autres pas, ce mot sera rendu avec un mélange de polices, ce qui peut être très laid, et vous n'aurez aucun avertissement. De plus, au delà de quelques mots, il faut quand même expliciter le changement de langue, faute de quoi la typographie et, plus grave, la césure ne respecteront pas les règles spécifiques.

Langue par langue, en détail

Le grec

Le nom pour babel est simplement greek. La commande \textgreek{blabla} est définie pour avoir le même effet que \foreignlanguage{greek}{blabla}. Le changement de langue est nécessaire pour que la police soit disponible.

Quand le grec est actif, LaTeX utilise une sorte de translittération depuis l'alphabet latin, avec des conventions pour les accents et les esprits. Mais comme nous travaillons en UTF-8, c'est inutile et nous n'en parlons pas.

Le cyrillique

Le nom pour babel est russian, et le changement de langue est nécessaire pour que la police soit disponible. Rien d'autre à signaler.

Le chinois

Là, ça se complique un peu, il faut quelques packages supplémentaires. Voici ce qu'il faut mettre dans le préambule pour du chinois traditionnel :

\usepackage[cjkbg5]{ucs}
\usepackage[utf8]{inputenc}
\usepackage[C00,T1]{fontenc}
\DeclareFontSubstitution{C00}{sng}{m}{n}

et pour du chinois simplifié :

\usepackage[cjkgb]{ucs}
\usepackage[utf8]{inputenc}
\usepackage[C10,T1]{fontenc}
\DeclareFontSubstitution{C10}{sng}{m}{n}

Les deux ont la même structure. La première ligne indique quelle interprétation choisir pour un caractère qui aurait le mauvais goût d'être commun au chinois simplifié, au chinois traditionnel et au japonais. La troisième ligne charge l'encodage nécessaire (C00 pour le chinois traditionnel, C10 pour le simplifié), ainsi que l'encodage occidental (faute de quoi ça ne marche pas). Enfin, la dernière ligne indique quelle famille de police employer par défaut pour cet encodage, ici Arphic SungtiL (sng). Deux autres polices sont disponibles ici, Arphic KaitiM (kai), très ornée, et Bitstream Cyberbit (cyb), qui n'est pas libre. Il est possible de changer de police en modifiant la ligne \DeclareFontSubstitution ou en utilisant la commande \fontfamily.

Quelques points supplémentaires à savoir. D'abord, babel n'a pas de mode pour le chinois. Pour éviter des bizarreries typographiques, il peut être bon de passer babel en mode anglais pour un bout de chinois. Ensuite, ce mode de saisie n'est pas capable de couper automatiquement entre les idéogrammes ; il est nécessaire d'insérer des espaces à la main. Peut-être dans un avenir proche un package résoudra-t-il le problème.

L'installation de polices chinoises pour LaTeX est assez acrobatique, et pas complètement standard. Les indications ci-dessus fonctionneront normalement sur l'installation LaTeX de l'ENS, mais il n'est pas sûr du tout que ce soit le cas ailleurs ; en particulier, les noms des polices (pour le \DeclareFontSubstitution) peuvent varier considérablement.

Le japonais

Là, ça se complique un peu, il faut quelques packages supplémentaires. Voici ce qu'il faut mettre dans le préambule :

\usepackage[cjkjis]{ucs}
\usepackage[utf8]{inputenc}
\usepackage[C42,T1]{fontenc}
\DeclareFontSubstitution{C42}{dg}{m}{n}

La première ligne indique quelle interprétation choisir pour un caractère qui aurait le mauvais goût d'être commun au japonais et au chinois. La troisième ligne charge l'encodage nécessaire (C42 pour le japonais), ainsi que l'encodage occidental (faute de quoi ça ne marche pas). Enfin, la dernière ligne indique quelle famille de police employer par défaut pour cet encodage, ici Wadalabe DG (dg). Trois autres polices Wadalabe sont disponibles ici, dm, mc et mr. Il est possible de changer de police en modifiant la ligne \DeclareFontSubstitution ou en utilisant la commande \fontfamily. La police (non-libre) Bitstream Cyberbit est également disponible sous le nom cyb, mais il faut dans ce cas remplacer partout C42 par C40, et donc exclure d'utiliser les polices Wadalabe.

Quelques points supplémentaires à savoir. D'abord, babel n'a pas de mode pour le japonais. Pour éviter des bizarreries typographiques, il peut être bon de passer babel en mode anglais pour un bout de japonais. Ensuite, ce mode de saisie n'est pas capable de couper automatiquement entre les caractères ; il est nécessaire d'insérer des espaces à la main. Peut-être dans un avenir proche un package résoudra-t-il le problème.

L'installation de polices japonaises pour LaTeX est assez acrobatique, et pas complètement standard. Les indications ci-dessus fonctionneront normalement sur l'installation LaTeX de l'ENS, mais il n'est pas sûr du tout que ce soit le cas ailleurs ; en particulier, les noms des polices (pour le \DeclareFontSubstitution) peuvent varier considérablement.

Auteur : Nicolas George.