词汇表包使用外部文件(尤其是文件.gls
)来构建词汇表,例如在构建以下示例时。有没有办法将此类文件的内容直接包含在 TeX 文件中?那么就没有必要使用makeglossaries
或提供该.gls
文件,例如在将 TeX 文件提交给期刊时。
\documentclass{scrbook}
\usepackage{glossaries}
\makeglossaries
\newglossaryentry{eta}{name=\ensuremath{\eta},description={eta}}
\newglossaryentry{psi}{name=\ensuremath{\psi},description={psi}}
\begin{document}
\glsaddall
\printglossary
\end{document}
直接将文件内容添加到 TeX 文件中
! Undefined control sequence.
<argument> \glossarytitle
顺便说一句:不需要更新参考资料或其他任何东西。我只需要布局和条目。
答案1
\printglossary
不仅仅是输入词汇表文件,而且还首先执行相当多的设置,这就是为什么你不能简单地用它替换它\input
。
基本上,如果您不想使用外部应用程序,那么:
- 如果你想要所有定义的条目,不想要数字列表,也不需要自动排序,请
\printunsrtglossary
使用glossaries-extra
扩展包。 - 否则使用
\makenoidxglossary
和\printnoidxglossary
(如 Christian 所述)。
第一种方法的示例:
\documentclass{scrbook}
\usepackage[nogroupskip]{glossaries-extra}
\newglossaryentry{eta}{name=\ensuremath{\eta},description={eta}}
\newglossaryentry{psi}{name=\ensuremath{\psi},description={psi}}
\begin{document}
\printunsrtglossary
\end{document}
这只需要一次latex
调用,因为不执行排序,也不检查条目是否已被索引。我使用了,nogroupskip
因为在这种情况下没有逻辑字母组。
上述方法不同于使用\makenoidxglossaries
和\printnoidxglossary
方法,后者需要第二次运行来确定哪些条目已被索引。该noidx
方法(表示为选项1在手册中)也尝试默认按字母顺序对条目进行排序,name
如果sort
省略键,则会从键中获取排序值,但数学标记(\ensuremath{\eta}
等)会导致问题。使用定义顺序(而不是字母顺序)的示例:
\documentclass{scrbook}
\usepackage[sort=def,nogroupskip]{glossaries}
\makenoidxglossaries
\newglossaryentry{eta}{name=\ensuremath{\eta},description={eta}}
\newglossaryentry{psi}{name=\ensuremath{\psi},description={psi}}
\begin{document}
\glsaddall
\printnoidxglossary
\end{document}
实际上可以添加字母组和位置列表,\printunsrtglossary
但必须手动完成:
\documentclass{scrbook}
\usepackage{glossaries-extra}
\glsaddstoragekey{group}{}{\entrygroup}
\glsaddstoragekey{location}{}{\entrylocation}
\glsxtrsetgrouptitle{greek}{Greek Symbols}
\newglossaryentry{eta}{name=\ensuremath{\eta},description={eta},
group={greek},location={\setentrycounter[]{page}\hyperbf{5}}}
\newglossaryentry{psi}{name=\ensuremath{\psi},description={psi},
group={greek},location={\setentrycounter[]{page}\hyperit{3}}}
\begin{document}
\printunsrtglossary[style=indexgroup]
\end{document}
两种方法都要求在词汇表之前定义所有条目。第二种情况要求在序言中定义所有条目。第一种情况可能允许文档定义,但只能使用包选项docdefs=restricted
。一般来说,最好把所有序言中的文档定义。