如何根據文檔類別選項在套件中編寫條件命令(if...then)?

如何根據文檔類別選項在套件中編寫條件命令(if...then)?

我是新人,這是我的第一篇文章。我搜尋了該網站,但找不到我的問題的答案。如果我沒有找到重複的問題,請告訴我。

我有一個使用類別的模板memoir,最常用的選項是a4paperletterpaper取決於我將文件發送給誰。

我有一個類似簇絨的樣式文件,為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}

這有效;但我必須更改類別和包選項以保持它們相同。

  1. 所以我的第一個問題是如何以這樣的方式重寫包,以便我可以簡單地\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

第二個問題

通常全域選項(在 中指定的選項\documentclass)會傳遞給套件。因此,包可以透過正常的方式讀取它們\DeclareOption

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

相關內容