我们使用该index
包是为了获得多个索引(名称索引、主题索引、语言索引),我们对此基本满意。只有一个棘手的问题:index
无法按需要传播脚注编号,不像makeidx
(虽然不支持多个索引):
\documentclass{scrbook}
\usepackage{index}
\usepackage{hyperref}
\def\fn#1#2{%
\hyperpage{#2}n#1%
}%
\newcommand{\is}[1]{\if@noftnote%
\index{#1}%
\else%
\index{#1|fn{\thefootnote}}%
\fi%
}
\makeindex
\begin{document}
\footnote{First footnote.}
\footnote{Second footnote.\is{inside second footnote}}
\footnote{Third footnote.}
\printindex
\end{document}
这将输出inside second footnote, 1n3
而不是inside second footnote, 1n2
。因此,\thefootnote
似乎是在最后展开的,而不是立即在脚注中展开。
关于如何正确处理这个问题,有什么建议吗index
?
答案1
您必须扩展\thefootnote
,否则它将以不可用的形式写入.idx
文件中:
\documentclass{scrbook}
\usepackage{index}
\usepackage{hyperref}
\newcommand\fn[2]{\hyperpage{#2}n#1}
\makeatletter
\let\if@noftnote\iffalse % just for the example
\newcommand{\is}[1]{%
\if@noftnote
\index{#1}%
\else
\edef\tempnumber{\thefootnote}%
\expandafter\footnoteindex\expandafter{\tempnumber}{#1}%
\fi
}
\makeatother
\newcommand{\footnoteindex}[2]{\index{#2|fn{#1}}}
\makeindex
\begin{document}
\footnote{First footnote.}
\footnote{Second footnote.\is{inside second footnote}}
\footnote{Third footnote.}
\printindex
\end{document}
我猜\if@noftnote
是由你的完整代码的其他部分设置的,所以我只是让它\iffalse
。
答案2
该imakeidx
包还提供多个索引文件,并正确扩展了脚注编号。
\documentclass{scrbook}
\usepackage{imakeidx}
\usepackage{hyperref}
\def\fn#1#2{%
\hyperpage{#2}n#1%
}%
\newcommand{\is}[1]{%
\if@noftnote%
\index{#1}%
\else%
\index{#1|fn{\number\value{footnote}}}%
\fi%
}
\makeindex
\begin{document}
\footnote{First footnote.}
\footnote{Second footnote.\is{inside second footnote}}
\footnote{Third footnote.}
\printindex
\end{document}