2

Since 2003 or 2004 I am writing a 1600+ pages script. In it I use original cites from Chinese, Arabic and Old Greek sources, mostly simply by copy and paste (no, I am neither capable of Greek, Chinese or Arabic!). Thanks to the abilities of LaTeX that should work, I hoped.

My system is as follows: Win7 with TeX Live 2019 full install, installed and updated today, to be sure, I don't work with outdated versions. My sources are written under Winshell, coded UTF-8, compiled under LaTeX.

First everything seemed to work like a charm: In the beginning of my script I had a mixture of Old Greek and Chinese cites, in the end Arabic cites, everything seemed to work more or less (well, there was one problem though, with which I started my career of writing posts on StackExchange some two days ago and got great help here, but that was another problem -- this is only my second post, encouraged by your help with the first one, to be found under PdfLaTeX: Why is arabic output slightly different from arabic input?)

But then I added some Greek cites near the end of my script, after the Arabic ones -- and suddenly those came out quite crippled (at that time, till this very morning, I was working under TeX Live 2018, only this morning I dated up).

A minimum working example for that problem looked like this:

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

So there is an Old Greek text followod by Arabic, followed by Old Greek again. Under TeX Live 2018 this compiled without an error message. Afterwards the first Greek and the Arabic text came out quite ok. But the second Greek text, which in the source is identical with the first one, came out with a lot of different letters...

But now, that I have switched over to TeX Live 2019 this morning with PdfLaTeX I get lots of error messages -- but only for the second Greek text, not for the first, identical one.

I was not able to solve that, although I tried hard since weeks -- the install of TeX Live 2019 this morning was my last attempt to solve that problem. So I began looking for other opportunities. Switching to XeTeX or LuaTeX would surely have solved these issues. But then I would have to do something with the massive use of psfrag -- which is the main cause, that I still stick with good old LaTeX in this script.

So I rather tried to get happy with babel and it's option arabic. But as soon as I add arabic to the options of babel (which I use for Greek and German anyway), the compilation crashes. Now today I have twice tried to reduce my script to a minimum working example. Both times with much different results, but see yourself:

Example 1:

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

\begin{document}

\thispagestyle{plain}
Hallo

\end{document}

with the error message

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

And the minimum working example 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}

