![自定义样式导致 mathtools 和 listings 之间不兼容](https://linux22.com/image/357093/%E8%87%AA%E5%AE%9A%E4%B9%89%E6%A0%B7%E5%BC%8F%E5%AF%BC%E8%87%B4%20mathtools%20%E5%92%8C%20listings%20%E4%B9%8B%E9%97%B4%E4%B8%8D%E5%85%BC%E5%AE%B9.png)
我的学校,罗德岛大学 (URI),
建议使用学校开发的用于完成论文的样式文件,
例如自定义文档类文件,urithesis.cls
,
用于\documentclass{}
命令。
我已经确定这个自定义文档类文件会导致和包
之间不兼容。 mathtools
listings
我仔细检查了.cls
代码,没有发现任何明显的问题。
(这是意料之中的,因为我不太熟悉自定义文档类文件。)
我已通知所有者/创建者,但尚未收到回复。
使用自定义文档类时,这种类型的问题是否是
一个常见且通常很容易解决的问题?
(这两个包对我来说都非常可取。)
平均能量损失:
在上面的链接中,重申这里为了方便起见,
提供了文档类文件以及最小工作示例(MWE)。
请下载thesis.zip
完整MWE的链接,
如果在根文件的前言中添加如下代码thesis.tex
:
\usepackage{mathtools}
\usepackage{listings}
然后会出现一个错误信息。
注释掉任何一个包都可以解决这个问题。
答案1
该类做了一件非常错误的事情,当calc
与一起加载时会爆炸listings
。
% line 424
\newcounter{chaptercitecount}
% lines 795-801
\def\cl@chapter{%
\setcounter{chaptercitecount}{0}%
\if@sequential%
\@elt{section}\@elt{footnote}%
\else%
\@elt{equation}\@elt{figure}\@elt{footnote}\@elt{section}\@elt{table}%
\fi}
\cl@chapter
每次执行宏时都会执行该宏chapter
,以进行所需的重置。\setcounter
无论如何,在里面执行都是错误的。
恐怕你必须修复这个类。第一步应该是
% Counts the number of references in each chapter to determine if there
% is a list of references for that chapter when using chapterref format.
\newcounter{chaptercitecount}[chapter]
\renewcommand{\thechaptercitecount}{\arabic{chaptercitecount}}
第二部分应该是
\def\cl@chapter{%
\@elt{chaptercitecount}%
\if@sequential%
\@elt{section}\@elt{footnote}%
\else%
\@elt{equation}\@elt{figure}\@elt{footnote}\@elt{section}\@elt{table}%
\fi}
然而,还有比挂钩更好的方法\cl@chapter
。
我建议删除重新定义\cl@chapter
,添加
\RequirePackage{chngcntr}
在适当的地方(之后\LoadClass
)以及在课程结束时,
\if@sequential
\counterwithout*{figure}{chapter}
\counterwithout*{table}{chapter}
\counterwithout*{equation}{chapter}
\else
\counterwithin{equation}{chapter}
\counterwithin{figure}{chapter}
\counterwithin{footnote}{chapter}
\counterwithin{section}{chapter}
\counterwithin{table}{chapter}
\fi