如何正确引用和设置自定义浮动标签

如何正确引用和设置自定义浮动标签

我在论文中使用了caption和包。我定义了一个自定义浮点数float,如下所示:newfloat

floatstyle{plaintop}
\newfloat{model}{thp}{lob}

现在我想将标签引用到我的模型中。我按照所学的方式将\label命令放在后面,但对我的自定义浮点的引用仍然以四分号结尾。我这里漏掉了什么?代码:\caption{model}

\newcommand{\Vertices}{V}
\newcommand{\VerticesDepot}{V_{0}}
\newcommand{\OrderSet}{\Omega}
\newcommand{\order}{\omega}
\newcommand{\agvArc}{x}
\newcommand{\pickerArc}{p}
\newcommand{\Horizon}{T}
\newcommand{\agvFlow}{f}
\newcommand{\pickerFlow}{fp}
    \begin{document}
\frontmatter
\titlepage{}
%
\mainmatter
Example text \ref{model:M2} to reference to model M2.
\chapter{Modelchapter}
\begin{model}[htb] \caption*{M\textsubscript{2}:} \label{model:M2}
\begin{align}
&\textnormal{Minimize} ~ t^* \label{eq:obj15}\\
\intertext{subject to}
\sum_{i \in \VerticesDepot} \agvArc_{ij} \quad &= \quad 1 & & \forall \; j \in \Vertices^{\omega}, \; \omega \in \OrderSet & \label{eq:MIP16}\\
# more and more equations
\end{align}
\end{model}

答案1

我必须承认,我不理解您对的用法\caption*,因为它似乎违背了使用 LaTeX 的\label-\ref创建交叉引用机制的目的。

我已将您的代码简化为我认为的最低限度,同时加载hyperrefcleveref包以创建高度可见的交叉引用:

在此处输入图片描述

\documentclass{book}
\usepackage{float,caption}
\floatstyle{plaintop}
\newfloat{model}{tbhp}{lom}
\floatname{model}{Model}

\usepackage[colorlinks,allcolors=blue]{hyperref}
\usepackage[nameinlink]{cleveref}
\crefname{model}{model}{models}

\begin{document}
\refstepcounter{chapter} % note the use of '\refstepcounter'

\begin{model}
\caption*{M\textsubscript{2}} \label{mod:M2}
\begin{equation}
1+1=2
\end{equation}
\end{model}

As shown in \cref{mod:M2}, \dots
\end{document}

请注意,如果我改为\caption{M\textsubscript{2}}\caption*{M\textsubscript{2}}我会得到以下结果:

在此处输入图片描述

你可能会问,为什么交叉引用写的是“第 1 章”而不是“模型 1”?LaTeX 的\label机制是通过查找最近增加通过\refstepcounter指令。由于\caption*创建了一个未编号的标题,model计数器变量是不是递增;因此,该\label语句锁定chapter计数器变量,因为这是最近由 递增的计数器变量\refstepcounter。(另外:如果我注释掉该\refstepcounter{chapter}指令,则 产生的交叉引用注定\cref{mod:M2}会失败,因为\label没有任何可以锁定的东西。)

相关内容