Wir verwenden die KOMA-Script Klasse scrbook zur Verfassung von Dissertationen und Abschlussarbeiten bei uns am Lehrstuhl. Unter anderem verwenden wir auch das Paket siunitx um Einheiten und Zahlen zusammenzubringen. Das Paket hat leider den Bug, dass es die Sprache ngerman vom babel-Paket nur teilweise übernimmt. Es wurde nun an mich herangetragen, dass sich das Problem beheben lässt, wenn ngerman nicht als Option beim babel-Paket sondern direkt als Option in die Dokumentenklasse gesetzt wird. Das babel-Paket ist dann ohne Option und wird von KOMA-Script gefüttert.

Im KOMA-Script-Handbuch gibt es leider keinerlei Hinweis auf die Option die Sprache direkt in der Dokumentenklasse zu definieren. Ich würde die Sprache gerne mittels \KOMAoption{Option}{Werteliste} setzen, kenne jedoch die Option nicht, die ich setzen müsste.

\documentclass[paper=a4,ngerman]{scrbook}
\usepackage{babel}

\begin{document}
   \tableofcontents
\end{document}

gefragt 02 Nov '20, 20:03

Froido's gravatar image

Froido
2913
Akzeptiert-Rate: 0%

bearbeitet 04 Nov '20, 12:27

saputello's gravatar image

saputello
11.1k174365

1

Kann es sein, dass das Beispiel das Problem gar nicht zeigt, also kein vollständiges Minimalbeispiel im eigentlichen Sinne ist?

