作为后续行动这个答案,将\makeglossaries
和替换\printglossary
为\makenoidxglossaries
和\printnoidxglossary
会导致出现空白页,没有打印的词汇表。这里缺少什么?
\documentclass{scrbook} % documentclass: scrbook
\usepackage{siunitx}
\usepackage[acronym,toc]{glossaries} % use glossaries-package
\setlength{\glsdescwidth}{15cm}
\newglossary[slg]{symbolslist}{syi}{syg}{Symbolslist} % create add. symbolslist
\glsaddkey{unit}{\glsentrytext{\glslabel}}{\glsentryunit}{\GLsentryunit}{\glsunit}{\Glsunit}{\GLSunit}
\makenoidxglossaries % activate glossaries-package
% ==== EXEMPLARY ENTRY FOR SYMBOLS LIST =========================================
\newglossaryentry{symb:Pi}{name=\ensuremath{\pi},
description={Geometrical value},
unit={},
type=symbolslist}
\newglossaryentry{height}{name=\ensuremath{h},
description={Height of tower},
unit={\si{m}},
type=symbolslist}
\newglossaryentry{energyconsump}{name=\ensuremath{P},
description={Energy consumption},
unit={\si{kW}},
type=symbolslist}
% ==== EXEMPLARY ENTRY FOR ACRONYMS LIST ========================================
\newacronym{VRBD}{VRBD}{Violet-Red-Bile-Glucose-Agar}
% ==== EXEMPLARY ENTRY FOR MAIN GLOSSARY ========================================
\newglossaryentry{Biofouling}{name=Biofouling,description={Some description}}
\newglossarystyle{symbunitlong}{%
\setglossarystyle{long3col}% base this style on the list style
\renewenvironment{theglossary}{% Change the table type --> 3 columns
\begin{longtable}{lp{0.6\glsdescwidth}>{\centering\arraybackslash}p{2cm}}}%
{\end{longtable}}%
%
\renewcommand*{\glossaryheader}{% Change the table header
\bfseries Sign & \bfseries Description & \bfseries Unit \\
\hline
\endhead}
\renewcommand*{\glossentry}[2]{% Change the displayed items
\glstarget{##1}{\glossentryname{##1}} %
& \glossentrydesc{##1}% Description
& \glsunit{##1} \tabularnewline
}
}
\begin{document}
\glsaddall
\printnoidxglossary[type=\acronymtype,style=long] % list of acronyms
\printnoidxglossary[type=symbolslist,style=symbunitlong] % list of symbols
\printnoidxglossary[type=main] % main glossary
\end{document}
答案1
该glossaries
软件包提供了三种对词汇表信息进行排序和整理的方法:使用 TeX (选项1), 使用makeindex
(选项 2)或使用xindy
(选项 3).扩展包glossaries-extra
提供了第四种选择(bib2gls
)。
这些方法根据sort
字段的值进行排序。在您的示例中,您没有sort
在任何定义中使用键,因此sort
必须以编程方式确定字段的值,但这会根据排序选项而有所不同。
makeindex
在或xindy
( )的情况下\makeglossaries
,排序值是通过复制name
值获得的然后消毒。这意味着,例如,如果你有
name=\ensuremath{P}
排序字段变成字符序列\
e
n
s
u
r
e
m
a
t
h
{
P
}
,因此当信息写入外部文件读取时makeindex
,xindy
不会发生扩展。
当使用 TeX 对 ( \makenoidxglossaries
) 进行排序时,清理功能将被关闭。此方法使用非常原始的比较,并且仅针对单词而非符号进行设计。现在,当构造排序字段时,值将从 复制过来name
,但会随着字段值的设置而扩展。在发生此扩展之前,标准变音符号命令(例如\"
)会暂时重新定义,以有效地去除重音符,从而允许进行简单的 ASCII 比较。
例如,如果你有
name = {\'{e}lite}
然后
- 排序值是将放入“符号”字母组(因为它以反斜杠开头)
makeindex
的字符序列,而不是更直观的“E”字母组;\
'
{
e
}
l
i
t
e
makeindex
- 排序
xindy
值被写入文件\'{e}lite
但xindy
足够智能,可以删除命令和括号,因此排序值实际上变成了elite
; - 使用 TeX 时,排序值在设置字段时发生的扩展期间会丢失重音命令
sort
,因此排序值变为elite
。
由于此扩展,该方法不适合在默认词序设置启用时\makenoidxglossaries
对符号(例如)进行排序。其他方法也不特别适合使用词序对符号进行排序:是最宽容的(但结果顺序可能看起来很奇怪);对像这样的符号会失败。\ensuremath{P}
makeindex
xindy
\ensuremath{\pi}
如果您的条目代表符号而不是单词,那么您需要明确设置值sort
,例如:
\newglossaryentry{symb:Pi}{name=\ensuremath{\pi},
sort={pi},
description={Geometrical value},
unit={},
type=symbolslist}
或者使用不同的排序规则或清理排序值(使用sanitizesort
包选项)。
该glossaries-extra
包与包选项一起使用时symbols
,会\glsxtrnewsymbol
自动sort
将标签(无论如何都不能有特殊字符)。symbols
包选项会自动创建一个带有标签的词汇表symbols
,因此
\glsxtrnewsymbol[description={Geometrical value},
unit={},
type=symbolslist]{symb:Pi}{name=\ensuremath{\pi}}
相当于
\newglossaryentry{symb:Pi}{name=\ensuremath{\pi},
sort={symb:Pi},
type={symbols},
category={symbol},
description={Geometrical value},
unit={}}
(该category
密钥仅在扩展包中可用。)
如果你真的想使用\makenoidxglossaries
(虽然我不推荐它,因为它慢得多),以下是你可能的选择:
sort
定义符号时明确使用键:\documentclass{scrbook} \usepackage{siunitx} \usepackage[acronym,toc]{glossaries} \newglossary[slg]{symbolslist}{syi}{syg}{Symbolslist} \makenoidxglossaries % use TeX to sort \newglossaryentry{symb:Pi}{name=\ensuremath{\pi}, sort={pi}, description={Geometrical value}, type=symbolslist} \newglossaryentry{height}{name=\ensuremath{h}, sort={h}, description={Height of tower}, type=symbolslist} \newacronym{VRBD}{VRBD}{Violet-Red-Bile-Glucose-Agar} \newglossaryentry{Biofouling}{name=Biofouling,description={Some description}} \begin{document} \glsaddall \printnoidxglossary[type=\acronymtype] \printnoidxglossary[type=symbolslist] \printnoidxglossary[type=main] \end{document}
使用
sanitizesort
包选项。\documentclass{scrbook} \usepackage{siunitx} \usepackage[acronym,toc,sanitizesort]{glossaries} \newglossary[slg]{symbolslist}{syi}{syg}{Symbolslist} \makenoidxglossaries % use TeX to sort \newglossaryentry{symb:Pi}{name=\ensuremath{\pi}, description={Geometrical value}, type=symbolslist} \newglossaryentry{height}{name=\ensuremath{h}, description={Height of tower}, type=symbolslist} \newacronym{VRBD}{VRBD}{Violet-Red-Bile-Glucose-Agar} \newglossaryentry{Biofouling}{name=Biofouling,description={Some description}} \begin{document} \glsaddall \printnoidxglossary[type=\acronymtype] \printnoidxglossary[type=symbolslist] \printnoidxglossary[type=main] \end{document}
将符号的排序规则更改为
def
或use
。此方法更快,因为使用此规则不会进行实际排序。(主要词汇表和首字母缩略词词汇表仍将进行排序。)\documentclass{scrbook} \usepackage{siunitx} \usepackage[acronym,toc]{glossaries} \newglossary[slg]{symbolslist}{syi}{syg}{Symbolslist} \makenoidxglossaries % use TeX to sort \newglossaryentry{symb:Pi}{name=\ensuremath{\pi}, description={Geometrical value}, type=symbolslist} \newglossaryentry{height}{name=\ensuremath{h}, description={Height of tower}, type=symbolslist} \newacronym{VRBD}{VRBD}{Violet-Red-Bile-Glucose-Agar} \newglossaryentry{Biofouling}{name=Biofouling,description={Some description}} \begin{document} \glsaddall \printnoidxglossary[type=\acronymtype] \printnoidxglossary[type=symbolslist,sort=use] \printnoidxglossary[type=main] \end{document}
\glsxtrnewsymbol
与包一起使用glossaries-extra
(或提供类似的命令)。请注意,如果您想复制上面使用的样式glossaries-extra
,则切换到需要为首字母缩略词设置缩写样式。long-short
\documentclass{scrbook} \usepackage{siunitx} \usepackage[acronym,symbols]{glossaries-extra} \makenoidxglossaries % use TeX to sort \glsxtrnewsymbol [description={Geometrical value}] {symb:Pi}{\ensuremath{\pi}} \glsxtrnewsymbol [description={Height of tower}] {height}{\ensuremath{h}} \setabbreviationstyle[acronym]{long-short} \newacronym{VRBD}{VRBD}{Violet-Red-Bile-Glucose-Agar} \newglossaryentry{Biofouling}{name=Biofouling,description={Some description}} \begin{document} \glsaddall \printnoidxglossary[type=\acronymtype] \printnoidxglossary[type=symbols,title={Symbolslist}] \printnoidxglossary[type=main] \end{document}
为了进行比较,这里有一个bib2gls
版本,它根据描述对符号进行排序,根据简称对缩写进行排序,根据名称对常规术语进行排序:
\RequirePackage{filecontents}
\begin{filecontents*}{symbols.bib}
@symbol{symb:Pi,
name={\ensuremath{\pi}},
description={Geometrical value}
}
@symbol{height,
name={\ensuremath{h}},
description={Height of tower}
}
\end{filecontents*}
\begin{filecontents*}{abbreviations.bib}
@acronym{VRBD,
short={VRBD},
long={Violet-Red-Bile-Glucose-Agar}
}
\end{filecontents*}
\begin{filecontents*}{entries.bib}
@entry{Biofouling,
name={Biofouling},
description={Some description}
}
\end{filecontents*}
\documentclass{scrbook}
\usepackage{siunitx}
\usepackage[record,acronym,symbols]{glossaries-extra}
\GlsXtrLoadResources[
src={symbols},% data in symbols.bib
type=symbols,% put these entries in the 'symbols' glossary
selection={all},% select all entries in .bib file
% sort @symbol entries by 'description' if 'sort' field missing:
symbol-sort-fallback={description}
]
% style must be set before relevant \GlsXtrLoadResources:
\setabbreviationstyle[acronym]{long-short}
\GlsXtrLoadResources[
src={abbreviations},% data in abbreviations.bib
type=acronym,% put these entries in the 'acronym' glossary
selection={all},% select all entries in .bib file
% sort @acronym entries by 'short' if 'sort' field missing:
abbreviation-sort-fallback={short}
]
\GlsXtrLoadResources[
src={entries},% data in entries.bib
type=main,% put these entries in the 'main' glossary
selection={all}% select all entries in .bib file
]
\begin{document}
\printunsrtglossaries
\end{document}
如果调用该文档myDoc.tex
则构建过程如下:
pdflatex myDoc
bib2gls myDoc
pdflatex myDoc
或者如果你想要字母组:
pdflatex myDoc
bib2gls -g myDoc
pdflatex myDoc
符号按照描述排序:
我可以将其更改为根据h
(0x0068) 和π
(0x03C0) 的 Unicode 值排序:
\GlsXtrLoadResources[
src={symbols},% data in symbols.bib
type=symbols,% put these entries in the 'symbols' glossary
selection={all},% select all entries in .bib file
% sort @symbol entries by 'name' if 'sort' field missing:
symbol-sort-fallback={name},
sort=letter-nocase% case-insensitive letter sort
]