我正在使用为我的文档创建索引\makeindex
。并且在我的文档中,我有如下子索引条目:
\index{word1!subword11}
\index{word1!subword12}
但是,当整个文档中只有一个子条目与给定单词相关联时,我想知道如何做,就好像没有子条目一样。换句话说,如果 的唯一子条目word2
位于subword21
整个文档中,我希望结果等于 : \index{word2!subword21} == \index{word2 subword21}
。
怎么做?
答案1
我认为没有办法用标准makeindex
/xindy
方法实现这一点,而且鉴于这个问题已经很久没有得到解答,似乎没有人能想到办法。所以这里有一个使用完全不同方法的替代方法。\index
这里不使用 ,而是使用glossaries
与...接口glossaries-extra
和bib2gls
。
所有术语都需要首先在一个或多个文件中定义.bib
。例如entries.bib
:
% Encoding: UTF-8
@index{test}
@index{samplephrase,
name = {sample phrase}
}
@index{word1}
@index{subword11,
name={subword11},
parent={word1}
}
@index{subword12,
name={subword12},
parent={word1}
}
@index{word2}
@index{subword21,
name={subword21},
parent={word2}
}
@index{subword22,
name={subword22},
parent={word2}
}
第一个 MWE 使用默认设置,因此只出现一个孤独的子项,以便进行比较:
\documentclass{article}
\usepackage[record, % use bib2gls
nostyles,% don't load default styles
stylemods={bookindex},% load glossary-bookindex.sty
style=bookindex % set style
]{glossaries-extra}
\GlsXtrLoadResources[
src={entries}, % data in entries.bib
sort={en}% sort according to this language tag (en = English)
]
\begin{document}
\Gls{test}, \gls{samplephrase}, \gls{subword11}, \gls{subword12} and
\gls{subword21}.
\printunsrtglossary[title=Index]
\end{document}
如果调用该文档,test.tex
则文档构建为:
pdflatex test
bib2gls -g test
pdflatex test
(根据需要,pdflatex
用xelatex
“等”替换。)
结果是:
可以使用该选项将单独的子项向上移动一个层次结构级别flatten-lonely
。值必须是以下之一:(false
不修改)、presort
(排序前调整层次结构级别)或postsort
(排序后调整)。
flatten-lonely=presort
将移动该项目,因为它将按其名称排序,而不是按照其父级的位置排序:
\documentclass{article}
\usepackage[record, % use bib2gls
nostyles,% don't load default styles
stylemods={bookindex},% load glossary-bookindex.sty
style=bookindex % set style
]{glossaries-extra}
\GlsXtrLoadResources[
src={entries}, % data in entries.bib
sort={en},% sort according to this language tag (en = English)
flatten-lonely=presort% flatten lonely sub-items
]
\begin{document}
\Gls{test}, \gls{samplephrase}, \gls{subword11}, \gls{subword12} and
\gls{subword21}.
\printunsrtglossary[title=Index]
\end{document}
子项目已移至 S 字母组并且其父项目(word2)已被完全删除。
flatten-lonely=postsort
排序后进行调整,使子项向上移动一个层次但保持相同的相对位置。名称被调整,父项被删除:
\documentclass{article}
\usepackage[record, % use bib2gls
nostyles,% don't load default styles
stylemods={bookindex},% load glossary-bookindex.sty
style=bookindex % set style
]{glossaries-extra}
\GlsXtrLoadResources[
src={entries}, % data in entries.bib
sort={en},% sort according to this language tag (en = English)
flatten-lonely=postsort% flatten lonely sub-items
]
\begin{document}
\Gls{test}, \gls{samplephrase}, \gls{subword11}, \gls{subword12} and
\gls{subword21}.
\printunsrtglossary[title=Index]
\end{document}
使用的文本\gls{subword21}
没有改变,但条目现在列为“word2,subword21”。该name
字段实际上更改为:
\bibglsflattenedchildpostsort{word2}{subword21}
其定义为
\providecommand*{\bibglsflattenedchildpostsort}[2]{#1, #2}
在.glstex
输入的文件中\GlsXtrLoadResources
,您可以修改格式。例如:
\newcommand*{\bibglsflattenedchildpostsort}[2]{#1 #2}
\GlsXtrLoadResources[
src={entries}, % data in entries.bib
sort={en},% sort according to this language tag (en = English)
flatten-lonely=postsort,% flatten lonely sub-items
]
默认情况下,如果父项已被索引,则您无法展平单独的子项。例如:
\documentclass{article}
\usepackage[record, % use bib2gls
nostyles,% don't load default styles
stylemods={bookindex},% load glossary-bookindex.sty
style=bookindex % set style
]{glossaries-extra}
\GlsXtrLoadResources[
src={entries}, % data in entries.bib
sort={en},% sort according to this language tag (en = English)
flatten-lonely=postsort% flatten lonely sub-items
]
\begin{document}
\Gls{test}, \gls{samplephrase}, \gls{word1}, \gls{subword12} and
\gls{subword21}.
\printunsrtglossary[title=Index]
\end{document}
现在有两个单独的子项,但只有一个被调整,因为另一个有一个已被索引的父项:
在这种情况下,设置flatten-lonely-rule={discard unrecorded}
可以调整孤独的子项,但只会删除未编入索引的父项:
\documentclass{article}
\usepackage[record, % use bib2gls
nostyles,% don't load default styles
stylemods={bookindex},% load glossary-bookindex.sty
style=bookindex % set style
]{glossaries-extra}
\GlsXtrLoadResources[
src={entries}, % data in entries.bib
sort={en},% sort according to this language tag (en = English)
flatten-lonely=postsort,% flatten lonely sub-items
flatten-lonely-rule={discard unrecorded}
]
\begin{document}
\Gls{test}, \gls{samplephrase}, \gls{word1}, \gls{subword12} and
\gls{subword21}.
\printunsrtglossary[title=Index]
\end{document}
现在的结果是: