我创建了一个“盒子”浮动环境,现在我想把标题放在盒子里面

我创建了一个“盒子”浮动环境,现在我想把标题放在盒子里面

我使用以下命令制作了一个盒子浮点数:

\usepackage{float}
\newfloat{Box}{t}{bx}[chapter]

\begin{Box}[htp]
  \label{box:test}
  \fcolorbox{black}{boxgray}{\parbox[c]{\textwidth}{The text goes here}}
\end{Box}

我想让标签(即“Box 1”)出现在文本第一行的框内。有人知道如何实现吗?

我正在使用的文件的基本版本:

\documentclass[11pt]{article}

\usepackage{color}


\definecolor{boxgray}{RGB}{215,215,215}
\usepackage{hyperref}

\usepackage{float}
\newfloat{Box}{t}{bx}[section]


\begin{document}


\section{example}

Something about \ref{box:test}.

\begin{Box}[htp]
  \label{box:test}
  \fcolorbox{black}{boxgray}{\parbox[c]{\textwidth}{The text goes here}}
\end{Box}


\end{document}  

答案1

您需要为标签添加一个锚点。这通常由caption而不是浮动环境完成。这就是为什么您应该将标签放在 之后的原因caption。在您的例子中,没有锚点。一个技巧是:

\usepackage{etoolbox}
\AtBeginEnvironment{Box}{\refstepcounter{Box}}

但是,您的环境中没有任何提示表明参考编号包含环境。因此,我建议如下:

  1. 使用以下代码定义新的浮动环境newfloat
  2. 与第 1 点相关,您可以使用 设置标题captionsetup。(我知道caption支持float
  3. 用于tcolorbox绘制标题周围的框架。

这里是 MWE:

\documentclass[11pt]{article}

\usepackage{xcolor}
\definecolor{boxgray}{RGB}{215,215,215}

\usepackage{caption}
\usepackage{newfloat}%loaded by caption too
\DeclareFloatingEnvironment[%
fileext=bx,%
within=section,%
placement=t,
name=Box,%
listname={List of Boxes},%
]{Boxed}
\captionsetup[Boxed]{justification=justified,format=plain,singlelinecheck=false,skip=0pt}
\usepackage{tcolorbox}
\newcommand*\boxedcaption[2][box:\arabic{Boxed}]%
{\begin{tcolorbox}\caption{#2}\label{#1}\end{tcolorbox}}

\usepackage{lipsum}

\usepackage{hyperref}


\begin{document}


\section{example}

Something about \ref{box:test}.

\begin{Boxed}[htp]
\lipsum[1]
\boxedcaption[box:test]{Text goes here}
\end{Boxed}

Something about \ref{box:2}.

\begin{Boxed}[htp]
\lipsum[2]
\boxedcaption{Text goes here}
\end{Boxed}

\end{document} 

相关内容