所需的阿拉伯字体是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 语言,例如希伯来语和阿拉伯语。