我使用 Latex 做作业,用我们的母语希伯来语写作。我用它来polyglossia
配置文档中的语言设置和字体,并hyperref
在需要的地方添加链接。
我最近想添加一个目录,这样可以更轻松地浏览文档。hyperref 的一个很棒的功能是 TOC 包含链接,让我可以轻松跳转到文档中的所需位置(老实说,我认为这应该是 TOC 的默认功能)。
然而,我在尝试添加目录时遇到了一个奇怪的问题。我对问题和问题/答案的不同部分使用了自定义计数器,我用字母对各个部分进行编号,例如:
סעיף א, סעיף ב, סעיף ג
翻译为: A 部分、 B 部分、 C 部分、...
实现此目的的简化版本代码:
\documentclass{article}
\usepackage{xparse}
\usepackage{hyperref}
\hypersetup{
colorlinks,
linkcolor=blue
}
% Font and language settings
\usepackage[no-math]{fontspec}
\usepackage{polyglossia}
\newfontfamily\hebrewfont[
Script=Hebrew,
ItalicFont=*-Regular,
ItalicFeatures={FakeSlant=0.3},
]{Assistant}
\setmainlanguage{hebrew}
\setotherlanguage{english}
\setsansfont{Assistant}
\setmonofont{Assistant}
\newcounter{ProblemNum}
\newcounter{SubProblemNum}[ProblemNum]
\NewExpandableDocumentCommand{\TheProblemNum}{}{\arabic{ProblemNum}}
\NewExpandableDocumentCommand{\TheSubProblemNum}{}{\alph{SubProblemNum}} % <- This causes the warnings
\NewDocumentCommand{\Problem}{ o }{
\stepcounter{ProblemNum}
% Add the "unnumbered" subsections to TOC
\phantomsection
\addcontentsline{toc}{subsection}{שאלה \TheProblemNum \IfNoValueF{#1}{\; #1}}
\subsection*{שאלה \TheProblemNum \IfNoValueF{#1}{\; #1}}
}
\NewDocumentCommand{\Solution}{}{
\phantomsection
\addcontentsline{toc}{subsubsection}{פתרון}
\subsubsection*{פתרון}
}
\NewDocumentCommand{\Part}{}{
\stepcounter{SubProblemNum}
\phantomsection
\addcontentsline{toc}{subsubsection}{סעיף \TheSubProblemNum}
\subsubsection*{סעיף \TheSubProblemNum}
}
\begin{document}
\tableofcontents
\newpage
\Problem
דוגמה לשאלה
\Solution
\Part
פתרון לסעיף הראשון.
\Part
פתרון לסעיף השני.
\end{document}
我正在使用字体助手。
问题是,当编译多部分问题时,我收到警告:
Token not allowed in a PDF string (Unicode):(hyperref) removing \@hebrew@numeral
。我知道这是因为我使用了\alph{SubProblemNum}
答案的部分。更改为可以\arabic{SubProblemNum}
消除警告。奇怪的是,编译后文档看起来不错,所以看起来警告是无害的:
我该如何修复这些警告,或者至少消除它们?
答案1
一个更简单的例子是
\documentclass{article}
\usepackage{polyglossia}
\usepackage{hyperref}
\newfontfamily\hebrewfont[Script=Hebrew]{Arial}
\setmainlanguage{hebrew}
\newcounter{mycounter}
\begin{document}
\setcounter{mycounter}{5}
\section{Text \alph{mycounter} more text}
\end{document}
文档中没有问题:
hyperref 抱怨,因为它不能正确处理\alph
命令(内部调用\@hebrew@numeral
书签(PDF 大纲/导航)
对此,我们能做的不多。command 的当前定义\@hebrew@numeral
非常不可扩展,hyperref 确实没有机会在这里做一些明智的事情。该命令需要完全重写才能在书签中工作。您可以使用来抑制处理(以及警告),\texorpdfstring{\alph{mycounter}}{}
但这是否足够好取决于您自己。