Sazba zdrojových kód· Jakub Kadl£ík 20. 03. 2014
1
Obsah 1 Základní prost°edí verbatim
3
2 Balí£ek listings
3
3 Sazba kódu z externího souboru
5
4 Téma Solarized
5
4.1 4.2
Solarized light . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Solarized dark . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
6 7
1
Základní prost°edí verbatim
Základní, LaTeXem nabízené, prost°edí pro sazbu zdrojových kódu se nazývá verbatim. Nevyºaduje v·bec ºádnou konguraci a lze ho okamºit¥ pouºít. Kaºdá mince má ale dv¥ strany a verbatim díky své jednoduchosti nepodporuje zvýraz¬ování syntaxe, ani p°íli²né moºnosti kongurace. Hodí se spí²e pro £ernobíle ti²t¥né texty. \ b e g i n { verbatim } i n t main ( i n t argc , c h a r ** argv ) { p r i n t f ( " H e l l o world " ) ; } \ end { verbatim }
Listing 1: Ukázka zdrojového kódu: verbatim
int main(int argc, char **argv) { // Just print "Hello world" string to standard output printf("Hello world"); return 0; } Sázený zdrojový kód musí byt odsazován mezerami, nikoliv tabulátory.
2
Balí£ek listings
Balí£ek 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í verbatim a jeho pouºití tedy není o moc sloºit¥j²í. Nejd°íve je pot°eba na£íst balí£ek listings, nastavit jej dle svých p°edstav pomocí lstset a poté pouºít prost°edí lstlistings podobn¥ jako 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 denovat pomocí volby literate. % Nastav í me s i b a r v i £ ky d l e l i b o s t i \ usepackage { c o l o r } \ d e f i n e c o l o r { mygreen }{ rgb } { 0 , 0 . 6 , 0 } \ d e f i n e c o l o r {mygray }{ rgb } { 0 . 5 , 0 . 5 , 0 . 5 } \ d e f i n e c o l o r {mymauve}{ rgb } { 0 . 5 8 , 0 , 0 . 8 2 } % K o n f i g u r a c e p r o s t ° ed í pro sazbu z d r o j o v ý ch kód· \ usepackage { l i s t i n g s } \lstset { % % Zá kladn í n a s t a v e n í
3
}
% b a s i c s t y l e =\ f o o t n o t e s i z e , % S t y l a typ p í sma c a p t i o n p o s=b , % Pozice popisku s h o w s t r i n g s p a c e s=f a l s e , % Kdyº t r u e , odd ¥ l í s l o v a p o d t r º í tky e . g . " H e l l o_world " t a b s i z e =4, % V e l i k o s t t a b u l á t o r u ( po £ e t mezer ) % % Barvi £ ky % b a c k g r o u n d c o l o r=\ c o l o r { w h i t e } , % Pozad í commentstyle=\ c o l o r { mygreen } , % Komentá ° e k e y w o r d s t y l e=\ c o l o r { b l u e } , % Kl í £ ov á s l o v a j a z y k a s t r i n g s t y l e =\ c o l o r {mymauve } , % e t ¥ z c e % % Podpora £ e s k ý ch znak· % l i t e r a t e=% {á } { { \ ' 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 ,
\ b e g i n { document } \ b e g i n { l s t l i s t i n g } [ l a n g u a g e=C, g o b b l e =8] i n t main ( i n t argc , c h a r ** argv ) { // J u s t p r i n t " H e l l o world " s t r i n g t o s t a n d a r d output p r i n t f ( " H e l l o world " ) ; return 0; } \ end { l s t l i s t i n g } \ end { document }
Listing 2: Ukázka zdrojového kódu: lstlisting i n t main ( i n t argc , c h a r ** argv ) { // J u s t p r i n t " H e l l o world " s t r i n g t o s t a n d a r d output p r i n t f ( " H e l l o world " ) ; return 0; }
Listing 3: Vysázení zdrojového kódu £.2 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 gobble. Ta ze za£átku kaºdého °ádku smaºe daný po£et znak·.
4
3
Sazba kódu z externího souboru
Balí£ek 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. \ l s t i n p u t l i s t i n g [ l a n g u a g e=C] { s o u r c e s / l s t i n p u t l i s t i n g . c }
Listing 4: Ukázka zdrojového kódu: lstinputlisting
4
Téma Solarized
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 listings. Mezi takovýmito styly je moºné se libovoln¥ p°epínat a pouºívat je nap°í£ mnoha dokumenty. % D e f i n i c e S o l a r i z e d barev \ d e f i n e c o l o r { s o l a r i z e d @ b a s e 03}{HTML}{002B36} \ d e f i n e c o l o r { s o l a r i z e d @ b a s e 02}{HTML}{073642} \ d e f i n e c o l o r { s o l a r i z e d @ b a s e 01}{HTML}{586 e 75} \ d e f i n e c o l o r { s o l a r i z e d @ b a s e 00}{HTML}{657 b83} \ d e f i n e c o l o r { s o l a r i z e d @ b a s e 0}{HTML}{839496} \ d e f i n e c o l o r { s o l a r i z e d @ b a s e 1}{HTML}{93 a1a 1} \ d e f i n e c o l o r { s o l a r i z e d @ b a s e 2}{HTML}{EEE8D5} \ d e f i n e c o l o r { s o l a r i z e d @ b a s e 3}{HTML}{FDF6E3} \ d e f i n e c o l o r { s o l a r i z e d @ y e l l o w }{HTML}{B58900} \ d e f i n e c o l o r { s o l a r i z e d @ o r a n g e }{HTML}{CB4B16} \ d e f i n e c o l o r { s o l a r i z e d @ r e d }{HTML}{DC322F} \ d e f i n e c o l o r { s o l a r i z e d @ m a g e n t a }{HTML}{D33682} \ d e f i n e c o l o r { s o l a r i z e d @ v i o l e t }{HTML}{6C71C4} \ d e f i n e c o l o r { s o l a r i z e d @ b l u e }{HTML}{268BD2} \ d e f i n e c o l o r { s o l a r i z e d @ c y a n }{HTML}{2AA198} \ d e f i n e c o l o r { s o l a r i z e d @ g r e e n }{HTML}{859900}
Listing 5: Denice Solarized barev
5
4.1
Solarized light
% Definice stylu \ l s t d e f i n e s t y l e { s o l a r i z e d −l i g h t } { b a s i c s t y l e =\ f o o t n o t e s i z e \ t t f a m i l y \ c o l o r { s o l a r i z e d @ b a s e 0 0 } , b a c k g r o u n d c o l o r=\ c o l o r { s o l a r i z e d @ b a s e 3 } , r u l e s e p c o l o r =\ c o l o r { s o l a r i z e d @ b a s e 3 } , n u m b e r s t y l e=\ t i n y \ c o l o r { s o l a r i z e d @ b a s e 1 } , k e y w o r d s t y l e=\ c o l o r { s o l a r i z e d @ g r e e n } , s t r i n g s t y l e =\ c o l o r { s o l a r i z e d @ c y a n }\ t t f a m i l y , i d e n t i f i e r s t y l e =\ c o l o r { s o l a r i z e d @ b l u e } , commentstyle=\ c o l o r { s o l a r i z e d @ b a s e 1 } , emphstyle=\ c o l o r { s o l a r i z e d @ r e d } , } % Vysá zen í kódu s pou º i t ím s t y l u s o l a r i z e d − l i g h t \lstinputlisting [ l a n g u a g e=C, s t y l e=s o l a r i z e d − l i g h t ] { s o u r c e s /main . c }
Listing 6: Téma Solarized light zdrojový kód int main ( int argc , char ** argv ) { // Just print " Hello world " string to standard output printf (" Hello world " ); return 0; }
Listing 7: Téma Solarized light vysázené
6
4.2
Solarized dark
% Definice stylu \ l s t d e f i n e s t y l e { s o l a r i z e d −dark } { b a s i c s t y l e =\ f o o t n o t e s i z e \ t t f a m i l y \ c o l o r { s o l a r i z e d @ b a s e 0 } , b a c k g r o u n d c o l o r=\ c o l o r { s o l a r i z e d @ b a s e 0 3 } , r u l e s e p c o l o r =\ c o l o r { s o l a r i z e d @ b a s e 0 3 } , n u m b e r s t y l e=\ t i n y \ c o l o r { s o l a r i z e d @ b a s e 0 1 } , k e y w o r d s t y l e=\ c o l o r { s o l a r i z e d @ g r e e n } , s t r i n g s t y l e =\ c o l o r { s o l a r i z e d @ c y a n }\ t t f a m i l y , i d e n t i f i e r s t y l e =\ c o l o r { s o l a r i z e d @ b l u e } , commentstyle=\ c o l o r { s o l a r i z e d @ b a s e 0 1 } , emphstyle=\ c o l o r { s o l a r i z e d @ r e d } , } % Vysá zen í kódu s pou º i t ím s t y l u s o l a r i z e d −dark \lstinputlisting [ l a n g u a g e=C, s t y l e=s o l a r i z e d −dark ] { s o u r c e s /main . c }
Listing 8: Téma Solarized dark zdrojový kód int main ( int argc , char ** argv ) { // Just print " Hello world " string to standard output printf (" Hello world " ); return 0; }
Listing 9: Téma Solarized dark vysázené
7
Reference [1]
C. Heinz, B. Moses, J. Homann: The Listings Package ftp://ftp.tex. ac.uk/tex-archive/macros/latex/contrib/listings/listings.pdf
[2] http://en.wikibooks.org/wiki/LaTeX/Source_Code_Listings [3] http://tex.stackexchange.com/questions/30512/ how-to-insert-code-with-accents-with-listings/85947#85947 [4] http://ethanschoonover.com/solarized
8