使用 pdfLaTeX 获取阿拉伯语和波斯语/波斯语的从右到左输出

使用 pdfLaTeX 获取阿拉伯语和波斯语/波斯语的从右到左输出

我有一份英文文档,其中需要注入一些来自多种不同语言的示例词,包括阿拉伯语和波斯语。

我已经设法让它与babel包和\foreignlanguage{arabic}{الأحد}命令配合使用,但字符显示为乱码,大概是因为从右到左 (RTL) 的问题。如果我手动反转所有字符 ( \foreignlanguage{arabic}{دحألا}),它们显然不会以应有的方式连接在一起……同样,这是因为 RTL。

我被迫使用的模板/样式可以编译,pdflatex但不能xelatex。尝试使用arabtex包或bidi包会破坏模板,并产生大量令人震惊的错误。

有什么建议么?

附言:从我的文本编辑器复制并粘贴文字 UTF-8 编码的 tex 片段似乎会在此 stackexchange 编辑器中自行更正为 RTL,因此我不确定我是否可以向您全面介绍我正在处理的问题... :(

编辑:这是一个 MWE......

\documentclass[10pt]{article}
\usepackage[usenames]{color} %used for font color
\usepackage{amssymb} %maths
\usepackage{amsmath} %maths
\usepackage{booktabs}
\usepackage[utf8]{inputenc}
\usepackage[arabic,farsi,bulgarian,greek,magyar,frenchb,german,english]{babel}
\usepackage{CJKutf8}

\begin{document}

\begin{tabular}{p{1.8cm}ccccccc}
\toprule
Language & $\rho$ & 1 & 2 & 3 & 4 & 5 & 6 \\
\midrule
German & 0.568 & weißt & überrascht & teppich & schwäche & kompetent & verbündet \\
Hungarian & 0.506 & tegyünk & recepciós & leírás & oktat & visszaveti & rengette \\
French & 0.500 & envoyer & vélo & randonnée & blessure & mixte & matérialisme \\
Bulgarian & 0.505 & \foreignlanguage{bulgarian}{време} & \foreignlanguage{bulgarian}{болка} & \foreignlanguage{bulgarian}{самотен} & \foreignlanguage{bulgarian}{съдружие} & \foreignlanguage{bulgarian}{надделеят} & \foreignlanguage{bulgarian}{уязвимите} \\
Greek & 0.491 & \foreignlanguage{greek}{πόρτα} & \foreignlanguage{greek}{πατινάζ} & \foreignlanguage{greek}{εξοχή} & \foreignlanguage{greek}{επεξεργάζομαι} & \foreignlanguage{greek}{ορίζοντας} & \foreignlanguage{greek}{εδαφικός} \\
Arabic & 0.512 & \foreignlanguage{arabic}{الأحد} & \foreignlanguage{arabic}{كحض} & \foreignlanguage{arabic}{ةرافسلا} & \foreignlanguage{arabic}{ةظتكملا} & \foreignlanguage{arabic}{يثراك} & \foreignlanguage{arabic}{ددب} \\
Korean & 0.495 & \begin{CJK}{UTF8}{mj}비가\end{CJK} & \begin{CJK}{UTF8}{mj}기억\end{CJK} & \begin{CJK}{UTF8}{mj}무서운\end{CJK} & \begin{CJK}{UTF8}{mj}따라서\end{CJK} & \begin{CJK}{UTF8}{mj}왜곡\end{CJK} & \begin{CJK}{UTF8}{mj}지배하는\end{CJK} \\
Chinese & 0.482 & \begin{CJK}{UTF8}{gbsn}星期三\end{CJK} & \begin{CJK}{UTF8}{gbsn}司机\end{CJK} & \begin{CJK}{UTF8}{gbsn}要求\end{CJK} & \begin{CJK}{UTF8}{gbsn}动态\end{CJK} & \begin{CJK}{UTF8}{gbsn}翻新\end{CJK} & \begin{CJK}{UTF8}{gbsn}锲而不舍\end{CJK} \\
Persian & 0.433 & \foreignlanguage{farsi}{روزنامه} & \foreignlanguage{farsi}{فروشگاه} & \foreignlanguage{farsi}{درد} & \foreignlanguage{farsi}{فکری} & \foreignlanguage{farsi}{تقویت} & \foreignlanguage{farsi}{نزدیکی} \\
Japanese & 0.326 & \begin{CJK}{UTF8}{min}月\end{CJK} & \begin{CJK}{UTF8}{min}スキー\end{CJK} & \begin{CJK}{UTF8}{min}祭り\end{CJK} & \begin{CJK}{UTF8}{min}正直\end{CJK} & \begin{CJK}{UTF8}{min}地質\end{CJK} & \begin{CJK}{UTF8}{min}撤退\end{CJK} \\
\bottomrule
\end{tabular}

\end{document}

阿拉伯语和波斯语(Farsi)单词对我来说呈现不正确。

更新:以下是我得到的输出结果。如您所见,阿拉伯语和波斯语 (Farsi) 被颠倒了。

答案1

简短回答:不要使用\foreignlanguage{arabic}and \foreignlanguage{farsi},而要使用\ARand \FR


首先,问题中给出的 MWE(至少截至当前修订版本) 肯定不是最小的。下面是更简短的内容:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[arabic,farsi,english]{babel}

\begin{document}
Arabic \foreignlanguage{arabic}{كحض}

Persian \foreignlanguage{farsi}{فروشگاه}
\end{document}

产生

MWE 输出

阿拉伯语和波斯语文本的排版方式并不如预期的那样从右到左。

发生这种情况的原因很容易解释:阿拉伯语文本كحض 的 Unicode 表示形式包括

这三个代码点应该从右到左放置(使用与连字类似的附加规则),从而得到 كحض。相反,当这些字符按照它们在输入中出现的顺序放置时(例如:ك x ح x ض,其中我使用 x 来分隔字符),您会看到上面看到的那种不正确的输出。(波斯语也是如此。)因此,缺少的是指示 TeX 将字符按正确顺序放置的指令。

这似乎是巴别塔软件包对这些语言的支持。对相关问题的一些评论(12) 引用一个命令:用如上所述\textRL加载 babel 包确实定义了一个命令,但是这有一个错误:显示它扩展为,因此选择的第二种语言会覆盖第一种。\usepackage[arabic,farsi,english]{babel}\textRL\show\textRL\expandafter \@farsi@R {#1}

仔细查看日志可以发现,该\textRL命令来自arabi由 babel 加载,其文档提到了这个问题,并说\textRL已弃用。它建议分别使用阿拉伯语和波斯语的\AR\FR。因此,我们可以在 MWE 中使用这些:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[arabic,farsi,english]{babel}

\begin{document}
Arabic \AR{كحض}

Persian \FR{فروشگاه}
\end{document}

正确结果为:

固定 MWE 输出

对于问题中的非 MWE,我们可以盲目地将和分别替换\foreignlanguage{arabic}\foreignlanguage{farsi}\AR\FR以获得以下输出:

非 MWE 输出

相关内容