简而言之,我需要重新编码目录,因为我打算包含一个简短的介绍或摘要,说明本章的内容。当然,如果已经为此目的构建了一个包,那也很好。
\begin{enumerate}
\item \Nameref{<chapter-number>} \hfill \Pageref{<chapter-number>}
This chapter is about blah.
\end{enumerate}
但是,我不想不断地给书的每一章贴标签,然后一遍又一遍地回头更新。
\Nameref
是否有上述和命令的代码\Pageref
(其功能类似于\nameref
和,\pageref
但直接引用章节编号)?
答案1
具有自动标签生成和相关计数器的版本helpchapter
。\label
注入后\refstepcounter{chapter}
带有前缀helpchapter:
该宏\DisplayEnumTocLine{Foo}
使用enumi
计数器并撤回名称和页面引用等\nameref{helpchapter:\number\value{enumi}}
。强制参数的内容显示为描述文本。
带星号的版本\DisplayEnumTocLine
不会为名称和页面引用生成超链接,示例显示了两个版本的用法。
(注意:这个xassoccnt
包在这里并不是真正必要的,但它简化了helpchapter
这里的自动步进)。
\documentclass{book}
\usepackage{enumitem}
\usepackage{xassoccnt}
\newcounter{helpchapter}
\DeclareAssociatedCounters{chapter}{helpchapter}
\usepackage{xpatch}
\makeatletter
\xpatchcmd{\@chapter}{%
\refstepcounter{chapter}%
}{%
\refstepcounter{chapter}%
\label{helpchapter:\number\value{helpchapter}}%
}{}{}
\NewDocumentCommand{\DisplayEnumTocLine}{sO{helpchapter:}+m}{%
\IfBooleanTF{#1}{%
\nameref*{#2\number\value{enumi}} \hfill \pageref*{#2\number\value{enumi}}%
}{%
\nameref{#2\number\value{enumi}} \hfill \pageref{#2\number\value{enumi}}%
}%
#3%
}
\makeatother
\usepackage{hyperref}
\usepackage{blindtext}
\begin{document}
\begin{enumerate}
\item \DisplayEnumTocLine{A foo chapter}
\item \DisplayEnumTocLine*{\blindtext}
\end{enumerate}
\chapter{Foo chapter}
\chapter{Other chapter}
\end{document}
答案2
您可以将其他信息添加到目录中:
\documentclass{book}
\newcommand*{\addchapterinfo}[1]{%
\addcontentsline{toc}{chapterinfo}{#1}%
}
\makeatletter
\newcommand{\l@chapterinfo}[2]{%
\begingroup
\leftskip 1.5em% same as \l@chapter uses
\noindent #1\par
\endgroup
\addvspace{.5\baselineskip}% add additional vertical space
}
\makeatother
\usepackage{mwe}
\begin{document}
\tableofcontents
\chapter{First Chapter}
\addchapterinfo{This is additional text for the chapter entry}
\lipsum
\chapter{Second Chapter}
\addchapterinfo{\blindtext}
\lipsum[1]
\section{First Section in Second Chapter}
\lipsum
\end{document}
如果您不喜欢目录中的章节条目,请使用\setcounter{tocdepth}{0}
。这将导致: