索引时,我不希望以页码作为参考,而是以条目的章节/子章节作为参考。我该如何实现这一点?
答案1
可以通过重新定义\@wrindex
立即写入索引条目并使用节/小节编号而不是页码来完成。
由于子节号通常用点号与节号分隔,因此 makeindex 变量page_compositor
通过特定于作业名称的样式文件设置为点号。<jobname>.mst
如果存在,Makeindex 将自动查找并使用它作为样式文件。
完整示例:
\RequirePackage{filecontents}
\begin{filecontents*}{\jobname.mst}
page_compositor "."
\end{filecontents*}
\documentclass{article}
\usepackage{makeidx}
\makeindex
\makeatletter
\def\@wrindex#1{%
\set@display@protect
\immediate\write\@indexfile{%
\protect\indexentry{#1}{%
\ifnum\value{subsection}=0 %
\thesection
\else
\thesubsection
\fi
}%
}%
\endgroup
\@esphack
}
\makeatother
\begin{document}
\section{First section}
\index{first}
\index{section}
\subsection{First subsection}
\index{first}
\index{subsection}
\section{Second section}
\index{second}
\index{section}
\subsection{Another subsection}
\index{subsection}
\setcounter{section}{9}
\section{Another section}
\index{section}
\subsection{Last subsection}
\index{subsection}
\printindex
\end{document}
级别为“章节”
下面的例子也使用了“章节”级别,正如评论:
\RequirePackage{filecontents}
\begin{filecontents*}{\jobname.mst}
page_compositor "."
\end{filecontents*}
\documentclass{report}
\usepackage{makeidx}
\makeindex
\makeatletter
\def\@wrindex#1{%
\set@display@protect
\immediate\write\@indexfile{%
\protect\indexentry{#1}{%
\ifnum\value{section}=0 %
\thechapter
\else
\ifnum\value{subsection}=0 %
\thesection
\else
\thesubsection
\fi
\fi
}%
}%
\endgroup
\@esphack
}
\makeatother
\begin{document}
\chapter{First chapter}
\index{first}
\index{chapter}
\chapter{Second chapter}
\index{second}
\index{chapter}
\section{First section}
\index{first}
\index{section}
\subsection{First subsection}
\index{first}
\index{subsection}
\section{Second section}
\index{second}
\index{section}
\subsection{Another subsection}
\index{second}
\index{subsection}
\setcounter{section}{9}
\section{Another section}
\index{section}
\subsection{Last subsection}
\index{subsection}
\printindex
\end{document}