Babel - Unterschied zwischen Sprachen

Babel - Unterschied zwischen Sprachen

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 \roes 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 \rowird davon nichts erwähnt .\ro

Antwort1

Wie findet man heraus, was \roauf Portugiesisch „to“ bedeutet?

Um herauszufinden, wie ein Befehl definiert ist, verwenden Sie \show. Wenn man ihn ausführt \show\round in der Protokolldatei nachsieht, findet man:

> \ro=macro:
->$^{\rm o}$.
l.8 \show\ro

Dies bedeutet, dass (a) \roes 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\roin Kurzform. Angesichts der \rooben gezeigten Definition von lasse ich Sie raten, wie die Ausgabe von 1\ro, 2\ro, 3\roaussieht.

Es ist also eindeutig \rodazu gedacht, eine Kardinalzahl in eine Ordinalzahl zu „umzuwandeln“ (im typografischen Sinne!). Beachten Sie, dass while \rokein 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 \roes 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 \rooder das \raMakro. „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 \ordinalnumund eine große Anzahl sprachspezifischer Anpassungen bietet. (Abgesehen davon: Das fmtcountPaket 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 babelmit der Option geladen wird english.)

Es ist nützlich, sich daran zu erinnern, dass das babelPaket schon lange existiert und dass daher viele der babelsprachspezifischen Satzfunktionen von lange vor dem Aufkommen von Paketen wie erstellt wurden fmtcount. Sicherlich ist die sprachspezifische Heterogenität, die man babelheute in vorfindet, viel größer, als wenn das Paket heute von Grund auf von Grund auf neu geschrieben würde. (Abgesehen davon: Wenn das portugesModul von babelheute 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 babelsind schlecht dokumentiert.

Wenn Sie tuntexdoc babel-portuges(auf einem Terminal oder durch Klicken auf den Link) sehen Sie ganz am Ende

Bildbeschreibung hier eingeben

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 babelGeschichte. 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 \ordoder \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.ldfvorhandene Dokumente in Portugiesisch \ord, die , \orda, \rooder 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 \ordeinen 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 \ordnur zum Textmodus gehört.

Antwort3

Ich würde grundsätzlich davon abraten, Legacy-Befehle aus babelDefinitionsdateien zu verwenden.

DerStandardbefehle für diesesind \textordmasculineund \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}}

verwandte Informationen