我在包含许多短小节(每页 2-3 个)的文档中使用 revtex4-1。我希望索引引用节和小节,而不是页码(例如,第 2 节第 1 小节中的项目“示例”为“示例,2.1”)。以下代码满足了我的所有要求,只是节号和小节号之间没有“。”:
\documentclass[rmp]{revtex4-1}
\usepackage{makeidx}
\makeatletter
\def\@wrindex#1{%
\protected@write\@indexfile{}%
{\string\indexentry{#1}{\thesubsection}}
\endgroup
\@esphack}
\makeindex
\renewcommand{\thesection}{\arabic{section}}
\renewcommand{\thesubsection}{\arabic{section}\arabic{subsection}}
\begin{document}
\section{Section} This is Section 1
\subsection{Subsection} This is Subsection 1.1 \index{My Subsection}
\printindex
\end{document}
如果我改为这样做\renewcommand{\thesubsection}{\arabic{section}.\arabic{subsection}
,则索引将不会打印。我见过一些解决方法,例如这个,但此方法仅对最多 9 个子节有效。我怎样才能让索引打印 section.subsection?
答案1
关键page_compositor
在于负责如何makeindex
解释它读取的“数字”并进行相应的排序。
通过定义一个新的索引样式文件,例如subsection.ist
,这可以用来将键更改为.
。
\documentclass[rmp]{revtex4-1}
\usepackage{makeidx}
\makeatletter
\def\@wrindex#1{%
\protected@write\@indexfile{}%
{\string\indexentry{#1}{\thesubsection}}
\endgroup
\@esphack}
\makeindex
\renewcommand{\thesection}{\arabic{section}}
\renewcommand{\thesubsection}{\arabic{section}.\arabic{subsection}}
\begin{filecontents}{subsection.ist}
page_precedence "nrRAa"
page_compositor "."
\end{filecontents}
\usepackage{pgffor}
\begin{document}
\section{Section} This is Section 1
\foreach \x in {1,...,20} {%
\clearpage
\subsection{Subsection \x} \index{My Subsection}
}
\section{Section} This is Section 1
\foreach \x in {1,...,20} {%
\clearpage
\subsection{Subsection \x} \index{My Subsection}
}
\printindex
\end{document}
makeindex -s subsection.ist foo
如果foo.tex
是文档的名称,则调用.tex
。