Umieszczając przykład kodu źródłowego przy użyciu pakietu listings w Latexu trafiłem na problem: jak wyświetlić poprawnie polskie znaki w dokumencie. Umieszczenie jakiegokolwiek polskiego znaczku w obrębie kodu źródłowego skutkowało zgłoszeniem błędu i koniec, poza zamianą polskiej literki na łacińską wiele zrobić się nie dało.

Okazało się, że problem występuje w sytuacji, gdy plik źródłowy jest zapisany w standardzie UFT-8. W przypadku użycia innego kodowanie, problemów być nie powinno. Pakiet listings nie obsługuje za dobrze kodowania UTF. Po dalszych poszukiwaniach, pojawiło się kilka rozwiązań problemu:

  1. Umieszczenie kodu źródłowego w oddzielnym pliku z kodowaniem np. ISO-8859-2, w włączanie tego kodu do głównego dokumentu (mi to rozwiązanie nie bardzo pasowało, musiałbym bym utrzymywać jakieś 200 dodatkowych plików).
  2. Włączenie obsługi UTF-8 w pakiecie listings:
    \lstset{
            inputencoding=utf8,
            extendedchars=\true
    }

    Teoretycznie rozwiązanie działa, przynajmniej kompilacja raportu przebiega poprawnie, jednak polskie znaki są źle umieszczane w dokumencie (każda polska litera jest zawsze umieszczana na początku wyrazu w którym występuje).

  3. Użycie polecenia \literate i zmiana polskich liter na odpowiednie kodowanie Latexa
  4. Trzecie podejście okazało się najlepsze, ponieważ umożliwiło wstawianie polskich znaków w kodzie źródłowym oraz nie wymagało wprowadzania żadnych zmian zarówno po stronie przykładów jak i samego kodowania plików. Tak wygląda moja definicja języka:

    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    \lstset{
            language=SQL,
        inputencoding=utf8x,
        extendedchars=\true,
        literate={ą}{{\k{a}}}1
                 {Ą}{{\k{A}}}1
                 {ę}{{\k{e}}}1
                 {Ę}{{\k{E}}}1
                 {ó}{{\'o}}1
                 {Ó}{{\'O}}1
                 {ś}{{\'s}}1
                 {Ś}{{\'S}}1
                 {ł}{{\l{}}}1
                 {Ł}{{\L{}}}1
                 {ż}{{\.z}}1
                 {Ż}{{\.Z}}1
                 {ź}{{\'z}}1
                 {Ź}{{\'Z}}1
                 {ć}{{\'c}}1
                 {Ć}{{\'C}}1
                 {ń}{{\'n}}1
                 {Ń}{{\'N}}1
    }

    Użycie tej definicj pozwoli na odpowiednią interpretacją polskich znaków jak i też innych, pod warunkiem że odpowiednio zdefiniujemy mapowanie.

    Źródła

Tags: , , ,