索引布局:只有一个子项时在同一行

索引布局:只有一个子项时在同一行

我正在使用为我的文档创建索引\makeindex。并且在我的文档中,我有如下子索引条目:

\index{word1!subword11}
\index{word1!subword12}

但是,当整个文档中只有一个子条目与给定单词相关联时,我想知道如何做,就好像没有子条目一样。换句话说,如果 的唯一子条目word2位于subword21整个文档中,我希望结果等于 : \index{word2!subword21} == \index{word2 subword21}

怎么做?

答案1

我认为没有办法用标准makeindex/xindy方法实现这一点,而且鉴于这个问题已经很久没有得到解答,似乎没有人能想到办法。所以这里有一个使用完全不同方法的替代方法。\index这里不使用 ,而是使用glossaries与...接口glossaries-extrabib2gls

所有术语都需要首先在一个或多个文件中定义.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

(根据需要,pdflatexxelatex“等”替换。)

结果是:

测试,样本短语,子词11,子词12 和子词21。索引 S 样本短语,1 T 测试,1 W 词1 子词11,1 子词12,1 词2 子词21,1

可以使用该选项将单独的子项向上移动一个层次结构级别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}

测试,样本短语,子词11,子词12 和子词21。索引 S 样本短语,1 子词21,1 T 测试,1 W 词1 子词11,1 子词12,1

子项目已移至 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}

测试,样本短语,子词11,子词12 和子词21。索引 S 样本短语,1 T 测试,1 W 词1 子词11,1 子词12,1 词2,子词21,1

使用的文本\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}

现在有两个单独的子项,但只有一个被调整,因为另一个有一个已被索引的父项:

测试,样本短语,单词 1,子词 12 和子词 21。索引 S 样本短语,1 T 测试,1 W 单词 1 1 子词 12,1 单词 2,子词 21,1

在这种情况下,设置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}

现在的结果是:

测试,样本短语,单词1,子词12和子词21。索引 S 样本短语,1 T 测试,1 W 单词1 1 单词1,子词12,1 单词2,子词21,1

相关内容