特定のアラビア語フォントでサポートされていない非アラビア語文字セットのフォールバックフォントを設定する

特定のアラビア語フォントでサポートされていない非アラビア語文字セットのフォールバックフォントを設定する

希望するアラビア語フォントは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 の小さなテキストでは問題なく機能しますが、少し長いドキュメントでは数ページ後に壊れ、さらに 1 つまたは 2 つの文字セットがタイプセットできなかったため、奇妙なボックスとして表示されました。したがって、この問題の解決策としてこれを推奨しません。回答は、ヘブライ語やアラビア語などの RTL 言語にのみ関連しています。

関連情報