Inkompatibilität zwischen kvoptions und babel

Inkompatibilität zwischen kvoptions und babel

Ich verwende es in meiner Dokumentklasse und es hat bisher gut funktioniert, aber nach einer umfassenden Neufassung traten bei mir seltsame Fehler auf, die ich jedoch auf das Paket kvoptionszurückführen konnte .babel

MWE:

%% myclass.cls

\NeedsTeXFormat{LaTeX2e}[2018/04/01]
\ProvidesClass{myclass}

\RequirePackage[patch]{kvoptions}

\DeclareStringOption{title}
\ProcessKeyvalOptions*

\LoadClass{article}
\title{\myclass@title}
\RequirePackage[english]{babel}

\endinput
\documentclass[title={Here be dragons}]{myclass}

\begin{document}
Lorem Ipsum
\end{document}

Ein Auszug aus dem Protokoll (Pfade der Kürze halber weggelassen):

babel.sty:460: LaTeX Error: Missing \begin{document}. [    {}}]
babel.sty:460: Too many }'s. [    {}}]
babel.sty:475: LaTeX Error: Missing \begin{document}. [    \ifin@\edef\bbl@tempc{\bbl@tempb}\fi}]

Ohne den kvoptionsPatch werden die Fehler schlimmer:

babel.sty:339: LaTeX Error: Missing \begin{document}. [\ProcessOptions*]
babel.sty:339: You can't use `macro parameter character #' in horizontal mode. [\ProcessOptions*]
TeX STOPPED: File ended while scanning use of \reserved@{##1,##2\reserved@b }\def \reserved@b ##1,\reserved@b ##2\reserved@b 
TeX reports the error was in file:3 
myclass.cls:13: LaTeX Error: Unknown option `english' for package `babel'. []

Analyse:Das Problem ist, dass ich in der globalen Option () Leerzeichen (und Klammern) verwendet habe titleund diese Option offensichtlich an weitergegeben wird babel. Ohne die Leerzeichen treten die Fehler nicht auf.

Frage:Kann ich verhindern, dass Dokumentklassenoptionen von Paketen als globale Optionen verwendet werden? Oder gibt es einen ähnlichen Workaround, den \hypersetup{}ich anstelle von Optionen verwenden kann? Damit könnte ich leben.

Antwort1

Ich habe dieses Problem gelöst, indem ich mich inspirieren ließ voneine Antwort auf eine andere Frage. Angewandt auf das obige MWE sähe es folgendermaßen aus:

%% myclass.cls

\NeedsTeXFormat{LaTeX2e}[2018/04/01]
\ProvidesClass{myclass}

\RequirePackage{kvoptions}

\DeclareStringOption{title}
\ProcessKeyvalOptions*

\LoadClass{article}

\newcommand*{\docsetup}[1]{
  \kvsetkeys{myclass}{#1}
  \title{\myclass@title}
  \RequirePackage[english]{babel}
}

\endinput
\documentclass{myclass}
\docsetup{title={An awesome title}}

\begin{document}
Lorem Ipsum
\end{document}

verwandte Informationen