У меня был 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
явно. Этот подход не очень многообещающий.