cref 表标题:在主体中有效,不在批次中

cref 表标题:在主体中有效,不在批次中

我正在使用 cleveref 包。在我的一个表中,我引用了文本中的一个公式。引用在表格下方的标题中工作正常(也使用 hyperref)。不幸的是,它在表格列表中不起作用,我得到了传统的??在我的 pdf 输出中出现以下警告:

LaTeX 警告:标签类型“equation”的 cref 参考格式未定义

一些代码(我希望足够):

\documentclass[en,printlayout]{udesoftec}
\usepackage{cleveref}
\begin{document}
\frontmatter
\mainmatter
\part{Part1}
\begin{align}
\label{eq:CDF}
        D_{fit}(x) =& \sum_{i=1}^{N-1} \frac{1}{2}K_i\left(1+erf(\frac{x-m_i}{\sqrt{2}\sigma_i})\right)\nonumber \\
         &+  \frac{1}{2}(1-\sum_{i=1}^{N-1}K_i)\left(1+erf(\frac{x-m_N}{\sqrt{2}\sigma_N})\right)
\end{align}

\part{Part2}
\begin{table}[htbp]
\begin{tabular*}{\hsize}{@{\extracolsep{\stretch{1}}} c  c  c  c }
    \hline
\rule{0pt}{3ex} $i$ & $K $& $m$ & $\sigma$  \\
    \end{tabular*}
    \caption{$i$, $K$, $m$ and $\sigma$ correspond to the parameters in  \cref{eq:CDF}}
    \label{tab:myTab}
\end{table}
\end{document}

该课程可以在 CTAN 上找到:http://www.ctan.org/pkg/udesoftec

我已经尝试删除 .lot 文件并编译两次,但没有成功。有什么想法吗?

谢谢

答案1

Jean-Sébastien Gosselin 的诊断是正确的:阶级udesoftec滥用\AtBeginDocument排版材料,这不是一件好事,参见Heiko Oberdiek 的回答

问题是,cleveref必须在开始文档时推迟几个技巧,但这些技巧会发生一些材料已经排版,特别是表格列表。

幸运的是,正如 Heiko 所建议的,有一个钩子可用于将错误执行的文档开头的内容转移到\AfterEndPreamble。该类的维护者应该意识到这个问题。

我也修复了方程式,请看一下:正确的使用环境是multline,还需要进行一些小的调整;主要的是为错误函数定义一个运算符。

\documentclass[en,printlayout]{udesoftec}
\usepackage{etoolbox}
\usepackage{cleveref}

\DeclareMathOperator{\erf}{erf}

%%% the hack!
\def\udesoftecoverride#1\mainmatter{%
  \AfterEndPreamble{#1\mainmatter}%
}
%%%

\begin{document}
\frontmatter
\mainmatter
\part{Part1}
\begin{multline}
\label{eq:CDF}
D_{\mathrm{fit}}(x) = 
  \sum_{i=1}^{N-1} 
    \frac{1}{2}K_i
    \left(1+\erf\Bigl(\frac{x-m_i}{\sqrt{2}\,\sigma_i}\Bigr)\right) \\
  + \frac{1}{2}\biggl(1-\sum_{i=1}^{N-1}K_i\biggr)
    \left(1+\erf\Bigl(\frac{x-m_N}{\sqrt{2}\,\sigma_N}\Bigr)\right)
\end{multline}

\part{Part2}
\begin{table}[htbp]
\begin{tabular*}{\hsize}{@{\extracolsep{\stretch{1}}} c  c  c  c }
    \hline
\rule{0pt}{3ex} $i$ & $K $& $m$ & $\sigma$  \\
    \end{tabular*}
    \caption{$i$, $K$, $m$ and $\sigma$ correspond to the parameters in  \cref{eq:CDF}}
    \label{tab:myTab}
\end{table}
\end{document}

在此处输入图片描述

固定方程

在此处输入图片描述

答案2

我相信问题在于,在documentclass 末尾定义cleveref之后才加载包。\listoftables\AtBeginDocumentudesoftec

我不知道有什么技巧可以让你直接从Tex文件中解决这个问题。也许一个可能的解决方案是使用文件的本地版本并在定义之前udesoftec.cls添加行。\usepackage(cleveref)\AtBeginDocument

执行上述操作并运行 MWE 后,将listoftable正确显示对 eq.(0.1) 的引用:

在此处输入图片描述

相关内容