使用 pdfLaTeX 從右到左輸出阿拉伯語和波斯語/波斯語

使用 pdfLaTeX 從右到左輸出阿拉伯語和波斯語/波斯語

我有一份英語文檔,需要在其中註入來自許多不同語言(包括阿拉伯語和波斯語)的一些示例單字。

我已經讓它與babel套件和\foreignlanguage{arabic}{الأحد}命令一起工作,但字元出現亂碼,大概是因為從右到左(RTL)的原因。如果我手動反轉所有字元 ( \foreignlanguage{arabic}{دحألا}),它們顯然不會按照應有的方式連接在一起......再次,因為 RTL。

我被迫使用的模板/樣式編譯為pdflatexbut NOT xelatex。嘗試使用一個arabtexbidi多個套件會破壞模板,並產生一系列令人心碎的錯誤。

有什麼建議麼?

PS:從我的文字編輯器複製並貼上文字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}

阿拉伯語和波斯語(波斯語)單字對我來說渲染不正確。

更新:這就是我的輸出結果。正如您所看到的,阿拉伯語和波斯語(波斯語)是相反的。

答案1

簡短回答:使用\foreignlanguage{arabic}and代替and 。\foreignlanguage{farsi}\AR\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 將字元按正確順序放置的說明。

這似乎是個錯誤通天塔包對這些語言的支援。對相關問題的一些評論(1,2)引用\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 的輸出

相關內容