
我是新人,這是我的第一篇文章。我搜尋了該網站,但找不到我的問題的答案。如果我沒有找到重複的問題,請告訴我。
我有一個使用類別的模板memoir
,最常用的選項是a4paper
或letterpaper
取決於我將文件發送給誰。
我有一個類似簇絨的樣式文件,為a4paper
或定義了不同的邊距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}
在主文件中使用,並且邊距將根據類別選項正確設定。第二個問題是這是否可以推廣到任何類別選項(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
第二個問題
通常全域選項(在 中指定的選項\documentclass
)會傳遞給套件。因此,包可以透過正常的方式讀取它們\DeclareOption
:
\DeclareOption{A}{... do something ...}
\ProcessOptions\relax % or \ProcessOptions*