我刚刚在做一些测试etoc
包,当我将文档类从 更改为 时book
,memoir
错误就出现了。这个简单的文档
%\documentclass{book}
\documentclass{memoir}
\usepackage{etoc}
\begin{document}
\tableofcontents
\chapter{A test chapter}
\end{document}
触发错误消息
! Undefined control sequence.
<argument> \if@cftnctoc
\else \renewcommand *\etocstandarddisplaystyle {\eto...
l.1150 }
这表明\if@cftnctoc
未定义。我检查了 和 的代码etoc
,从 1106 行到 1124 行(也可以在软件包文档的第 88 页中看到这一点),这个命令有两种用法,但我无法弄清楚问题到底是什么。文档etoc
提到该软件包与 兼容memoir
,所以我很困惑。我遗漏了什么吗?
编辑:这出现在前言的etoc
文档:
etoc
似乎(至少部分)与article
、book
、report
、和类兼容。从版本 1.07k开始scrartcl
,可以与包同时使用。scrbook
scrreprt
memoir
etoc
tocloft
答案1
该类memoir
模拟tocloft
(有差异),为了避免用户加载它,假装它正在加载,因此etoc
会造成混淆。特别是,tocloft
定义
\newif\if@cftnctoc\@cftnctocfalse
\DeclareOption{titles}{\@cftnctoctrue}
因此,条件似乎仅用于titles
选项,而对 则没有意义memoir
。我的建议是提交错误报告并执行
\documentclass{memoir}
\makeatletter
\let\if@cftnctoc\iftrue
\makeatother
\usepackage{etoc}
\begin{document}
\tableofcontents*
\chapter{A test chapter}
\end{document}
titles
中的选项使其tocloft
不会覆盖目录或类似列表中章节标题的代码,所以我想将其设置为 true 是正确的做法memoir
。