我使用 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}