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.
\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í:
písmo a barvu jednotlivých syntaktických konstrukcí
vzhled a barvu rámečků kolem výpisu zdrojového kódu
zapnout nebo potlačit výpis speciálních znaků (mezery, tabulátory)
zapnout nebo vypnout automatické číslování řádků kódu
zapnout nebo vypnout automatické zalamování řádků s kódem
\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]
.
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.pdf
v 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.
\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.
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
.