Makeindex 的手册指出:
在某些索引中,某些页码具有特殊格式 — 例如,斜体页码可能表示主要参考文献,页码后面的 n 可能表示该项目出现在该页的脚注中。MakeIndex 可让您轻松地以任何您想要的方式格式化单个页码。
如果我将其应用到我的文件中,其中人员出现在同一页的文本和注释中,则此 MWE:
\documentclass{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{makeidx}
\makeindex
\newcommand{\nn}[1]{#1n}
\begin{document}
bla\index{Lahm} blablab\index{Lahm|nn}
\newpage
bla\index{Lahm|nn} blablab
\printindex
\end{document}
有一个不受欢迎的索引输出:
Lahm, 1, 1, 2n
事实上应该
Lahm, 1, 1n, 2n
从.ind 文件中可以看出原因:
\begin{theindex}
\item Lahm, 1, \nn{1, 2}
\end{theindex}
它将两个 \nn 引用分组。当然,这在输出中不可见。我该如何避免这种情况?
(顺便说一下,.ilg 文件指出:
-- 冲突的条目:同一个键下的同一页面的多个封装。
)
经过进一步研究,我发现这是页面范围的问题。Makeindex 使用“,”将两个页面分组,因此必须使用 .ist 文件来更改 suffix_2p 。
答案1
您可以重写该\nn
命令,以便它可以处理逗号分隔的列表:
\usepackage{etoolbox}
\newcounter{notereferencecount}
\newcommand{\nn}[1]{%
\setcounter{notereferencecount}{0}%
\renewcommand{\do}[1]{%
\ifnumequal{\value{notereferencecount}}{0}
{##1n}
{, ##1n}%
\stepcounter{notereferencecount}}%
\docsvlist{#1}}
给出(我添加了一些页面以确保它能够完成我所想的功能!)
.ind 文件的内容
\item Lahm, 1, \nn{1, 2}, 3, \nn{4}
答案2
保罗·斯坦利 (Paul Stanley) 想法的不同实现。
\documentclass{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{makeidx}
\usepackage{xparse}
\makeindex
\ExplSyntaxOn
\NewDocumentCommand{\nn}{m}
{
% split the argument at commas
\seq_set_split:Nnn \l_martin_nn_in_seq { , } { #1 }
% add a trailing n to each item
\seq_set_map:NNn \l_martin_nn_out_seq \l_martin_nn_in_seq { ##1n }
% output the items separated, if necessary, by "comma space"
\seq_use:Nn \l_martin_nn_out_seq {,~}
}
\seq_new:N \l_martin_nn_in_seq
\seq_new:N \l_martin_nn_out_seq
\ExplSyntaxOff
\begin{document}
bla\index{Lahm} blablab\index{Lahm|nn}
bla\index{A} bla\index{A|nn}
bla\index{B} bla\index{B|nn}
\newpage
bla\index{Lahm|nn} blablab
bla\index{B|nn}
\newpage
bla\index{B|nn}
\printindex
\end{document}