%20%E3%82%92%E8%A8%98%E8%BF%B0%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B%3F.png)
私は初心者で、これが初めての投稿です。サイト内を検索しましたが、質問に対する答えが見つかりませんでした。私が見つけられなかった重複した質問がある場合は、お知らせください。
クラスを使用するテンプレートがあり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}
これは機能しますが、クラスとパッケージの両方のオプションを同じに保つために変更する必要があります。
\usepackage{memtufte}
したがって、私の最初の質問は、メイン ファイルで簡単に使用でき、クラス オプションに応じてマージンが正しく設定されるようにパッケージを書き直すにはどうすればよいかということです。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*