带重音符号的超目标

带重音符号的超目标

使用 XeLaTeX(原生 Unicode 输入),我想创建一个宏,它将从字符串创建一个锚点名称包含字符串的超目标。

\documentclass{article}

\usepackage{fontspec,hyperref}
\usepackage{polyglossia}
\setmainlanguage{french}

\begin{document}
\hypertarget{tête}{tête}

\hypertarget{toto}{toto}
\newpage
\hyperlink{toto}{toto}
\hyperlink{tête}{tête}


\end{document}

但是,正如这个 MWE 所示,超目标锚点的名称不能包含重音符号。所以我想我应该删除重音符号。所以我的问题是:有没有办法提供第一个参数的非重音版本?理想情况下,来自tête和来自时的输出应该有所不同tété

因此也许有一个命令可以提供一个包含该序列的所有 Unicode 号码的字符串?

通常,这是为了索引内的交叉引用。

答案1

我们需要使用\pdfstringdef

\documentclass{article}

\usepackage{fontspec,hyperref}
\usepackage{polyglossia}
\setmainlanguage{french}

\begin{document}


\pdfstringdef\toto{tête}

\hypertarget{\toto}{tête}

\newpage
\hyperlink{\toto}{tête}

\end{document}

或者最好修补 hyperref 的一些内部命令:

\documentclass{article}

\usepackage{fontspec,hyperref}
\usepackage{polyglossia}
\setmainlanguage{french}

\begin{document}

\makeatletter

    \long\def\hyper@@anchor#1#2{%
      \pdfstringdef\@temp@anchorpdfstring{#1}%
      \@hyper@@anchor\@temp@anchorpdfstring\relax#2\relax%
    }
    \def\hyperlink#1#2{%
       \pdfstringdef\@temp@anchorpdfstring{#1}%
       \hyper@@link{}{\@temp@anchorpdfstring}{#2}%
    }
\makeatother


\hypertarget{tête}{tête}

\newpage
\hyperlink{tête}{tête}

\end{document}

我将建议 Heiko Oberdiek 直接整合这一修正。

\pdfstringdef命令非常慢,并且可能对 XeTeX 造成问题。因此,仅在需要重音锚点名称的部分之前制作补丁(例如,仅在索引之前)

谢谢@cfr

相关内容