![激活/执行自定义包中的所有选项](https://linux22.com/image/457830/%E6%BF%80%E6%B4%BB%2F%E6%89%A7%E8%A1%8C%E8%87%AA%E5%AE%9A%E4%B9%89%E5%8C%85%E4%B8%AD%E7%9A%84%E6%89%80%E6%9C%89%E9%80%89%E9%A1%B9.png)
我想要我正在编写的包中的一个选项来激活所有其他选项。我想要的是类似这样的东西,\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}}