將鍵值類別選項標記為已使用

將鍵值類別選項標記為已使用

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必須移到它前面。

相關內容