如何根据文档类选项在包中编写条件命令(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*

相关内容