引用没有标题的非浮动对象

引用没有标题的非浮动对象

在我的论文中,我定义了 Boxes。在这些框中,我提供了额外的背景信息或定义,这些信息或定义对于我的正文来说太详细了。这些环境不是浮点数,也没有标题。框号在对象本身中显示和定义。我无法将框放入浮点数中,因为这样做的话它们就不再起作用了。

我想引用文本中的方框。使用\label{}\ref{}不起作用,因为它显然给出了章节编号。我只有有限数量的方框,而且只在介绍中,所以我可以手动编号。但我想保留 pdf 文件中的可点击链接。

有什么想法吗?

PS 我不知道这是否相关,但这些框写在子文件中,我使用它们导入到我的主 .tex 中\input{}

PPS 我在 .cls 文件中定义了如下框

\newcounter{mybox}[chapter] \setcounter{mybox}{0}
\renewcommand{\themybox}{\arabic{chapter}.\arabic{mybox}}
\newenvironment{mybox}[2][]{%
\refstepcounter{mybox}%
\ifstrempty{#1}%
{\mdfsetup{%
frametitle={%
\tikz[baseline=(current bounding box.east),outer sep=0pt]
\node[anchor=east,rectangle,fill=gray!20]
{\strut Box ~\themybox};}}
}%
{\mdfsetup{%
frametitle={%
\tikz[baseline=(current bounding box.east),outer sep=0pt]
\node[anchor=east,rectangle,fill=gray!20]
{\strut Box ~\themybox:~#1};}}%
}%
\mdfsetup{innertopmargin=10pt,linecolor=gray!20,%
linewidth=2pt,topline=true,%
frametitleaboveskip=\dimexpr-\ht\strutbox\relax
}
\begin{mdframed}[]\relax%
}{\end{mdframed}}

PPPS 这是文本中的样子

\begin{mybox}[Definitions: Validity]{}
\begin{description}

 \item[Some word]  has this meaning


\end{description}
\end{mybox}

然后我尝试使用\input{folder/Boxfile}\label{Box:label1}

我也试过

\begin{mybox}[Definitions: Validity]{}
\begin{description}

 \item[Some word]  has this meaning


\end{description}
\end{mybox}\label{Box:mybox}

这也指章节编号,而不是盒子编号

答案1

mybox环境不浮动且不包含语句这一事实对于确定它是否可以通过 LaTeX 的-机制\caption进行交叉引用并不重要。重要的是环境通过指令增加其关联的计数器。\label\ref\refstepcounter

\label指令应在mybox环境内部提供,最好在进入环境之后立即提供。

另外:环境和计数器共享完全相同的名称 ( mybox) 很容易引起混淆。那么如何改为调用计数器myboxcntr呢?

请参阅以下示例,了解如何执行交叉引用。

在此处输入图片描述

\documentclass{report}
\usepackage{mdframed,tikz}

\newcounter{myboxcntr}[chapter] 
\renewcommand{\themyboxcntr}{\thechapter.\arabic{myboxcntr}}
%\setcounter{myboxcntr}{0} % not needed
\newenvironment{mybox}[2][]{%
   \refstepcounter{myboxcntr}%
   \ifstrempty{#1}%
      {\mdfsetup{%
        frametitle={%
        \tikz[baseline=(current bounding box.east),outer sep=0pt]
        \node[anchor=east,rectangle,fill=gray!20]%
           {\strut Box \themyboxcntr};}}}%
       {\mdfsetup{%
        frametitle={%
        \tikz[baseline=(current bounding box.east),outer sep=0pt]
        \node[anchor=east,rectangle,fill=gray!20]%
           {\strut Box \themyboxcntr:~#1};}}}
   \mdfsetup{innertopmargin=10pt,linecolor=gray!20,%
      linewidth=2pt,topline=true,%
      frametitleaboveskip=\dimexpr-\ht\strutbox\relax}
   \begin{mdframed}[]\relax}{%
   \end{mdframed}}

\usepackage[colorlinks]{hyperref}
\usepackage[nameinlink]{cleveref}
\crefname{myboxcntr}{Box}{Boxes}

\begin{document}
\setcounter{chapter}{3} % just for this example

Yawn, big yawn, wakey-wakey, \dots
\begin{mybox}[Greetings!]{}
  \label{box:hello} % <-- crucial: provide a \label statement inside the env.
  Hello World. 
\end{mybox}

A cross-reference to \cref{box:hello}.
\end{document}

相关内容