我想用glossaries-extra
包制作一个词汇表,并使用西里尔字符作为条目标签。一切都很好XeLaTeX
。可点击的链接指向确切的词汇表条目。但LuaLaTeX
链接不能正常工作。它们指向错误的地方。带有拉丁链接的条目在任何情况下都可以正常工作。MWE:
\documentclass{article}
\usepackage{polyglossia}
\setmainfont{Liberation Serif}
\usepackage{hyperref}
\usepackage[nonumberlist]{glossaries-extra}
\newglossaryentry{язык}{ name={язык},
sort=\lowercase{язык},
description={Система общения людей.}}
\newglossaryentry{компьютер}{ name={компьютер},
sort=\lowercase{компьютер},
description={Вычислительная машина.}}
\makeglossaries[main]
\begin{document}
\section*{Словарь}
\printglossary[style=list,title={}]
\forallglossaries{\thistype}{\section{Glossary `\thistype'}
\forglsentries[\thistype]{\thislabel}{\gls{\thislabel}. }}
\end{document}
有没有办法使用 LuaLaTeX 在 pdf 中获取正确的链接?
答案1
正如 Ulrike Fischer 所描述的,问题在于非 ASCII 字符被删除\pdf@escapestring
。为了避免这种情况,您可以更改\pdf@escapestring
为使用 UTF-8 编码 Unicode 字符:
\documentclass{article}
\usepackage{polyglossia}
\setmainfont{Liberation Serif}
\usepackage{hyperref}
\usepackage[nonumberlist]{glossaries-extra}
\newglossaryentry{язык}{ name={язык},
sort=\lowercase{язык},
description={Система общения людей.}}
\newglossaryentry{компьютер}{ name={компьютер},
sort=\lowercase{компьютер},
description={Вычислительная машина.}}
\makeglossaries[main]
\makeatletter
\long\def\pdf@escapestring#1{%
\directlua0{%
oberdiek.pdftexcmds.escapestring("\luaescapestring{#1}")% Almost like the original one, just omit "byte" to keep all characters.
}%
}
\makeatother
\begin{document}
\section*{Словарь}
\printglossary[style=list,title={}]
\forallglossaries{\thistype}{\section{Glossary `\thistype'}
\forglsentries[\thistype]{\thislabel}{\gls{\thislabel}. }}
\end{document}
答案2
不是解决方案,而是解释。问题在于 hyperref。hyperref 与 lualatex 一起使用,\pdf@escapestring
将名称转换为可以安全用作 pdf 中的目标的名称。但当前的实现\pdf@escapestring
只处理 ascii,其他一切都被丢弃。这意味着 glossaries 为两个条目创建了相同的目标glo:
在终端上,您可以看到警告
warning (pdf backend): ignoring duplicate destination with the name 'glo:'
尝试此文档时:
\documentclass{article}
\usepackage{hyperref}
\begin{document}
\makeatletter
\pdf@escapestring {glo:компьютер}
\pdf@escapestring {glo:язык}
\hypertarget{glo:компьютер}{blub}
\hypertarget{glo:язык}{bla}
\end{document}