為某些阿拉伯字體不支援的非阿拉伯字符集設定後備字體

為某些阿拉伯字體不支援的非阿拉伯字符集設定後備字體

所需的阿拉伯字體是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 阿拉伯語 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 語言相關,例如希伯來語和阿拉伯語。

相關內容