我有一个自定义.sty
文件,用于加载所需的包并定义一些命令和环境。有没有简单的方法可以:
- 定义 if-else 选项
- 定义选项的默认值
我正在使用该babel
包并想指定它的选项:
\usepackage[english, czech]{babel}
但有时,我需要相反的东西:
\usepackage[czech, english]{babel}
有没有办法这样使用它?
\usepackage{myPackage} % loads "english, czech"
\usepackage[en]{myPackage} % loads "czech, english"
答案1
\ProvidesPackage{mypackage}[2014/01/05 ...]
...
\newif\if@mylang\@mylangfalse
\DeclareOption{en}{\@mylangtrue}
...
\DeclareOption*{\OptionNotUsed}
\ProcessOptions\relax
...
\if@mylang
\RequirePackage[english,czech]{babel}
\else
\RequirePackage[czech,english]{babel}%% the default
\fi
...
如果您需要相反的默认值,则更改定义。
答案2
这是一种简单的方法。以下代码是一个.sty
名为的极简文件yourpackagename
。它定义了一个开关\ifyourpkgprefix@enoption
并声明了一个名为的选项en
,如果传递给您的包,则将开关设置为 true。处理完选项后,包babel
将加载选项english
和czech
开关的值按所需顺序
当然,您应该选择不同的包名称、前缀、描述等。
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{yourpackagename}[2014/01/05 v0.1 yourpackagedescription]
% switch for 'en' option
\newif\ifyourpkgprefix@enoption\yourpkgprefix@enoptionfalse
\DeclareOption{en}{\yourpkgprefix@enoptiontrue}
\DeclareOption*{\OptionNotUsed} % discard any undeclared option
\ProcessOptions\relax
\ifyourpkgprefix@enoption
\RequirePackage[czech, english]{babel}
\else
\RequirePackage[english, czech]{babel}
\fi
\endinput
以下是使用该包的 MWE:
\documentclass{article}
%\usepackage{yourpackagename} % comment one of those two lines
\usepackage[en]{yourpackagename}
\begin{document}
% --- sanity check ---
The \texttt{babel} options were loaded in the following order:
\makeatletter
\ifyourpkgprefix@enoption%
\texttt{czech, english} (option~\texttt{en} was passed).
\else%
\texttt{english, czech} (option~\texttt{en} was NOT passed).
\fi
\makeatother
% --------------------
foobar
\end{document}
有用的资源: