当使用 polyglossia+xelatex 呈现希伯来语文档时,showlabels 包会导致编译失败

当使用 polyglossia+xelatex 呈现希伯来语文档时,showlabels 包会导致编译失败

文件中保存了以下 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}

这成功地以当前文本字体显示了标签。我希望更有想象力的替代方案也能奏效。

相关内容