我第一次想使用词汇表。我选择使用glossaries
包并使用以下命令导入它:
\usepackage[toc, acronym]{glossaries}
后来又用了
\makeglossaries
命令并希望在目录后打印简短的缩写词:
\printglossary[type=acronymtype]
因此,我在打印语句之前创建了一个包含所有首字母缩略词的文件。然后词汇表中什么都没有显示。所以我继续,并使用了文档中的一些条目(文本和章节标题)。
我的文件结构是一个主文件,其中包含每个章节的 LaTeX 文档。因此,我将文件和首字母缩略词包含在主文件中,并希望在包含的 LaTeX 文档中使用它们。在 LaTeX 文件之前导入了首字母缩略词。
但现在我收到错误信息:
Glossary entry: '...' has not been defined
我已检查:文件名正确。已测试在章节文件中也包含首字母缩略词列表。
在网上搜索了一下。有人知道这种错误可能来自哪里吗?
更新:
我找到了错误,为什么文档无法编译。我使用了\include
而不是\input
来导入首字母缩略词文件。这是一个最小的例子:
主文件:
% This file is public domain
% If you want to use arara, you need the following directives:
% arara: pdflatex
% arara: makeglossaries
% arara: pdflatex
\documentclass{book}
\usepackage[toc, acronym]{glossaries}
\makeglossaries
\newglossaryentry{apple}{name={apple},description={a fruit}}
\begin{document}
\input{acronyms.tex}
\author{my Name}
\title{Glossary Test}
\maketitle
\newpage
\tableofcontents
\newpage
\printglossary[type=\acronymtype]
\chapter{\acrlong{xml}}
\Gls{apple} or \gls{apple} or \glspl{apple}.
\end{document}
导入的文件有以下几行:
\newacronym{autosar}{AUTOSAR}{AUTomotive Open System ARchitecture}
\newacronym{xml}{XML}{Extensible Markup Language}
剩下的问题是,已使用的和未使用的缩写词都不会出现在词汇表中。
尝试解决问题:
我通常用作
xelatex
处理器,但改变pdflatex
并没有改变任何东西。在主文件中定义 acromys 也没有改变任何东西。
我希望,该描述能够有助于解决问题。
答案1
第一步\input{acronyms}
序言并删除该.glsdefs
文件。
\documentclass{book}
\usepackage[toc, acronym]{glossaries}
\makeglossaries
\newglossaryentry{apple}{name={apple},description={a fruit}}
\input{acronyms.tex}% input somewhere before \begin{document}
\begin{document}
\author{my Name}
\title{Glossary Test}
\maketitle
\newpage
\tableofcontents
\newpage
\printglossary[type=\acronymtype]
\chapter{\acrlong{xml}}
\Gls{apple} or \gls{apple} or \glspl{apple}.
\end{document}
如果调用该文档,myDoc.tex
那么就可以使用¹构建完整的文档:
pdflatex myDoc
makeglossaries myDoc
pdflatex myDoc
pdflatex myDoc
或者
xelatex myDoc
makeglossaries myDoc
xelatex myDoc
xelatex myDoc
这将显示仅包含该条目的首字母缩略词列表xml
,因为该autosar
条目尚未在文档中编入索引。
位置列表包括第 3 页(重建后),因为\acrlong{xml}
位于目录中(位于第 3 页)。为避免这种情况,请将可选参数\chapter
与非索引命令之一一起使用:
\documentclass{book}
\usepackage[toc, acronym]{glossaries}
\makeglossaries
\newglossaryentry{apple}{name={apple},description={a fruit}}
\input{acronyms.tex}% input somewhere before \begin{document}
\begin{document}
\author{my Name}
\title{Glossary Test}
\maketitle
\newpage
\tableofcontents
\newpage
\printglossary[type=\acronymtype]
\chapter[\glsentrylong{xml}]{\acrlong{xml}}
\Gls{apple} or \gls{apple} or \glspl{apple}.
\end{document}
现在位置列表中仅显示第 5 页:
如果您希望未使用的条目也出现在列表中(没有关联的页码),请添加\glsaddallunused
在文档末尾。
\documentclass{book}
\usepackage[toc, acronym]{glossaries}
\makeglossaries
\newglossaryentry{apple}{name={apple},description={a fruit}}
\input{acronyms.tex}% input somewhere before \begin{document}
\begin{document}
\author{my Name}
\title{Glossary Test}
\maketitle
\newpage
\tableofcontents
\newpage
\printglossary[type=\acronymtype]
\chapter[\glsentrylong{xml}]{\acrlong{xml}}
\Gls{apple} or \gls{apple} or \glspl{apple}.
\glsaddallunused % force indexing for all unused entries
\end{document}
不幸的是,在这种情况下xml
已被索引但尚未被标记为已使用(\gls
索引和都将条目标记为已使用,但\acrlong
只有索引),因此xml
的位置列表出错(在这种情况下它会消失,但在其他情况下您可能会得到一个虚假的逗号):
如果您\gls{xml}
在文档中的任何位置(之前\glsaddallunused
)添加,问题就会消失,否则您需要明确将其标记为已使用:
\documentclass{book}
\usepackage[toc, acronym]{glossaries}
\makeglossaries
\newglossaryentry{apple}{name={apple},description={a fruit}}
\input{acronyms.tex}% input somewhere before \begin{document}
\begin{document}
\author{my Name}
\title{Glossary Test}
\maketitle
\newpage
\tableofcontents
\newpage
\printglossary[type=\acronymtype]
\chapter[\glsentrylong{xml}]{\acrlong{xml}}
\glsunset{xml}% mark xml as used
\Gls{apple} or \gls{apple} or \glspl{apple}.
\glsaddallunused
\end{document}
默认main
词汇表(包含apple
)未出现在文档中,因为\printglossary
仅与一起使用type=\acronymtype
。
\documentclass{book}
\usepackage[toc, acronym]{glossaries}
\makeglossaries
\newglossaryentry{apple}{name={apple},description={a fruit}}
\newglossaryentry{pear}{name={pear},description={another fruit}}
\input{acronyms.tex}% input somewhere before \begin{document}
\begin{document}
\author{my Name}
\title{Glossary Test}
\maketitle
\newpage
\tableofcontents
\newpage
\printglossary[type=\acronymtype]% list of acronyms
\printglossary % main glossary
\chapter[\glsentrylong{xml}]{\acrlong{xml}}
\glsunset{xml}% mark xml as used
\Gls{apple} or \gls{apple} or \glspl{apple}.
\glsaddallunused
\end{document}
我添加了另一个条目pear
,但没有在文档中使用它,但\glsaddallunused
会自动添加它,因此词汇表如下所示:
您可以使用可选\glsaddallunused
参数将列表限制为特定的子集,该参数应该是标识所需词汇表的标签的逗号分隔列表:
\glsaddallunused[\acronymtype]
这是使用glossaries-extra
扩展包。它内部加载glossaries
并自动实现toc
和nopostdot
选项。(使用postdot
或nopostdot=false
使描述后句号重新出现。)扩展包还提供了一些专门用于章节/节参数的命令,例如\glsfmtshort
和\glsfmtlong
。
\documentclass{book}
\usepackage[acronym]{glossaries-extra}
\makeglossaries
\setabbreviationstyle[acronym]{long-short}
\newglossaryentry{apple}{name={apple},description={a fruit}}
\newglossaryentry{pear}{name={pear},description={another fruit}}
\input{acronyms.tex}% input somewhere before \begin{document}
\begin{document}
\author{my Name}
\title{Glossary Test}
\maketitle
\newpage
\tableofcontents
\newpage
\printglossary[type=\acronymtype]% list of acronyms
\printglossary % main glossary
\chapter{\glsfmtlong{xml}}
First use \gls{xml}. Next use \gls{xml}.
\Gls{apple} or \gls{apple} or \glspl{apple}.
\glsaddallunused[\acronymtype] % add all unused entries from the acronym list
\end{document}
在章节标题之外,短形式用\glsxtrshort
(not \acrshort
) 获得,长形式用\glsxtrlong
(not ) 获得,完整形式(不参考第一次使用)用(not )\acrlong
获得。\glsxtrfull
\acrfull
如果你不想长的(短的),然后将缩写样式更改为您最常用的形式。例如,如果您只想要除章节标题之外的缩写形式,则请使用样式short
。这样,您可以使用它\gls
来确保条目被标记为已使用:
\documentclass{book}
\usepackage[acronym]{glossaries-extra}
\makeglossaries
\setabbreviationstyle[acronym]{short}
\newglossaryentry{apple}{name={apple},description={a fruit}}
\newglossaryentry{pear}{name={pear},description={another fruit}}
\input{acronyms.tex}% input somewhere before \begin{document}
\begin{document}
\author{my Name}
\title{Glossary Test}
\maketitle
\newpage
\tableofcontents
\newpage
\printglossary[type=\acronymtype]% list of acronyms
\printglossary % main glossary
\chapter{\glsfmtlong{xml}}
First use \gls{xml}. Next use \gls{xml}.
\Gls{apple} or \gls{apple} or \glspl{apple}.
\glsaddallunused[\acronymtype] % add all unused entries from the acronym list
\end{document}
有关可用缩写样式的完整列表,请参阅样本缩写样式.pdf。
如果您希望按定义顺序列出所有已定义的条目(不带页码),则可以省略\makeglossaries
和\glsaddallunused
并\printglossary
用替换\printunsrtglossary
。(此选项仅适用于glossaries-extra
):
\documentclass{book}
\usepackage[acronym]{glossaries-extra}
\setabbreviationstyle[acronym]{long-short}
\newglossaryentry{apple}{name={apple},description={a fruit}}
\newglossaryentry{pear}{name={pear},description={another fruit}}
\input{acronyms.tex}% input somewhere before \begin{document}
\begin{document}
\author{my Name}
\title{Glossary Test}
\maketitle
\newpage
\tableofcontents
\newpage
\printunsrtglossary[type=\acronymtype]% list of acronyms
\printunsrtglossary % main glossary
\chapter{\glsfmtlong{xml}}
First use \gls{xml}. Next use \gls{xml}.
\Gls{apple} or \gls{apple} or \glspl{apple}.
\end{document}
文档构建现已简化为:
pdflatex myDoc
pdflatex myDoc
或者
xelatex myDoc
xelatex myDoc
¹第一次运行需要重新运行上述程序,因为第一次运行时缺少首字母缩略词列表,导致页码不准确。如果列表位于文档末尾,或者在列表之后重置页码,则这不是问题。例如,如果您使用\frontmatter
和\mainmatter
:
\begin{document}
\author{my Name}
\title{Glossary Test}
\maketitle
\frontmatter
\tableofcontents
\printglossary[type=\acronymtype]% list of acronyms
\mainmatter
答案2
当我遇到同样的问题时,acronym
从\chapter
参数中删除。这解决了问题。但这可能不是最好的解决方案。