在由以下源创建的包中,如果为真,如何将的值更改\optB
为— 这样,即使选项已传递给包,写入日志的消息也会变成如图所示(但已传递,如图所示)。true
\optA
>>> optB is true
\optB=false
optA=true
\RequirePackage{filecontents}
\begin{filecontents}{mypkg.sty}
\RequirePackage{kvoptions}
\SetupKeyvalOptions{family=MY,prefix=MY@}
\DeclareBoolOption{optA}
\DeclareBoolOption{optB}
\ProcessKeyvalOptions*
% what code here to switch value of optB *if* optA is true?
\ifMY@optB \typeout{>>> optB is true} \else \typeout{>>> optB is false}\fi
\end{filecontents}
%
\documentclass{article}
\usepackage[optA=true,optB=false]{mypkg}
\begin{document}
Hello.
\end{document}
答案1
对于每个布尔选项都会创建三个命令:
\if<prefix><option name>
它充当 TeX 的条件命令之一,\<prefix><option name>true
启用该选项,然后\<prefix><option name>false
禁用该选项。
基于这些命令,您可以轻松定义自定义条件来覆盖用户传递的值(调用后\ProcessKeyvalOptions
)。对于您来说,它很简单:
\ifMY@optA
\MY@optBtrue
\fi