将 if-else 选项传递给自定义 sty 文件

将 if-else 选项传递给自定义 sty 文件

我有一个自定义.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将加载选项englishczech开关的值按所需顺序

当然,您应该选择不同的包名称、前缀、描述等。

\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:

enter image description here

\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}

有用的资源:

相关内容