我可以告诉 polyglossia“尝试为所选语言找到任何合适的字体”吗?

我可以告诉 polyglossia“尝试为所选语言找到任何合适的字体”吗?

请考虑以下文档:

\documentclass{minimal}
\usepackage{polyglossia}
\setdefaultlanguage{hebrew}
\setotherlanguage{english}
\newfontfamily\hebrewfont[Script=Hebrew]{David CLM}
\usepackage{bidi}
\begin{document}
קסם קסמה לי הלענה.
\end{document}

假设您的 TeX 发行版配置正确,并且安装了 culmus 字体,则此代码可以编译。但是,如果我删除该\newfontfamily行,并尝试在较新的 Linux 发行版上使用 TeXLive 进行编译,则会得到:

! Package polyglossia Error: The current roman font does not contain the Hebrew
 script!
(polyglossia)                Please define \hebrewfont with \newfontfamily.

现在,我认为这不应该发生,但这是另一天的事了。我的问题是,假设我不知道系统上安装了哪些希伯来语字体。也许有 Culmus,也许可以访问操作系统的字体,其中一些支持希伯来语(Windows 和 Linux 中的字体系列不同)——无论如何。

有没有办法告诉 polyglossia“使用任何希伯来字体系列提供的字体”,而不是要求使用特定的字体系列?

支持设置后备 a-la-CSS 的答案可获得加分,即“如果有,则使用字体系列 A;否则,如果有,则使用字体系列 B;等等;如果没有,则使用任意希伯来字体”

答案1

这与系统无关,因为我已经使用过bash,而你必须用它来进行编译-shell-escape

fontconfig但是在 Linux 下,如果未找到您喜欢的字体,您可以选择第一个找到支持希伯来语的字体。

更新更优雅的解决方案:

\documentclass{article}
\usepackage{polyglossia}
\IfFontExistsTF{David CLM}
  {\newfontfamily\hebrewfont{David CLM}[Script=Hebrew]}
  {\usepackage{bashful}
   \splice{echo -n '\string\newfontfamily\string\hebrewfont{';
           fc-list :lang=he family | head -1 | tr -d '\string\n';
           echo -n '}[Script=Hebrew]'}}
\setmainlanguage{english}
\setotherlanguage{hebrew}
\begin{document}
English \texthebrew{עברית}
\end{document}

原解决方案:

\documentclass{article}
\usepackage{polyglossia}
% Try to use a preferred font otherwise fall back to the one fontconfig finds.
% Make sure we are in batch mode so compilation continues when preferred font
% isn't found.
\count255=\interactionmode
\batchmode
\font\testfont="David CLM" at 10pt
\interactionmode=\count255
\ifx\testfont\nullfont
% use the bashful to run bash script
% grab the first family fontconfig finds supporting hebrew
% create hebfont.tex looking like:
% \newfontfamily\hebrewfont{Some Font}[Script=Hebrew]
% Note: Don't indent this, since bashful is picky about leading spaces
\usepackage{bashful}
\bash
echo -n '\newfontfamily\hebrewfont{' > hebfont.tex
fc-list :lang=he family | head -1 | tr -d '\n' >> hebfont.tex
echo -n '}[Script=Hebrew]' >> hebfont.tex
\END
\input{hebfont.tex}
\else
  \newfontfamily\hebrewfont{David CLM}[Script=Hebrew]
\fi
\setmainlanguage{english}
\setotherlanguage{hebrew}
\begin{document}
English \texthebrew{עברית}
\end{document}

相关内容