xindy、splitindex 和属性

xindy、splitindex 和属性

@Nicola-Talbot 设法解决了我最后一个问题: Makeindex,索引中不同类型的引用和排序

不幸的是,我无法成功实现超越 splitindex 的解决方案。

前提是:考虑具有三个不同属性的索引,即默认、ii(隐式)和 nn:

莎士比亚\索引{莎士比亚}

斯特拉特福\index{Shakespeare|ii} 著名剧作家

注:威廉·莎士比亚(/ˈʃeɪkspɪər/;[1] 1564 年 4 月 26 日(受洗)- 1616 年 4 月 23 日)[注 1] 是一位英国诗人、剧作家和演员,被广泛认为是英语中最伟大的作家和世界上最杰出的剧作家。\index{Shakespeare|nn}

如果页面上有默认类型的条目,则应从输出中省略具有属性的条目。

此 MWE 的工作原理如下:

\documentclass{scrartcl} 
\usepackage{filecontents}
\usepackage[T1]{fontenc} 
\usepackage[ngerman]{babel} 
\usepackage{makeidx}

\begin{filecontents*}{\jobname.xdy}
; list of allowed attributes

(define-attributes (( "default" "ii" "nn" )))

; define format to use for locations

(markup-locref :open "\emph{" :close "}" :attr "ii")
(markup-locref :open "\nn{" :close "}" :attr "nn")

; location list separators

(markup-locref-list :sep ", ")
(markup-range :open "\range{" :sep "}{" :close "}")

(merge-to "nn" "ii" :drop)    
\end{filecontents*}

\makeindex 

\newcommand{\nn}[1]{#1n}

\newcommand{\range}[2]{{\def\nn##1{##1}#1}--#2}

\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}

不幸的是,当我引入 splitindex (我有两个索引)时,MWE 不再正确地省略属性:

\documentclass{scrartcl} 
\usepackage{filecontents}
\usepackage[T1]{fontenc} 
\usepackage[ngerman]{babel} 
  \usepackage[makeindex, protected]{splitidx}
\newindex[persons]{pw}

\begin{filecontents*}{\jobname.xdy}
; list of allowed attributes

(define-attributes (( "default" "ii" "nn" )))

; define format to use for locations

(markup-locref :open "\ii{" :close "}" :attr "ii")
(markup-locref :open "\nn{" :close "}" :attr "nn")

; location list separators

(markup-locref-list :sep ", ")
(markup-range :open "\range{" :sep "}{" :close "}")

(merge-to "nn" "ii" :drop)    
\end{filecontents*}

\makeindex 

\newcommand{\nn}[1]{#1n}
\newcommand{\ii}[1]{\emph{#1}}

\newcommand{\range}[2]{{\def\nn##1{##1}#1}--#2}

\begin{document} 

bla\sindex[pw]{Lahm} blablab\sindex[pw]{Lahm|nn}

bla\sindex[pw]{A} bla\sindex[pw]{A|nn}

bla\sindex[pw]{B} bla\sindex[pw]{B|nn}
bla\sindex[pw]{B} bla\sindex[pw]{B|ii}
\newpage

bla\sindex[pw]{Lahm|nn} blablab

bla\sindex[pw]{B|nn}

\newpage

bla\sindex[pw]{B|nn}

\printindex[pw] 
\end{document}

我相信它与 splitindex 有关,因为 .ilg 会出现与 makeindex 相同的警告:

Generating output file ./indextest-pw.ind....
## Warning (input = ./indextest-pw.idx, line = 4; output = ./indextest-pw.ind, line = 3):
   -- Conflicting entries: multiple encaps for the same page under same key.

## Warning (input = ./indextest-pw.idx, line = 8; output = ./indextest-pw.ind, line = 7):
   -- Conflicting entries: multiple encaps for the same page under same key.

## Warning (input = ./indextest-pw.idx, line = 6; output = ./indextest-pw.ind, line = 7):
   -- Conflicting entries: multiple encaps for the same page under same key.

## Warning (input = ./indextest-pw.idx, line = 2; output = ./indextest-pw.ind, line = 11):
   -- Conflicting entries: multiple encaps for the same page under same key.

知道如何解决这个问题吗?或者是否有其他方法可以使用 xindy 来获得两个索引?

答案1

当我编译您的 MWE 时,我得到了以下信息:

带有省略条目的分割索引

这似乎正是我所期望的。例如,Laum在第 1 页上多次被索引,但只包括没有属性的出现,而在第 2 页上只被索引一次,因此包括了该出现及其属性。

改编 Nicola 答案中的命令行,您可以使用

splitindex -m "xindy -M test -M texindy -C utf8 -L english" test

iftest.tex是文件的名称。调整您xindy为德语传递的选项或任何您需要的选项,就像不使用拆分索引时所做的那样。

相关内容