我使用\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
为了显示生成的链接。