自定义样式导致 mathtools 和 listings 之间不兼容

自定义样式导致 mathtools 和 listings 之间不兼容

我的学校,罗德岛大学 (URI),
建议使用学校开发的用于完成论文的样式文件,
例如自定义文档类文件,urithesis.cls
用于\documentclass{}命令。

我已经确定这个自定义文档类文件会导致和包
之间不兼容。 mathtoolslistings

我仔细检查了.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

相关内容