Das Paket csquotes bietet die Möglichkeit, mit Hilfe der Option spanish=mexican die Form der Anführungszeichen für spanische Zitate von «…» auf “…” umzuschalten. Im folgenden Beispiel funktioniert dies jedoch nicht, wohl aber für die Option doublespacing des Pakets setspace. Wie kann Abhilfe geschaffen werden?

Open in Online-Editor
\begin{filecontents}{Testklasse.cls}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{Testklasse}
\ProcessOptions\relax
\LoadClass{article}
\RequirePackage[spanish,ngerman]{babel}
\RequirePackage[autostyle]{csquotes}
\RequirePackage{setspace}
\end{filecontents}

\documentclass[doublespacing,spanish=mexican]{Testklasse}
\usepackage[T1]{fontenc}
\usepackage{blindtext}

\begin{document}
Doppelter Zeilenabstand funktioniert: \blindtext

Spanische Zitate im mexikanischen Stil funktionieren nicht: \foreignquote{spanish}{amigo}
\end{document}

gefragt 23 Apr '15, 23:28

Cletus's gravatar image

Cletus
1.6k45566
Akzeptiert-Rate: 75%

bearbeitet 23 Apr '15, 23:28

2

\PassOptionsToPackage{spanish=mexican}{csquotes}\documentclass{Testklasse} oder \documentclass{Testklasse} \ExecuteQuoteOptions{spanish=mexican} oder Du definierst Dir eine Option für Testklasse, die die Weitergabe der Option spanish=mexican an das csquotes Paket erledigt, also \PassOptionsToPackage{spanish=mexican}{csquotes} ausführt.

