- Łukasz Stelmach – Java JBoss Linux - http://blog.stelmisoft.pl -

Kolorowanie kodu źródłowego w Latex przy użyciu pygments

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:

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:

$ sudo aptitude install 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ć:

  1. 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 [1]):

    $ 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"
  2. Kompilacja dokumentacji.
    $ make minted.pdf
    $ make clean
  3. Instalacja pakietu.
    $ sudo mkdir -p /usr/local/share/texmf/tex/latex/minted
    $ sudo cp minted.sty /usr/local/share/texmf/tex/latex/minted
  4. Instalacja dokumentacji
    $ sudo mkdir -p /usr/local/share/texmf/doc/latex/minted
    $ sudo cp minted.pdf /usr/local/share/texmf/doc/latex/minted

    Po instalacji pakietu i dokumentacji należy jesze upewnić się, że uprawnienia nadane plikom będą odpowiednie.

  5. 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:

$ texdoc minted

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 [2][a4paper]{article}
\usepackage [3]{fontspec}
\usepackage [3]{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:

$ pdflatex  -shell-escape kolorowo.tex

...
 ********************************************
 * 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ć:

$ xelatex -shell-escape kolorowo.tex

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).

Źródła