Amsbook 类 + 两个目录

Amsbook 类 + 两个目录

我想用 amsbook 类显示两个目录:考虑以下 MWE,

\documentclass{amsbook}
\usepackage{shorttoc}

\title{Title}

\begin{document}
\maketitle

\shorttoc{Contents}{1}

\setcounter{tocdepth}{3}
\renewcommand*\contentsname{Contents (detailed)}
\tableofcontents

\chapter{Chapter}
\section{Section}
\subsection{Subsection}
\subsubsection{Subsubsection}

Some subsubsection text

\end{document}

这不能编译,但有趣的是,只有在编译两次之后才能编译:如果我不使用命令进行编译,\shorttoc我会像往常一样生成目录;然后我取消注释\shorttoc,它仍然可以编译,现在正确地生成两个目录;然后我再次编译并出现以下错误。

! Missing control sequence inserted.
<inserted text>
\inaccessible
l.1 ...tents}}}\xdef {}{}{}\mark {}\endgroup }}{3}
%
Please don't say `\def cs{...}', say `\def\cs{...}'.
I've inserted an inaccessible control sequence so that your
definition will be completed without mixing me up too badly.
You can recover graciously from this error, if you're
careful; see exercise 27.2 in The TeXbook.
) [3
] [4
]
Contents (detailed)
(./MWE.toc

这是 shorttoc 和 amsbook 不兼容吗?有没有变通办法来拥有两个目录?我都不打算使用shorttoc。但是etoctocloft等似乎会给 AMS 类带来其他问题。

答案1

下面我定义\firstToC打印第一个目录和\secondToC打印第二个目录。第一个关闭覆盖.toc(设置\@fileswfalse,本地)。第二个删除在目录中打印目录(同样,本地)。

在此处输入图片描述

\documentclass{amsbook}

\makeatletter
\newcommand{\firstToC}{{%
  \@fileswfalse% Don't overwrite the current ToC
  \@starttoc{toc}\contentsname
}}
\newcommand{\secondToC}{{%
  \renewcommand{\@tocwrite}[2]{}% Don't write ToC to ToC
  \renewcommand{\contentsname}{Contents (detailed)}%
  \@starttoc{toc}{\contentsname}%
}}
\makeatother

\begin{document}

\setcounter{tocdepth}{1}%
\firstToC

\setcounter{tocdepth}{3}%
\secondToC

\chapter{Chapter}
\section{Section}
\subsection{Subsection}
\subsubsection{Subsubsection}
Lorem ipsum\ldots

\end{document}

答案2

\starttoc为了使其兼容,需要进行一些更改amsbook

  1. 我们希望避免它在目录中写入条目,这\chapter*通常是在amsbook
  2. 我们不希望它主动设置标题,因为amsbook无论如何它都会处理好业务。
\documentclass{amsbook}
\usepackage{shorttoc}

\makeatletter
\renewcommand\shorttoc[2]{%
  \begingroup
  \c@tocdepth=#2\relax
  \@restonecolfalse
  \if@tightshtoc
    \parsep\z@
  \fi
  \if@twocolumn\@restonecoltrue\onecolumn\fi
  \renewcommand\@tocwriteb[3]{}%
  \chapter*{#1}%
  \@startshorttoc{toc}\if@restonecol\twocolumn\fi
  \endgroup
}
\makeatother

\title{Title}

\begin{document}
\maketitle

\shorttoc{Contents}{1}

\setcounter{tocdepth}{3}
\renewcommand*\contentsname{Contents (detailed)}
\tableofcontents

\chapter{Chapter}
\section{Section}
\subsection{Subsection}
\subsubsection{Subsubsection}

Some subsubsection text

\end{document}

的重新定义\shorttoc本质上与包中的相同,但是

  1. \@tocwriteb已(本地)禁用,以便不生成目录条目
  2. \chapter*{#1}没有发出\@mkboth

简短内容

在此处输入图片描述

详细内容

在此处输入图片描述

相关内容