Do kolorowania (czy też może formatowania) kodu źródłowego można w przypadku Latexa używać pakietu listings
. Zapewnia on całkiem spore możliwości formatowania kodu źródłowego, ale ma kilka wad:
- pakiet ten nie rozumie składni kodu źródłowego, po prostu koloruje tekst wg wprowadzonych słów kluczowych
- istnieją problemy z obsługą standardu UTF8 (do przeskoczenia, ale zawsze)
Ratunkiem na to może być użycie pakietu pygments
napisanego w Pythonie i zintegrowanie go z Latexem przy użyciu pakietu minted
.
Instalacja aplikacji pygments
Pierwszym krokiem będzie zainstalowanie pakietu pygments
, który będzie odpowiedzialny za generowanie odpowiednio kolorowanej składni. W przypadku systemu Debian oraz Ubuntu wystarczy zainstalować pakiet python-pygments
:
Instalacja pakietu minted
Teraz czas integrację pygments
z Latexem. Będzie tutaj pomocny pakiet o nazwie minted
. Niestety nie jest on dostępny w ramach pakietów dostarczany z Ubuntu, więc należy go zainstalować w ramach Latexa ręcznie. Poniżej krótka instrukcja jak można to zrobić:
- Pobranie plików.
Pliki można pobrać w formie archiwum (ze strony projektu). Ja jednak wybrałem pobranie aktualnej wersji bezpośrednio z repozytorium (w wersji pakietowej znajduje się błąd, uniemożliwiający kompilacje dokumentacji na Linuksie: Issue 5):
$ wget "http://minted.googlecode.com/hg/minted.ins" \
"http://minted.googlecode.com/hg/Makefile" \
"http://minted.googlecode.com/hg/README" \
"http://minted.googlecode.com/hg/minted.dtx" \
"http://minted.googlecode.com/hg/minted.sty" - Kompilacja dokumentacji.
$ make minted.pdf
$ make clean - Instalacja pakietu.
$ sudo mkdir -p /usr/local/share/texmf/tex/latex/minted
$ sudo cp minted.sty /usr/local/share/texmf/tex/latex/minted - Instalacja dokumentacji
$ sudo mkdir -p /usr/local/share/texmf/doc/latex/minted
$ sudo cp minted.pdf /usr/local/share/texmf/doc/latex/mintedPo instalacji pakietu i dokumentacji należy jesze upewnić się, że uprawnienia nadane plikom będą odpowiednie.
- Rejestracja nowych pakietów.
$ sudo mktexlsr
Dzięki takiej instalacji pakiet będzie dostępny dla wszystkich użytkowników, także jego dokumentacja będzie dostępna poprzez polecenie:
Kolorowanie składni
Aplikacja zainstalowana, moduł do Latexa także więc czas uruchomić i sprawdzić jak działa kolorowanie składni, przykładowy kod:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | \documentclass[a4paper]{article} \usepackage{fontspec} \usepackage{minted} \begin{document} Fragment kodu Javy: \begin{minted}[linenos,% numeracja linii numbersep=5pt,% separator numeracji od tekstu gobble=2,% domyślne wcięcie kodu frame=lines,% linie ograniczające framesep=2mm ]{java} public class HelloWorld extends Hello { private final String STALA = "Tekst" public HelloWorld() { int zmienna = 5; } } \end{minted} \end{document} |
Czas teraz na kompilację. Tutaj spotkała mnie niespodzianka, bo okazało się że polecenie pdflatex
nie zadziałało:
...
********************************************
* XeTeX is required to compile this document.
* Sorry!
********************************************.
...
Komunikat błędu całkiem jasny, ale jakoś nie słyszałem wcześniej o czymś co się nazwy XeTeX (a wielka szkoda, z tego co widzę oszczędziłoby mi to kilku problemów z polskimi znakami). Więc mała modyfikacja polecenia i wszystko powinno już działać:
W wyniku działania tego polecenia powinno być wygenerowanie pliku kolorowo.pdf
z ładnym kodem źródłowym. Należy pamiętać o użyciu przełącznika -shell-escape
, dzięki czemu jest możliwe wywoływanie zewnętrznych aplikacji (w tym przypadku pygments
).
#1 by Mariusz on 2012/02/09 - 23:45
Ciekawy tutorial. Ja miałem problemy, gdy podczas kompilacji przez pdflatex pojawi się błąd dotyczący pakietu fontspec. Później jak przeszedłem na Xelatex, to pojawiły się problemy z polską czcionką. I tak w kółko, a czas ucieka.