Ach ta wiosna; dzisiaj napotkałem kolejny problem. Tym razem sprawa dotyczy tworzenia skorowidza w
LaTeX'u.
Od jakiegoś już czasu składam dokumenty przy użyciu kodowania UTF-8. Niestety, gdy powstawał LaTeX, nie myślano jeszcze o UTF-8. Na szczęście pakiet
inputenc obsługuje już UTF-8 poprzez podanie opcji
utf8:
\usepackage[utf8]{inputenc}
Niestety skorowidz (indeks słów umieszczany zwykle na końcu dokumentu) jest wciąż tworzony starym programem
makeindex, który nie wie co to UTF-8. W konsekwencji uzyskujemy skorowidz, w którym polskie znaki diakrytyczne są dziwnie posortowane.
Znalazłem w sieci program
plmindex autorstwa Włodzimierza Macewicza; zob. np.
Program plmindex,
Wszystko o indeksowaniu,
TeX na indeksie. Program
plmindex sortoje słowa zgodnie z polskimi zasadami. Kompilacja programu przebiegła bez żadnych problemów pod moim Ubuntu. Niestety program
plmindex również nie należy do najnowszych i nie zna on porządku znaków diakrytycznych kodowanych UTF-8. Potrafi natomiast sortować słowa kodowane za pomocą stron:
- PL-mazowia,
- PL-latin2,
- PL-cp1250,
- PL-cp852.
Jak już pisałem wcześniej, nie zamierzam zrezygnować z UTF-8 i przestawiać się np. na latin2 (ISO-8859-2), tylko po to, aby powstał dobrze posortowany skorowidz. Napisałem więc sobie
skrypt, który tworzy skorowidz z prawidłowo posortowanymi słowami w UTF-8. Wystarczy wywołać
jedną komendę, która filtruje plik
thesis.idx utworzony przez LaTeX'a i w wyniku daje plik
thesis.ind. Przypominam, że musimy ponownie wykonać kompilację dokumentu LaTeX'em, aby pojawił się skorowidz.
Filtrowanie odbywa się najpierw za pomocą
sed'a (do latin2), a potem z powrotem za pomocą
iconv'a (do UTF-8). W między czasie sortowane są słowa (kodowane w latin2) za pomocą programu
plmindex.
Przejdźmy więc do rzeczy.
- Załóżmy, że mamy dokument dokument.tex, a nim przygotowany skorowidz (zob. komendę \makeindex)
Kompilacja
latex dokument.tex
utworzy plik dokument.idx
- Teraz standardowo powinno się wywołać polecenie 'makeindex dokument'
Ale nie dla dokumentów kodowanych w UTF-8. Zamiast tego wywołujemy polecenie:
sed -f skrypt.sed dokument.idx | plmindex -L PL-latin2 | iconv --from-code=ISO-8859-2 --to-code=UTF-8 > dokument.ind
W ten sposób otrzymamy plik dokument.ind z prawidłowo posortowanymi słowami oraz w kodowaniu UTF-8.
- Teraz wystarczy ponownie skompilować dokument
latex dokument.tex
W efekcie otrzymujemy plik dokument.dvi z prawidłowym skorowidzem.
Instrukcja w kroku 2. wymaga, oprócz programów
sed,
plmindex,
iconv, pliku ze skryptem
skrypt.sed, który umieściłem tutaj:
Mam nadzieję, że ktoś skorzysta.