我正在使用 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
\AtBeginDocument
udesoftec
我不知道有什么技巧可以让你直接从Tex
文件中解决这个问题。也许一个可能的解决方案是使用文件的本地版本并在定义之前udesoftec.cls
添加行。\usepackage(cleveref)
\AtBeginDocument
执行上述操作并运行 MWE 后,将listoftable
正确显示对 eq.(0.1) 的引用: