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:
- 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).
- 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).
- Użycie polecenia
\literate
i zmiana polskich liter na odpowiednie kodowanie Latexa
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.