包词汇表错误

包词汇表错误

我第一次想使用词汇表。我选择使用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}

剩下的问题是,已使用的和未使用的缩写词都不会出现在词汇表中。

尝试解决问题:

  1. 我通常用作xelatex处理器,但改变pdflatex并没有改变任何东西。

  2. 在主文件中定义 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条目尚未在文档中编入索引。

缩略词 XML 可扩展标记语言。3、7

位置列表包括第 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 页:

缩略词 XML 可扩展标记语言. 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的位置列表出错(在这种情况下它会消失,但在其他情况下您可能会得到一个虚假的逗号):

首字母缩略词 AUTOSAR 汽车开放系统架构。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}

缩写 AUTOSAR 汽车开放系统架构。XML 可扩展标记语言。5

默认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会自动添加它,因此词汇表如下所示:

词汇表 苹果一种水果。 5 梨另一种水果。

您可以使用可选\glsaddallunused参数将列表限制为特定的子集,该参数应该是标识所需词汇表的标签的逗号分隔列表:

\glsaddallunused[\acronymtype]

这是使用glossaries-extra扩展包。它内部加载glossaries并自动实现tocnopostdot选项。(使用postdotnopostdot=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}

第 1 章 可扩展标记语言 首先使用可扩展标记语言 (XML)。接下来使用 XML。Apple 或 apple 或 apples。

在章节标题之外,短形式用\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

第 1 章 可扩展标记语言 首先使用 XML。 其次使用 XML。 Apple 或 apple 或 apples。

如果您希望按定义顺序列出所有已定义的条目(不带页码),则可以省略\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

缩略词 AUTOSAR 汽车开放系统架构 XML 可扩展标记语言


¹第一次运行需要重新运行上述程序,因为第一次运行时缺少首字母缩略词列表,导致页码不准确。如果列表位于文档末尾,或者在列表之后重置页码,则这不是问题。例如,如果您使用\frontmatter\mainmatter

\begin{document}

\author{my Name}
\title{Glossary Test}
\maketitle

\frontmatter
\tableofcontents

\printglossary[type=\acronymtype]% list of acronyms
\mainmatter

答案2

当我遇到同样的问题时,acronym\chapter参数中删除。这解决了问题。但这可能不是最好的解决方案。

相关内容