6.6. Sazba zdrojových kódů

Jak již víme, zdrojové kódy lze do dokumentu umisťovat buď do prostředí verbatim, ovšem existuje i mnohem flexibilnější nástroj. Je jím balík listings, jež bývá běžnou součástí LaTeXových distribucí (např. TeXLive jej obsahuje). Případně jej můžete získat z adresy http://www.atscire.de/index.php?nav=products/listings.

Listings si poradí se zhruba 70 běžnými programovacími jazyky, pro které dokáže zvýrazňovat syntaxi. Seznam všech podporovaných jazyků nalezneme v dokumentaci k balíku. Poskytuje bohaté možnosti konfigurace a v této kapitole se seznámíme s jeho základy.

Balík do dokumentu přidáme známým příkazem \usepackage{listings}.

Po přidání balíku do dokumentu je nutno zavést požadované programovací jazyky. To provedeme v záhlaví dokumentu příkazem \lstloadlanguages{seznam} kde parametr seznam obsahuje názvy jednotlivých programovacích jazyků oddělených čárkou.

ikona
\lstloadlanguages{HTML, XML, PHP, C, C++, Java, SQL, [LaTeX]TeX}

Povšiměme si konstrukce, jakou jsme přidali LaTeX. Některé jazyky jsou totiž rozdělené na tzv. \emphasis{dialekty}, což znamená že jsou součástí některé větší množiny. Dialekt pak specifikujeme do hranatých závorek, mateřsko množinu uvedeme za závorky. Seznam těchto dialektů je v dokumentaci uveden v závorkách u přehledu podporovaných jazyků.

Nastavení parametrů se provádí buď příkazem \lstset{parametry}, nebo tak že parametry uvedeme do hranatých závorek přímo ke konkrétnímu výpisu kódu. Parametry slouží k nastavení:

ikona
Příklad 6.7: Ukázkové nastavení pararametrů výpisů kódu
\lstset{basicstyle=\footnotesize,
        keywordstyle=\bfseries,
        identifierstyle=,
        stringstyle=\ttfamily,
        numbers=left,
        numberstyle=\tiny,
        numbersep=5pt,
        frameround=fttt,
        extendedchars=true,
        float,
        tab=~,
        tabsize=2,
        frame=tb,
        captionpos=b,
        showspaces=false,
        showstringspaces=false,
        breaklines=true
}

Příkaz \lstset{} může být uveden pouze jednou (nejlépe v záhlaví dokumentu), nebo jej lze použít před každým použitím prostředí a tím předefinovat konkrétní následující výpis kódu. Pokud předefinováváme položek málo, můžeme je uvést také jako parametr prostředí, tj. \begin{lstlistings}[parametry].

ikona
Poznámka:

Význam jednotlivých parametrů je spolu s ostatními použitelnými příkazy, podrobně rozepsán v dokumentaci, která je součástí distribuce balíku a je umístěna v souboru /listings/listings.pdfv adresáři s dokumentací.

Za povšimnutí stojí parametr float. Pokud jej uvedeme, prostředí se bude chápat jako plovoucí a nebude docházet ke stránkovému zlomu uvnitř výpisu zdrojového kódu.

Ve výpisu kódu musíme vždy uvést jazyk, ve kterém daný kód je. To provedeme pomocí parametru language=jazyk, zároveň sem uvádíme popisek a případně další parametry, které se vztahují jen na tento konkrétní výpis.

ikona
Příklad 6.8: Typické použití balíku listings
\begin{lstlisting}[language=C++, numbers=none, label={lst:src}, caption=Program Hello world]
#include <stdout>

using namespace std;

int main(int argc, char *argv)
{
 cout<<"Hello world"<<endl;
}
\end{lstlisting}

Předpokládejme že jsme tento příklad použili s výše uvedeným nastavením prostředí. Tento postup zvýrazní část kódu v jazyce C++, zakáže číslování řádků, přiřadi výpisu kódů jmenovku pro křížový odkaz a pod výpis kódu vypíše titulek „Hello world“.

Tak jak je v LaTeXu zvykem, jednotlivé výpisy kódu jsou automaticky číslovány, podobně jako tabulky, obrázky nebo nadpisy kaptiol.

Balík umožňuje mnoho dalších užitečných funkcí, mezi které patří rozličné možnosti číslování řádků zdrojového kódu, vkládání do rejstříků, možnost definice vlastních stylů programovacích jazyků aj.

ikona
Poznámka:

V titulku výpisu kódu je standardně uvedeno slovo „Listing“. To můžeme snadno předefinovat na své vlastní pomocí předefinování příkazu \lstlistingname.

\renewcommand\lstlistingname{Výpis kódu} % předefinování nadpisu
\renewcommand\lstlistlistingname{Výpisy kódu} % předefinování nadpisu v obsahu

Pokud potřebujeme na některé místo dokumentu vygenerovat seznam všech výpisů kódu, provedeme to příkazem: \lstlistoflistings.