包中的 Key Value 选项

包中的 Key Value 选项

我正在尝试编写一个包,我想指定是否应该有颜色。
我想这样做:

\usepackage[color=false]{foo}

并设置此项

\RequirePackage[color=false]{hyperref}

或视情况而定。最好的方法是什么?

答案1

如果你想将包中的所有选项传递给 hyperref,那么你可以这样做

\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{hyperref}
\ProcessOptions\relax
\RequirePackage{hyperref}

参见clsguide.texLaTeX 基础中的文档。

我刚刚读了 clsguide:-),如果这是全部你想做什么,它指出了以上三行都有更有效的捷径

\RequirePackageWithOptions{hyperref}

答案2

另一个选择是使用keyreader

\begin{filecontents}{mypack.sty}
\ProvidesPackage{mypack}

\usepackage{keyreader}

% Define the keys in family MYFAM and set the
% macor prefix to my@
\krddefinekeys{MYFAM}[my@]{
    % define a command key 'say' that sores
    % it’s value in \my@say
    cmd/say/jump/;
    % [1] define a boolean 
    bool/colori/true/;
    % [2] define a boolean and store the value
    bool/colorii/true/\def\my@colorii{#1};
}
% booleand are not preset by defualt so we
% do it manually
\krdsetkeys{MYFAM}{colori=false,colorii=false}

% Process the package options
\krdProcessOptions<MYFAM>\relax

% with version [1]
%\ifmy@colori
%   \RequirePackage[colorlinks=true]{hyperref}
%\else
%   \RequirePackage[colorlinks=false]{hyperref}
%\fi

% with version [2]
\RequirePackage[colorlinks=\my@colorii]{hyperref}

\newcommand{\mycmd}[1]{%
    % use the value of 'say'
    #1 says \my@say.
}
\end{filecontents}

\documentclass{article}

\usepackage[%
    say={sit down},
    colori=true,% [1]
    colorii=false,% [2]
]{mypack}

\begin{document}
\mycmd{Simon}

\url{www.myurl.com}
\end{document}

笔记

  • hyperref没有color选项(至少我的版本没有)

  • 如果你只想访问一个hyperref密钥,版本 [1] 是较短的版本

  • 如果您想访问多个选项,版本[2] 是更好的选择。

    • 为此,我们存储选项的值,hyperref稍后再将其传递给它。布尔值默认不存储其值,它们只会创建新的\if…

    • cmd为什么不在这个版本中使用?因为boolkey 检查它的值是否匹配 true 或 false


也许最好使用 pdf 密钥处理,因为它与beamer课程更相关,但我对此并不熟悉。

答案3

另一个选择是使用kvoptionsetoolbox在您的.sty文件中写入:

...
\RequirePackage{kvoptions}
\RequirePackage{etoolbox}

%% if the variable 'color' is
%% 1. not included                  : it will be set to 'false'
%% 2. included but not given a value: it will be set to 'true'
%% 3. included and given a value    : it will be set to the value that is given
\DeclareStringOption[false]{color}[true]

\newif \ifcolor %% new Boolean variable is default to 'false'
\ifdefstring{\foo@color}{true}{\colortrue}{} %% set the Boolean variable to 'true' if '\foo@color' is 'true'

\ifcolor
\RequirePackage[color = true]{hyperref}
\else
\RequirePackage[color = false]{hyperref}
\fi
...

然后,您可以在文档中指定“颜色”选项:

...
\usepackage[color]{foo}         %% color = true
\usepackage[color = true]{foo}  %% color = true
\usepackage[color = false]{foo} %% color = false
...

相关内容