如何在其他地方访问由 \DeclareCaptionLabelFormat 定义的样式?

如何在其他地方访问由 \DeclareCaptionLabelFormat 定义的样式?

问题

我已为标题定义了某种字体样式,并希望在文档的其他部分使用该样式。如何访问该样式以便重复使用它?

注意:我想重现该样式作为代码重用的最佳实践。我也可以复制粘贴代码到文档的特定部分,但我认为以后这可能是一个不明智的决定。

平均能量损失

\documentclass{article}

\usepackage{caption}

\DeclareCaptionType{problem}[Problem]
\DeclareCaptionLabelFormat{problemlabel}{\color{red}▶~~%
    \sffamily#1~~#2}
\captionsetup[problem]{ labelformat=problemlabel }

\begin{document}

\captionof{problem}{This is a caption with the style ``problemlabel.''}

This text should somehow also by styled like a ``problemlabel.'' How can this be achieved?

\end{document}

基本原理

重复使用代码的原因如下。我定义了一个框,用于区分数学问题,这些问题也都有编号和标题。然而,在特定情况下,我希望有一个带有标题的框,但标题中没有数字,例如“问题 —标题”而不是“问题 9 —标题“为此,我想使用我的环境的星号版本。

caption 包提供了命令 \captionof*{}{},但是,这会删除整个标签,而不仅仅是数字。因此,我尝试在框的设计中重新使用原始标题标签的样式,但现在自己写下“问题”。

下面的代码可以清楚地说明这一点:

\NewDocumentEnvironment{problembox}{smo}{%
    \begin{mdframed}[%
        frametitle={%
            \IfBooleanTF #1
            { \captionof*{problem}{#2} }%
            { \captionof{problem}{#2} }%
            \IfNoValueF{#3}{\label{#3}}%
        },
        style=boxstyle,
    ]
    \small
    }{%
    \end{mdframed}
}

代替{ \captionof*{problem}{#2} }%,我希望有类似的东西{ {\captionlabelstyle Problem} #2 }。这就是为什么我需要访问为标题标签定义的样式。

答案1

对于这个任务,我根本不会使用标题。我还认为,对环境使用星号参数非常不寻常。我宁愿定义一个带星号的变体(其中星号是环境名称的一部分)。然后,我不会为标签定义可选参数。\label如果需要,只需添加它就很容易了:

\documentclass{article}
\usepackage{xparse,mdframed,xcolor,wasysym}

\newcounter{problem}
\newcommand*\problemformat{\sffamily\color{green!30!blue!70}}

\NewDocumentEnvironment{problembox}{m}{%
  \refstepcounter{problem}%
  \mdframed[
    frametitle = {\RIGHTarrow\quad Problem \theproblem: #1} ,
    frametitlefont = \problemformat
  ]
    \problemformat\small
}{%
  \endmdframed
}

\NewDocumentEnvironment{problembox*}{m}{%
  \mdframed[
    frametitle = {\RIGHTarrow\quad Problem: #1} ,
    frametitlefont = \problemformat
  ]
  \problemformat\small
}{%
  \endmdframed
}

\usepackage{lipsum}

\begin{document}

\lipsum[4]

\begin{problembox}{foo}\label{prb:foo}
  \lipsum[2]
\end{problembox}

See problem~\ref{prb:foo} \lipsum[4]

\begin{problembox*}{foo}
  \lipsum[2]
\end{problembox*}

\lipsum[4]

\end{document}

在此处输入图片描述

相关内容