章节和小节过多的问题

章节和小节过多的问题

我已经在这个网站上搜索了好几天,但没有找到任何与我的问题相近的东西。我认为唯一接近的问题是关于插入和内存需求的问题。我已将示例代码缩减到最低限度。重现该问题确实很难,但我认为这些代码可以做到这一点。我在一台运行 Mojave 的 32GB RAM 的新 MacBook Pro 上使用 PdfLaTeX 和 TeXShop。

问题是,当我请求tocdepth3 时,的定义\ChapterN似乎丢失了,因为我收到错误消息:

! Undefined control sequence.
<argument> Chapter \@ChapterN 
                              \ - Blablabla
l.40 ...bsection}{\numberline {1.5.1}Blablabla}{4}

尽管定义。如果tocdepth是 2,问题就消失了。至关重要的是,如果我指定tocdepth= 3 但删除其中一个\sections 或\subsections,问题就会消失。这就是为什么下面的最小示例有这么多\sections 等。

在我看来这似乎是一个记忆问题,我模糊地认为增加参数\reserveinserts可能会有帮助,但我宁愿得到正确的诊断和一些适当的指导,而不是随机地进行黑客攻击。

顺便说一句,如果你运行这段代码,格式会有点混乱,但你可以忽略它,这只是因为我剥离了代码来重现手头的问题。

\documentclass[10pt,a4paper]{book}
\usepackage{etex}
\reserveinserts{28}

\usepackage[most]{tcolorbox}
\newtcbox{\mybox}{blank, on line, opacitytext=0.6}
\makeatletter
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand\ChapterN[1]{\def\@ChapterN{#1}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{fancyhdr}
\fancypagestyle{plain}{
\fancyhf{}
\fancyhead[L]{Left}
\fancyhead[C]{Centre}
\fancyhead[R]{Right}
\fancyfoot[L]{
    \setlength{\fboxsep}{2mm}
    \setlength{\fboxrule}{0.2mm}
    \fbox{\parbox{14.8cm}
    {\strut \mybox{\textcolor{red}
        {\textbf{Chapter \@ChapterN \ - Blablabla}}}}}}
\fancyfoot[C]{}
\fancyfoot[R]{
    \setlength{\fboxsep}{2mm}
    \setlength{\fboxrule}{0.2mm}
    \fbox{\parbox{1.35cm}{\strut\centering\thepage}}}}
\makeatother
\pagestyle{plain}
\usepackage{varwidth}

%%%%%%%%%%%%%%%%%%%%%%%%
\setcounter{tocdepth}{3}
%%%%%%%%%%%%%%%%%%%%%%%%

\begin{document}

\tableofcontents
\ChapterN{A}
\chapter{Blablabla}
\section{Blablabla}
\subsection{Blablabla}
\subsubsection{IBlabla Blabla Blabla Blabla Blabla}
\subsubsection{Isdfgsdfgsdfg Blabla Blabla Blabla}
\subsection{klsdfhkajhfdg}
\subsection{Blabla Blabla Blabla Blabla Blabla}
\subsection{Blabla}
\subsection{Blabla Blabla Blabla Blabla}
\subsubsection{Blabla}
\subsubsection{Blabla}
\subsubsection{Blabla}
\subsubsection{Blabla}
\subsection{Blablabla}
\subsection{Blablabla}
\subsection{Blablabla}

\section{Blablabla Blablabla}
\subsection{Blablabla}
\subsection{Blablabla}
\subsubsection{Blablabla}
\subsubsection{Blablabla}
\subsubsection{Blablabla}
\subsubsection{Blablabla}
\subsubsection{Blablabla Blablabla}
\subsection{Blablabla Blablabla Blablabla}

\section{Blablabla}
\subsection{Blablabla}
\subsection{Blablabla}
\subsection{Blablabla}
\subsection{Blablabla}
\subsection{Blablablai}

\section{Blablabla}
\subsection{Blablabla}
\subsection{Blablabla}
\subsection{Blablabla}
\subsection{Blablabla}
\subsection{Blablabla}
\subsection{Blablabla Blablabla}

\section{Blablabla Blablabla Blablabla}
\subsection{Blablabla}
\subsection{Blablabla}

\end{document}

答案1

您可以\ChapterN通过将内容传递到文档左侧页脚\@ChapterN来使用\fancyfoot[L](页眉和页脚统称为“页面样式”)。

呈现目录时,它通常从奇数页(右侧)开始。如果它足够短,则左侧将完全不呈现,因此不会调用\@ChapterN。但是,如果目录较长,它最终将跳转到下一个左侧,并呈现该页的页脚,您可在此处告诉 fancyhdr 包使用\@ChapterN。问题是,此时该宏仍未定义,因为您的宏\ChapterN位于 之后\tableofcontents

有几种方法可以解决这个问题:你可以在定义之后立即\@ChapterN调用来初始化:\ChapterN

\newcommand\ChapterN[1]{\def\@ChapterN{#1}}
\ChapterN{}

现在,\@ChapterN是空的,但已定义,因此当目录被拆分到下一页时,页面样式可以调用\@ChapterN。请注意,您将在第二个目录页上看到“章节 - Blablabla”作为页脚,而您可能不希望出现这种情况。

或者,你可以告诉只有 当它已经初始化时才fancyhdr使用:\@ChapterN

\fancyfoot[L]{
  \ifx\@ChapterN\@undefined\else
    \setlength{\fboxsep}{2mm}
    \setlength{\fboxrule}{0.2mm}
    \fbox{\parbox{14.8cm}
    {\strut \mybox{\textcolor{red}
        {\textbf{Chapter \@ChapterN \ - Blablabla}}}}}
  \fi
  }

现在,您要告诉包仅在定义时才呈现左侧页脚\@ChapterN。否则,左侧页面的页脚将完全空白。

然而,最干净的方法是分别为目录和文本使用(或定义)不同的页面样式:

...
\begin{document}
\pagestyle{empty}% no headers/footers for ToC
\tableofcontents
\ChapterN{A}
\pagestyle{plain}% re-activate page styles
...

相关内容