The error messages with LaTeX for this example reads (I don't find any questionmark (?) in this):

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

As you may notice, both MWEs have only one thing in common: They use the babel option arabic. I am relatively sure, if I try a third time to get an MWE, I will end with still another one. In my eyes the option arabic of babel somehow seems to get in conflict with other packages, as you can see by commenting out non used packages. I am quite aware, that in both MWEs I could drop some \usepackage's and then it would compile. But as I need those packages in my original script, it unfortunately needs to run with them...

Under PdfLaTeX (TeX Live 2019) example 1 gives error messages, example 2 compiles quite alright. Under LaTeX -- which is after the aforesaid the important case for me -- both examples produce error messages.

So meanwhile I am running out of ideas and now my question to you is: How on earth can I still use the involved packages (and a lot more, I admit) and nevertheless swap back and forth between Old Greek and Arabic -- still under good old LaTeX?

ThorstenL
  • 161
  • 2
    Please provide a link to your previous question, as it's related, and include the text of the error messages you get for your examples. You don't need microtype to get an error in the first case. Use \nolinkurl in the second example. (A \url in a \caption is going to cause trouble regardless.) – cfr Nov 28 '19 at 03:46
  • I would be interested in seeing if Hebrew causes the same issue you encounter with Arabic. Both of these languages write from right to left--the opposite of European languages. – Polyhat Nov 28 '19 at 05:50
  • For the first example you need to include \setcode{utf8} within a group so \ararab definition become
    \newcommand\ararab[2][]{{\setcode{utf8} \RL{#2}}}
    – Salim Bou Nov 28 '19 at 07:42
  • if you want help with an error message please show the exact error message from the log file, from ! to ? in a code block, so line endings are preserved. – David Carlisle Nov 28 '19 at 07:46
  • Hello cfr, thank you and all the others for your help! I edited my original post to add the link to my former post (https://tex.stackexchange.com/questions/517885/pdflatex-why-is-arabic-output-slightly-different-from-arabic-input). I saw, that I don't need microtype. But with me the contents of the error message changes, if I comment that line out, so somehow it interferes as well -- and I use it in my original script, so it should work...With the other comments and answers I can only deal, when I am back on my computer, which will take some hours... – ThorstenL Nov 28 '19 at 14:34
  • Hello cfr, meanwhile I edited my original post and added the LaTeX error messages -- as far as I got one (the first MWE compiles without errors). I use \url extensively, but up to now only in figures, marginpars and footnotes, which are all "moving". I now replaced \url by \nolinkurl in my original script as well as in my second MWE for figures and marginpars. Would I replace them in footnotes as well, no external link would be left... In both cases (script and MWE2) the error messages under LaTeX stay unchanged. – ThorstenL Nov 29 '19 at 00:03
  • Hello polyhat, I really would like to add at least one hebrew cite (וַיַּ֗עַשׂ אֵ֚ת הַכִּיֹּ֣ור נְחֹ֔שֶׁת וְאֵ֖ת כַּנֹּ֣ו נְחֹ֑שֶׁת בְּמַרְאֹת֙ הַצֹּ֣בְאֹ֔ת אֲשֶׁ֣ר צָֽבְא֔וּ פֶּ֖תַח אֹ֥הֶל מֹועֵֽד׃ ס) as well -- but up to now I don't know yet, how exactly to do that, and what lets me hesitate even more is the fear, what might happen, if I added that, as already now I am getting into troubles, unsolvable for me alone... – ThorstenL Nov 29 '19 at 00:27
  • Hello Salim Bou, as with my first post, you again gave me a valuable hint! I inserted the group in my MWE as well as in my original script. The MWE is now working like a charm. If I understand you right, the missing group made \setcode{utf8} work for all the rest of the script and so destroyed the greek, because my version resolves \ararab{...} to ..., while yours resolves \ararab{...} to {...}, right? With the original script, if I remove the arabic option of babel and the LAE, LFE in fontenc, stay just with old ArabTeX, the greek parts now seem to work without problems! Thank you very much! – ThorstenL Nov 29 '19 at 01:03
  • Hello David, I tried to edit and alter the original post appropriately, I hope, now everything is alright? – ThorstenL Nov 29 '19 at 01:04
  • Hello Polyhat, ArabTeX indeed offers the option to write Hebrew as well. But already when I call the appropriate package hebtex, it gets in conflict with the package CJK written by Werner Lemberg, which I use as well to some extent. So for me that experiment failed... – ThorstenL Nov 29 '19 at 03:06
  • You can save yourself from trouble simply by using lualatex. Check out some of my answers in the past. Many were about „how to do Greek/Hebrew/Arabic?“. My answer is always the same: lualatex. It’s easy and it works. – ClintEastwood Nov 29 '19 at 04:31
  • Hi Clint Eastwood, I am heavily working with psfrag in that script by now. What is your simple solution to work with psfrag under lualatex without the trouble of having to alter the source for each of probably around 500 diagrams in the script -- which would take days, if not weeks of work? – ThorstenL Nov 29 '19 at 14:31

1 Answers1

1

General remark

Language option files like arabic are normally not part of the core babel but provided by other people. arabic.ldf (and the styles it loads) is very old, from 2006 and seems to be unmaintained.

The same can be said for arabtex: The date says that the last change is from 2003.

Both are very heavy packages which patch and change a lot commands. This makes them very fragile. Every change in some other package or your setup can break your document - and if it breaks there will be nobody to fix them.

So if you have a large, complicated document which works, keep your fingers away from the update button.

Details

Your first example compiles again if you add a brace group in the \ararab definition, so that the \setcode command doesn't affect the following code. Loading inputenc is not necessary in a current texlive.

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

Your second example fails as \thispagestyle{plain} redefines \thepage to

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

mparhack uses \thepage in the output routine to store labels and doesn't like this redefinition at all (your example would fail without microtype too).

Your last example fails for a similar reason: arabic redefines \thefigure as

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

This leads in the aux to labels like this

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

and in dvi mode hyperref can't cope with it (in pdf mode it passes).

I'm not sure if there are good work-arounds.

Ulrike Fischer
  • 327,261
  • Hello Ulrike, I already often admired your answers, when I was not yet an active member of this forum, but in the read-only-status... ;-))) As an Engineer I normally follow the rule "never change a running system!" So normally I change my LaTeX Version only about every five years -- I just had done that last year. But the only thing I altered now to open a can of worms was, that I put some greek text behind the arabian one -- and then my system wouldn't work any longer! But the greek text simply had to stay there -- and so I began to search for alternatives... – ThorstenL Nov 29 '19 at 01:26
  • ... I already had read, that ArabTeX last had been changed in 2003 (when I began writing). But I had read, that babel just recently had taken up development again, and so mistakenly thought, that the option arabic might be a much more recent solution than ArabTeX. I am happy to learn from you, that I was wrong with that (though I am not happy, that I was wrong with that... ;-))) ). Your and Salim Bou's proposal, to add brackets to my macro \ararab{} seems to help, the greek stuff behind the Arabic now looks quite ok to me. So probably in future I will stay with good ol' ArabTeX... – ThorstenL Nov 29 '19 at 01:35
  • In the moment I have a new error message though, but nearly 1000 pages away from all the Arabic and Greek stuff, hidden deep inside a very big macro of my own, so my search for the cause may very well take quite some time. I think, that has nothing to do with the current problem, perhaps it vanishes, if I go back to TeXLive2018... So thank you all, who tried to help me, I will stay with ArabTeX and double braces in the macro ararab, perhaps going back to TeXLive2018... – ThorstenL Nov 29 '19 at 01:42
  • Found the mistake leading to the new error message myself already -- sometimes my fingers are quicker than my brain, whoever of both is to blame for that... so everything ok now with ArabTeX! – ThorstenL Nov 29 '19 at 02:36