如何将 \printindex 添加到目录

如何将 \printindex 添加到目录

我想将其添加\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

三种方式。

  1. tocbibind

    \usepackage{makeidx}
    \makeindex
    \usepackage[nottoc]{tocbibind}
    
  2. idxlayout

    \usepackage{makeidx}
    \makeindex
    \usepackage[totoc]{idxlayout}
    
  3. imakeidx

    \usepackage{imakeidx}
    \makeindex[intoc]
    

使用方法 2 和 3 还可以使索引的最后一页保持平衡。

答案2

我也曾遇到过同样的问题,试图让 tocbibind 按照我的要求做。(将索引添加到目录)。不幸的是,上面的 tocbibind-answer 链接(使用 hyperref)跳转到章节索引。在我的情况下,这是参考书目。我通过编辑 tocbibind.sty 文件解决了这个问题(您可能可以在自己的 .sty 文件中执行此操作)。但是,此解决方案需要multicol包裹。

首先,我在后面添加了以下行ProvidesPackage

\RequirePackage{multicol}

然后,我重新定义了该\printindex命令,它在索引环境前面添加了一个\chapter或(我认为真正的痛苦在于生成的文件仅包含环境而没有用于添加章节/部分/其他标题的命令):\chapter*.indtheindex

\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]

相关内容