文件中保存了以下 LaTeX 代码~\test.tex
:
\documentclass{article}
\usepackage{amsthm}
\newtheorem{theorem}{Theorem}
\usepackage{polyglossia}
%\setmainlanguage{hebrew}
%\setmainfont{Arial}
\usepackage{showlabels}
\begin{document}
\begin{theorem}\label{mythm}
A house is not a home.
\end{theorem}
\end{document}
当在终端中执行以下命令时:
cd ~
xelatex 测试
在路径 处生成一个 PDF 文件~\test.pdf
。在 PDF 查看器中打开时,文件显示如下:
如果现在取消注释这两行并xelatex test
重新运行该命令,则执行会失败,并且~\test.log
文件包含以下代码片段:
! Package polyglossia Error: The current latin font Arial(0) does not contain t
he "Hebrew" script!
(polyglossia) Please define \hebrewfont with \newfontfamily comm
and.
See the polyglossia package documentation for explanation.
Type H <return> for immediate help.
...
l.15 \begin{theorem}\label{mythm}
?
! Emergency stop.
...
l.15 \begin{theorem}\label{mythm}
End of file on the terminal!
但是,如果现在showlabels
注释掉该行,并xelatex test
重新运行该命令,则执行成功,并~/test.pdf
创建一个新文件。在 PDF 查看器中打开时,文件显示如下:
(请注意,希伯来语是一种从右到左的语言。)
为什么第二次执行会失败?该如何修复?
答案1
由于默认的打字机字体无法处理希伯来语,因此在打字机和 polyglossia 错误中打印了 showkey-label。但是 polyglossia 的错误消息在这里相当糟糕,因为建议的修复不起作用。
要么为所有三种字体系列使用可以处理希伯来语的字体,要么定义合适的希伯来语后备字体(某些混合字体也可以):
\documentclass{article}
\usepackage{polyglossia}
\setmainlanguage{hebrew}
\newfontfamily\hebrewfont{Arial}
\newfontfamily\hebrewfonttt{Arial}
\newfontfamily\hebrewfontsf{Arial}
\usepackage{showlabels}
\begin{document}
abc {\sffamily abc} {\ttfamily abc}
\end{document}
或者
\documentclass{article}
\usepackage{polyglossia}
\setmainlanguage{hebrew}
\setmainfont{Arial}
\setsansfont{Arial}
\setmonofont{Arial}
\usepackage{showlabels}
\begin{document}
abc {\sffamily abc} {\ttfamily abc}
\end{document}
或者考虑使用 babel。
答案2
另一种可能性是调整正在使用的字体showlabels
,使其能够避免出现问题。
例如:
\usepackage{polyglossia}
\setmainlanguage{hebrew}
\setmainfont{Arial}
\usepackage{showlabels}
\renewcommand{\showlabelfont}{\textrm}
这成功地以当前文本字体显示了标签。我希望更有想象力的替代方案也能奏效。