
Desde 2003 o 2004 estoy escribiendo un guión de más de 1600 páginas. En él utilizo citas originales de fuentes chinas, árabes y griegas antiguas, en su mayoría simplemente copiando y pegando (¡no, no soy capaz de hablar griego, chino o árabe!). Gracias a las capacidades de LaTeX eso debería funcionar, esperaba.
Mi sistema es el siguiente: Win7 con instalación completa de TeX Live 2019, instalado y actualizado hoy, sin duda, no trabajo con versiones desactualizadas. Mis fuentes están escritas en Winshell, codificadas en UTF-8 y compiladas en LaTeX.
Al principio todo parecía funcionar a las mil maravillas: al principio de mi guión tenía una mezcla de citas en griego antiguo y chino, al final, citas en árabe, todo parecía funcionar más o menos (bueno, había un problema con el que Comencé mi carrera escribiendo publicaciones en StackExchange hace unos dos días y obtuve una gran ayuda aquí, pero ese fue otro problema: esta es solo mi segunda publicación, alentada por su ayuda con la primera, que se encuentra en PdfLaTeX: ¿Por qué la salida en árabe es ligeramente diferente de la entrada en árabe?)
Pero luego agregué algunas citas griegas cerca del final de mi guión, después de las árabes, y de repente quedaron bastante mutiladas (en ese momento, hasta esta misma mañana, estaba trabajando en TeX Live 2018, solo esta mañana salí arriba).
Un ejemplo de trabajo mínimo para ese problema se veía así:
\documentclass{report}
\usepackage[LGR,T1]{fontenc}
\usepackage[greek,ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage{arabtex}
\usepackage{utf8}
\newcommand\ararab[2][]{
\setcode{utf8}
\RL{#2}}
\begin{document}
\foreignlanguage{greek}{Παίδων τοίνυν ἡμῶν ὅντων καθαιρεῖ μὲν τὸν}
\ararab{أبو علي الحسن بن الهيثم}
\foreignlanguage{greek}{Παίδων τοίνυν ἡμῶν ὅντων καθαιρεῖ μὲν τὸν}
\end{document}
Entonces hay un texto en griego antiguo seguido de un texto en árabe, seguido nuevamente por un texto en griego antiguo. En TeX Live 2018, esto se compiló sin ningún mensaje de error. Después el primer texto en griego y en árabe salió bastante bien. Pero el segundo texto griego, que en la fuente es idéntico al primero, salió con muchas letras diferentes...
Pero ahora que cambié a TeX Live 2019 esta mañana con PdfLaTeX, recibo muchos mensajes de error, pero solo para el segundo texto griego, no para el primero, idéntico.
No pude resolver eso, aunque lo intenté con todas mis fuerzas durante semanas: la instalación de TeX Live 2019 esta mañana fue mi último intento de resolver ese problema. Entonces comencé a buscar otras oportunidades. Cambiar a XeTeX o LuaTeX seguramente habría resuelto estos problemas. Pero entonces tendría que hacer algo con el uso masivo de psfrag
, que es la causa principal, por la que todavía me quedo con el viejo LaTeX en este script.
Así que intenté contentarme con babel
su opción arabic
. Pero tan pronto como agrego arabic
las opciones de babel
(que de todos modos uso para griego y alemán), la compilación falla. Hoy he intentado dos veces reducir mi script a un ejemplo de trabajo mínimo. En ambas ocasiones con resultados muy diferentes, pero míralo tú mismo:
Ejemplo 1:
\documentclass{report}%
\usepackage[arabic,ngerman]{babel}
\usepackage{mparhack}
\usepackage{microtype}
\begin{document}
\thispagestyle{plain}
Hallo
\end{document}
con el mensaje de error
! Argument of \MT@res@a has an extra }.
<inserted text>
\par
l.11 \end{document}
I've run across a `}' that doesn't seem to match anything.
For example, `\def\a#1{...}' and `\a}' would produce
this error. If you simply proceed now, the `\par' that
I've just inserted will cause me to report a runaway
argument that might be the root of the problem. But if
your `}' was spurious, just type `2' and it will go away.
Runaway argument?
Y el ejemplo de trabajo mínimo 2:
\documentclass{report}%
\usepackage[arabic,english]{babel}
\usepackage{hyperref}
\begin{document}
\begin{figure}%
\caption{\url{http://foo.bar/baz} \label{fig_test}}%
\end{figure}%
Bild~\ref{fig_test}
\end{document}
Los mensajes de error con LaTeX para este ejemplo dicen (no encuentro ningún signo de interrogación (?) en esto):
! Extra \else.
\pdfmark@ ...space \pdf@type \space pdfmark}\else
\ltx@IfUndefined {@\pdf@li...
l.11 Bild~\ref{fig_test}
I'm ignoring this; it doesn't match any \if.
! Extra \fi.
\@setref ...@link #1\@empty \@empty \@nil {#2}\fi
l.11 Bild~\ref{fig_test}
I'm ignoring this; it doesn't match any \if.
Como habrás notado, ambos MWE solo tienen una cosa en común: usan la babel
opción arabic
. Estoy relativamente seguro de que si intento obtener un MWE por tercera vez, terminaré con otro más. En mi opinión, la opción arabic
de babel
alguna manera parece entrar en conflicto con otros paquetes, como puede ver al comentar los paquetes no utilizados. Soy muy consciente de que en ambos MWE podría eliminar algunos \usepackage
y luego se compilaría. Pero como necesito esos paquetes en mi script original, desafortunadamente es necesario ejecutarlos con ellos...
En PdfLaTeX (TeX Live 2019), el ejemplo 1 muestra mensajes de error, el ejemplo 2 se compila bastante bien. En LaTeX, que es el caso importante para mí después del mencionado anteriormente, ambos ejemplos producen mensajes de error.
Mientras tanto, me estoy quedando sin ideas y ahora mi pregunta para usted es: ¿Cómo puedo seguir usando los paquetes involucrados (y muchos más, lo admito) y sin embargo alternar entre griego antiguo y árabe, todavía bajo ¿El viejo y bueno LaTeX?
Respuesta1
Observación General
Los archivos de opciones de idioma como el árabe normalmente no forman parte del núcleo de Babel, sino que los proporcionan otras personas. arabic.ldf
(y los estilos que carga) es muy antiguo, de 2006 y parece no recibir mantenimiento.
Lo mismo puede decirse de arabtex: la fecha dice que el último cambio es del año 2003.
Ambos son paquetes muy pesados que parchean y cambian muchos comandos. Esto los hace muy frágiles. Cada cambio en algún otro paquete o en su configuración puede dañar su documento, y si se daña, no habrá nadie para arreglarlo.
Entonces, si tiene un documento grande y complicado que funciona, mantenga los dedos alejados del botón de actualización.
Detalles
Su primer ejemplo se compila nuevamente si agrega un grupo de llaves en la definición \ararab, de modo que el \setcode
comando no afecte el siguiente código. No es necesario cargar inputenc en un texlive actual.
\documentclass{report}
\usepackage[LGR,T1]{fontenc}
\usepackage[greek,ngerman]{babel}
\usepackage{arabtex}
\usepackage{utf8}
\newcommand\ararab[2][]{{\setcode{utf8}\RL{#2}}}
\begin{document}
\foreignlanguage{greek}{Παίδων τοίνυν ἡμῶν ὅντων καθαιρεῖ μὲν τὸν}
\ararab{أبو علي الحسن بن الهيثم}
\foreignlanguage{greek}{Παίδων τοίνυν ἡμῶν ὅντων καθαιρεῖ μὲν τὸν}
\end{document}
Su segundo ejemplo falla ya que \thispagestyle{plain}
redefine \thepage a
\gdef\thepage{\protect\if@rlmain\protect\I{\number\c@page}%
\protect\else\protect\textLR{\number\c@page}
mparhack
utiliza \thepage
en la rutina de salida para almacenar etiquetas y no le gusta esta redefinición en absoluto (su ejemplo también fallaría sin microtipo).
Su último ejemplo falla por una razón similar: el árabe redefine \thefigure como
\def\thefigure{\protect\if@rl\protect\I{\number\c@figure.\number\c@chapter}%
\protect\else\protect\textLR{\number\c@chapter.\number\c@figure}%
\protect\fi}
Esto lleva en el auxiliar a etiquetas como esta.
\newlabel{fig_test}{{\if@rl \I {1.0}\else \textLR {0.1}\fi }{1}{\url {http://foo.bar/baz}}{figure.0.1}{}}
y en modo dvi, hyperref no puede soportarlo (en modo pdf pasa).
No estoy seguro de si existen buenas soluciones.