hyperref 和 bidi 包中的“不正确的字母常数”

hyperref 和 bidi 包中的“不正确的字母常数”

当我重新定义 \section cmd 时,我在 xelatex 中收到“不正确的字母常数”错误,这似乎是由于 bidi 和 hyperref 包之间的交互造成的。以下是 MWE:

\documentclass{report}
\usepackage[unicode]{hyperref}
\usepackage{bidi} %Must be loaded after hyperref pkg
\makeatletter
\renewcommand\section{\@startsection{section}{1}{0pt}{0pt}{0pt}{}}
\makeatother
\begin{document}
\section{\RL{foo}}
\RL{bar}
\end{document}

重要的是,文本 \RL{bar} 是 \section{} 后的第一个非空白,否则不会触发错误。

我检查了建议的“类似问题”,并没有看到类似的内容。

有什么建议吗?

答案1

我认为您不需要将unicode选项传递给hyperref使用 XeTeX 引擎的包。因此,使用以下示例:

\documentclass{report}
\usepackage{hyperref}
\usepackage{bidi} %Must be loaded after hyperref pkg
\makeatletter
\renewcommand\section{\@startsection{section}{1}{0pt}{0pt}{0pt}{}}
\makeatother
\begin{document}
\section{\RL{foo}}
\RL{bar}
\end{document}

我没有收到任何错误(使用更新的 TeXLive 2012),但是出现了一个相关警告,这是由于内部使用了\RL\section

Package hyperref Warning: Token not allowed in a PDF string (Unicode):
(hyperref)                removing `\RL' on input line 9.

有关详细信息,请参阅hyperref手册第 19 页,替换宏小节。

为了消除此警告,您可以将示例更改为:

\documentclass{report}
\usepackage{hyperref}
\usepackage{bidi} %Must be loaded after hyperref pkg
\makeatletter
\renewcommand\section{\@startsection{section}{1}{0pt}{0pt}{0pt}{}}
\makeatother
\begin{document}
\section{\texorpdfstring{\RL{foo}}{foo}}
\RL{bar}
\end{document}

如果你不喜欢\texorpdfstring,你可以尝试:

\documentclass{report}
\usepackage{hyperref}
\usepackage{bidi} %Must be loaded after hyperref pkg
\makeatletter
\renewcommand\section{\@startsection{section}{1}{0pt}{0pt}{0pt}{}}
\pdfstringdefDisableCommands{%
\let\RL\@firstofone
}
\makeatother
\begin{document}
\section{\RL{foo}}
\RL{bar}
\end{document}

相关内容