我正在尝试编写一个恰当命名的包
xkeyvalisinsanelydifficult
,以便用户可以\usepackage
将其作为
\usepackage{xkeyvalisinsanelydifficult}
或
\usepackage[turnedon]{xkeyvalisinsanelydifficult}
,但(最好,如果可能的话)不作为
\usepackage[turnedon=42]{xkeyvalisinsanelydifficult}
(只是因为在这个包的情况下这没有多大意义)。
内容xkeyvalisinsanelydifficult.sty
:
\ProvidesPackage{xkeyvalisinsanelydifficult}[2022/07/22]
\RequirePackage{xkeyval}
\newcommand{\somesimplecommand}{nothing at all}
\define@boolkey{myfamily}{turnedon}{}
\ProcessOptionsX\relax
\ifKV@myfamily@turnedon
\def\somesimplecommand{ON}
\else
\def\somesimplecommand{OFF}
\fi
内容sample.tex
:
\documentclass{article}
\usepackage{xkeyvalisinsanelydifficult}
\begin{document}
Hello, it's turned \somesimplecommand!
\end{document}
当sample.tex
第二行是 时\usepackage{xkeyvalisinsanelydifficult}
,一切顺利:文档编译并读取“您好,它已关闭!” (这是预料之中的,因为xkeyval
文档指出使用 将
\define@boolkey
布尔值初始化为false
)\newif
。
当sample.tex
第二行是 时\usepackage[turnedon]{xkeyvalisinsanelydifficult}
,文档无法编译,并出现以下错误:
ERROR: LaTeX Error: Unknown option 'turnedon' for package 'xkeyvalisinsanelydifficult'.
如何重写这些文件,使得如果第二行是sample.tex
,
\usepackage[turnedon]{xkeyvalisinsanelydifficult}
它会编译并读取“你好,它已打开!”?
答案1
将内容更改
xkeyvalisinsanelydifficult.sty
为:
\ProvidesPackage{xkeyvalisinsanelydifficult}[2022/07/22]
\RequirePackage{xkeyval}
\newcommand{\somesimplecommand}{nothing at all}
\define@boolkey{myfamily}{turnedon}[true]{}
\ProcessOptionsX<myfamily>\relax
\ifKV@myfamily@turnedon
\def\somesimplecommand{ON}
\else
\def\somesimplecommand{OFF}
\fi
这将产生turnedon
所需的行为:
\usepackage{xkeyvalisinsanelydifficult}
: 错误的\usepackage[turnedon=false]{xkeyvalisinsanelydifficult}
: 错误的\usepackage[turnedon]{xkeyvalisinsanelydifficult}
: 真的\usepackage[turnedon=true]{xkeyvalisinsanelydifficult}
: 真的\usepackage[turnedon=X]{xkeyvalisinsanelydifficult}
,其中X
是除true
或之外的任何内容false
:ERROR: Package xkeyval Error: value 'X' is not allowed
。