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.
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.texutworzy 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.indW 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.texW efekcie otrzymujemy plik dokument.dvi z prawidłowym skorowidzem.
Mam nadzieję, że ktoś skorzysta.
3 komentarze:
Pod linuksem i zamiast pdflatexa kompilować xelatexem można użyć makeindex z opcją -L
można to tez zrobić używając zamiast pakietu makeidx pakiet index i wywołujac polecenie podane(makeindex -L) Ta metoda ma tą wadę, że (moja i osoby powyżej że ź i ż są nie rozdzielone. Polecam zapoznać się z programem xindy
można to tez zrobić używając zamiast pakietu makeidx pakiet index i wywołujac polecenie podane(makeindex -L) Ta metoda ma tą wadę (moja i osoby powyżej), że ź i ż są nie rozdzielone.
Polecam zapoznać się z programem xindy
Prześlij komentarz