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}
這樣我就可以為scrartcl
like提供一些預設參數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
必須移到它前面。