定理列表:当问题标题不是英文时没有链接

定理列表:当问题标题不是英文时没有链接

我正在尝试利用解决方案来获取问题列表。

我正在使用 XeTeX,如果我使用非英语作为问题名称——“问题列表”中 hyperref 指向问题的链接将不起作用。

以下是 MWE:

\documentclass{book}

% =====================
%% XeTeX customization:

\usepackage{fontspec} % enagles loading of OpenType fonts
\usepackage{polyglossia} % support for languages

% fonts:
\defaultfontfeatures{Scale=MatchLowercase,Mapping=tex-text} % without this XeLaTeX won't turn "--" into dashes
\setmainfont{Arial}
\setsansfont{Arial}
\setromanfont{Arial}
\setmonofont{DejaVu Sans Mono}

% Russian/English document:
\usepackage{xecyr}
\newfontfamily\cyrillicfont{Arial}

\setmainlanguage{russian}
\setdefaultlanguage{russian}
\setotherlanguage{english}


% =======================
%% hyperref and ntheorem:

\usepackage[hyperref]{ntheorem}
\theoremlisttype{all}

\makeatletter
\newtheoremstyle{problem}
  {\item[\hskip\labelsep \theorem@headerfont ##1\ ##2\theorem@separator]}%
  {\item[\hskip\labelsep \theorem@headerfont ##1\ ##2\theorem@separator]}
\makeatother
\theoremstyle{problem}
\newtheorem{Задача}{Задача}[chapter]

\usepackage{hyperref}


\begin{document}

\chapter*{List of problems}
\listtheorems{Задача}

\chapter{foo}

\begin{Задача}[Short foo name]
  Foo!
\end{Задача}

\chapter{bar}

\begin{Задача}[Short bar name]
  Bar!
\end{Задача}

\end{document}

它需要用 进行编译xelatex。我想要获得可点击的问题列表。

我尝试向 hyperref 添加一些选项:

\hypersetup{xetex,
  unicode=true,
  pdfencoding=unicode,
  bookmarks={true},
}

它不起作用。

编辑

版本:

ntheorem 1.31 
hyperref 6.82q
polyglossia 1.2.1
xecyr 1.0

完整的编译日志是这里

编辑2

以下是 egreg 请求的 thm 文件:

\contentsline {Задача}{{Задача}{1.{1}}{Short foo name}}{3}{Задача.1.1}
\contentsline {Задача}{{Задача}{2.{1}}{Short bar name}}{5}{Задача.2.1}

使用我在下面发布的解决方案,同一个文件是

\contentsline {problem}{{Задача}{1.{1}}{Short foo name}}{3}{problem.1.1}
\contentsline {problem}{{Задача}{2.{1}}{Short bar name}}{5}{problem.2.1}

答案1

哦,我解决了:

\documentclass{book}

% =====================
%% XeTeX customization:

\usepackage{fontspec} % enagles loading of OpenType fonts
\usepackage{polyglossia} % support for languages

% fonts:
\defaultfontfeatures{Scale=MatchLowercase,Mapping=tex-text} % without this XeLaTeX won't turn "--" into dashes
\setmainfont{Arial}
\setsansfont{Arial}
\setromanfont{Arial}
\setmonofont{DejaVu Sans Mono}

% Russian/English document:
\usepackage{xecyr}
\newfontfamily\cyrillicfont{Arial}

\setmainlanguage{russian}
\setdefaultlanguage{russian}
\setotherlanguage{english}


% =======================
%% hyperref and ntheorem:

\usepackage[hyperref]{ntheorem}
\theoremlisttype{all}

\makeatletter
\newtheoremstyle{problem}
  {\item[\hskip\labelsep \theorem@headerfont ##1\ ##2\theorem@separator]}%
  {\item[\hskip\labelsep \theorem@headerfont ##1\ ##2\theorem@separator]}
\makeatother
\theoremstyle{problem}
\newtheorem{problem}{Задача}[chapter]

\usepackage{hyperref}


\begin{document}

\chapter*{List of problems}
\listtheorems{problem}

\chapter{foo}

\begin{problem}[Short foo name]
  Foo!
\end{problem}

\chapter{bar}

\begin{problem}[Short bar name]
  Bar!
\end{problem}

\end{document}

诀窍是将其problem作为内部问题名称:

\newtheorem{problem}{Задача}[chapter]

并生成问题列表:

\listtheorems{problem}

示例问题:

\begin{problem}[Short foo name]
  Foo!
\end{problem}

编译后,我仍然得到 Задача 作为问题名称。

尽管这解决了问题,但我想说的是,拥有较新的 xelatex 分布的 egreg 根本不会遇到任何问题。

相关内容