\documentclass[10pt,a4paper]{article} \usepackage[utf8]{inputenc} \usepackage[czech]{babel} \usepackage[T1]{fontenc} \usepackage{verbatim} \usepackage{listings} \usepackage{color} \usepackage{xcolor} \usepackage{textcomp} \usepackage{url} \title{Sazba zdrojových kódů} \author{Jakub Kadlčík} \date{20. 03. 2014} \definecolor{mygreen}{rgb}{0,0.6,0} \definecolor{mygray}{rgb}{0.5,0.5,0.5} \definecolor{mymauve}{rgb}{0.58,0,0.82} \lstdefinestyle{sources} { backgroundcolor=\color{white}, % Pozadí commentstyle=\color{mygreen}, % Komentáře keywordstyle=\color{blue}, % Klíčová slova jazyka stringstyle=\color{mymauve}, % Řetězce } \lstset { % % Základní nastavení % basicstyle=\footnotesize, % Styl a typ písma captionpos=b, % Pozice popisku showstringspaces=false, % Když true, místo mezer se vypíše podtržítko. e.g. "Hello_world" title=\lstname, % Při výpisu zdrojového kódu ze souboru, nastaví název souboru jako popisek tabsize=4, % Velikost tabulátoru (počet mezer) style=sources, % % Podpora českých znaků % http://tex.stackexchange.com/questions/30512/how-to-insert-code-with-accents-with-listings/85947#85947 % literate= {á}{{\'a}}1 {í}{{\'i}}1 {é}{{\'e}}1 {ý}{{\'y}}1 {ú}{{\'u}}1 {ó}{{\'o}}1 {ě}{{\v{e}}}1 {š}{{\v{s}}}1 {č}{{\v{c}}}1 {ř}{{\v{r}}}1 {ž}{{\v{z}}}1 {ď}{{\v{d}}}1 {ť}{{\v{t}}}1 {ň}{{\v{n}}}1 {ů}{{\r{u}}}1 {Á}{{\'A}}1 {Í}{{\'I}}1 {É}{{\'E}}1 {Ý}{{\'Y}}1 {Ú}{{\'U}}1 {Ó}{{\'O}}1 {Ě}{{\v{E}}}1 {Š}{{\v{S}}}1 {Č}{{\v{C}}}1 {Ř}{{\v{R}}}1 {Ž}{{\v{Z}}}1 {Ď}{{\v{D}}}1 {Ť}{{\v{T}}}1 {Ň}{{\v{N}}}1 {Ů}{{\r{U}}}1 , } % Solarized \definecolor{solarized@base03}{HTML}{002B36} \definecolor{solarized@base02}{HTML}{073642} \definecolor{solarized@base01}{HTML}{586e75} \definecolor{solarized@base00}{HTML}{657b83} \definecolor{solarized@base0}{HTML}{839496} \definecolor{solarized@base1}{HTML}{93a1a1} \definecolor{solarized@base2}{HTML}{EEE8D5} \definecolor{solarized@base3}{HTML}{FDF6E3} \definecolor{solarized@yellow}{HTML}{B58900} \definecolor{solarized@orange}{HTML}{CB4B16} \definecolor{solarized@red}{HTML}{DC322F} \definecolor{solarized@magenta}{HTML}{D33682} \definecolor{solarized@violet}{HTML}{6C71C4} \definecolor{solarized@blue}{HTML}{268BD2} \definecolor{solarized@cyan}{HTML}{2AA198} \definecolor{solarized@green}{HTML}{859900} \lstdefinestyle{solarized-light} { basicstyle=\footnotesize\ttfamily\color{solarized@base00}, backgroundcolor=\color{solarized@base3}, rulesepcolor=\color{solarized@base3}, numberstyle=\tiny\color{solarized@base1}, keywordstyle=\color{solarized@green}, stringstyle=\color{solarized@cyan}\ttfamily, identifierstyle=\color{solarized@blue}, commentstyle=\color{solarized@base1}, emphstyle=\color{solarized@red}, } \lstdefinestyle{solarized-dark} { basicstyle=\footnotesize\ttfamily\color{solarized@base0}, backgroundcolor=\color{solarized@base03}, rulesepcolor=\color{solarized@base03}, numberstyle=\tiny\color{solarized@base01}, keywordstyle=\color{solarized@green}, stringstyle=\color{solarized@cyan}\ttfamily, identifierstyle=\color{solarized@blue}, commentstyle=\color{solarized@base01}, emphstyle=\color{solarized@red}, } \begin{document} \maketitle \newpage \tableofcontents \newpage \section{Základní prostředí -- verbatim} Základní, LaTeXem nabízené, prostředí pro sazbu zdrojových kódu se nazývá \texttt{verbatim}. Nevyžaduje vůbec žádnou konfiguraci a lze ho okamžitě použít. Každá mince má ale dvě strany a \texttt{verbatim} díky své jednoduchosti nepodporuje zvýrazňování syntaxe, ani přílišné možnosti konfigurace. Hodí se spíše pro černobíle tištěné texty. % Ukázka zdrojového kódu \vspace{10pt} \lstinputlisting [ language={[LaTeX]TeX}, label=verbatim-source, caption={Ukázka zdrojového kódu: verbatim} ] {sources/verbatim.tex} \vspace{10pt} % Ukázka výsledku \verbatiminput{sources/main.c} \vspace{10pt} Sázený zdrojový kód musí byt odsazován mezerami, nikoliv tabulátory. \section{Balíček listings} Balíček \texttt{listings} naopak nabízí rozmanité možnosti nastavení, zvýrazňování syntaxe mnoha různých jazyků, výběr barev, vysázení kódu z externího souboru a další zajímavé vlastnosti. Ve výchozím nastavení se příliš neliší od prostředí \texttt{verbatim} a jeho použití tedy není o moc složitější. \\ \\ Nejdříve je potřeba načíst balíček \texttt{listings}, nastavit jej dle svých představ pomocí \texttt{lstset} a poté použít prostředí \texttt{lstlistings} podobně jako \texttt{verbatim}. Balíček bohužel ve výchozím nastavení nepodporuje kódování utf8, takže pokud plánujeme sázet Non-ASCII znaky, musíme si je nejdříve definovat pomocí volby \texttt{literate}. % Ukázka zdrojového kódu \lstinputlisting [ language={[LaTeX]TeX}, label=lstlisting-source, caption={Ukázka zdrojového kódu: lstlisting} ] {sources/lstlisting.tex} \vspace{10pt} % Ukázka výsledku \lstinputlisting [ language=C, label=lstlisting-output, caption={Vysázení zdrojového kódu č.\ref{lstlisting-source}} ] {sources/main.c} \vspace{10pt} Pokud máme zdrojový kód dokumentu odsazovaný pomocí tabulátorů nebo mezer na začátku řádků, jakože asi máme, prostředí bude poněkud více posunuté směrem doprava (právě o úroveň odsazení v dokumentu). To lze vyřešit pomocí volby \texttt{gobble}. Ta ze začátku každého řádku smaže daný počet znaků. \newpage \section{Sazba kódu z externího souboru} Balíček \texttt{listings} také podporuje vysázení zdrojového kódu z externího souboru. Zřejmě si dovedete představit, že to zejména v případě delších kódů výrazně zlepšuje přehlednost zdrojového souboru dokumentu.\\ % Ukázka zdrojového kódu \lstinputlisting [ language={[LaTeX]TeX}, label=lstinputlisting-source, caption={Ukázka zdrojového kódu: lstinputlisting} ] {sources/lstinputlisting.tex} \vspace{10pt} \section{Téma Solarized} \texttt{Solarized} je oblíbené barevné téma používané zejména v linuxových konzolích a textových editorech. Téma se skládá z dvou perfektně vyladěných palet pro světlý i tmavý podklad. Nyní si vytvoříme obě témata jako styly pro \texttt{listings}. Mezi takovýmito styly je možné se libovolně přepínat a používat je napříč mnoha dokumenty.\\ \lstinputlisting [ language={[LaTeX]TeX}, label=solarized-colors, caption={Definice Solarized barev} ] {sources/solarized_colors.tex} \vspace{10pt} \newpage \subsection{Solarized light} % Ukázka zdrojového kódu \lstinputlisting[language={[LaTeX]TeX}, label=solarized-light, caption={Téma Solarized light -- zdrojový kód}]{sources/solarized_light.tex} \vspace{10pt} % Ukázka výsledku \lstinputlisting [ language=C, label=solarized-light, caption={Téma Solarized light -- vysázené}, style=solarized-light ] {sources/main.c} \vspace{10pt} \newpage \subsection{Solarized dark} % Ukázka zdrojového kódu \lstinputlisting[language={[LaTeX]TeX}, label=solarized-dark, caption={Téma Solarized dark -- zdrojový kód}]{sources/solarized_dark.tex} \vspace{10pt} % Ukázka výsledku \lstinputlisting [ language=C, label=solarized-dark, caption={Téma Solarized dark -- vysázené}, style=solarized-dark ] {sources/main.c} \vspace{10pt} \newpage \begin{thebibliography}{} \bibitem{the-listings-package}{\em C.~Heinz, B.~Moses, J.~Hoffmann:} The Listings Package \url{ftp://ftp.tex.ac.uk/tex-archive/macros/latex/contrib/listings/listings.pdf} \bibitem{wikibooks-latex}{} \url{http://en.wikibooks.org/wiki/LaTeX/Source_Code_Listings} \bibitem{lstlisting-utf8}{} \url{http://tex.stackexchange.com/questions/30512/how-to-insert-code-with-accents-with-listings/85947#85947} \bibitem{solarized}{} \url{http://ethanschoonover.com/solarized} \end{thebibliography} \end{document}