我已经在这个网站上搜索了好几天,但没有找到任何与我的问题相近的东西。我认为唯一接近的问题是关于插入和内存需求的问题。我已将示例代码缩减到最低限度。重现该问题确实很难,但我认为这些代码可以做到这一点。我在一台运行 Mojave 的 32GB RAM 的新 MacBook Pro 上使用 PdfLaTeX 和 TeXShop。
问题是,当我请求tocdepth
3 时,的定义\ChapterN
似乎丢失了,因为我收到错误消息:
! Undefined control sequence.
<argument> Chapter \@ChapterN
\ - Blablabla
l.40 ...bsection}{\numberline {1.5.1}Blablabla}{4}
尽管是定义。如果tocdepth
是 2,问题就消失了。至关重要的是,如果我指定tocdepth
= 3 但删除其中一个\section
s 或\subsection
s,问题就会消失。这就是为什么下面的最小示例有这么多\section
s 等。
在我看来这似乎是一个记忆问题,我模糊地认为增加参数\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
...