使用 aucklandthesis.cls 时 \frontmatter 和 cleveref 交互时会出现混淆错误?

使用 aucklandthesis.cls 时 \frontmatter 和 cleveref 交互时会出现混淆错误?

我目前已接近论文写作的尾声,并且正在使用奥克兰论文班因为它似乎是我所在机构最接近官方课程/模板的东西。可能重要的是,这是基于回忆录课论文相关规定规定第一章之前的页码必须使用罗马数字,之后的所有内容都使用阿拉伯数字。通常,这不是问题,因为这似乎正是回忆录类使用\frontmatter\mainmatter命令所做的。

但是,在使用 aucklandthesis 类时,我似乎遇到了它与 cleveref 包之间的奇怪冲突,但只有在\frontmatter使用该命令时才会发生。如果\frontmatter没有发出该命令,那么 cleveref 命令可以正常工作,但我无法获得必要的分页。如果\frontmatter 使用后,我会收到如下警告:

LaTeX 警告:输入行 40 上标签类型“”的 Cref 参考格式未定义。

无论我在哪里使用\cref\Cref命令,文档中的相关位置都只会显示问号。此外,当我\cref在其中使用和包含多个交叉引用时,例如\cref{chap1,chap2},我收到如下错误

缺失数字,视为零。< l.43 ...结论,基于 \cref{chap1,chap2}

下面的 MWE 似乎证明了我所看到的内容:

\documentclass[11pt]{aucklandthesis}

\usepackage[T1]{fontenc}
\usepackage{hyperref}
\urlstyle{same}
\usepackage{cleveref}

\begin{document}

\title{[thesis title]}
\subtitle{[subtitle]}
\author{[candidate's name]}
\degreesought{[degree]} 
\degreediscipline{[discipline]}
\degreecompletionyear{[year]}

\maketitle
\frontmatter

\begin{abstract}
Apparently, some people refer to category theory as ``abstract nonsense.''
\end{abstract}

\chapter{Acknowledgements}
I want to thank the Academy, and my enormous ego, I mean talent.

\chapter{Hyperlink}
Hey, check out this neat website:  \url{https://www.auckland.ac.nz/en.html}
It's totally not phishing or rickrolling, really...

\settocdepth{section}
\cleardoublepage\tableofcontents

\mainmatter

\chapter{Hello}\label{chap1}
Beginnings and Introductions
\clearpage
\chapter{The Middle}\label{chap2}
Shocking revelations.  \Cref{chap1} has the details!
\clearpage
\chapter{This is the end, my friend}
Thrilling Conclusion, building on \cref{chap1,chap2}.

\backmatter
\cleardoublepage
\appendixpage*
\chapter{Appendix 1}
The Deadly Dénouement

\end{document}

为了进行比较,我尝试编译同样的东西,但只是使用 memoir 作为类而不是 aucklandthesis 类(它们并不完全相同,因为第一个使用了一些 aucklandthesis 自定义的命令):

\documentclass[11pt]{memoir}

\usepackage[T1]{fontenc}
\usepackage{hyperref}
\urlstyle{same}
\usepackage{cleveref}

\begin{document}

\title{[thesis title]}
\author{[candidate's name]}

\maketitle

\frontmatter

\begin{abstract}
Apparently, some people refer to category theory as ``abstract nonsense.''
\end{abstract}

\chapter{Acknowledgements}
I want to thank the Academy, and my enormous ego, I mean talent.

\chapter{Hyperlink}
Hey, check out this neat website:  \url{https://www.auckland.ac.nz/en.html}
It's totally not phishing or rickrolling, really...

\settocdepth{section}
\cleardoublepage\tableofcontents

\mainmatter

\chapter{Hello}\label{chap1}
Beginnings and Introductions
\clearpage
\chapter{The Middle}\label{chap2}
Shocking revelations.  \Cref{chap1} has the details!
\clearpage
\chapter{This is the end, my friend}
Thrilling Conclusion, building on \cref{chap1,chap2}.

\backmatter
\cleardoublepage
\appendixpage* 
\chapter{Appendix 1}
The Deadly Dénouement

\end{document}

此版本似乎构建良好,并且在使用 cleveref 时给出了正确的分页结果。我检查了 memoir 文档,找不到任何有关与 cleveref 交互的内容。Memoir 显然定义了自己的\Cref命令,但我猜 cleveref 会覆盖它。所有这些让我得出结论,aucklandthesis 类几乎肯定存在问题,但我对 memoir 和相关知识的了解太有限,无法弄清楚发生了什么。

我能做些什么(相当简单)来解决这个问题吗?最好是不需要放弃 cleveref 的方法。不幸的是,该课程的原作者似乎早已离开了我的机构,所以我无法向他们询问,而且现在似乎没有其他人负责维护它。我觉得这一切都令人困惑,因为 aucklandthesis 课程似乎甚至没有对命令做任何事情\frontmatter。我注意到,有时 pdflatex 的给定运行结果可能会有所不同,这取决于上次运行中注释掉的内容,但最终无论如何我都无法获得必要的结果。

哦,我可能还应该提到我在 Overleaf 上工作,以防万一。我想也许有人会建议对构建系统进行某种魔法,但我怀疑这在这里​​不是一个选择,恐怕。我可能还应该指出,aucklandthesis 类已经有几年没有更新了,所以问题可能源于对较新版本的回忆录的某些更改,而 aucklandthesis 中没有考虑到这些更改。

答案1

在这种情况下,根本问题与 关系不大cleveref。 发生的事情是,调用\frontmatteraucklandthesis.cls弄乱memoir的设置secnumdepth,因此,您的所有章节命令都没有编号。 因此,至少在 MWE 中,\refstepcounter永远不会被调用,并且您的标签会错过所抱怨的信息cleveref。 如果您删除对 的调用,\cref您的文档会编译,但所有章节都没有编号。

documentclass 似乎假定\frontmatter根本不要使用,因为它\mainmatter直接从 de 定义调用\maketitle...

确实,它aucklandthesis.cls没有重新定义\frontmatter,但它确实重新定义了\mainmatter,并且这样做会遗漏回忆录原文中的重要内容。据我所知,你可以手动完成类没有做的事情:

\mainmatter
\makeatletter
\@mainmattertrue
\makeatother
\setcounter{secnumdepth}{\value{maxsecnumdepth}}
\pagenumbering{arabic}

但是,在这种情况下,这个文档类似乎并不是您所在机构的官方文档类,这意味着您不需要使用它。在这种情况下,您最好从标准类、回忆录本身或 KOMA-Script 之一开始。

不幸的是,该课程的原作者似乎早已离开我的机构,所以我无法向他们询问,而且现在似乎没有其他人负责维护它。

正式来说,它是一个在 CTAN 上发布的软件包。无论它的维护者是否仍在该机构,都不会改变他们在 CTAN 中的角色。好吧,理论上是这样,但实际上情况可能会有所不同……我确实检查了文档,似乎没有联系信息供您尝试报告此事。如果您真的认为坚持使用文档类是值得的,您可能想尝试通过 CTAN 本身进行联系。或者,如果您的机构确实将此文档类宣传为“官方”的东西,即使不是“必需的”而只是“推荐的”,您可能应该向大学的某个人报告此事。

相关内容