词汇表:切换到 \makenoidxglossaries 时没有打印的词汇表

词汇表:切换到 \makenoidxglossaries 时没有打印的词汇表

作为后续行动这个答案,将\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 },因此当信息写入外部文件读取时makeindexxindy不会发生扩展。

当使用 TeX 对 ( \makenoidxglossaries) 进行排序时,清理功能将被关闭。此方法使用非常原始的比较,并且仅针对单词而非符号进行设计。现在,当构造排序字段时,值将从 复制过来name,但会随着字段值的设置而扩展。在发生此扩展之前,标准变音符号命令(例如\")会暂时重新定义,以有效地去除重音符,从而允许进行简单的 ASCII 比较。

例如,如果你有

name = {\'{e}lite}

然后

  • 排序值是将放入“符号”字母组(因为它以反斜杠开头)makeindex的字符序列,而不是更直观的“E”字母组;\ ' { e } l i t emakeindex
  • 排序xindy值被写入文件\'{e}litexindy足够智能,可以删除命令和括号,因此排序值实际上变成了elite
  • 使用 TeX 时,排序值在设置字段时发生的扩展期间会丢失重音命令sort,因此排序值变为elite

由于此扩展,该方法不适合在默认词序设置启用时\makenoidxglossaries对符号(例如)进行排序。其他方法也不特别适合使用词序对符号进行排序:是最宽容的(但结果顺序可能看起来很奇怪);对像这样的符号会失败。\ensuremath{P}makeindexxindy\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(虽然我不推荐它,因为它慢得多),以下是你可能的选择:

  1. 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}
    
  2. 使用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}
    
  3. 将符号的排序规则更改为defuse。此方法更快,因为使用此规则不会进行实际排序。(主要词汇表和首字母缩略词词汇表仍将进行排序。)

    \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}
    
  4. \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 塔高

我可以将其更改为根据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
]

符号 h 塔高 π 几何值

相关内容