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.
#1 by MArcin on 2011/05/30 - 01:37
Mi to nie działa … zamiast wszystkich polskich liter jest Ń
Aleksander Reply:
Wrzesień 2nd, 2014 at 18:41
spróbuj zakomentować linie:
% inputencoding=utf8x,
% extendedchars=\true,
u mnie pomogło 😉
#2 by Łukasz Stelmach on 2011/06/03 - 13:41
Proszę przejrzeć jeszcze źródła, może tam będzie więcej odpowiedzi.
#3 by newfuntek on 2011/12/09 - 23:22
Dzięki! Działa na texlive2011 gentoo utf8
#4 by lukew on 2012/05/21 - 20:14
Dzięki!
texlive, ubuntu 12.04
#5 by Radek on 2015/01/18 - 14:11
Działa bez problemu, dziękuję bardzo.
#6 by basia on 2015/03/13 - 18:37
Czy tą formułkę w tym miejscu mam zamieścić,czy w innym miejscu?
\usepackage{listings}
\lstset{
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
}
Łukasz Stelmach Reply:
Marzec 28th, 2015 at 20:25
Powinno być OK.