目录中的索引没有页码

目录中的索引没有页码

我使用\addcontentsline在目录中放置索引条目,但我不需要页码,我想要超链接。我该怎么做?

\documentclass{book}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage[makeindex]{splitidx}
\usepackage{hyperref}
\newcommand{\ITerm}{IndexTerms}
\newcommand{\IServ}{IndexServs}
\newcommand{\MyLarge}{\Large}
\newcommand{\smindexxspecial}[2]{{\MyLarge#2} \sindex[#1]{#2}}
\newcommand{\smindexspecial}[2]{{\MyLarge#2}\sindex[#1]{#2}}
\newcommand{\smindexvspecial}[2]{{\MyLarge#2}\sindex[#1]{#2}}
\newcommand{\smsindexspecial}[2]{{\MyLarge \url{#2}}\sindex[#1]{#2}}
\newindex[General Index]{IndexTerms}
\newindex[Websites]{IndexServs}
\tableofcontents
%\addcontentsline{toc}{chapter}{General Index}
\addtocontents{toc}{\protect\contentsline {chapter}{General Index}{}{}}
\printindex[\ITerm]
\addcontentsline{toc}{chapter}{Websites}
\printindex[\IServ]        
 And this is the end of the story.
\end{document}

当我做这个的时候

\addtocontents{toc}{\protect\contentsline {chapter}{General Index}{}{}}

目录中没有页码,但没有超链接。

但是当我使用这个

%\addcontentsline{toc}{chapter}{General Index}

我有页码和超链接。

我还希望它没有页码但带有超链接。

我应该指出,这与索引术语页面无关,但与索引名称有关。我有两个索引。第一个名为“通用索引”,另一个名为“网站”。我希望此索引名称位于目录中。

答案1

使用文档中最少的不同标记,方法如下:

\documentclass{book}
\usepackage{imakeidx}
\usepackage{hyperref}

% This command does the same as \printindex
% but also encloses the entry in the TOC in a group
% and activates the change of meaning of \l@chapter
\newcommand{\printindexnonumber}[1][\jobname]{%
  \addtocontents{toc}{\begingroup\protect\nonextpagenumber}
  \printindex[#1]
  \addtocontents{toc}{\endgroup}
}
\makeatletter
% this command modifies \l@chapter to ignore the page number
\newcommand\nonextpagenumber{%
  \let\orig@l@chapter\l@chapter
  \def\l@chapter##1##2{\orig@l@chapter{##1}{}}%
}
\makeatother

\makeindex[intoc]

\begin{document}
\frontmatter
\tableofcontents
\mainmatter
\chapter{A}
Some text\index{text}

\backmatter
\printindexnonumber

\end{document}

所以您只需使用\printindexnonumber而不是\printindex;如果您的导师改变主意,回来会很容易。


对于您的情况,splitindex解决方案类似,只需进行修补\theindex,它就会在目录中做出注释。(注意: tocbibind没有建立正确的链接。)

\documentclass{book}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage[makeindex]{splitidx}
\usepackage[colorlinks]{hyperref}

\usepackage{etoolbox}
\makeatletter
\patchcmd{\theindex}
  {\@makeschapterhead}
  {\add@index@to@toc\@makeschapterhead}
  {}{}
\newcommand{\add@index@to@toc}{%
  \csname phantomsection\endcsname
  \addcontentsline{toc}{chapter}{\indexname}%
}
\makeatother


\newcommand{\printindexnonumber}[1][\jobname]{%
  \addtocontents{toc}{\begingroup\protect\nonextpagenumber}
  \printindex[#1]
  \addtocontents{toc}{\endgroup}
}
\makeatletter
% this command modifies \l@chapter to ignore the page number
\newcommand\nonextpagenumber{%
  \let\orig@l@chapter\l@chapter
  \def\l@chapter##1##2{\orig@l@chapter{##1}{}}%
}
\makeatother

\newindex[General Index]{IndexTerms}
\newindex[Websites]{IndexServs}

\begin{document}
\frontmatter
\tableofcontents
\printindexnonumber[IndexTerms]
\printindexnonumber[IndexServs]
\mainmatter
\chapter{Title}
 And this is the end of the story.
\sindex[IndexTerms]{X}
\sindex[IndexServs]{Y}
\end{document}

我不明白为什么使用\ITerm\IServ,当名称相同时。我\smindexxspecial从示例中删除了 kind 宏以使其保持简洁。 选项colorlinks只是hyperref为了显示生成的链接。

在此处输入图片描述

相关内容