我在论文中使用了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
创建交叉引用机制的目的。
我已将您的代码简化为我认为的最低限度,同时加载hyperref
和cleveref
包以创建高度可见的交叉引用:
\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
没有任何可以锁定的东西。)