我正在尝试通过更改包的选项来制作一个适用于我所有文档的自定义包(名为 taiga)。例如,对于数学文档,我会添加\usepackage[maths]{taiga}
到可渗透的。对于化学文档,我会添加\usepackage[chemistry]{taiga}
。
但是,由于我无法\RequirePackage{}
做到\DeclareOption{}
。我做事的方式真的很落后。以下是 taiga.sty 的摘录
\RequirePackage{ifthen}
\newboolean{maths}
\setboolean{maths}{false}
\DeclareOption{maths}{
\setboolean{maths}{true}
}
\ProcessOptions\relax
\ifthenelse{\boolean{maths}}{
\RequirePackage{tikz, pgf, pgfplots}
\pgfplotsset{compat=1.15}
\newcommand{\N}{\mathbb{N}}
...
}{}
这是最好的做事方式吗?
我想到了一些解决方案。第一种是制作单独的包,例如\usepackage{taiga_maths}
或,\usepackage{taiga_chemistry}
但必须创建这么多包会很烦人。另一种选择是无论选项是什么都要求所有包,但这会让我容易出错或增加加载时间。
答案1
我遇到了同样的问题;这个答案提供了一个解决方案,但同样落后。作者手动定义了一个布尔宏,但 vbwx 的评论指出该kvoptions
包有\DeclareBoolOption
此用途。以这种同样落后的方式,您的摘录会稍微干净一些:
\RequirePackage{kvoptions}
\DeclareBoolOption{maths} % automatically creates \iftaiga@maths switch
\ProcessKeyvalOptions*
\iftaiga@maths
\RequirePackage{tikz, pgf, pgfplots}
\pgfplotsset{compat=1.15}
\newcommand{\N}{\mathbb{N}}
...
\fi
我会将其作为评论发布,因为这不是一个令人满意的答案,但似乎我的声誉不够。