Makeindex 和不同类型的引用

Makeindex 和不同类型的引用

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}

在此处输入图片描述

相关内容