我正在尝试创建一个包含以下三个选项的包:
\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 相同的环境名称(具有其他定义)。我正在尝试适应相关答案为此...但我没有成功。如果有人能帮我提供一个框架(使用kvoptions
或pgfkeys
),我将不胜感激。我无法添加[requiered]
环境myexample
和布尔选项swpl
和tcb
。
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]