索引 - 参考小节

索引 - 参考小节

索引时,我不希望以页码作为参考,而是以条目的章节/子章节作为参考。我该如何实现这一点?

答案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}

结果

相关内容