Obtendo saída da direita para a esquerda em árabe e persa/farsi com pdfLaTeX

Obtendo saída da direita para a esquerda em árabe e persa/farsi com pdfLaTeX

Tenho um documento em inglês no qual preciso inserir alguns exemplos de palavras de vários idiomas diferentes, incluindo árabe e persa.

Eu meio que consegui funcionar com o babelpacote e o \foreignlanguage{arabic}{الأحد}comando, mas os caracteres saem ilegíveis, provavelmente por causa da coisa da direita para a esquerda (RTL). Se eu inverter manualmente todos os caracteres ( \foreignlanguage{arabic}{دحألا}), eles aparentemente não se juntam como deveriam... novamente, por causa do RTL.

O modelo/estilo com o qual sou forçado a usar é compilado, pdflatexmas NOT xelatex. A tentativa de usar o arabtexpacote ou bidipacotes quebra o modelo com uma série de erros explosivos.

Alguma sugestão?

PS: copiar e colar o trecho de texto literal codificado em UTF-8 do meu editor de texto parece se corrigir para RTL neste editor stackexchange, então não tenho certeza se posso fornecer a imagem completa do problema que estou lidando com... :(

EDITAR: aqui está um 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}

As palavras árabe e persa (farsi) são traduzidas incorretamente para mim.

ATUALIZAÇÃO: Aqui está a aparência da saída para mim. Como você pode ver, o árabe e o persa (farsi) estão invertidos.

Responder1

Resposta curta: Em vez de \foreignlanguage{arabic}e \foreignlanguage{farsi}, use \ARe \FR.


Em primeiro lugar, o MWE dado na questão (pelo menos a partir dea revisão atual) certamente não é Mínimo. Aqui está algo mais curto:

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

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

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

que produz

saída do MWE

onde os textos em árabe e persa não são compostos da direita para a esquerda como deveriam ser.

Por que isso acontece é fácil de explicar: a representação Unicode do texto árabe كحض consiste em

e esses três pontos de código devem ser colocados da direita para a esquerda (com regras adicionais como aquelas para ligaduras), dando كحض. Em vez disso, quando esses caracteres são colocados ingenuamente na ordem em que ocorrem na entrada (algo como: ك x ح x ض onde usei x para separar os caracteres), você verá o tipo de saída incorreta que vê acima. (Da mesma forma para o persa.) Então, o que falta são as instruções para o TeX colocar os caracteres na ordem correta.

Isso parece ser um bug nobabelsuporte do pacote para esses idiomas. Alguns comentários sobre questões relacionadas (1,2) referem-se a um \textRLcomando: carregar o pacote babel \usepackage[arabic,farsi,english]{babel}como acima de fato define um \textRLcomando, mas tem um bug: \show\textRLmostra que ele se expande para \expandafter \@farsi@R {#1}que o segundo idioma selecionado substitua o primeiro.

Uma análise mais detalhada dos logs revela que este \textRLcomando vem dearabicarregado pelo babel, cuja documentação menciona esse problema e diz que \textRLestá obsoleto. Em vez disso, o que recomenda é \ARe \FRpara árabe e farsi, respectivamente. Portanto, podemos usá-los em nosso MWE:

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

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

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

que produz corretamente:

saída MWE fixa

Para o não-MWE na questão, podemos simplesmente substituir cegamente \foreignlanguage{arabic}e \foreignlanguage{farsi}por \ARe \FRrespectivamente, para obter esta saída:

saída para não-MWE

informação relacionada