回忆录类中的“未定义的控制序列”问题?

回忆录类中的“未定义的控制序列”问题?

我使用memoirclass 并希望自定义目录和章节样式。当我使用\renewcommand*\l@chapter[2]第二次编译

Undefined control sequence.
\chapternumberline ... \@tempdima {\@chapapp@head
\@cftbsnum #1\@cftasnum \h...
l.2 ...pter}{\chapternumberline {1}Chapter One}{3}

我的代码:

\documentclass{memoir} 
\usepackage{xcolor}
\usepackage[framemethod=tikz]{mdframed} 
\usepackage{titletoc}
\usepackage{etoolbox}


\definecolor{secnum}{RGB}{13,151,225}
\definecolor{ptcbackground}{RGB}{212,237,252}
\definecolor{ptctitle}{RGB}{0,177,235}

\makeatletter
\renewcommand*\l@chapter[2]{%
  \ifnum \c@tocdepth >\m@ne
    \addpenalty{-\@highpenalty}%
    \vskip 2.0em \@plus\p@
    \setlength\@tempdima{1.5em}%
    \begingroup
      \parindent \z@ \rightskip \@pnumwidth
      \parfillskip -\@pnumwidth
      \leavevmode
      \advance\leftskip\@tempdima
      \hskip -\leftskip
      \colorbox{ptctitle}{\strut%
        \makebox[\dimexpr\textwidth-2\fboxsep-7pt\relax][l]{%
          \color{white}\bfseries\sffamily#1%
          \nobreak\hfill\nobreak\hb@xt@\@pnumwidth{\hss #2}}}\par\smallskip
      \penalty\@highpenalty
    \endgroup
  \fi}
\makeatother

\begin{document}

\tableofcontents

\chapter{Chapter One}
\section{Section One One}
\subsection{Section One Two}

\chapter{Chapter Two}
\section{Section Two One}

\end{document}

然而,在book课堂上,它却没有任何错误!

答案1

您修改的定义源自book.cls,因此很明显它在那里有效。memoir.cls具有完全不同的章节定义方式,因此您可以通过从book.cls那里“注入”代码轻松产生冲突。 文档结构等完全由文档类负责,因此您需要考虑您正在使用哪个类。 请改为修改 memoir.cls 中的代码。

这是一个起点。我试图尽可能地“微创”,但我真的不是回忆录专家。从表面上看,它需要更多的调整,但定义确实截然不同:

\makeatletter
\setlength{\cftbeforechapterskip}{2.0em \@plus\p@}
\renewcommand{\cftchapterfont}{\bfseries\sffamily}
\renewcommand*{\l@chapapp}[3]{%
  \ifnum \c@tocdepth >\m@ne
    \cftchapterbreak
    \vskip \cftbeforechapterskip
    {%\leftskip \cftchapterindent\relax
     \memRTLleftskip \cftchapterindent\relax
%%%     \rightskip \@tocrmarg
     \memRTLrightskip \@tocrmarg
%%%     \parfillskip -\rightskip
     \parfillskip -\memRTLrightskip
     \parindent \cftchapterindent\relax
     \@afterindenttrue
     \interlinepenalty\@M
     \leavevmode
     \let\@cftbsnum \cftchapterpresnum
     \let\@cftasnum \cftchapteraftersnum
     \let\@cftasnumb \cftchapteraftersnumb
     \def\@chapapp@head{#3}%
     \settowidth{\@tempdima}{\cftchapterfont\@chapapp@head}%
     \addtolength{\@tempdima}{\cftchapternumwidth}%
%%%     \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
     \advance\memRTLleftskip \@tempdima \null\nobreak\hskip -\memRTLleftskip
      \colorbox{ptctitle}{\strut%
        \makebox[\dimexpr\textwidth-2\fboxsep-7pt\relax][l]{%
          \color{white}\cftchapterfont#1%
          \nobreak{\cftchapterleader}\nobreak
    \cftchapterformatpnum{#2}%
    \cftchapterafterpnum}}\par\smallskip}%
  \fi}
\makeatother

示例输出

相关内容