![如何根据文档类选项在包中编写条件命令(if...then)?](https://linux22.com/image/357598/%E5%A6%82%E4%BD%95%E6%A0%B9%E6%8D%AE%E6%96%87%E6%A1%A3%E7%B1%BB%E9%80%89%E9%A1%B9%E5%9C%A8%E5%8C%85%E4%B8%AD%E7%BC%96%E5%86%99%E6%9D%A1%E4%BB%B6%E5%91%BD%E4%BB%A4%EF%BC%88if...then%EF%BC%89%EF%BC%9F.png)
我是新手,这是我的第一篇帖子。我搜索了网站,但找不到问题的答案。如果有重复的问题我没有找到,请告诉我。
我有一个使用类的模板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*