我正在编写一个新包来定义一个编号框样式(使用tcolorbox
),我在多个文档中使用。我想将框的编号约定作为包选项。默认情况下,我希望编号在部分内:number within=section,
。
但是,使用 时number within=,
,tcolorbox 使用全局编号。我希望能够在numbering=,
作为包选项传递时复制它,但它会因错误而退出。
文件mybox.sty
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{mybox}
\RequirePackage{pgfopts}
\RequirePackage{tcolorbox}
% package options
\pgfkeys{%
/mybox/.cd,
numbering/.store in=\mybox@\numbering,
numbering=section, % 'default' value
}
\ProcessPgfPackageOptions{/mybox}
% define box style
\newtcolorbox[%
auto counter,
number within=\mybox@\numbering,
]{mybox}[1][]{%
title={\bfseries Box~\thetcbcounter},
#1
}
默认包选项
\documentclass{article}
\usepackage{mybox}
\begin{document}
\begin{mybox}
Hi
\end{mybox}
\end{document}
输出:
用法numbering=subsection
:
\documentclass{article}
\usepackage[numbering=subsection]{mybox}
\begin{document}
\begin{mybox}
Hi
\end{mybox}
\end{document}
输出:
有numbering=,
(无值)
\documentclass{article}
\usepackage[numbering=,]{mybox}
\begin{document}
\begin{mybox}
Hi
\end{mybox}
\end{document}
编译错误:You can't use `the character .' after \the. H
在第 7 行。
预期输出:带有全局编号的框
答案1
您想要的宏/.store in
有一个不起作用的名称,应该是\mybox@numbering
而不是\mybox@\numbering
。此外,以下内容在解析其键\mybox@numbering
之前扩展了 。tcolorbox
以下应该有效:
\begin{filecontents*}[overwrite]{mybox.sty}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{mybox}
\RequirePackage{pgfopts}
\RequirePackage{tcolorbox}
% package options
\pgfkeys{%
/mybox/.cd,
numbering/.store in=\mybox@numbering,
numbering/.default = {}, % if no value is passed use an empty value
numbering=section, % 'initial' value
}
\ProcessPgfPackageOptions{/mybox}
% define box style
\expanded{\noexpand\newtcolorbox[%
auto counter,
number within=\mybox@numbering,
]}{mybox}[1][]{%
title={\bfseries Box~\thetcbcounter},
#1
}
\end{filecontents*}
\documentclass{article}
\usepackage[numbering=,]{mybox}
\begin{document}
\section{One}
\begin{mybox}
Hi
\end{mybox}
\section{Two}
\begin{mybox}
Hi
\end{mybox}
\end{document}