(24 Apr '15, 02:29) esdd

Während @esdd in ihrem Kommentar bereits eine Lösung angegeben hat, will ich ein wenig die Ursachen beleuchten.

Die Ursache dafür, dass die Optionenauswertung von setspace hier funktioniert, die von csquotes aber nicht, liegt in der Art der Definition der Optionen. Bei setspace sind alle Optionen in der Form:

Open in Online-Editor
\DeclareOption{foo}{do}

deklariert. Jede Option foo ist also explizit mit ihrem Namen und einer zugehörigen Aktion definiert.

Bei csquotes sind die Optionen dagegen alle nach dem Schema

Open in Online-Editor
\DeclareOption*{do for \CurrentOption}

deklariert. Es werden also alle Optionen in irgend einer Form verarbeitet. Aber dieses alle bezieht sich dafür nur noch auf die Optionen, die explizit an das Paket übergeben wurden und nicht mehr auf die Optionen, die als globale Optionen angegeben wurden. Deshalb funktioniert bereits:

Open in Online-Editor
\documentclass[doublespacing,spanish=mexican]{article}
\usepackage[T1]{fontenc}
\usepackage[spanish,ngerman]{babel}
\usepackage{setspace}
\usepackage{csquotes}
\usepackage{blindtext}

\begin{document}
Doppelter Zeilenabstand funktioniert: \blindtext

Spanische Zitate im mexikanischen Stil funktionieren nicht: \foreignquote{spanish}{amigo}
\end{document}

nicht wie gewünscht, sondern liefert die Warnung: LaTeX Warning: Unused global option(s): [spanish=mexican].

Man müsste nun also explizit dafür sorgen, dass alle globalen Optionen zu denen es (vermutlich) eine key=value-Option in csquotes gibt, explizit an das Paket übergeben werden. Das ginge beispielsweise so:

Open in Online-Editor
\RequirePackage{filecontents}
\begin{filecontents}{Testklasse.cls}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{Testklasse}
\ProcessOptions\relax
\LoadClass{article}
\RequirePackage[spanish,ngerman]{babel}
\RequirePackage{keyval}
\let\orig@define@key\define@key% Originaldefinition speichern
\def\define@key#1#2{% Definition von \define@key ändern
  \begingroup
    % Prüfen, ob eine csquote-Option definiert wird:
    \edef\reserved@a{#1}\def\reserved@b{csq}%
    \ifx\reserved@a\reserved@b
      % Prüfen, ob diese Option in den globalen Optionen vorkommt:
      \edef\reserved@a{#2}%
      \@for\CurrentOption:=\@classoptionslist\do{%
        \expandafter\My@KV@split\CurrentOption==\relax
        \ifx\reserved@a\reserved@b
          % Option explizit an csquotes übergeben.
          \PassOptionsToPackage{\CurrentOption}{csquotes}%
        \fi
      }%
    \fi
  \endgroup
  \@ifnextchar[{\KV@def{#1}{#2}}{\long\@namedef{KV@#1@#2}####1}}
\long\def\My@KV@split#1=#2=#3\relax{%
  \KV@@sp@def\reserved@b{#1}%
}
\RequirePackage[autostyle]{csquotes}
\let\define@key\orig@define@key% Änderung wieder zurücknehmen
\RequirePackage{setspace}
\end{filecontents}
\documentclass[doublespacing,spanish=mexican]{Testklasse}
\usepackage[T1]{fontenc}
\usepackage{blindtext}

\begin{document}
Doppelter Zeilenabstand funktioniert: \blindtext

Spanische Zitate im mexikanischen Stil funktionieren nicht: \foreignquote{spanish}{amigo}
\end{document}

Aber: Das hat auch einen ganz großen Nachteil. Setzt man nun beispielsweise per \documentclass[spanish=blumentopf] eine globale Option, die so aussieht, als könnte csquotes etwas damit anfangen, es kann aber in Wirklichkeit nichts damit anfangen, dann bekommt man nicht nur die Warnung: LaTeX Warning: Unused global option(s): [spanish=blumentopf]., sondern man erhält eine Fehlermeldung: ! Package csquotes Error: Quote style not defined. Das erscheint zunächst nicht weiter problematisch. Sobald es aber ein Paket gibt, das die Option spanish=blumentopf kennt, wird das ein Problem.

Wollte man dieses Problem lösen, müsste csquotes seine Optionen entweder alle per \DeclareOption statt \DeclareOption* deklarieren oder aber ein Paket wie scrbase für die Deklaration der Optionen verwenden.

Da man aber csquotes-Optionen grundsätzlich nicht als globale Optionen übergeben kann, ist das ganze eigentlich gar kein Problem. Man muss dann nur wissen, dass man Optionen nicht nur beim Laden des Pakets, sondern eben auch schon zuvor per \PassOptionsToPackage angeben kann. Daher ist die Lösung wie von @esdd bereits vorgeschlagen:

Open in Online-Editor
\begin{filecontents}{Testklasse.cls}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{Testklasse}
\ProcessOptions\relax
\LoadClass{article}
\RequirePackage[spanish,ngerman]{babel}
\RequirePackage[autostyle]{csquotes}
\RequirePackage{setspace}
\end{filecontents}
\PassOptionsToPackage{spanish=mexican}{csquotes}
\documentclass[doublespacing]{Testklasse}
\usepackage[T1]{fontenc}
\usepackage{blindtext}

\begin{document}
Doppelter Zeilenabstand funktioniert: \blindtext

Spanische Zitate im mexikanischen Stil funktionieren nicht: \foreignquote{spanish}{amigo}
\end{document}

Nebenbei erwähnt: Wenn article die Optionen von \documentclass auswerten soll, sollte es per \LoadClassWithOptions geladen werden.

Permanenter link

beantwortet 24 Apr '15, 08:35

saputello's gravatar image

saputello
11.1k154365
Akzeptiert-Rate: 51%

bearbeitet 24 Apr '15, 12:35

Danke für die kenntnisreichen Erläuterungen.

(24 Apr '15, 11:19) Cletus
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:

×17
×14
×5

gestellte Frage: 23 Apr '15, 23:28

Frage wurde gesehen: 8,443 Mal

zuletzt geändert: 24 Apr '15, 12:35