激活/执行自定义包中的所有选项

激活/执行自定义包中的所有选项

我想要我正在编写的包中的一个选项来激活所有其他选项。我想要的是类似这样的东西,\usepackage[all]{mypackage}它将激活所有选项mypackage(包括后来添加的选项)。有没有简单的方法可以做到这一点?目前,我最好的方法是创建一个如果为了每一个选项并将该选项的所有 if 设置为 true all。但是,这意味着我无法激活不使用 if 的选项。以下是 MWE:

\documentclass{article}

\begin{filecontents}[overwrite]{mypackage.sty}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{mypackage}

\newcommand{\mycommand}{\LaTeX\ }
\makeatletter
% Some options:
\newif\if@firstoption
\DeclareOption{option1}{\@firstoptiontrue}
\newif\if@secondoption
\DeclareOption{option2}{\@secondoptiontrue}
\DeclareOption{option3}{\renewcommand{\mycommand}{\LaTeX\ is \textit{awsome}}}
% Activate all options:
\newif\if@all
\DeclareOption{all}{\@alltrue}
% Unknown options:
\DeclareOption*{\PackageWarning{mypackage}{No option ‘\CurrentOption’}}
\ProcessOptions\relax

\if@all
    \@firstoptiontrue
    \@secondoptiontrue
\fi

\RequirePackage{lipsum}

\if@firstoption
    \newcommand{\foo}[1]{\textit{#1}\par \lipsum[2]}
\fi
\if@secondoption
    \newcommand{\bazbaa}{\lipsum[1]}
\fi
\makeatother

\endinput
\end{filecontents}

\usepackage[all]{mypackage}

\begin{document}

This is a test.
\mycommand

\foo{dummy text:}

\bazbaa

\end{document}

如您所见,我可以通过这种方式激活选项 1 和 2,因为它们使用了 if,但不能激活选项 3。有没有办法激活选项 3 而不使用 if?还有,有没有办法自动包含新选项?假设我写了一个新的选项 4:

\newif\if@fourthoption
\DeclareOption{option4}{\@fourthoptiontrue}

有没有办法在使用时自动激活此功能,all而无需\if@all像这样手动调整:

\if@all
\@firstoptiontrue
\@secondoptiontrue
\@fourthoptiontrue % added this line manually
\fi

相关内容:假设你想要一个激活选项最多选项,但不是全部选项。是否可以激活除一个或多个选项之外的所有选项?例如:假设我想要一个包选项most,它等同于除第一个选项之外的所有选项(包括将来添加的选项)。\usepackage[most]{mypackage}= \uspackage[option2,option3,option4]{mypackage}。这可行吗?


我意识到有些选项可能彼此不兼容。假设第四个选项是:

\if@fourthoption
\newcommand{\bazbaa}{Hello there!}
\fi

这会与选项 2 发生冲突(在这种情况下,可以使用 来避免冲突\providecommand,但您可能无法轻松修复所有选项冲突)。有没有办法不包含会与其他选项冲突的选项?也许通过 if 或其他什么?

答案1

我发现 David Carlisle 的评论非常有帮助。我做了类似的事情:

\DeclareOption{all}{\ExcuteOptions{option1,option2,option3,option4}}

相关内容