创建具有可选模式和键值的包

创建具有可选模式和键值的包

我正在尝试创建一个包含以下三个选项的包:

\usepackage[swpl]{mypack}

swpl选项提供环境

\begin{myexample}[forced bracketed options]...\end{myexample}

适用于所有 xelatex/latex

\usepackage[tcb]{mypack}

tcb选项提供相同的环境名称(但定义不同)

\begin{myexample}[other forced bracketed options]...\end{myexample}

适用于 latex/xelatex 和第三个选项:

\usepackage[pdf,swpl]{mypack} or \usepackage[pdf,tcb]{mypack}

提供与 (pdf/lua/xe)latex 相同的环境名称(具有其他定义)。我正在尝试适应相关答案为此...但我没有成功。如果有人能帮我提供一个框架(使用kvoptionspgfkeys),我将不胜感激。我无法添加[requiered]环境myexample和布尔选项swpltcb

PD:使用相同的环境名称,因为第一个选项使用showexpl,第二个选项tcolorbox用于逐字。

答案1

mypack根据描述,我假设在加载包后不需要更改环境定义。然后两个开关和经典选项就可以了:

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{mypack}{2014/04/17 My package}

\newif\ifmypack@swpl % swpl: true, tcb: false
\newif\ifmypack@pdf  % option pdf

\DeclareOption{swpl}{\mypack@swpltrue}
\DeclareOption{tcb}{\mypack@swplfalse}
\DeclareOption{pdf}{\mypack@pdftrue}

\ProcessOptions* % process options in the order they are given

然后可以使用开关\ifmypack@swpl\ifmypack@pdf来执行环境myexample,例如:

\ifmypack@swpl
  % code for option "swpl"
\else
  % code for option "tcb"
\fi

答案2

这是重写的Heiko Oberdiek 的回答使用最新版本的 LaTeX 中的新选项处理功能。

\NeedsTeXFormat{LaTeX2e}[2023-01-12]
\ProvidesPackage{mypack}{2023/04/17 My package}

\newif\ifmypack@swpl % swpl: true, tcb: false
\newif\ifmypack@pdf  % option pdf

\DeclareKeys [mypack] {%
  swpl.if = mypack@swpl,
  tcb.ifnot = mypack@swpl,
  pdf.if = mypack@pdf,
  swpl.usage = load,
  tcb.usage = load,
  pdf.usage = load,
}
\ProcessKeyOptions [mypack]

相关内容