Установить глобальный параметр (и передать его всем пакетам) в пользовательском файле класса

Установить глобальный параметр (и передать его всем пакетам) в пользовательском файле класса

У меня был texфайл, который начинался примерно так:

\documentclass[
  a4paper, hyperref, amsmath, headinclude=true, ngerman, final
]{scrbook}
\usepackage{babel}
\usepackage{ntheorem}
\usepackage{graphix}

Я преобразовал это в свой собственный файл класса

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{kitbook}[2015/04/23 KITbook]

\RequirePackage{kvoptions}
\SetupKeyvalOptions{family=KIT,prefix=KIT@}
...
\ProcessKeyvalOptions*\relax

\LoadClass[
  a4paper, hyperref, amsmath, headinclude=true, ngerman, final
]{scrbook}
\RequirePackage{babel}
\RequirePackage{ntheorem}
\RequirePackage{graphix}

Файл texуменьшен до

\documentclass{kitbook}

Но вдруг я получаю предупреждение LaTeX о том, что опции hyperref, amsmath, headinclude=trueне используются. Babel выдает ошибку, что язык не указан, а опция finalдействительно используется классом scrbook, но не пакетом graphix.

Кажется, что есть разница в семантике \documentclassи \LoadClass. Параметры, которые заданы для , \documentclassделаются глобальными и неявно передаются всем пакетам. Но параметры, заданные для , \LoadClassиспользуются только самим классом. Вот почему babelне get ngermanи т. д.

Есть ли способ сделать параметры глобальными в пользовательском файле класса?

В частности, я вижу одну серьезную проблему. Опция headinclude=trueне используется ни одним пакетом, который явно загружен. (Я считаю, что она используется typeareaтем, который сам загружен scrbook.) Конечно, я мог бы использовать \PassOptionToPackage{headinclude=true}{typearea}, но проблема с этим подходом в том, что мне нужно выяснить, какой пакет использует какую опцию для каждой опции и пакета, а затем вызвать \PassOptionToPackageявно. Этот подход не очень многообещающий.

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