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.
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.
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.
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.
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.
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.
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.
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 nom pour babel est russian
, et le changement de langue est
nécessaire pour que la police soit disponible. Rien d'autre à signaler.
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.
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.