我正在排版一份法语文档,因此使用 xindy 创建索引。
我有三个级别的参考:主要的,以粗体显示;默认,以罗马体显示;次要的,以斜体显示。
为了使索引更易于阅读,我希望遵循以下位置引用的顺序:主要、默认、次要;像这样:
然后,我编辑了 xindy 样式文件来创建组:
但我也想要次要的页码消失并采用默认页码:
几乎完成了,但是次要的由于其值,reference 仍显示在 default 之前。当我在 groups 定义中引入更多嵌套时,xindy 返回错误:
(define-attributes (("major") (("default") ("minor"))) )
ERROR: nesting level too deep !
我想要的风格,即按组排序和替换,可以用 xindy 实现吗?
下面是一个例子。
% pdflatex -draftmode test.tex; texindy -M style.xdy -C utf8 test.idx; pdflatex test.tex
\documentclass[a4paper, 12pt]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[xindy]{imakeidx}
\usepackage{filecontents}
\begin{filecontents*}{style.xdy}
(define-attributes (("major") ("default" "minor")) )
(markup-attribute-group-list :sep "; ")
(merge-to "minor" "default" :drop)
(markup-locref :attr "major" :open "\textbf{" :close "}")
(markup-locref :attr "minor" :open "\textit{" :close "}")
(markup-locclass-list :open "\dotfill")
\end{filecontents*}
\makeindex
\begin{document}
\verb+\index{Index entry|minor}+\index{Index entry|minor}
\newpage
\verb+\index{Index entry|major}+\index{Index entry|major}
\newpage
\verb+\index{Index entry}+\index{Index entry}
\verb+\index{Index entry|minor}+\index{Index entry|minor}
\printindex
\verb+(define-attributes (("major") ("default" "minor")) )+
\end{document}
附录:
在 Sergei Golovan 回答之后,我尝试了一些测试。
该方法似乎适用于独自的索引引用,尽管在使用 |(和 |)间隔时,可能会出现警告:
Processing index... [10%]
WARNING: Found a :close-range in the index that wasn't opened before!
在我看来,这个警告与这个错误非常相似:https://sourceforge.net/p/xindy/bugs/54/,就像当区间指标被使用。遗憾的是,它会删除位置引用。
有时,由于定义的组而发生的替换过程似乎也会导致警告。
这需要进行更多测试才能找到规律并避免最终文档出现错误。我认为这个问题应该对其他解决方案持开放态度。
答案1
答案2
因为我想在环境中创建索引范围,所以我想出了一个不同的解决方案。我没有设置\index{foo|(}
开头和\index{foo|)}
结尾之类的内容(这可能会导致所述问题),而是直接创建了这些条目,而没有指定范围的开始和结束,并设置texindy
为完成构建范围的工作。这需要某种机制来在中间的每一页上创建重复的条目,因此我使用了钩子机制shipout
。因此,一个工作示例如下所示:
\documentclass{article}
\usepackage{iftex}
\iftutex
\usepackage{fontspec}
\else
\usepackage[T1]{fontenc}
\fi
\usepackage{blindtext}
\makeindex
\newcommand*\texindyentries{}
\AddToHook{shipout/after}{\texindyentries}
\newcommand*\addtexindyentry[1]{%
\expandafter\def\expandafter\texindyentries\expandafter{%
\texindyentries\index{#1}%
}%
}
\NewDocumentEnvironment{texindy}{>{\SplitList{,}}o}{%
\IfValueT{#1}{\ProcessList{#1}{\addtexindyentry}}%
\texindyentries%
}{%
\texindyentries\endgraf%
}
\begin{document}
\meaning\texindyentries\par
\blindtext[4]
\begin{texindy}[AAA,BBB]
\meaning\texindyentries\par
\blindtext[4]
\begin{texindy}[CCC,DDD]
\meaning\texindyentries\par
\blindtext[8]
\end{texindy}
\meaning\texindyentries\par
\blindtext[4]
\end{texindy}
\meaning\texindyentries\par
\blindtext[4]
\end{document}