为某些阿拉伯字体不支持的非阿拉伯字符集设置后备字体

为某些阿拉伯字体不支持的非阿拉伯字符集设置后备字体

所需的阿拉伯字体是Droid Arabic Naskh这里问题是,当我使用 xetex 编译文档时,我得到的是奇怪的框而不是非阿拉伯字符集,如下面的 MWE 所示:

平均能量损失

\documentclass[11pt]{scrbook}
\usepackage{fontspec}
\usepackage{polyglossia}
\setmainlanguage[numerals=mashriq,abjadjimnotail=true]{arabic}
\newfontfamily\arabicfont[Script=Arabic,Scale=1.2,Ligatures=TeX]{Droid Arabic Naskh}
\begin{document}


هذا نص بالعربية وفيه بعض الرموز الاخرى مثلا (-، * ، + ، )


\end{document}

输出
在此处输入图片描述

问题
有没有办法为 Droid Arabic Naskh 字体提供后备字体来排版所有非阿拉伯字符集,以及哪种后备字体比其他字体更适合这项工作?

更新

\documentclass[11pt]{scrbook}
\usepackage{fontspec}
\usepackage{polyglossia}
\setmainlanguage[numerals=mashriq,abjadjimnotail=true]{arabic}
\setotherlanguages{english}
\newfontfamily\arabicfont[Script=Arabic,Scale=1.2,Ligatures=TeX]{Droid Arabic Naskh}
\newfontfamily\englishfont{Linux Libertine O}

\usepackage[Latin,Arabic]{ucharclasses}

\setTransitionsForLatin{\begingroup\englishfont}{\endgroup}

\renewenvironment{english}
 {\begin{LTR}\begin{otherlanguage*}{english}}
 {\end{otherlanguage*}\end{LTR}}
\renewrobustcmd{\textenglish}[1]{\LR{\foreignlanguage{english}{#1}}}

\begin{document}


هذا نص بالعربية وفيه بعض الرموز الاخرى مثلا (-، * ، + ، )

\end{document}

输出

在此处输入图片描述

答案1

用 标记语言变化会更好\foreignlanguage{english}{...}\begin{otherlanguage*}{english}...\end{otherlanguage*}并且会自动执行您要查找的操作,因为\englishfont会被选中,同时还具有正确连字符的额外好处。

对于有问题的字符,使用ucharclasses

\documentclass[11pt]{scrbook}
\usepackage{fontspec}
\usepackage{polyglossia}
\setmainlanguage[numerals=mashriq,abjadjimnotail=true]{arabic}
\setotherlanguages{english}
\newfontfamily\arabicfont[Script=Arabic,Scale=1.2,Ligatures=TeX]{Scheherazade}
\newfontfamily\englishfont{Linux Libertine O}

\usepackage[Latin,Arabic]{ucharclasses}

\setTransitionsForLatin{\begingroup\englishfont}{\endgroup}

\renewenvironment{english}
 {\begin{LTR}\begin{otherlanguage*}{english}}
 {\end{otherlanguage*}\end{LTR}}
\renewrobustcmd{\textenglish}[1]{\LR{\foreignlanguage{english}{#1}}}

\begin{document}


هذا نص بالعربية وفيه بعض الرموز الاخرى مثلا (-، * ، + ، )

\begin{english}This is a text in Arabic with some 
characters like (, +, *, -)\end{english}

ة وفيه بعض الرموز الاخرى مثلا (-، * ، + ،\textenglish{This is a text in Arabic with some
characters like (, +, *, -)}

\end{document}

english和的重新定义\textenglish是由于设置中的弱点。

在此处输入图片描述

答案2

经过多次尝试和错误,我找到了解决这个问题的方法;使用另一种已经支持拉丁字符集的阿拉伯字体,而该阿拉伯字体不支持该阿拉伯字体。这就像用一种字体的字符集来补充另一种字体所需的字符集。在我的试验中,我使用了阿米里字体:

\documentclass[11pt]{scrbook}
\usepackage{fontspec}
\usepackage{polyglossia}
\setmainlanguage[numerals=mashriq,abjadjimnotail=true]{arabic}
\setotherlanguages{english}
\newfontfamily\arabicfont[Script=Arabic,Scale=1.2,Ligatures=TeX]{Droid Arabic Naskh}
\newfontfamily\arabicfontx[Script=Arabic,Scale=1.2,Ligatures=TeX]{Amiri}
\newfontfamily\englishfont{Linux Libertine O}

\usepackage[Latin,Arabic]{ucharclasses}
\setTransitionsForLatin{\begingroup\arabicfontx}{\endgroup}

\begin{document}


هذا نص بالعربية وفيه بعض الرموز الاخرى مثلا (- ، * ، + ، ).

\end{document}

输出
在此处输入图片描述

警告
这个答案对于 MWE 中的小文本来说很好用,但它在我的文档中几页之后就坏了,因为文档有点长,此外有一两个字符集无法排版,因此出现了奇怪的方框。所以我不建议用这个来解决问题,这个答案只适用于 RTL 语言,例如希伯来语和阿拉伯语。

相关内容