我正在使用appendix
包来管理我的附录和\appendices
环境,特别是使用选项 toc 和 title,以便在文本中,标题显示为“附录 A”,而在目录中,它显示为标题“附录”下的“A”。因为我有超过 26 个附录,所以我使用 AA,alphalph
这样 Z 之后的下一个附录就命名为 AA。不幸的是,这给编号留下了足够的空间,因此标题开始超出它(见图)。我尝试使用通过声明tocloft
增加的大小(正常宽度为 2.3em),但这会产生错误“@starttoc 已定义”。在组合包方面,我肯定已经达到了极限。numwidth
\cftsetpnumwidth{3em}
我怎样才能在 Z 之后继续对附录进行编号,同时保留在标题中包含单词“附录”但不在目录中包含单词的样式,并防止目录显得拥挤?在下面显示的图像中(生成最小工作示例时出现在第 2 页),我希望“AA”和“The”之间有一些空格(理想情况下,其他附录也使用相同的间距)。
说明该问题的最小示例:
\documentclass{article}
\usepackage[toc,title]{appendix} %% Manage appendix when using \appendices environment: toc = put header in TOC; title = add the word 'Appendix' in the document before each number
\usepackage{alphalph} %% To number appendices beyond Z
\begin{document}
\tableofcontents\pagebreak
\appendices
\makeatletter
\newalphalph{\Alphmult}[mult]{\@Alph}{26}
\makeatother
\renewcommand{\thesection}{\Alphmult{\value{section}}}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\pagebreak % So it doesn't overrun
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{The last appendix}
\end{document}
答案1
使用 时我没有收到错误tocloft
。因此我无法使用已定义的 重现您的问题\@starttoc
。
但\cftsetpnumwidth
长度不对。问题不在于页码,而在于节号。因此,您必须更改\cftsecnumwidth
:
\documentclass{article}
\usepackage{tocloft}
\setlength{\cftsecnumwidth}{2.3em}
\usepackage[toc,title]{appendix} %% Manage appendix when using \appendices environment: toc = put header in TOC; title = add the word 'Appendix' in the document before each number
\usepackage{alphalph} %% To number appendices beyond Z
\begin{document}
\tableofcontents\pagebreak% NOTE: \pagebreak here is wrong. It should be either \clearpage or \newpage or better be removed.
\appendices
\makeatletter
\newalphalph{\Alphmult}[mult]{\@Alph}{26}
\makeatother
\renewcommand{\thesection}{\Alphmult{\value{section}}}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\pagebreak % So it doesn't overrun
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{The last appendix}
\end{document}
tocloft
有关 的更多信息\cftXnumwidth
以及您必须使用的名称X
,请参阅手册第 9 页(第 2.3 节) 。
作为使用方法的替代方法,tocloft
您可以修补。用于设置 ToC 条目的节号保留宽度的\l@section
原始代码是: 。因此,您可以使用:article.cls
\setlength\@tempdima{1.5em}
\documentclass{article}
\usepackage[toc,title]{appendix} %% Manage appendix when using \appendices environment: toc = put header in TOC; title = add the word 'Appendix' in the document before each number
\usepackage{alphalph} %% To number appendices beyond Z
\usepackage{xpatch}
\makeatletter
\xpatchcmd{\l@section}{%
\setlength\@tempdima{1.5em}%
}{%
\setlength\@tempdima{2.3em}%
}{}{\PatchFailure}
\makeatother
\begin{document}
\tableofcontents
\appendices
\makeatletter
\newalphalph{\Alphmult}[mult]{\@Alph}{26}
\makeatother
\renewcommand{\thesection}{\Alphmult{\value{section}}}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\pagebreak % So it doesn't overrun
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{The last appendix}
\end{document}
结果与上面的相同。
但是因为,通常你还想改变小节和小节条目的缩进。也许你还想改变这些条目的数字宽度。所以使用tocloft
\ \setlength{
cftsubsecindent}{…}` 等可能会更好。
另一个完全不同的建议是使用包tocbasic
而不是tocloft
。它提供了自动检测数字所需宽度的功能:
\documentclass{article}
\usepackage[toc,title]{appendix} %% Manage appendix when using \appendices environment: toc = put header in TOC; title = add the word 'Appendix' in the document before each number
\usepackage{alphalph} %% To number appendices beyond Z
\usepackage{tocbasic}
\DeclareTOCStyleEntry[dynnumwidth]{tocline}{section}% automatically detect the number width
\begin{document}
\tableofcontents
\appendices
\makeatletter
\newalphalph{\Alphmult}[mult]{\@Alph}{26}
\makeatother
\renewcommand{\thesection}{\Alphmult{\value{section}}}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\pagebreak % So it doesn't overrun
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{An appendix}
\section{The last appendix}
\end{document}
这需要至少三次 LaTeX 运行才能得到以下结果:
有关 的更多信息,请参阅 KOMA-Script 手册的第 15.3 节\DeclareTOCStyleEntry
。