我使用以下命令制作了一个盒子浮点数:
\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}}
但是,您的环境中没有任何提示表明参考编号包含环境。因此,我建议如下:
- 使用以下代码定义新的浮动环境
newfloat
- 与第 1 点相关,您可以使用 设置标题
captionsetup
。(我知道caption
支持float
) - 用于
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}