软件包冲突:hyperref、词汇表和 keyfloat

软件包冲突:hyperref、词汇表和 keyfloat

在下面的代码中,如果我取消注释 #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 

相关内容