Получение вывода справа налево на арабском и персидском/фарси с помощью pdfLaTeX

Получение вывода справа налево на арабском и персидском/фарси с помощью pdfLaTeX

У меня есть английский документ, в который мне нужно вставить несколько примеров слов из разных языков, включая арабский и персидский.

Мне удалось заставить его работать с babelпакетом и \foreignlanguage{arabic}{الأحد}командой, но символы выходят искаженными, предположительно из-за того, что написано справа налево (RTL). Если я вручную переверну все символы ( \foreignlanguage{arabic}{دحألا}), они, по-видимому, не соединятся вместе так, как должны... опять же, из-за RTL.

Шаблон/стиль, который я вынужден использовать, компилируется с , pdflatexно НЕ xelatex. Попытка использовать arabtexпакет или bidiпакеты ломает шаблон потоком ошеломляющих ошибок.

Какие-либо предложения?

PS: копирование и вставка буквального фрагмента tex в кодировке UTF-8 из моего текстового редактора, похоже, исправляет себя на RTL в этом редакторе StackExchange, так что я не уверен, что могу дать вам полную картину проблемы, с которой я имею дело... :(

EDIT: вот 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}и \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

Связанный контент