使用 alphalph 创建多字母附录名称时,确保目录编号中有足够的水平空间

使用 alphalph 创建多字母附录名称时,确保目录编号中有足够的水平空间

我正在使用appendix包来管理我的附录和\appendices环境,特别是使用选项 toc 和 title,以便在文本中,标题显示为“附录 A”,而在目录中,它显示为标题“附录”下的“A”。因为我有超过 26 个附录,所以我使用 AA,alphalph这样 Z 之后的下一个附录就命名为 AA。不幸的是,这给编号留下了足够的空间,因此标题开始超出它(见图)。我尝试使用通过声明tocloft增加的大小(正常宽度为 2.3em),但这会产生错误“@starttoc 已定义”。在组合包方面,我肯定已经达到了极限。numwidth\cftsetpnumwidth{3em}

我怎样才能在 Z 之后继续对附录进行编号,同时保留在标题中包含单词“附录”但不在目录中包含单词的样式,并防止目录显得拥挤?在下面显示的图像中(生成最小工作示例时出现在第 2 页),我希望“AA”和“The”之间有一些空格(理想情况下,其他附录也使用相同的间距)。

输出第 2 页上的编号过于拥挤

说明该问题的最小示例:

\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 运行才能得到以下结果:

使用 tocbasic

有关 的更多信息,请参阅 KOMA-Script 手册的第 15.3 节\DeclareTOCStyleEntry

其他几个用于操作 ToC 的包

相关内容