Obtener salida de derecha a izquierda en árabe y persa/farsi con pdfLaTeX

Obtener salida de derecha a izquierda en árabe y persa/farsi con pdfLaTeX

Tengo un documento en inglés en el que necesito insertar algunas palabras de ejemplo de muchos idiomas diferentes, incluidos el árabe y el persa.

Conseguí que funcionara con el babelpaquete y el \foreignlanguage{arabic}{الأحد}comando, pero los caracteres aparecen confusos, presumiblemente debido a la función de derecha a izquierda (RTL). Si invierto manualmente todos los caracteres ( \foreignlanguage{arabic}{دحألا}), aparentemente no se unen como se supone que deben hacerlo... nuevamente, debido a RTL.

La plantilla/estilo que me veo obligado a usar se compila pdflatexpero NO xelatex. Intentar utilizar el arabtexpaquete o bidipaquetes rompe la plantilla con una serie de errores alucinantes.

¿Alguna sugerencia?

PD: copiar y pegar el fragmento de texto codificado en UTF-8 literal de mi editor de texto parece corregirse a RTL en este editor de intercambio de pila, por lo que no estoy seguro de poder brindarle una imagen completa del problema que estoy enfrentando. con... :(

EDITAR: aquí hay un 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}

Las palabras árabe y persa (farsi) no me parecen correctas.

ACTUALIZACIÓN: Así es como se ve el resultado para mí. Como puede ver, el árabe y el persa (farsi) están al revés.

Respuesta1

Respuesta corta: en lugar de \foreignlanguage{arabic}y \foreignlanguage{farsi}, utilice \ARy \FR.


En primer lugar, el MWE dado en la pregunta (al menos a partir dela revisión actual) ciertamente no es mínimo. Aquí hay algo más corto:

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

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

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

que produce

salida de MWE

donde los textos árabe y persa no están escritos de derecha a izquierda como deberían.

Por qué sucede esto es fácil de explicar: la representación Unicode del texto árabe كحض consiste en

y se supone que estos tres puntos de código deben colocarse de derecha a izquierda (con reglas adicionales como las de las ligaduras), dando كحض. En cambio, cuando estos caracteres se colocan ingenuamente en el orden en que aparecen en la entrada (algo como: ك x ح x ض donde usé x para separar los caracteres), verá el tipo de salida incorrecta que ve arriba. (Lo mismo ocurre con el persa). Entonces, lo que falta son las instrucciones para que TeX coloque los caracteres en el orden correcto.

Esto parece ser un error en elBabelsoporte del paquete para estos idiomas. Algunos comentarios sobre preguntas relacionadas (1,2) hace referencia a un \textRLcomando: cargar el paquete babel \usepackage[arabic,farsi,english]{babel}como se muestra arriba define un \textRLcomando, pero esto tiene un error: \show\textRLmuestra que se expande para \expandafter \@farsi@R {#1}que el segundo idioma seleccionado anule el primero.

Una mirada más cercana a los registros revela que este \textRLcomando proviene dearabicargado por babel, cuya documentación menciona este problema y dice que \textRLestá en desuso. En cambio, lo que recomienda es \ARy \FRpara árabe y farsi respectivamente. Entonces podemos usarlos en nuestro MWE:

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

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

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

que produce correctamente:

salida MWE fija

Para los que no son MWE en la pregunta, podemos simplemente reemplazar ciegamente \foreignlanguage{arabic}y \foreignlanguage{farsi}con \ARy \FRrespectivamente, para obtener este resultado:

salida para no MWE

información relacionada