Jul 16 2012

LaTeX – Using hyperref with RTL languages (such as Hebrew)

Long ago I’ve tried to use hyperref(which allowing links inside the documents, and bookmarks in pdf output) package in latex while writing in Hebrew. Sadly I’ve failed and didn’t have time to check why.

Today, After encountering this post by a guy asking for help in this situation I’ve managed to work around most of the problems.

At first I’ve found Guy Rutenberg’s post about “Getting Hyperref to Work with Hebrew (in XeTeX)“.
Which made me understand why pdfLaTeX failed miserably.
Guy used XeTeX, which might be fine for you, but I’m using a lot of packages and some of them just doesn’t support XeTeX. So, I thought, maybe ps2pdf will work?

Now it is a good time to say, I’m using LyX. I’m not writing the latex code directly, so that’s why my next choice was ps2pdf, because it’s one of LyX defaults.

I’ve tried to compile a simple article with a table of contents and sections. I had a small smile on my face when it managed to compile, but when I’ve opened the PDF it was one big mass. All the bookmarks were blank. After playing around with it, I figured out that the problem was the encoding of the document. For some reason LyX doesn’t like Unicode so it doesn’t use it by default and ps2pdf doesn’t like other Hebrew encoding at all.

So, first of all, you will have to change the encoding. In LyX You can do that by:

  1. clicking Documet > Settings…
  2. Go to the Language tab.
  3. In the Encoding section choose Other and then Unicode (ucs-extended) (utf8x).

If you are writing a latex code, just write:

\usepackage[utf8x]{inputenc}

In the preamble (and remove the other inputenc importing if exists).

Now when I’ve compiled the document the bookmark were OK, but the links in the table of content weren’t in the right place. The problem as it seems to be, was the very same problem Guy mentioned, parts of document are being processed in a reversed order because of the RTL. The solution for that, was to find the specific buildup of the TOC and change the RTL to LTR before setting up the link and then back for the text itself. So, when I’ve added the following to the preamble everything worked just fine:

\PreloadUnicodePage{5}

\usepackage[unicode=true] {hyperref}

\def\contentsline#1#2#3#4{%
  \ifx\\#4\\%
    \csname l@#1\endcsname{#2}{#3}%
  \else
    \ifcase\Hy@linktoc % none
      \csname l@#1\endcsname{#2}{#3}%
    \or % section
      \csname l@#1\endcsname{%
        \beginL\hyper@linkstart{link}{#4}{\R{#2}}\hyper@linkend\endL
      }{#3}%
    \or % page
      \csname l@#1\endcsname{{#2}}{%
        \hyper@linkstart{link}{#4}{#3}\hyper@linkend
      }%
    \else % all
      \csname l@#1\endcsname{%
        \hyper@linkstart{link}{#4}{#2}\hyper@linkend
      }{%
        \hyper@linkstart{link}{#4}{#3}\hyper@linkend
      }%
    \fi
  \fi
}

By adding it, you are replacing the hyperref‘s contentsline function. The only difference between the original function and the new one is at line 13. the \beginR, \endR and \L{…}.

I’m not really sure if it’s 100% bulletproof, so let me know if you encounter any problems.


May 19 2012

LIMSUP – Real time LaTeX collaboration

Today, I’ve released the first beta of LIMSUP – a online LaTeX editor supporting real time collaboration.

It’s the first version, so it is probably very buggy, hope you will let me know about bugs.

The idea led to the development of the product was the need to take notes during lectures. As most of you know, I’m taking notes during most of the lectures I’m attending using my computer and latex. The problem is, that sometime it is hard to follow, and sometimes different people have different insights.
So, using LIMSUP, several people can take notes together. One will be the lead writer and the others will fix mistakes and add remarks.

Hope you will find it as useful as I. And hopefully I will continue the development and documentation.


Dec 23 2011

Bug in LyX for Mac – \Omega, \otimes are not being displayed on designer

If you are using LyX on mac you probably noticed that some symbols are missing while editing an equation.

One of the symbols missing is \Omega which is really annoying when you learn probability.
When you try and type \Omega, instead of seeing the symbol you will just see a blank space.

I’ve dived into the code, and found out how the all designer works. For most of the symbols, the translation is quite simple. There are several font files, and a file named symbols (located in /Application/LyX.app/Contents/Resources) which maps every latex code to the relevant font and unicode value.

The problem with \Omega and \otimes is that their unicode value is 0x00ad. And as it seems, QT4 has bug with characters with that code. LyX source code mentioned this bug in GuiPainter.cpp and it have some code to try and fix it, but for some reason it doesn’t work.

A work around for the \Omega is to make a small change in the symbols file, locate the Omega line (with capital O) and change the code from 173 to 937 (a code for different Omega character that is available in the font).

I didn’t find (didn’t really looked for) a way to fix the \otimes, because i don’t really use it. A way to fix it will be using a font editor and changing the font and map the wanted symbols from other unused code. Again, didn’t care enough to do it, If someone want me to just post here. But I believe that LyX developers will soon enough fix it.