我想将其添加\indexname
到目录和书签中。
现在,我知道一种完成这项工作的方法:在之前添加以下代码\printindex
:
\phantomsection
\cleardoublepage
\addcontentsline{toc}{chapter}{\indexname}
但我想将所有样式或自定义代码移动到单个.sty
文件中
有人知道如何通过更新\printindex
命令或可以在.sty
文件中定义的某些方法来做到这一点吗?
编辑:添加 MWE
\documentclass{book}
\usepackage{makeidx}
\usepackage{hyperref}
\usepackage{lipsum}
\makeindex
\begin{document}
\frontmatter
\tableofcontents
\mainmatter
\chapter{one}
\lipsum[1]
\index{word}
\backmatter
\appendix
\phantomsection
\cleardoublepage
\addcontentsline{toc}{chapter}{\indexname}
\printindex
\end{document}
答案1
三种方式。
tocbibind
\usepackage{makeidx} \makeindex \usepackage[nottoc]{tocbibind}
idxlayout
\usepackage{makeidx} \makeindex \usepackage[totoc]{idxlayout}
imakeidx
\usepackage{imakeidx} \makeindex[intoc]
使用方法 2 和 3 还可以使索引的最后一页保持平衡。
答案2
我也曾遇到过同样的问题,试图让 tocbibind 按照我的要求做。(将索引添加到目录)。不幸的是,上面的 tocbibind-answer 链接(使用 hyperref)跳转到章节前索引。在我的情况下,这是参考书目。我通过编辑 tocbibind.sty 文件解决了这个问题(您可能可以在自己的 .sty 文件中执行此操作)。但是,此解决方案需要multicol
包裹。
首先,我在后面添加了以下行ProvidesPackage
:
\RequirePackage{multicol}
然后,我重新定义了该\printindex
命令,它在索引环境前面添加了一个\chapter
或(我认为真正的痛苦在于生成的文件仅包含环境而没有用于添加章节/部分/其他标题的命令):\chapter*
.ind
theindex
\if@inltxdoc\else
\renewcommand{\printindex}{
\if@bibchapter
\if@donumindex
\chapter{\indexname}
\else
\chapter*{\indexname}
\if@dotocind
\addcontentsline{toc}{chapter}{\indexname}
\fi
\fi
\fi
\addcontentsline{toc}{chapter}{\indexname}
\@input@{\jobname.ind}
}
\fi
最后,在更新环境的代码中,theindex
我从分支中删除了内容\if@bibchapter
(现在只读取\begin{multicols}{2}
),并将相应的内容添加\if@bibchapter\end{multicols}\fi
到环境的结束代码中:
\if@inltxdoc\else
\renewenvironment{theindex}%
{\if@twocolumn
\@restonecolfalse
\else
\@restonecoltrue
\fi
\if@bibchapter
\begin{multicols}{2}
\else
\if@donumindex
\twocolumn[\vspace*{-1.5\topskip}%
\@nameuse{\@tocextra}{\indexname}]%
\csname \@tocextra mark\endcsname{\indexname}
\else
\if@dotocind
\twocolumn[\vspace*{-1.5\topskip}%
\toc@headstar{\@tocextra}{\indexname}]%
\prw@mkboth{\indexname}
\addcontentsline{toc}{\@tocextra}{\indexname}
\else
\twocolumn[\vspace*{-1.5\topskip}%
\toc@headstar{\@tocextra}{\indexname}]%
\prw@mkboth{\indexname}
\fi
\fi
\fi
\thispagestyle{plain}\parindent\z@
\parskip\z@ \@plus .3\p@\relax
\let\item\@idxitem}
{\if@bibchapter\end{multicols}\fi\if@restonecol\onecolumn\else\clearpage\fi}
\fi
现在索引页有非常相同的章节标题和hyperref
链接有效。
答案3
这是我所做的,似乎效果不错。创建索引时添加 TOC 请求:
\makeindex[columns=3, title=字母索引, intoc]