编写带有“number within”选项的编号“tcolorbox”样式的新包时遇到问题

编写带有“number within”选项的编号“tcolorbox”样式的新包时遇到问题

我正在编写一个新包来定义一个编号框样式(使用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}

在此处输入图片描述

相关内容