\index inside 脚注:如何使用索引包正确传播脚注编号?

\index inside 脚注:如何使用索引包正确传播脚注编号?

我们使用该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}

相关内容