(04 Nov '20, 12:28) saputello

Da geht einiges durcheinander. Deshalb erlaube ich mir, ein wenig weiter auszuholen.

Grundsätzlich werden Dokumentsprachen über ein Sprachpaket umgeschaltet. Die Basisklassen von KOMA-Script überlassen die Sprache komplett einem solchen Paket. Einige KOMA-Script-Pakete und die Briefklasse scrlttr2 definieren darüber hinaus noch einige zusätzliche, sprachabhängige Begriffe. Außerdem bietet KOMA-Script mit \newcaptionname, \providecaptionname und \renewcaptionname die Möglichkeit, solche Begriffe unabhängig vom verwendeten Sprachpaket komfortabel zu definieren. KOMA-Script-Klassen (und -Pakete) nehmen aber selbst keine Sprachumschaltungen vor.

Optionen, die per optionalem Argument von \documentclass angegeben werden, werden von LaTeX selbst auch an die Pakete weitergereicht und sind damit keine reine Klassenoptionen, sondern globale Optionen. AFAIR steht das auch in den Abschnitten »Frühe oder späte Optionenwahl« in der KOMA-Script-Anleitung. (Hinweis: Nicht alle Pakete können global angegebene key=value-Optionen verarbeiten. Das betrifft beispielsweise babel, das zwar ein global angegebenes ngerman versteht, aber eventuell kein global angegebenes main=ngerman.)

Die KOMA-Script-Klasse scrbook reagiert also selbst nicht auf Option ngerman. Einige Pakete (darunter babel) reagieren aber darauf. Schon deshalb ist es nicht möglich, die Sprache per \KOMAoption umzuschalten. Die Verwendung von \KOMAoption und \KOMAoptions ist ohnehin nur für key=value-Optionen von KOMA-Script möglich. Auch da ist es für einige Optionen explizit nicht erlaubt (beispielsweise muss version immer bereits beim Laden der Klasse angegeben werden). Für veraltete KOMA-Script-Optionen und Kompatibilitätsoptionen ist die Verwendung von \KOMAoption und \KOMAoptions ebenfalls nicht möglich. Gibt man solche Optionen bei \documentclass an, so erhält man eine entsprechende Warnung bzw. Information in der log-Datei.

babel reagiert auf global angegebene einfache Sprachoptionen wie ngerman. Es bietet darüber hinaus Befehle, um auch später noch zwischen allen geladenen Sprachen umzuschalten. Dafür, welche Sprachen es lädt, ist entscheidend, welche Sprachoptionen als globale Optionen oder direkt beim Laden von babel angegeben sind.

Das Paket siunitx wiederum reagiert nicht direkt auf Option ngerman. Es regiert aber auf die von einem Sprachpaket eingestellte Sprache, wobei es nur wenige Sprachen von Haus aus unterstützt (siehe Abschnitt »Localisation« in der siunitx-Anleitung). Es gibt auch nur wenige Begriffe, die bei siunitx wirklich sprachhängig sind. Für deren Änderung sei ggf. auf das von siunitx verwendete Paket translator und dessen Anweisung \translate verwiesen.

Über die Sprache stellt siunitx aber nur sehr wenig um. Andere Dinge wie das Zahlenformat, die eher in den Bereich der typografischen Gepflogenheiten gehören, werden von Option locale bestimmt. Das ist jedoch kein Bug, sondern eine beabsichtige Trennung zwischen Sprache und Typografie. In Abschnitt 7.16 der siunitx-Anleitung wird aber auch gezeigt, wie man hier ggf. eine automatische Verknüpfung zwischen der mit babel (oder polyglossia) eingestellten Sprache und locale herstellen kann. Beispielsweise würde

\documentclass[paper=a4,ngerman]{scrbook}
\usepackage[main=ngerman,english]{babel}
\usepackage{siunitx}
\addto\extrasngerman{\sisetup{locale = DE}}
\addto\extrasenglish{\sisetup{locale = US}}

\begin{document}
  Deutsch: \SIrange{15.3}{20.4}{\meter}

  US-English: \selectlanguage{english}\SIrange{15.3}{20.4}{\meter}
\end{document}

zwei verschiedene Darstellung in Abhängigkeit der Sprache mit sich bringen. Verwendet man dagegen im ganzen Dokument nur eine Darstellung, ist es zweckmäßiger, diese direkt beim Laden des Pakets mit anzugeben:

\documentclass[paper=a4,ngerman]{scrbook}
\usepackage{babel}
\usepackage[locale=DE]{siunitx}

\begin{document}
  Deutsch: \SI{15.3}{\meter}
\end{document}

Es sei außerdem noch darauf hingewiesen, dass die Angabe der Sprache bei \documentclass ein zweischneidiges Schwert ist. Für viele Pakete funktioniert das. Einige Pakete kennen aber nicht alle Sprache, beispielsweise nur german aber kein ngerman. Bei denen muss man dann ggf. wieder die passende Option beim Laden angeben. Darüber hinaus, hat babel ggf. Probleme bei der Festlegung der Hauptsprache, wenn man Sprachen sowohl bei \documentclass als auch beim Laden von babel selbst angibt. Im mehrsprachigen Beispiel habe ich daher oben die Hauptsprache sicherheitshalber zusätzlich direkt beim Laden von babel angegeben. Paketautoren wird ohnehin empfohlen (wie beispielsweise biblatex) die zu verwendende Spracheinstellung dem verwendeten Sprachpaket zu überlassen und nicht bereits beim Laden fest vorzugeben. Leider gibt es noch immer Pakete (wie nomencl), die dazu nicht in der Lage sind. siunitx verlässt sich bei der Sprachauswahl übrigens auf translator, das die Basis-Sprache ebenfalls per Option benötigt. Auf Sprachumschaltungen mit babel's \selectlanguage reagiert es jedoch ebenfalls, wie das erste Beispiel zeigt.

Achja: Im von dir gezeigten Beispiel funktioniert die Sprachumschaltung übrigens einwandfrei. Als Überschrift für das Inhaltsverzeichnis korrekt »Inhaltsverzeichnis« ausgegeben. Wenn das bei dir nicht der Fall ist, dann ist babel-ngerman nicht installiert. Allerdings müsste babel dann auch eine entsprechende Meldung ausgeben.

Permanenter link

beantwortet 03 Nov '20, 08:21

gast3's gravatar image

gast3
(ausgesetzt)
Akzeptiert-Rate: 53%

bearbeitet 03 Nov '20, 15:00

-1

Vielen Dank für die sehr schnelle und vor allem ausführliche Antwort! Ich habe verstanden, dass die Angabe der Sprache ngerman in der Dokumentenklasse zwar eine Auswirkung auf die folgenden Pakete haben kann, aber nicht muss und dass ich die Spracheinstellung besser einem Sprachpaket wie babel überlassen sollte. Letzteres ist mir bekannt und wurde von mir bisher auch immer so angewandt. Weiterhin habe ich die Lokalisierung von siunitx bisher immer direkt (wie auch von dir gezeigt) über das Paketsetup vorgenommen, was auch beinahe tadelos funktioniert. Beinahe, weil der Befehl \SIrange{}{}{} eine Übersetzung beihaltet. Aus dem englischen 'to' wird ein deusches 'bis'. Ein kleines Beispiel, bei dem eigentlich alles laufen sollte:

\documentclass{scrbook}
\usepackage[ngerman]{babel}
\usepackage[locale=DE]{siunitx}

\begin{document}
    \SIrange{1}{4}{\meter}
\end{document}

Die Ausgabe hier zeigt jedoch 1 m to 4 m. Verschiebe ich die Angabe der Sprache in die Dokumentenklasse funktioniert es korrekt:

\documentclass[ngerman]{scrbook}
\usepackage{babel}
\usepackage{siunitx}

\begin{document}
    \SIrange{1}{4}{\meter}
\end{document}

Es wird 1 m bis 4 m ausgegeben. An dieser Stelle scheint also irgendwo ein unterschied zu bestehen. Zumal ich in diesem Fall für das siunitx Paket nicht einmal die Lokalisierung vornehmen muss. Weiterhin ist mir beim Spielen mit dem Minimalbeispiel gerade aufgefallen, dass beim entfernen des babel Paketes die Lokalisierung in siunitx nicht mehr automatisch funktioniert.

\documentclass[ngerman]{scrbook}
\usepackage{siunitx}

\begin{document}
    \SIrange{1}{4}{\meter}
\end{document}

In diesem Fall kommt wieder die englische Schreibweise heraus. Es sieht so aus, als würde das babel Paket unterschiedlich auf die direkt beim Laden als Option übergeben Sprache und die Angabe in der Dokumentenklasse reagieren.

Permanenter link

beantwortet 03 Nov '20, 10:12

Froido's gravatar image

Froido
2913
Akzeptiert-Rate: 0%

Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×131
×34
×23
×17

gestellte Frage: 02 Nov '20, 20:03

Frage wurde gesehen: 5,057 Mal

zuletzt geändert: 04 Nov '20, 12:28