
Diese einfache Datei zeigt auf Englisch einen Fehler an, lässt sich auf Portugiesisch jedoch problemlos kompilieren:
\documentclass{report}
\usepackage[english]{babel}
%\usepackage[portuges]{babel}
\begin{document}
\ro
\end{document}
Warum sollte \ro
es in einer Sprache definiert sein und in der anderen nicht? Wie findet man heraus, was auf Portugiesisch definiert ist ? Welche anderen Befehle sind auf diese Weise definiert? Im Babel-Handbuch \ro
wird davon nichts erwähnt .\ro
Antwort1
Wie findet man heraus, was
\ro
auf Portugiesisch „to“ bedeutet?
Um herauszufinden, wie ein Befehl definiert ist, verwenden Sie \show
. Wenn man ihn ausführt \show\ro
und in der Protokolldatei nachsieht, findet man:
> \ro=macro:
->$^{\rm o}$.
l.8 \show\ro
Dies bedeutet, dass (a) \ro
es sich um ein Makro und nicht um ein TeX-Grundelement handelt; (b) seine Definition auf hinausläuft \def\ro{$^{\rm o}$}
; und (c) es im Textmodus und nicht im Mathematikmodus verwendet werden soll.
Ich bin kein Experte für Portugiesisch, aber ich glaube, dass „erster, zweiter, dritter“ in Langform als „primeiro, segundo, terceiro“ geschrieben wird und, unter Verwendung der LaTeX/babel-Eingabenotation, wie 1\ro, 2\ro, 3\ro
in Kurzform. Angesichts der \ro
oben gezeigten Definition von lasse ich Sie raten, wie die Ausgabe von 1\ro, 2\ro, 3\ro
aussieht.
Es ist also eindeutig \ro
dazu gedacht, eine Kardinalzahl in eine Ordinalzahl zu „umzuwandeln“ (im typografischen Sinne!). Beachten Sie, dass while \ro
kein explizites Argument benötigt und nicht allein verwendet werden soll, sondern in Verbindung mit einer Ziffer.
Im Portugiesischen sind im Übrigen sowohl männliche als auch weibliche Ordinalzahlen bekannt. Um die abgekürzte Form von „primeira, segunda, terceira, quarta“ zu erzeugen, würde man sie als eingeben 1\ra, 2\ra, 3\ra, 4\ra
. Beispielsweise könnte „a quarta vez“ („das vierte Mal“) als abgekürzt werden a 4\ra~vez
.
Warum sollte
\ro
es in einer Sprache definiert sein und nicht in der anderen?
Ähm, weil die typografischen Anforderungen in verschiedenen Sprachen unterschiedlich sind?
Im englischen Schriftsatz besteht offensichtlich kein Bedarf für das \ro
oder das \ra
Makro. „First, second, third“ sinddefinitiv nichtin abgekürzter Form geschrieben wie 1\textsuperscript{o}, 2\textsuperscript{o}, 3\textsuperscript{o}
in einem englischsprachigen Dokument. Darüber hinaus gibt es im Englischen keine Unterscheidung zwischen männlichen und weiblichen (geschweige denn neutralen!) Ordnungszahlen.
Es gibt mehrere LaTeX-Pakete, die den Satz von Ordinalzahlen vereinfachen und standardisieren. Ein solches Paket istNicola Talbots fmtanzahl, das das Makro bereitstellt \ordinalnum
und eine große Anzahl sprachspezifischer Anpassungen bietet. (Abgesehen davon: Das fmtcount
Paket bietet neben dem Makro noch viele weitere Funktionen ordinalnum
...) Tatsächlich
\documentclass[portuguese]{report}
\usepackage{babel,fmtcount}
\begin{document}
1\ro, \ordinalnum{1}, 2\ra, \ordinalnum{2}[f]
\end{document}
zweimal ergibt die Ziffer "1" gefolgt von einem hochgestellten Buchstaben "o" sowie zwei Vorkommen der Ziffer "2" gefolgt von einem hochgestellten Buchstaben "a". (Ich lasse Sie raten, was \ordinalnum{2}
ergibt, wenn babel
mit der Option geladen wird english
.)
Es ist nützlich, sich daran zu erinnern, dass das babel
Paket schon lange existiert und dass daher viele der babel
sprachspezifischen Satzfunktionen von lange vor dem Aufkommen von Paketen wie erstellt wurden fmtcount
. Sicherlich ist die sprachspezifische Heterogenität, die man babel
heute in vorfindet, viel größer, als wenn das Paket heute von Grund auf von Grund auf neu geschrieben würde. (Abgesehen davon: Wenn das portuges
Modul von babel
heute geschrieben würde, würde man wahrscheinlich auch \def\ro{$^{\rm o}$}
und \def\ra{$^{\rm a}$}
durch \def\ro{\textsuperscript{o}}
bzw. ersetzen \def\ra{\textsuperscript{a}}
, aber das ist ein anderes Thema.)
Antwort2
Mehrere Sprachdefinitionsdateien babel
sind schlecht dokumentiert.
Wenn Sie tuntexdoc babel-portuges
(auf einem Terminal oder durch Klicken auf den Link) sehen Sie ganz am Ende
obwohl die LDF-Datei angeblich erst vor kurzem überarbeitet wurde. Ich vermute, dass diese Definitionen schon vor langer Zeit hinzugefügt wurden, ganz am Anfang der babel
Geschichte. Mehrere LDFs haben ähnlichead hocDefinitionen für verschiedene Sprachen und es ist wirklich lästig, weil sie mit Benutzer- oder Paketbefehlen in Konflikt geraten könnten.
Angenommen, Sie definieren in Ihrem englischen Dokument einen Befehl namens \ord
oder \ro
(ersterer könnte beispielsweise für einen mathematischen Operator verwendet werden): Der Befehl wird gut funktionieren. Beim Hinzufügen von \usepackage[portuges]{babel}
würde die Kompilierung jedoch angehalten: Ein Dokument wie
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[portuges]{babel}
\usepackage{amsmath}
\DeclareMathOperator{\ord}{ord}
%[...]
würde aufhören mit
! 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}
Gibt es Workarounds? Beachten Sie, dass das Entfernen dieser Definitionen aus portuges.ldf
vorhandene Dokumente in Portugiesisch \ord
, die , \orda
, \ro
oder verwenden, beschädigen würde \ra
.
Aber fürdeinDokument können Sie im jeweiligen Dokument nachschlagen, was der fehlerhafte Befehl bedeutet, und entscheiden, ob Sie ihn benötigen oder nicht. Mit könnten Sie beispielsweise \ord
einen Workaround hinzufügen wie
\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}
%[...]
weil das Original \ord
nur zum Textmodus gehört.
Antwort3
Ich würde grundsätzlich davon abraten, Legacy-Befehle aus babel
Definitionsdateien zu verwenden.
DerStandardbefehle für diesesind \textordmasculine
und \textordfeminine
. Diese funktionieren in jeder Sprache und erfordern nicht babel
.
Sie können die Zeichen ª und º auch wie gewohnt in Ihren Editor eingeben. Sie funktionieren in jeder aktuellen Version von LaTeX.
Alle diese Befehle sind für den Textmodus. Wenn Sie sie aus irgendeinem Grund im Mathematikmodus verwenden möchten, müssen Sie das Wort in einen Befehl wie einschließen \textnormal{1º}
. Dadurch wird wieder in den Textmodus gewechselt.
Bei modernen Versionen von PDFTeX sollten alle diese Befehle standardmäßig funktionieren. Bei älteren Installationen müssen Sie möglicherweise die folgenden Zeilen zu Ihrer Präambel hinzufügen:
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage[utf8]{inputenc}
Unter LuaLaTeX oder XeLaTeX möchten Sie stattdessen moderne Schriftarten aktivieren mit
\usepackage{fontspec}
Gefolgt von \setmainfont
. Viele Schriftartpakete richten die Kodierungen jedoch richtig für Sie ein.
Einige Schriftarten haben einen Balken unter diesen Symbolen, andere nicht. Wählen Sie also eine, die Ihren Wünschen entspricht. Wenn Sie eine Version ohne Unterstreichung und eine Schriftart mit Unterstreichung wünschen, können Sie
\renewcommand\textordmasculine{\textsuperscript{o}}
\renewcommand\textordfeminine{\textsuperscript{a}}