texindy/imakeidx 书签指向具有多个索引的错误页面

texindy/imakeidx 书签指向具有多个索引的错误页面

我有两个索引:和Main Index。PDFName Index书籍在视觉上是正确的:

在此处输入图片描述

请注意,Name Index从第 6 页开始,而Z的条目Name Index在第 7 页。

但是,单击(出现在第 7 页)Z中的Name Index,我将转到(第 6 页)ZMain Index

此代码改编自将 \lowercase 应用于索引条目

代码:

\documentclass{article}
\usepackage{imakeidx}
\usepackage{hyperref}

\newcommand*\lettergroup[1]{%
    \clearpage%
    \section*{#1}%
    \pdfbookmark[0]{#1}{#1}% 
    \nopagebreak%
}

% https://tex.stackexchange.com/questions/51688/applying-lowercase-to-index-entries
\newcommand*{\AddIndexEntry}[3][]{%
  % #1 = indexed term, #2 = word to index this under
  \par\noindent
  \lowercase{\def\temp{#3}}%
  Indexing: #3%
  \if!#1!
    \expandafter\index\expandafter{\temp!#2}%
  \else
    \expandafter\indexopt\expandafter{\temp!#2}{#1}
  \fi
}
\newcommand{\indexopt}[2]{\index[#2]{#1}}

\makeindex[title={Main Index},columns=1,program=texindy]
\makeindex[title={Name Index},columns=1,program=texindy,name=Name]

\begin{document}

\AddIndexEntry{aardvark}{aardvark}
\AddIndexEntry{Saved by Zero}{Saved}
\AddIndexEntry{Saved by Zero}{Zero}
\AddIndexEntry[Name]{zero}{zero}

\clearpage
\addcontentsline{toc}{}{Main Index}
\printindex

\clearpage
\addcontentsline{toc}{}{Name Index}
\printindex[Name]
\end{document}

答案1

我认为,与手动放置书签相比,更好的方法是hyperref

\documentclass{article}
\usepackage{imakeidx}
\usepackage{hyperref}
\usepackage{bookmark}

\newcommand*\lettergroup[1]{\subsection{#1}}

% http://tex.stackexchange.com/questions/51688/applying-lowercase-to-index-entries
\newcommand*{\AddIndexEntry}[3][]{%
  % #1 = indexed term, #2 = word to index this under
  \par\noindent
  \lowercase{\def\temp{#3}}%
  Indexing: #3%
  \if!#1!
    \expandafter\index\expandafter{\temp!#2}%
  \else
    \expandafter\indexopt\expandafter{\temp!#2}{#1}
  \fi
}
\newcommand{\indexopt}[2]{\index[#2]{#1}}

\makeindex[title={Main Index},columns=1,program=texindy]
\makeindex[title={Name Index},columns=1,program=texindy,name=Name]
\indexsetup{level=\section}

\begin{document}

\AddIndexEntry{aardvark}{aardvark}
\AddIndexEntry{Saved by Zero}{Saved}
\AddIndexEntry{Saved by Zero}{Zero}
\AddIndexEntry[Name]{zero}{zero}

\clearpage % we want to be sure that all index entries are output
\setcounter{secnumdepth}{0}
\printindex

\printindex[Name]
\end{document}

但关键是使用 来\subsection表示字母组,这样它们将成为索引的子项。使用\setcounter{secnumdepth}{0}我们禁用编号,并使用\indexsetup{level=\section}我们告诉 LaTeX 使用\section{\indexname}而不是\section*,这样重要的操作hyperref将自动执行。

相关内容