我正在尝试编写一个包,我想指定是否应该有颜色。
我想这样做:
\usepackage[color=false]{foo}
并设置此项
\RequirePackage[color=false]{hyperref}
或视情况而定。最好的方法是什么?
答案1
如果你想将包中的所有选项传递给 hyperref,那么你可以这样做
\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{hyperref}
\ProcessOptions\relax
\RequirePackage{hyperref}
参见clsguide.tex
LaTeX 基础中的文档。
我刚刚读了 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
为什么不在这个版本中使用?因为bool
key 检查它的值是否匹配 true 或 false
也许最好使用 pdf 密钥处理,因为它与beamer
课程更相关,但我对此并不熟悉。
答案3
另一个选择是使用kvoptions
并etoolbox
在您的.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
...