ドキュメント クラス オプションに応じてパッケージに条件付きコマンド (if.​​..then) を記述するにはどうすればよいですか?

ドキュメント クラス オプションに応じてパッケージに条件付きコマンド (if.​​..then) を記述するにはどうすればよいですか?

私は初心者で、これが初めての投稿です。サイト内を検索しましたが、質問に対する答えが見つかりませんでした。私が見つけられなかった重複した質問がある場合は、お知らせください。

クラスを使用するテンプレートがありmemoir、最もよく使用されるオプションは、ドキュメントの送信先に応じて、a4paperまたはです。letterpaper

a4paperまたはに異なる余白を定義する tufte のようなスタイルのファイルがありますletterpaper

\ProvidesPackage{memtufte}
\DeclareOption{a4paper}{%
  \settrims{0pt}{0pt}%
  \settypeblocksize{640pt}{310pt}{*}%
  \setlrmargins{63.754pt}{*}{*}%
  \setmarginnotes{16pt}{144pt}{0.7\baselineskip}%
}
\DeclareOption{letterpaper}{%
  \settrims{0pt}{0pt}%
  \settypeblocksize{600pt}{320pt}{*}%
  \setlrmargins{64.1475pt}{*}{*}%
  \setmarginnotes{16pt}{150pt}{0.5\baselineskip}%
}
\ProcessOptions\relax
... ... (and some other settings that are common for a4paper and letterpaper.

そしてmain.texファイルには次のようなものを記述します。

\documentclass[letterpaper,11pt,article,twoside]{memoir}
\usepackage[letterpaper]{memtufte}

または

\documentclass[a4paper,11pt,article,twoside]{memoir}
\usepackage[a4paper]{memtufte}

これは機能しますが、クラスとパッケージの両方のオプションを同じに保つために変更する必要があります。

  1. \usepackage{memtufte}したがって、私の最初の質問は、メイン ファイルで簡単に使用でき、クラス オプションに応じてマージンが正しく設定されるようにパッケージを書き直すにはどうすればよいかということです。

  2. 2番目の質問は、これを任意のクラスオプション(A、B、C、...)に一般化できるかどうかです。例:

    if class option is A, then do something, 
    if class option is B and C, do something else,
    if class option is C, do another thing,
    ...
    

ありがとう。

答え1

\ProcessOptionsグローバルオプション( で設定されたオプション\documentclass)も読み取ります。したがって、

\documentclass[a4paper]{memoir}
\usepackage{memtufte}

a4paperは、 inのオプション処理もトリガーします。これは、オプション コードに呼び出しmemtufteを追加することで簡単に確認できます。例:\typeout{}

\DeclareOption{a4paper}{%
  ...%
  \typeout{memtufte:a4paper}%
}

するとコンソールと.logファイルに次の行が含まれる

memtufte:a4paper

2番目の質問

通常、グローバル オプション ( で指定されたオプション\documentclass) はパッケージに渡されます。したがって、パッケージは通常の を介してそれらを読み取ることができます\DeclareOption

\DeclareOption{A}{... do something ...}
\ProcessOptions\relax % or \ProcessOptions*

関連情報