LaTeX com ArabTex destrói o grego e o pacote babel e o Option arabic trava - em circunstâncias muito especiais

LaTeX com ArabTex destrói o grego e o pacote babel e o Option arabic trava - em circunstâncias muito especiais

Desde 2003 ou 2004 estou escrevendo um roteiro com mais de 1.600 páginas. Nele eu uso citações originais de fontes chinesas, árabes e gregas antigas, principalmente simplesmente copiando e colando (não, não sou capaz de falar grego, chinês ou árabe!). Graças às habilidades do LaTeX que deveriam funcionar, eu esperava.

Meu sistema é o seguinte: Win7 com instalação completa do TeX Live 2019, instalado e atualizado hoje, com certeza não trabalho com versões desatualizadas. Minhas fontes são escritas em Winshell, codificadas em UTF-8, compiladas em LaTeX.

Primeiro tudo pareceu funcionar perfeitamente: no início do meu roteiro eu tinha uma mistura de citações em grego antigo e chinês, no final citações em árabe, tudo parecia funcionar mais ou menos (bem, havia um problema, com o qual Comecei minha carreira escrevendo posts no StackExchange há cerca de dois dias e recebi grande ajuda aqui, mas isso foi outro problema - este é apenas meu segundo post, incentivado pela sua ajuda com o primeiro, que pode ser encontrado em PdfLaTeX: Por que a saída em árabe é ligeiramente diferente da entrada em árabe?)

Mas então eu adicionei algumas citações gregas perto do final do meu roteiro, depois das árabes - e de repente elas ficaram bastante prejudicadas (naquela época, até esta manhã, eu estava trabalhando no TeX Live 2018, só esta manhã eu namorei acima).

Um exemplo mínimo de trabalho para esse problema era assim:

\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}

Portanto, há um texto em grego antigo seguido pelo árabe, seguido novamente pelo grego antigo. No TeX Live 2018, isso foi compilado sem mensagem de erro. Depois o primeiro texto grego e o árabe saíram bastante bem. Mas o segundo texto grego, que na fonte é idêntico ao primeiro, saiu com muitas letras diferentes...

Mas agora que mudei para o TeX Live 2019 esta manhã com PdfLaTeX, recebo muitas mensagens de erro - mas apenas para o segundo texto grego, não para o primeiro, idêntico.

Não consegui resolver isso, embora tenha tentado muito durante semanas - a instalação do TeX Live 2019 esta manhã foi minha última tentativa de resolver esse problema. Então comecei a procurar outras oportunidades. Mudar para XeTeX ou LuaTeX certamente teria resolvido esses problemas. Mas então eu teria que fazer algo com o uso massivo de psfrag- que é a principal causa, que ainda continuo com o bom e velho LaTeX neste script.

Então, tentei ficar feliz com babelessa opção arabic. Mas assim que adiciono arabicas opções de babel(que uso para grego e alemão de qualquer maneira), a compilação falha. Hoje tentei duas vezes reduzir meu script a um exemplo mínimo funcional. Ambas as vezes com resultados muito diferentes, mas veja você mesmo:

Exemplo 1:

\documentclass{report}%
\usepackage[arabic,ngerman]{babel}
\usepackage{mparhack}
\usepackage{microtype}

\begin{document}

\thispagestyle{plain}
Hallo

\end{document}

com a mensagem de erro

! 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?

E o exemplo mínimo de trabalho 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}

As mensagens de erro com LaTeX para este exemplo são (não encontro nenhum ponto de interrogação (?) nisto):

! 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 você pode notar, ambos os MWEs têm apenas uma coisa em comum: eles usam a babelopção arabic. Tenho relativa certeza de que se eu tentar pela terceira vez obter um MWE, terminarei com outro. Aos meus olhos, a opção arabicde babelalguma forma parece entrar em conflito com outros pacotes, como você pode ver comentando os pacotes não utilizados. Estou bem ciente de que em ambos os MWEs eu poderia descartar alguns \usepackagee então ele seria compilado. Mas como preciso desses pacotes no meu script original, infelizmente ele precisa rodar com eles...

No PdfLaTeX (TeX Live 2019), o exemplo 1 fornece mensagens de erro, o exemplo 2 compila perfeitamente. No LaTeX - que é o caso mais importante para mim acima mencionado - ambos os exemplos produzem mensagens de erro.

Enquanto isso, estou ficando sem ideias e agora minha pergunta para você é: como posso ainda usar os pacotes envolvidos (e muito mais, eu admito) e ainda assim alternar entre o grego antigo e o árabe - ainda sob bom e velho LaTeX?

Responder1

Observação geral

Arquivos de opções de idioma como árabe normalmente não fazem parte do babel principal, mas são fornecidos por outras pessoas. arabic.ldf(e os estilos que carrega) é muito antigo, de 2006 e parece não ter manutenção.

O mesmo pode ser dito do arabtex: a data diz que a última alteração é de 2003.

Ambos são pacotes muito pesados ​​que corrigem e alteram muitos comandos. Isso os torna muito frágeis. Cada alteração em algum outro pacote ou na sua configuração pode corromper o seu documento - e se ele quebrar, não haverá ninguém para consertá-lo.

Portanto, se você tiver um documento grande e complicado que funcione, mantenha os dedos longe do botão de atualização.

Detalhes

Seu primeiro exemplo será compilado novamente se você adicionar um grupo de chaves na definição \ararab, para que o \setcodecomando não afete o código a seguir. Carregar inputenc não é necessário em um texlive atual.

\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}

Seu segundo exemplo falha ao \thispagestyle{plain}redefinir \thepage para

\gdef\thepage{\protect\if@rlmain\protect\I{\number\c@page}%
              \protect\else\protect\textLR{\number\c@page}

mparhackusa \thepagena rotina de saída para armazenar rótulos e não gosta dessa redefinição (seu exemplo também falharia sem o microtipo).

Seu último exemplo falha por um motivo semelhante: arabic 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}

Isso leva no aux a rótulos como este

 \newlabel{fig_test}{{\if@rl \I {1.0}\else \textLR {0.1}\fi }{1}{\url {http://foo.bar/baz}}{figure.0.1}{}}

e no modo dvi o hyperref não consegue lidar com isso (no modo pdf ele passa).

Não tenho certeza se existem boas soluções alternativas.

informação relacionada