如何在主要包含 LTR 文本的文档中排版 RTL 语言短语?

如何在主要包含 LTR 文本的文档中排版 RTL 语言短语?

我正在使用 fontspec、Polyglossia 和 XeLaTeX 排版一份文档,其中大部分是英文,但使用 NotoNastaliq 字体包含一些乌尔都语短语。问题是乌尔都语短语可以正确显示,但显示顺序是从左到右,而不是从右到左。我想使用一种特定的字体,我发现最好使用这种字体来加载,\myfont就像我在这里做的那样。

\documentclass[12pt]{article}  
\usepackage[left=1in,right=1in,top=1in,bottom=1in]{geometry}
\usepackage{fontspec}
\usepackage{polyglossia}
\setdefaultlanguage{english}
\setotherlanguage{urdu}
\newfontfamily\myfont[Script=Arabic,Scale=1.2,Path=/System/Library/Fonts/]{NotoNastaliq.ttc}
\begin{document}
Some text in English within which the Urdu appears incorrectly as left-to-right. Here's an example: {\myfont نقش فریادی ہے کس کی شوخیّ تحریر کا } After this, I want it to continue left-ro-right.

\end{document}  

渲染结果为

平均能量损失

我将非常感激任何帮助。我认为我可能根本没有正确使用多语。我尝试了发布的解决方案这里但它不太管用。

答案1

我建议使用lualatexbabel它标识需要 RTL 排版的脚本。在这个例子中,我使用了阿瓦米它更好地支持乌尔都语。以下是示例:

\documentclass{article}
\usepackage[english,bidi=basic]{babel}
\usepackage{fontspec}
\newfontfamily\myfont[%
  Renderer     = {Graphite}%
]{AwamiNastaliq-Regular.ttf}

\begin{document}
Some text in English within which the Urdu appears
\emph{correctly} as right-to-left. Here's an example:
{%
  \myfont
  نقش فریادی ہے کس کی شوخیّ تحریر کا%
} After this it continues to be left-to-right.
\end{document}  

1

答案2

在 LuaLaTeX 中,您甚至可以配置 Babel 来检测您正在输入的语言并自动选择正确的字体(和换行符)。

\documentclass[12pt]{article}
\tracinglostchars=3 % Make it an error if a character is missing.
\usepackage[left=1in,right=1in,top=1in,bottom=1in]{geometry}
\usepackage[bidi=basic, layout=counters tabular]{babel}
\usepackage{fontspec}

\babelprovide[main, onchar=fonts ids]{english}
\babelprovide[import=ur, onchar=fonts ids]{urdu}

\babelfont{rm}
          {Noto Serif}
\babelfont{sf}
          {Noto Sans}
\babelfont[urdu]{rm}
          [Renderer=HarfBuzz]{Noto Nastaliq Urdu}
\babelfont[urdu]{sf}
          [Renderer=HarfBuzz]{Noto Sans Arabic}


\begin{document}
Some text in English within which the Urdu appears \textit{correctly} as right-to-left. Here's an example:
\foreignlanguage{urdu}{نقش فریادی ہے کس کی شوخیّ تحریر کا }
After this, the English continues left-to-right.  The next paragraph is right-to-left, but contains a few English phrases:

\begin{otherlanguage}{urdu}
نوٹو نستعلیق اردو نوٹو 
\foreignlanguage{english}{(Noto Nastaliq Urdu)}
 میں شامل ایک فونٹ ہے۔گوگل ڈیویلپرز بلاگ پر گوگل کے سوفٹ ویئر انجینئر بہداد اسفہبد نے 10 نومبر 2014ء کو شائع کردہ تحریر میں اردو زبان کے لیے نستعلیق فونٹ جاری کیا۔ یہ فونٹ ایرانی نستعلیق کی طرز پر بنایا گیا ہے اور اسے ترسیموں کی بجائے حرفی بنیاد پر تخلیق کیا گیا ہے۔ 
\end{otherlanguage}
\end{document}

Noto Serif + Noto Nastaliq 乌尔都语样本

我从乌尔都语维基百科复制了第二段,对于其中的错误深表歉意。

该文件也可以在没有任何命令的情况下显示\foreignlanguage,但单词间距可能会稍微错误。对于许多其他语言对,它都可以正常工作。

要更改主要语言,请适当设置main选项\babelprovide

答案3

您需要使用polyglossia切换语言的命令——而不仅仅是fontspec切换字体的命令。

下面的 MWE 中,改变的是字体是\urdufont,切换语言的命令是\texturdu{}。(我还制作了 Adob​​e Arabia 字体,但只是因为我的系统上没有您的字体。)

\documentclass[12pt]{article}  
\usepackage[left=1in,right=1in,top=1in,bottom=1in]{geometry}
\usepackage{polyglossia}
\setdefaultlanguage{english}
\setotherlanguage{urdu}
\newfontfamily\urdufont[Script=Arabic,Scale=1.]{Adobe Arabic}
\begin{document}
Some text in English within which the Urdu appears incorrectly as left-to-right. Here's an example: \texturdu{ نقش فریادی ہے کس کی شوخیّ تحریر کا } After this, I want it to continue left-to-right.
\end{document}  

相关内容