etoc 和 memoir 兼容性问题

etoc 和 memoir 兼容性问题

我刚刚在做一些测试etoc包,当我将文档类从 更改为 时bookmemoir错误就出现了。这个简单的文档

%\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似乎(至少部分)与articlebookreport、和类兼容。从版本 1.07k开始scrartcl,可以与包同时使用。scrbookscrreprtmemoiretoctocloft

答案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

相关内容