Babel - Différence entre les langues
Ce fichier simple qui montre une erreur en anglais et se compile très bien en portugais:
\documentclass{report}
\usepackage[english]{babel}
%\usepackage[portuges]{babel}
\begin{document}
\ro
\end{document}
Pourquoi serait \rodéfini dans une langue et pas dans l'autre? Comment savoir ce qui est \rodéfini en portugais? Quelles autres commandes sont définies de cette manière? Il n'y a aucune mention de \rodans le manuel Babel.
Réponses
Comment savoir ce qui est
\rodéfini en portugais?
Pour savoir comment une commande est définie, utilisez \show. En courant \show\roet en regardant dans le fichier journal, on trouve:
> \ro=macro:
->$^{\rm o}$.
l.8 \show\ro
Cela dit que (a) \roest une macro, pas une primitive TeX; (b) sa définition se résume à ; et (c) il est censé être utilisé en mode texte, pas en mode mathématique.\def\ro{$^{\rm o}$}
Je ne suis pas un expert en portugais, mais je crois que "premier, deuxième, troisième" est écrit en forme longue comme "primeiro, segundo, terceiro" et, en utilisant la notation d'entrée LaTeX / babel, comme 1\ro, 2\ro, 3\roen abrégé. Compte tenu de la définition de \roci-dessus, je vous laisse deviner à quoi 1\ro, 2\ro, 3\roressemble la sortie de .
Clairement, alors, \roest censé être utilisé pour "convertir" (dans un sens typographique!) Un nombre cardinal en un nombre ordinal. Observez que même s'il \rone prend pas d'argument explicite, il n'est pas destiné à être utilisé seul, mais plutôt en conjonction avec un chiffre.
Soit dit en passant, le portugais connaît à la fois les ordinaux masculins et féminins; pour générer "primeira, segunda, terceira, quarta" sous forme abrégée, on les saisirait sous la forme 1\ra, 2\ra, 3\ra, 4\ra. Par exemple, "a quarta vez" ("la quatrième fois") pourrait être abrégé en a 4\ra~vez.
Pourquoi serait-
\roil défini dans une langue et non [dans] l'autre?
Ummm, parce que les besoins typographiques diffèrent d'une langue à l'autre?
Bien sûr, dans la composition en langue anglaise, il n'y a pas besoin apparent de la \roou de la \ramacro. «Premier, deuxième, troisième» ne sont certainement pas écrits sous forme abrégée comme 1\textsuperscript{o}, 2\textsuperscript{o}, 3\textsuperscript{o}dans un document en anglais. De plus, l'anglais ne fait pas de distinction entre les ordinaux masculins et féminins (encore moins neutres!).
Il existe plusieurs packages LaTeX qui simplifient et normalisent la composition des nombres ordinaux. Un de ces packages est fmtcount de Nicola Talbot , qui fournit la macro et qui propose un grand nombre d'adaptations spécifiques au langage. (A part: le package fournit de nombreuses autres fonctionnalités en plus de la macro ...) Effectivement,\ordinalnumfmtcountordinalnum
\documentclass[portuguese]{report}
\usepackage{babel,fmtcount}
\begin{document}
1\ro, \ordinalnum{1}, 2\ra, \ordinalnum{2}[f]
\end{document}
produit deux fois le chiffre "1" suivi d'une lettre de taille de script de niveau exposant "o", ainsi que deux instances du chiffre "2" suivies d'une lettre de taille de script de niveau exposant "a". (Je vais vous laisser deviner ce qui \ordinalnum{2}produit si babelest chargé avec l'option english.)
Il est utile de se rappeler que le babelpaquet existe depuis longtemps et donc que de nombreuses fonctions de babelcomposition spécifiques à un langage ont été créées bien avant l 'avènement de paquets tels que fmtcount. Bien sûr, l'hétérogénéité spécifique à la langue dans laquelle on trouve babelactuellement est beaucoup plus grande que si le package était écrit à partir de zéro aujourd'hui de manière descendante. (A part: si le portugesmodule de babelétait écrit aujourd'hui, on remplacerait probablement aussi et par et , respectivement, mais c'est un problème différent.)\def\ro{$^{\rm o}$}\def\ra{$^{\rm a}$}\def\ro{\textsuperscript{o}}\def\ra{\textsuperscript{a}}
Plusieurs fichiers de définition de langue pour babelsont mal documentés.
Si vous le faites texdoc babel-portuges(sur un terminal ou en cliquant sur le lien), vous verrez, à la toute fin,
même si le fichier LDF aurait été révisé très récemment. Je suppose que ces définitions ont été ajoutées il y a longtemps, au tout début de l' babelhistoire. Plusieurs LDF ont des définitions ad hoc similaires pour différentes langues et c'est vraiment une nuisance, car elles pourraient entrer en conflit avec les commandes utilisateur ou package.
Supposons que vous définissiez dans votre document anglais une commande nommée \ordou \ro(la première pourrait être utilisée pour un opérateur mathématique, par exemple): la commande fonctionnera bien. Lors de l'ajout \usepackage[portuges]{babel}, cependant, la compilation s'arrêterait: un document tel que
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[portuges]{babel}
\usepackage{amsmath}
\DeclareMathOperator{\ord}{ord}
%[...]
s'arrêterait avec
! LaTeX Error: Command \ord already defined.
Or name \end... illegal, see p.192 of the manual.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
l.6 \DeclareMathOperator{\ord}{ord}
Existe-t-il des solutions de contournement? Notez que la suppression de ces définitions de portuges.ldfromprait les documents existants en utilisant le portugais \ord, \orda, \roou \ra.
Mais pour votre document, vous pouvez rechercher dans le document spécifique ce que signifie la commande incriminée et décider si vous en avez besoin ou non. Par exemple, avec \ord, vous pouvez ajouter une solution de contournement telle que
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[portuges]{babel}
\usepackage{amsmath}
% fix an incompatibility
\let\babelord\ord
\DeclareRobustCommand{\ord}{%
\ifmmode\expandafter\ordop\else\expandafter\babelord\fi
}
\DeclareMathOperator{\ordop}{ord}
%[...]
car l'original \ordn'appartient qu'au mode texte.
Je recommande généralement de ne pas utiliser les commandes héritées des babelfichiers de définition.
Les commandes standard pour cela sont \textordmasculineet \textordfeminine. Ceux-ci fonctionnent dans n'importe quelle langue et ne nécessitent pas babel.
Vous pouvez également saisir les caractères ª et º dans votre éditeur de la même manière que vous le feriez normalement. Ils fonctionneront dans n'importe quelle version récente de LaTeX.
Toutes ces commandes sont destinées au mode texte. Si, pour une raison quelconque, vous souhaitez les utiliser en mode mathématique, vous devez envelopper le mot dans une commande telle que \textnormal{1º}. Cela repasse en mode texte.
Sur les versions modernes de PDFTeX, toutes ces commandes devraient fonctionner par défaut. Sur les installations plus anciennes, vous devrez peut-être ajouter les lignes suivantes à votre préambule:
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage[utf8]{inputenc}
Sur LuaLaTeX ou XeLaTeX, vous souhaitez plutôt activer les polices modernes avec
\usepackage{fontspec}
Suivi par \setmainfont. Cependant, de nombreux packages de polices configureront correctement les encodages pour vous.
Certaines polices ont une barre sous ces symboles, et d'autres pas, alors choisissez celle qui correspond à vos préférences. Si vous voulez une version sans soulignement, avec une police qui leur en donne un, vous pouvez redéfinir
\renewcommand\textordmasculine{\textsuperscript{o}}
\renewcommand\textordfeminine{\textsuperscript{a}}