LuaLaTeX 中带有非拉丁标签的词汇表链接指向错误的位置

LuaLaTeX 中带有非拉丁标签的词汇表链接指向错误的位置

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

相关内容