Globale option "english" verwirrt babel-Zweisprach

Fragen und Probleme, die nicht den obigen Kategorien zugeordnet werden können


NextThursday
Forum-Newbie
Forum-Newbie
Beiträge: 2
Registriert: Do 4. Okt 2012, 13:42

Globale option "english" verwirrt babel-Zweisprach

Beitrag von NextThursday »

Hallo zusammen,

nachdem ich alle meine Probleme in den letzten Jahren durch "suchen&lesen" lösen konnte (danke an dieser Stelle mal an alle freundlichen Helfer) bleibt folgendes nun offen, auf das ich erst beim erstellen einer Wrapper-class gestoßen bin, allerdings tritt es mit allen Klassen auf - alle Suchergebnisse waren immer auf den "main language last" Fehler bezogen, oder haben sich mit einer der anderen u. a. Lösungen zufriedengegeben.

Folgendes MWE erzeugt korrekt ein "englisches" Dokument,
also ein Leeres Dokument mit der Überschrift "Contents".
\documentclass[]{book}
\usepackage[ngerman,english]{babel}
\begin{document}\tableofcontents\end{document}
Folgendes MWE dagegen erzeugt ein "deutsches" Dokument
also ein Leeres Dokument mit der Überschrift "Inhaltsverzeichnis".
\documentclass[english]{book}
\usepackage[ngerman,english]{babel}
\begin{document}\tableofcontents\end{document}
Wie kann das sein? Laut babel-doc sollte die documentclass in der Lage sein STATT der package-Option zu funktionieren. Also wäre selbst wenn babel damit die Wahl hat english oder ngerman,english zu nehmen, müsste das Ergebnis doch so oder so in englisch sein.

Ich weiß, dass ich für folgende Fälle einen korrekten Output bekomme:
\documentclass[ngerman,english]{book}
\usepackage[ngerman,english]{babel}
\begin{document}\tableofcontents\end{document}
\documentclass[english]{book}
\usepackage[english]{babel}
\begin{document}\tableofcontents\end{document}
Diese Fälle sind allerdings aufgrund der Komplexität und dem Einsatzzweck der Wrapper-Class nicht gewünscht bzw. nicht möglich (Alle Dokumente sollen zweisprachig sein, allerdings soll die Hauptsprache von deutsch durch eine einfache Class-option auf englisch umstellbar sein.

Hab ich irgendetwas überlesen? Das scheint mir ein Bug in der Optionsabwicklung innerhalb von babel zu sein. Falls irgendwer eine Idee hat wäre mir echt geholfen. Natürlich wäre ein Ausweg die Classoption umzubennen, ich dacht nur wenn ich hier wirklich auf einen Bug gestoßen bin (und mir das jemand bestätigen kann mit etwas mehr Erfahrung als meinen 2 Jahren) wäre es ja sinnvoll darauf aufabauend die package maintainer zu informieren und nicht nur stillschweigend einen Hotfix zu nutzen.

Schönen Gruß,
Peter

Benutzeravatar
cgnieder
Forum-Meister
Forum-Meister
Beiträge: 730
Registriert: Fr 22. Okt 2010, 18:37
Wohnort: Herrenberg
Kontaktdaten:

Beitrag von cgnieder »

Da kann babel nichts dafür:
\documentclass[optB]{article}

\usepackage{filecontents}
\begin{filecontents}{testpaket.sty}
\ProvidesPackage{testpaket}
\DeclareOption{optA}{\def\usedoption{opt A}}
\DeclareOption{optB}{\def\usedoption{opt B}}
\ProcessOptions*\relax
\endinput
\end{filecontents}

\usepackage[optA,optB]{testpaket}

\begin{document}

\usedoption

\end{document}
Es liegt vielmehr daran, wie \ProcessOptions die globalen Optionen und die Paketoptionen verarbeitet. Details dazu findest Du im clsguide.

Grüße

PS: entferne mal den * nach \ProcessOptions und schaue was passiert
Zuletzt geändert von cgnieder am Fr 5. Okt 2012, 11:14, insgesamt 1-mal geändert.
Clemens
Paketauthor

NextThursday
Forum-Newbie
Forum-Newbie
Beiträge: 2
Registriert: Do 4. Okt 2012, 13:42

Beitrag von NextThursday »

Ahh, entschuldige dass ich gefragt hatte. Macht sofort Sinn! Ich hatte halt primär in die babel-doc geschaut und war bei der clsguide noch nicht so weit, weil das Problem ja unabhängig von meiner Wrapper-Class war.

Danke dir!

P.S.: als Kurzzusammenfassung was das bedeutet, damit es evtl. bei einer Google-Suche besser gefunden wird, hier der relevante Ausschnitt:
When \ProcessOptions is called, the following happen.
First, for each option so far declared in fred.sty by \DeclareOption, it
looks to see if that option is either a global or a local option for fred: if
it is then the corresponding code is executed.
This is done in the order in which these options were declared in fred.sty.
Then, for each remaining local option, the command \ds@hoptioni is exe-
cuted if it has been dened somewhere (other than by a \DeclareOption);
otherwise, the `default option code' is executed. If no default option code
has been declared then an error message is produced.
This is done in the order in which these options were specied.
\ProcessOptions* \@options
This is like \ProcessOptions but it executes the options in the order specied
in the calling commands, rather than in the order of declaration in the class or
package. For a package this means that the global options are processed first.

Benutzeravatar
cgnieder
Forum-Meister
Forum-Meister
Beiträge: 730
Registriert: Fr 22. Okt 2010, 18:37
Wohnort: Herrenberg
Kontaktdaten:

Beitrag von cgnieder »

NextThursday hat geschrieben:Ahh, entschuldige dass ich gefragt hatte.
Ach wieso, war doch eine gute Frage!?!
Clemens
Paketauthor

Antworten