![带重音符号的超目标](https://linux22.com/image/326556/%E5%B8%A6%E9%87%8D%E9%9F%B3%E7%AC%A6%E5%8F%B7%E7%9A%84%E8%B6%85%E7%9B%AE%E6%A0%87.png)
使用 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