在下面的代码中,如果我取消注释 #1、#2 或 #3,它就会编译,否则就不会。为什么
\documentclass[12pt]{article}
\usepackage{keyfloat} % #1
\usepackage{filecontents}
\begin{filecontents*}{\jobname.glo}
\newglossaryentry{smith-j}
{
type=ppl,
name={Smith, J},
text={J. Smith},
description={}
}
\end{filecontents*}
%\addbibresource{\jobname.bib}
\usepackage{glossaries}
\makenoidxglossaries
%\setglossarystyle{tree}
\newglossary*{ppl}{People}
\loadglsentries[ppl]{\jobname.glo}
\usepackage{hyperref} % #2
\author{AUTHOR}
\title{TITLE}
\begin{document}
\maketitle
Do you know \gls{smith-j}?
\printnoidxglossaries % #3
\end{document}
答案1
hyperref
加载nameref
包。nameref
修补一些命令,以便能够将其“标题”存储在标签中。除了其他\nameref
补丁\descriptionlabel
之外,您还可以使用它来引用和链接描述项:
\documentclass{article}
\usepackage{hyperref}
\begin{document}
\begin{description}
\item[blub\label{desc:a}] a word
\end{description}
\nameref{desc:a}
\end{document}
要获取标题,nameref
请使用名为 的包gettitlestring
。该keyfloat
包传递给gettitlestring
选项expand
:
\PassOptionsToPackage{expand}{gettitlestring}
这个选项使 gettitlestring 更强大,但也更脆弱。现在,您会从词汇表添加到描述标签的代码中得到错误。可以教 gettitlestring 有关词汇表的知识,但由于您可能不需要标签标题,最简单的方法是恢复 nameref 定义:
\makeatletter\let\descriptionlabel\NRorg@descriptionlabel\makeatother
\printnoidxglossaries