当我设置了默认语言时,为什么 hyperref 会抱怨我的词汇表中的“PDF 字符串中不允许使用标记”?

当我设置了默认语言时,为什么 hyperref 会抱怨我的词汇表中的“PDF 字符串中不允许使用标记”?

我使用 glossaries 包定义了一个词汇表,并使用 hyperref 包来控制生成的 PDF 文件的各个方面。当我使用 polygossia 的\setmainlanguage命令设置文档的语言时,我在编译结束时收到以下警告(无论是使用 lualatex 还是 xelatex):

(./test.toc) (./test.gls

Package hyperref Warning: Token not allowed in a PDF string (PDFDocEncoding):
(hyperref)                removing `\textenglish' on input line 1.

)

它显然不喜欢\textenglish目录中出现的命令:

\contentsline {section}{\textenglish {Glossary}}{1}{section*.2}

如果我不设置语言,则不会出现警告。

\documentclass{article}
\usepackage{polyglossia}
% Removing the following line makes the warning go away,
% but it introduces a biblatex error instead
\setmainlanguage{english}

\usepackage[backend=biber]{biblatex}

\usepackage{hyperref}
\usepackage[toc]{glossaries}

\makeglossaries
\newglossaryentry{foo}{
    name=foo,
    description={is foo}
}

\begin{document}
\tableofcontents

\section{foobar}
\gls{foo}

\printglossary
\end{document}

我读了相关问题所有这些都建议用来\texorpdfstring分离 PDF 目录中的文本,但我不确定在这种情况下我应该在哪里执行此操作,因为我不是生成目录代码的人。

我不确定这\textenglish对我的文档有什么影响,尤其是考虑到所有文本都已经是英文了。我可以看到它来自词汇表-英语.ldf当 polyglossia 已加载时,但我不确定加载顺序还会产生什么其他影响。此外,如果我删除该\setmainlanguage命令,则编译会失败\begin{document},显然是因为 biblatex 缺少一些语言信息:

! Undefined control sequence.
<argument> blx@lng@\bbl@main@language

l.16 \begin{document}

我该如何平息超链接警告?

答案1

您可以\textenglish在调用时\printglossary通过序言中的以下重新定义来删除本地:

\let\oldprintglossary\printglossary
\renewcommand{\printglossary}{{\let\textenglish\relax\oldprintglossary}}

但这可能会影响\textenglish词汇表中的其他用途(如果有的话)。另一种选择可能是更新\glossaryname。但是,解决这个问题的最简单方法(在我看来)是使用以下命令为词汇表指定您自己的标题title

\printglossary[title=Glossary]

这将覆盖任何特定于语言的更改并将其按原样设置。

答案2

您可以使用hyperref\pdfstringdefDisableCommands

\documentclass{article}
\usepackage{polyglossia}
\setmainlanguage{english}

\usepackage[backend=biber]{biblatex}

\usepackage{hyperref}
\usepackage[toc]{glossaries}

\pdfstringdefDisableCommands{%
 \let\textenglish\@firstofone
}

\makeglossaries
\newglossaryentry{foo}{
    name=foo,
    description={is foo}
}

\begin{document}
\tableofcontents

\section{foobar}
\gls{foo}

\printglossary
\end{document}

相关内容