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
この方法では、いくつかのデフォルト引数を提供しDIV=12
、それらを渡すことでオーバーライドすることができます。
\documentclass{title=mytitle, subtitle=thesubtitle, DIV=10}
私が抱えている問題は、srcartcl
他のオプションtitle=mytitle
を未使用としてマークすることです
LaTeX 警告: 未使用のグローバル オプション
これは明らかに間違いです。私はオプションの設定を解除してみました
\DisableKeyvalOptions{mycls}{title}
の直後に実行しました\ProcessKeyvalOptions*
が、うまくいきませんでした。これらのオプションを使用済みとしてマークするにはどうすればよいでしょうか?
答え1
私は (A.4.8) を改めて徹底的に見直しThe LaTeX Companion
、自分で問題を解決しました。
以前想定していたことにもかかわらず、\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
を の前に移動する必要がありました。