Отметить параметры класса «ключ-значение» как используемые

Отметить параметры класса «ключ-значение» как используемые

Я написал оболочку для scrartclкласса следующим образом:

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{mycls}[2012/08/23]

\RequirePackage{kvoptions}

\DeclareStringOption{title}
\DeclareStringOption{subtitle}

\ProcessKeyvalOptions*

\PassOptionsToClass{fleqn, openbib, headings=big, DIV=12}{scrartcl}
\LoadClassWithOptions{scrartcl}

Таким образом, я могу предоставить некоторые аргументы по умолчанию для scrartcllike DIV=12и по-прежнему переопределять их, передавая

\documentclass{title=mytitle, subtitle=thesubtitle, DIV=10}

Проблема, с которой я столкнулся, заключается в том, что он srcartclотмечает другие параметры, например, title=mytitleкак неиспользуемые .

Предупреждение LaTeX: неиспользуемые глобальные параметры

что, безусловно, ложно. Я пробовал отменять настройки с помощью

\DisableKeyvalOptions{mycls}{title}

сразу после \ProcessKeyvalOptions*, но это не сработало. Как мне отметить эти опции как использованные?

решение1

Я по-новому и внимательно посмотрел на The LaTeX Companion(A.4.8) и решил проблему самостоятельно.

Несмотря на то, что я предполагал ранее, \PassOptionsToClassи \LoadClassWithOptionsне работают вместе. Весь смысл в \LoadClassWithOptionsтом, чтобы передать точно такие же аргументы, которые получил текущий класс. Так что здесь переключение на \LoadClassтеперь будет принимать параметры по умолчанию.

К сожалению, теперь заданные пользователем глобальные параметры не перезапишут параметры по умолчанию. Поэтому их нужно вручную передавать в класс. Здесь kvoptionsпредставлен \DeclareDefaultOptionэквивалент классическому \DeclareOption*. В целом результат выглядит так:

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{mycls}[2012/08/23]

\RequirePackage{kvoptions}

\DeclareStringOption{title}
\DeclareStringOption{subtitle}

\PassOptionsToClass{fleqn, openbib, headings=big, DIV=12}{scrartcl}

\DeclareDefaultOption{\PassOptionsToClass{\CurrentOption}{scrartcl}}

\ProcessKeyvalOptions*

\LoadClass{scrartcl}

Поэтому всякий раз, когда \ProcessKeyvalOptions*он видит неизвестную опцию, например DIV=10, он передает ее в scrartcl, перезаписывая в процессе любое значение по умолчанию. Вот почему \PassOptionsToClassпришлось переместить его перед ним.

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