hyperref 包在尝试链接到尚不存在的标签时会发出警告,但会继续执行而不进行链接。是否可以对 glossaries 包进行类似的设置?例如,如果我使用 \gls{boat},是否可以将其配置为仅打印“boat”,而不链接到不存在的词汇表条目?
我希望在项目进行过程中加入 \gls{} 命令,然后再编写所有的词汇表条目。
答案1
随着额外词汇表扩展包中,您可以使用包选项undefaction=warn
,如果任何条目未定义,它将生成警告而不是错误消息。与 和 一样\cite
,\ref
它将显示??
在文档文本中。
例子:
\documentclass{article}
\usepackage[undefaction=warn]{glossaries-extra}
\begin{document}
A \gls{boat}.
\end{document}
这将生成警告
Package glossaries-extra Warning: Glossary entry `boat' has not been defined on
input line 7.
结果就是
A ??。
如果您希望标签出现而不是??
您可以重新定义\glsdoifexists
以本地更改\glsxtrundeftag
标签:
\documentclass{article}
\usepackage[undefaction=warn]{glossaries-extra}
\renewcommand{\glsdoifexists}[2]{%
\ifglsentryexists{#1}{#2}%
{%
\edef\glslabel{\glsdetoklabel{#1}}%
{% scope
\let\glsxtrundeftag\glslabel
\glsxtrundefaction{Glossary entry `\glslabel'
has not been defined}{You need to define a glossary entry before
you can reference it.}%
}%
}%
}
\begin{document}
A \gls{boat}.
\end{document}
这可能会产生一些不良副作用。最好添加一些标记,以在校对时突出显示该条目未定义。例如:
\renewcommand{\glsdoifexists}[2]{%
\ifglsentryexists{#1}{#2}%
{%
\edef\glslabel{\glsdetoklabel{#1}}%
{% scope
\def\glsxtrundeftag{[?\glslabel?]}%
\glsxtrundefaction{Glossary entry `\glslabel'
has not been defined}{You need to define a glossary entry before
you can reference it.}%
}%
}%
}