makeindex 生成的标准索引会显示每个索引术语的页码。是否有办法在索引术语出现在脚注中时显示脚注编号(而不是页码)?脚注编号在整个文档中按顺序排列,因此这比仅用“n”限定页码更能本地化参考。在脚注和正文中使用不同的索引宏是可以的。
答案1
我的方法是\@footnoteindex
在 a 开始时切换为 true \footnote
,并在 之后将其设置为 false \@wrindex
。
这当然是一个逻辑错误,因为它不允许其他\index
用法\footnote
也使用脚注编号。
\documentclass{article}
\usepackage{makeidx}
\usepackage{blindtext}
\makeatletter
\let\latex@@footnote\footnote
\newif\if@footnoteindex
\renewcommand{\footnote}[1]{%
\global\@footnoteindextrue
\latex@@footnote{#1}%
}
\def\@wrindex#1{%
\if@footnoteindex
\global\let\the@fooindexstuff\thefootnote
\else
\global\let\the@fooindexstuff\thepage
\fi
\protected@write\@indexfile{}%
{\string\indexentry{#1}{\the@fooindexstuff}}%
\global\@footnoteindexfalse%
\endgroup
\@esphack
}
\usepackage{hyperref}
\makeatother
\makeindex
\begin{document}
\section{A section}
The concept of animals as pets is quite important\index{Animal}
\blindtext[10]\footnote{Stuff\index{Dog}}
\clearpage
Duck\index{Duck}
\blindtext[10]\footnote{Another stuff\index{Cat}}
\clearpage
Elephant\index{Elephant}
\printindex
\end{document}
答案2
即使您希望索引中的脚注编号而不是页码,您仍必须以不同的格式来区分索引中的两者。在此示例中,我将脚注编号加粗。
.idx
问题是在文件写入时获取脚注编号。如果我们发送一个\thefootnote
,它将在索引排版时给出该计数器的值。
我在这里所做的是创建一个\footnoteindex
用于在脚注中使用 的命令。此命令使用 ,\thefootnote
因为它作为参数发送到 ,所以被扩展\index
。插入的页码\index
将被附加命令丢弃,\indexbf
因为第二个参数(页码)未使用。
由于脚注编号不在页码的位置,因此makeidx
无法使用它们进行通常的好操作。
这是代码:
\documentclass{article}
\usepackage{makeidx}\makeindex
\usepackage{lipsum}
\newcommand{\indexbf}[2]{\textbf{#1}}
\newcommand{\footnotexindex}[2]{\index{#1|indexbf{#2}}}
\newcommand{\footnoteindex}[1]{\footnotexindex{#1}{\thefootnote}}
\begin{document}
\setcounter{page}{11}
\setcounter{footnote}{3}
\lipsum[1]\index{first}\footnote{\lipsum[2]\footnoteindex{first foot}\footnoteindex{same foots}}
\lipsum[3]\index{second}\footnote{\lipsum[4]\footnoteindex{second foot}}
\lipsum[5]\index{text and foot}\footnote{\lipsum[6]\footnoteindex{text and foot}\footnoteindex{same foots}}
\printindex
\end{document}