die gewünschte arabische Schriftart ist Droid Arabic Naskh
QuelleHier. Das Problem besteht darin, dass ich beim Kompilieren des Dokuments mit xetex komische Kästchen anstelle eines nicht-arabischen Zeichensatzes erhalte, wie im folgenden MWE:
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}
Ausgabe
Frage
Gibt es eine Möglichkeit, eine Ersatzschriftart für die Schriftart Droid Arabic Naskh bereitzustellen, um alle nicht-arabischen Zeichensätze zu setzen, und welche Ersatzschriftart wäre für diese Aufgabe besser geeignet als jede andere?
Aktualisieren
\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}
Ausgabe
Antwort1
Das Markieren der Sprachänderungen mit \foreignlanguage{english}{...}
ist \begin{otherlanguage*}{english}...\end{otherlanguage*}
besser und führt automatisch zu dem gewünschten Ergebnis, da \englishfont
ausgewählt würde, mit dem zusätzlichen Vorteil der korrekten Silbentrennung.
Verwenden Sie für die problematischen Zeichen 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}
Die Neudefinitionen von english
und \textenglish
sind auf Schwächen im Setup zurückzuführen.
Antwort2
Nach einigem Ausprobieren habe ich eine Lösung für dieses Problem gefunden: durch die Verwendung einer anderen arabischen Schriftart, die bereits die lateinischen Zeichensätze unterstützt, die von der betreffenden arabischen Schriftart nicht unterstützt werden. Es ist so, als würde man den erforderlichen Zeichensatz einer Schriftart durch den einer anderen ergänzen. In meinem Versuch habe ich verwendetAmiriSchriftart:
\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}
Ausgabe
Vorsicht
Diese Antwort funktioniert für den kleinen Text im MWE einwandfrei, ist aber nach ein paar Seiten in meinem etwas langen Dokument kaputtgegangen. Außerdem konnten ein oder zwei Zeichensätze nicht gesetzt werden und erschienen daher als komische Kästchen. Ich empfehle dies also nicht als Lösung des Problems, die Antwort ist trotzdem nur für RTL-Sprachen wie Hebräisch und Arabisch relevant.