![设置 ToC 深度错误](https://linux22.com/image/377619/%E8%AE%BE%E7%BD%AE%20ToC%20%E6%B7%B1%E5%BA%A6%E9%94%99%E8%AF%AF.png)
我想设置目录的深度以包括章节、节(自定义)、小节和小小节。
我尝试包括(目前已注释掉)
\setcounter{tocdepth}{3}
在序言中,但我收到“Tex 容量超出”的错误。有人能帮忙吗?
documentclass[twoside,12pt,numbers=noenddot,tocbibind]{scrbook}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\setcounter{secnumdepth}{4}
%margins
\usepackage[top=3cm,bottom=2cm,left=2.5cm,right=2.5cm,asymmetric]{geometry}
%table of contents
\usepackage{tocloft}
%\setcounter{tocdepth}{3}
\colorlet{ctcolorchapterline}{cyan}
\colorlet{ctcolorchapternum}{cyan}
\RedeclareSectionCommand[
beforeskip=-1sp
]{chapter}
\makeatletter
\renewcommand\chapterlinesformat[3]{%
\ifstr{#1}{chapter}
{%
\parbox[b][\ht\strutbox]{\textwidth}{%
\parbox[b]{\dimexpr\textwidth-3em\relax}{\raggedright#3}%
\makebox[3em][r]{%
\hfill
#2%
}%
}%
}{\@hangfrom{#2}{#3}}% <- original definition for other levels
}
\makeatother
\renewcommand\chapterformat{%
\textcolor{ctcolorchapterline}{\rule[-5pt]{2pt}{5cm}}%
\quad
{\fontsize{60}{60}\selectfont\textcolor{ctcolorchapternum}{\thechapter}}%
}
\setlength{\cftsubsecindent}{1.2cm}
\setlength{\cftsubsecnumwidth}{2.5em}
%section titles in the margin
\renewcommand*{\sectionformat}{%
\llap{\thesection\autodot\enskip}%
}
\renewcommand*{\subsectionformat}{%
\llap{\thesubsection\autodot\enskip}%
}
\renewcommand*{\subsubsectionformat}{%
\llap{\thesubsubsection\autodot\enskip}%
}
\renewcommand\thesubsubsection{\thesubsection.\alph{subsubsection}}
\renewcommand{\thesubsection}{\arabic{chapter}.\arabic{subsection}}
\newcommand{\mysection}[1]{%
\section*{#1}%
\addcontentsline{toc}{section}{#1}%
\markright{#1}%
}
%header
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyfoot{}
\fancyhf{}
\fancyhead[LE,RO]{\thepage}
\renewcommand{\chaptermark}[1]{\markboth{#1}{}}
\fancyhead[RE]{\itshape \nouppercase{\leftmark}}
\fancyhead[LO]{\itshape \nouppercase{\rightmark}}
\setlength{\headheight}{15pt}
%hyperlinks and back referencing in format "(page #)"
\usepackage[hyperindex,colorlinks,hyperfootnotes = false,citecolor = cyan,backref=page]{hyperref}
\renewcommand\backreftwosep{, }
\renewcommand\backrefsep{, }
\renewcommand*{\backrefalt}[4]{%
\ifcase #1%
\or (page:~#2)%
\else (pages:~#2)%
\fi%
}
\usepackage{enumitem} % referencing in enumerate environment
%bibliography
\usepackage{natbib}
答案1
首先,您的最低工作示例并不完全充分:
- 没有示例内容,也没有任何章节或部分来填充您的目录。
- 该
\colorlet
命令是包的一部分xcolor
,这里没有包含它。 - 它包含与问题无关的其他包。
当我使用这些调整和一些最低限度的内容运行它时,它在 MiKTeX 发行版上使用 LaTeX 时没有错误。错误消息本身似乎表示存在一些无限循环或其他问题,导致 TeX 给出错误。例如,章节标题中的错误符号:https://latex.org/forum/viewtopic.php?t=25596
请将整个文档精简到最少并在此处发布。同时说明您使用的 TeX/LaTeX 版本、问题何时以及如何开始出现(就您所知)以及您已采取了哪些步骤。
此外:我想您已经注意到了警告信息,告诉您不建议将其scrbook
与以下产品一起使用fancyhdr
?请参阅https://latex.org/forum/viewtopic.php?t=30696以获取更多信息以及如何在必要时抑制错误。
答案2
不幸的是,问题中没有可行的示例,所以我无法重现该问题。
您的定义\mysection
应该被删除。改用 KOMA-Script 命令\addsec
。它会执行您想要的操作:没有编号但在标题和目录中有条目的章节标题。
对于页眉和页脚,建议使用scrlayer-scrpage
带有类的KOMA-Script 包scrbook
。
不要将包tocloft
与 KOMA-Script 类一起使用。无需使用此包即可更改子部分条目的缩进和数字宽度。请注意scrbook
加载并使用 KOMA-Script 包tocbasic
。
此外,没有选项tocbibind
。如果列表应获得目录条目,请使用listof=totoc
。参考书目(bibliography=totoc
)和索引(index=totoc
)类似。如果目录也应在目录中获得条目(不推荐),请添加\setuptoc{toc}{totoc}
到序言中。
头部高度应按包装设定geometry
。
对于章节编号的特殊大小(60pt),需要可缩放的字体。
\documentclass[twoside,12pt,numbers=noenddot,
listof=totoc,% if LOF and LOT should get TOC entries
bibliography=totoc,
index=totoc
]{scrbook}
\usepackage{lipsum}% only for dummy text
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
%margins
\usepackage[top=3cm,bottom=2cm,left=2.5cm,right=2.5cm,asymmetric,
headheight=15pt% <- change headheigt using geometry
]{geometry}
%table of contents
\setuptoc{toc}{totoc}% if the TOC should get a TOC entry (not recommended)
\setcounter{tocdepth}{\subsubsectiontocdepth}
\usepackage{xcolor}% <- added
\colorlet{ctcolorchapterline}{cyan}
\colorlet{ctcolorchapternum}{cyan}
\usepackage{lmodern}% <- a scalable font is needed for the special size of the chapter numbers
%headings
\setcounter{secnumdepth}{\subsubsectionnumdepth}
\RedeclareSectionCommand[
beforeskip=-1sp
]{chapter}
\RedeclareSectionCommand[
counterwithout=section,
counterwithin=chapter,
tocindent=1.5em,
tocnumwidth=2.3em
]{subsection}
\RedeclareSectionCommand[
tocindent=3.8em,
tocnumwidth=3.2em
]{subsubsection}
\renewcommand\thesubsubsection{\thesubsection.\alph{subsubsection}}
\makeatletter
\renewcommand\chapterlinesformat[3]{%
\ifstr{#1}{chapter}
{%
\parbox[b][\ht\strutbox]{\textwidth}{%
\parbox[b]{\dimexpr\textwidth-3em\relax}{\raggedright#3}%
\makebox[3em][r]{%
\hfill
#2%
}%
}%
}{\@hangfrom{#2}{#3}}% <- original definition for other levels
}
\makeatother
\renewcommand\chapterformat{%
\textcolor{ctcolorchapterline}{\rule[-5pt]{2pt}{5cm}}%
\quad
{\fontsize{60}{60}\selectfont\textcolor{ctcolorchapternum}{\thechapter}}%
}
%section titles in the margin
\renewcommand*{\sectionformat}{%
\llap{\thesection\autodot\enskip}%
}
\renewcommand*{\subsectionformat}{%
\llap{\thesubsection\autodot\enskip}%
}
\renewcommand*{\subsubsectionformat}{%
\llap{\thesubsubsection\autodot\enskip}%
}
%header
\usepackage[automark,headsepline]{scrlayer-scrpage}
\clearmainofpairofpagestyles
\ohead{\pagemark}
\ihead{\headmark}
\renewcommand\chaptermarkformat{}
\renewcommand\sectionmarkformat{}
\usepackage{enumitem} % referencing in enumerate environment
%bibliography
\usepackage{natbib}
%hyperlinks and back referencing in format "(page #)"
\usepackage[hyperindex,colorlinks,hyperfootnotes = false,citecolor = cyan,backref=page]{hyperref}
%% The following seems to be not related to the issue:
%\renewcommand\backreftwosep{, }
%\renewcommand\backrefsep{, }
%\renewcommand*{\backrefalt}[4]{%
%\ifcase #1%
%\or (page:~#2)%
%\else (pages:~#2)%
%\fi%
%}
\begin{document}
\tableofcontents
\listoffigures
\listoftables
\chapter{Chapter}
\lipsum[1]
\addsec{Section without number}
\subsection{Subsection}
\lipsum[2-3]
\subsubsection{Subsubsection}
\lipsum[4-6]
\addsec{Section without number}
\subsection{Subsection}
\lipsum[2-3]
\subsubsection{Subsubsection}
\lipsum[4-6]
\end{document}
结果: