我有兴趣创建两个符号列表:
- 按符号排序的传统列表,提供每个符号的描述
- 按照描述排序的索引式列表,给出每个描述的符号
例如,我将平均速度定义为“v”。我希望读者能够使用第一个列表回答“v 代表什么?”这个问题,但我会还希望读者能够使用第二个列表回答“平均速度如何表示?”这个问题。第二个列表应该是“索引式的”,因为“平均速度”和“平均速度”都应该有引用“v”的条目,但不应该有指示符号使用位置的页码。
我已经找到了很多关于如何获取列表 #1 的信息(例如这个彻底回答的问题)但没有关于如何获取列表 #2(标题这个问题看起来确实很相似,但答案描述了一个列表,其中给出了每个符号的页面引用,即可以回答“v 出现在哪里?”的问题。
我如何创建列表 #2?在我看来,最简单的方法是创建一个索引,其中的页码列表被适当的符号名称替换,但我不确定如何做到这一点。
答案1
实现此目的的一种方法是glossaries-extra
和bib2gls
。这需要在文件中定义信息.bib
。在这种情况下,@dualentry
可以使用,它本质上定义了两个依赖条目:一个主条目和一个对偶条目。主条目可以在文档中用给出的标签来标识@dualentry
,而对偶条目可以通过dual.
标签(在哪里标签是文件中给出的原始标签.bib
)。
如果你已经使用过该glossaries
软件包,那么
@dualentry{velocity,
name={mean velocity},
description={\ensuremath{\vec{v}}}
}
本质上就像
\newglossaryentry{velocity}{
name={mean velocity},
description={\ensuremath{\vec{v}}}
}
\newglossaryentry{dual.velocity}{
description={mean velocity},
name={\ensuremath{\vec{v}}}
}
但此外,这两个条目被认为是相互依赖的,因此如果文档中引用了一个条目,则另一个条目也会被自动选择。
主条目引用为\gls{velocity}
(显示“平均速度”),双条目引用为\gls{dual.velocity}
(显示\ensuremath{\vec{v}}
)。前缀系统可以更改。为方便起见,该glossaries-extra
软件包提供了\glsxtrnewgls
,它允许您定义一个命令作为\gls{
字首.
标签}
。 例如:
\glsxtrnewgls{dual.}{\sym}
现在\sym{velocity}
可以用来代替\gls{dual.velocity}
。
.bib
以下是名为 的文件的示例symbols.bib
:
% Encoding: UTF-8
@dualentry{velocity,
name={mean velocity},
description={\ensuremath{\vec{v}}}
}
@dualentry{torque,
name={torque},
description = {\ensuremath{\vec{\tau}}}
}
@dualentry{area,
name={area},
description={\ensuremath{A}}
}
@dualentry{momentum,
name={momentum},
description={\ensuremath{\vec{p}}}
}
@index{velocitymean,
name = {velocity, mean},
see = {velocity}
}
这是使用此文件的文档:
\documentclass{article}
\usepackage[
symbols, % create 'symbols' list
record % using bib2gls
]{glossaries-extra}
\GlsXtrLoadResources
[src=symbols, % entries defined in symbols.bib
dual-type=symbols,% put the dual entries in the 'symbols' list
type=main, % put the primary entries in the 'main' list
sort = en, % sort the primary entries according to natural English ordering
dual-sort = letter-nocase, % sort the dual entries according to case-insensitive letter order
save-locations=false % page references not required
]
\glsxtrnewgls{dual.}{\sym}
\begin{document}
The \gls{velocity} is denoted \sym{velocity}.
The \gls{area} is denoted \sym{area}.
The \gls{torque} is denoted \sym{torque}.
The \gls{momentum} is denoted \sym{momentum}.
\printunsrtglossary[type=symbols,style=long]
\printunsrtglossary[type=main,style=long]
\end{document}
如果调用该文件myDoc.tex
则构建过程如下:
pdflatex myDoc
bib2gls myDoc
pdflatex myDoc
结果是:
由于该@index
条目尚未在文档中引用,因此尚未选择该条目,但可以在选项中更改选择标准,以确保如果已选择了键\GlsXtrLoadResources
中引用的标签,则选择该条目:see
selection={recorded and deps and see}
不幸的是,由于位置列表已被抑制(通过使用save-locations=false
),因此通常包含在位置列表中的实际交叉引用也被抑制,因此列表显示为:
可以将交叉引用添加到后描述挂钩中,如下所示:
\documentclass{article}
\usepackage[
symbols, % create 'symbols' list
record, % using bib2gls
nostyles,% don't load default styles
stylemods=long% patch styles and load glossary-long.sty
]{glossaries-extra}
\GlsXtrLoadResources
[src=symbols, % entries defined in symbols.bib
dual-type=symbols,% put the dual entries in the 'symbols' list
type=main, % put the primary entries in the 'main' list
sort = en, % sort the primary entries according to natural English ordering
dual-sort = letter-nocase, % sort the dual entries according to case-insensitive letter order
save-locations=false, % page references not required
selection={recorded and deps and see},% selection criteria
category=general,
dual-category=symbol
]
\glsxtrnewgls{dual.}{\sym}
\renewcommand{\glsxtrpostdescgeneral}{%
\glsxtrifhasfield{see}{\glscurrententrylabel}%
{\glsxtrusesee{\glscurrententrylabel}}%
{}%
}
\begin{document}
The \gls{velocity} is denoted \sym{velocity}.
The \gls{area} is denoted \sym{area}.
The \gls{torque} is denoted \sym{torque}.
The \gls{momentum} is denoted \sym{momentum}.
\printunsrtglossary[type=symbols,style=long]
\printunsrtglossary[type=main,style=long]
\end{document}
文档现在如下所示:
您可以根据您的要求选择不同的词汇表样式。(有许多预定义样式可供选择。)如果您使用nostyles
package 选项,请确保调整值stylemods
以确保加载了适当的样式包(并进行了修补以确保后描述挂钩有效)。例如,如果您从 样式long
(在 中定义glossary-long.sty
)切换到index
样式(在 中定义glossary-tree.sty
),则需要更改stylemods=long
为stylemods=tree
。(您还可以同时加载多个样式包,例如stylemods={long,tree}
。)
关于排序的说明。
主要条目(字段中包含文本值name
)按照 进行排序sort=en
,使用英语排序规则。这通常会忽略标点符号和重音符号,并按照拉丁字母排序。其他字母表中的任何字符,例如数学希腊字母 tau