Несовместимость между kvoptions и babel

Несовместимость между kvoptions и babel

Я использую его kvoptionsв своем классе документов, и до сих пор все работало хорошо, но после серьезной переработки я начал получать странные ошибки, которые мне удалось отследить до пакета babel.

МВЭ:

%% 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}

Выдержка из журнала (пути опущены для краткости):

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}]

Без kvoptionsпатча ошибки становятся еще хуже:

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'. []

Анализ:Проблема в том, что я использовал пробелы (и фигурные скобки) в глобальной опции ( title), и эта опция, очевидно, передается в babel. Без пробелов ошибки не возникают.

Вопрос:Могу ли я запретить использование параметров класса документа в качестве глобальных параметров пакетами? Или есть какой-то обходной путь, похожий на тот, \hypersetup{}который я мог бы использовать вместо параметров? Я мог бы с этим смириться.

решение1

Я решил эту проблему, черпая вдохновение изответ на другой вопросПрименительно к MWE выше это будет выглядеть следующим образом:

%% 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}

Связанный контент