LaTeX/Листирање изворног кода

LaTeX

Почетак
  1. Увод100% завршен  Dec 13, 2015
  2. Инсталација100% завршен  Dec 13, 2015
  3. Инсталација додатних пакета 100% завршен  Dec 13, 2015
  4. Основе 100% завршен  Dec 13, 2015
  5. Како пронаћи помоћ 100% завршен  Dec 13, 2015

Заједнички елементи

  1. Структура документа 100% завршен  Dec 28, 2015
  2. Форматирање текста 100% завршен  Dec 27, 2015
  3. Форматирање параграфа 100% завршен  Јан 02, 2016
  4. Боје 100% завршен  Jan 10, 2016
  5. Слова100% завршен  Jan 10, 2016
  6. Структура листи 100% завршен  Jan 10, 2016
  7. Посебни знакови 100% завршен  Jan 10, 2016
  8. Интернационализација 100% завршен  Jan 10, 2016
  9. Ротација 100% завршен  Jan 10, 2016
  10. Табеле 100% завршен  Jan 10, 2016
  11. Стварање наслова 100% завршен  Jan 10, 2016
  12. Распоред стране 100% завршен  Jan 10, 2016
  13. Увоз графике 100% завршен  Jan 10, 2016
  14. Фигуре и натписи100% завршен  Jan 10, 2016
  15. Фусноте и Маргине100% завршен  Jan 10, 2016
  16. Хиперлинкови 100% завршен  Jan 10, 2016
  17. Ознаке и референцирање100% завршен  Jan 10, 2016

Механика

  1. Грешке и упозорења 75% завршен  Јан 02, 2016
  2. Дужине 100% завршен  Јан 02, 2016
  3. Бројачи 100% завршен  Јан 02, 2016
  4. Кутије 100% завршен  Јан 02, 2016
  5. Правила и носачи 100% завршен  Јан 02, 2016

Технички текстови

  1. Математика100% завршен  Jan 10, 2016
  2. Напреднија математика 75% завршен  Jan 10, 2016
  3. Теореме
  4. Хемијска графика 75% завршен  Јан 02, 2016
  5. Алгоритми 75% завршен  Јан 02, 2016
  6. Листирање изворног кода 100% завршен  Јан 02, 2016
  7. Лингвистика 75% завршен  Јан 02, 2016

Посебне стране

  1. Индексирање 75% завршен  Јан 02, 2016
  2. Речник 75% завршен  Јан 02, 2016
  3. Управљање библиографијом‎ 75% завршен  Jan 10, 2016
  4. Више библиографије

Посебни документи

  1. Писма 50% завршен  Јан 02, 2016
  2. Презентације 75% завршен  Јан 02, 2016
  3. Учитељски део 75% завршен  Jan 10, 2016
  4. Кратка биографија 50% завршен  Јан 02, 2016

Креирање графика

  1. Представљање процедуралних графика 100% завршен  Јан 02, 2016
  2. МетаПостови 0% завршен  Јан 02, 2016
  3. Слика 50% завршен  Јан 02, 2016
  4. PGF/TikZ 25% завршен  Јан 02, 2016
  5. PSTricks 50% завршен  Јан 02, 2016
  6. Xy-pic 25% завршен  Јан 02, 2016
  7. Прављење 3D графикa 75% завршен  Јан 02, 2016

Програмирање

  1. Макрои 100% завршен  Jan 10, 2016
  2. Обичан ТеХ‎ 100% завршен  Jan 10, 2016
  3. Креирање пакета 100% завршен  Jan 10, 2016
  4. Теме 75% завршен  Jan 10, 2016

Разно

  1. Модуларни Документи 100% завршен  Jan 10, 2016
  2. Заједничко писање LaTeX докумената 75% завршен  Jan 10, 2016
  3. Отпремање у друге формате 100% завршен  Jan 10, 2016

Помоћ и препоруке

  1. Најчешће постављана питања 100% завршен  Jan 10, 2016
  2. Савети и трикови 75% завршен  Jan 10, 2016

Додаци

  1. Аутори 0% завршен  Jan 10, 2016
  2. Линкови 0% завршен  Jan 10, 2016
  3. Ознаке пакета 0% завршен  Jan 10, 2016
  4. Примери LaTeX докумената 0% завршен  Jan 10, 2016
  5. Индекс 0% завршен  Jan 10, 2016
  6. Речник наредби 0% завршен  Jan 10, 2016

Коришћење listings пакета уреди

Коришћењем листинг пакета listings можемо убацити неформатиран текст, као када би користили \begin{verbatim} али његов основни циљ је да обухвати изворни код било ког програмског језика у вашем докумену. Ако желите да обухватите псеудокодове или алгоритме, онда ће Вам ово Algorithms and Pseudocode бити корисно.

Да бисте користили пакет, треба Вам:

\usepackage{listings}

listings пакет подржава наглашавања свих уобичајних пограмских језика и веома је прилагодљив. Ако само желите да пишете код у оквиру вашег документа пакет пружа могућност lstlisting окружења:

\begin{lstlisting}
Put your code here.
\end{lstlisting}

Још једна могућност, која је веома корисна ако сте креирали програм на више фајлова и идаље радите на њему, је да увезете код из самог извора. На овај начин, ако измените изворни код, треба само да рекомпајлујете LaTeX код и ваш документ ће добити проширење. Команда је:

\lstinputlisting{source_filename.py}

у примеру је Python извор, али то није битно: можете убацити било који фајл али морате написати пуно име фајла. Биће посматран као обичан текст и биће означен у складу са вашим подешавањима, то значи да не препознаје сам програмски језик. Ви можете прецизирати, приликом убацивања фајла о ком језику је реч на следећи начин:

\lstinputlisting[language=Python]{source_filename.py}

Можете прецизирати и величине за фајл.

\lstinputlisting[language=Python, firstline=37, lastline=45]{source_filename.py}

Ово је корисно ако сте сигурни да се фајл неће мењати (барем до те одређене линије). Можете такође изоставити firstline или lastline параметар: што значи све до или почевши од ове тачке.

Ово је елементарни пример кода у Паскалу:

\documentclass{article}
\usepackage{listings}             % Убацује listings-package
\begin{document}
\lstset{language=Pascal}          % Поставите жељени језик (можете га мењати за сваки блок кода)

\begin{lstlisting}[frame=single]  % Почните блок кода
for i:=maxint to 0 do
begin
{ do nothing }
end;
Write('Case insensitive ');
Write('Pascal keywords.');
\end{lstlisting}

\end{document}

 

Подржани језици уреди

Подржава следеће програмске језике:

ABAP2,4, ACSL, Ada4, Algol4, Ant, Assembler2,4, Awk4, bash, Basic2,4, C#5, C++4, C4, Caml4, Clean, Cobol4, Comal, csh, Delphi, Eiffel, Elan, erlang, Euphoria, Fortran4, GCL, Gnuplot, Haskell, HTML, IDL4, inform, Java4, JVMIS, ksh, Lisp4, Logo, Lua2, make4, Mathematica1,4, Matlab, Mercury, MetaPost, Miranda, Mizar, ML, Modelica3, Modula-2, MuPAD, NASTRAN, Oberon-2, Objective C5 , OCL4, Octave, Oz, Pascal4, Perl, PHP, PL/I, Plasm, POV, Prolog, Promela, Python, R, Reduce, Rexx, RSL, Ruby, S4, SAS, Scilab, sh, SHELXL, Simula4, SQL, tcl4, TeX4, VBScript, Verilog, VHDL4, VRML4, XML, XSLT.

За неке од њих, неколико дијалеката је подржано. За више информација, погледајте у документацији која долази са пакетом, требало би да буде у Вашој дистрибуцији под именом listings-*.dvi.

Белешке
  1. Подржава Mathematica код само ако пишете у обичном текст формату. Не можете убацити *.NB files \lstinputlisting{...} како је могло са било којим другим програмским језиком, али Mathematica може да извезе као pretty-formatted LaTeX извор.
  2. Спецификација дијалекта је обавезна за ове језике (e.g. language={[x86masm]Assembler}).
  3. Modelica је подржана преко dtsyntax пакета доступног на here.
  4. За ове језике, више дијалеката је подржано. C, на пример, користи ANSI, Handel, Objective и Sharp. Погледајте стану 12 listings manual.
  5. Дефинише се као дијалекат другог језика

Подешавања уреди

Можете модификовати неколико параметара који ће утицати на изглед кода. Можете ставити следећи код било где у документ (није важно да ли пре или после \begin{document}),промените га у складу са вашим потребама. Значење је објашњено поред сваке линије.

\usepackage{listings}
\usepackage{color}

\definecolor{mygreen}{rgb}{0,0.6,0}
\definecolor{mygray}{rgb}{0.5,0.5,0.5}
\definecolor{mymauve}{rgb}{0.58,0,0.82}

\lstset{ %
  backgroundcolor=\color{white},   % одаберите боју позадине; морате додати \usepackage{color} or \usepackage{xcolor}
  basicstyle=\footnotesize,        % величина фонта који се користи у коду
  breakatwhitespace=false,         % поставља да ли ће се аутоматски прекиди дешавати код whitespace-а
  breaklines=true,                 % поставља аутоматски прекид линије
  captionpos=b,                    % поставља caption-position на дно
  commentstyle=\color{mygreen},    % стил коментара
  deletekeywords={...},            % ако желите да избришете кључне речи из језика
  escapeinside={\%*}{*)},          % ако желите да убаците LaTeX у Ваш код
  extendedchars=true,              % допушта Вам да користите non-ASCII characters;само за 8-битно кодирање, не ради са UTF-8
  frame=single,	                   % додаје оквир око кода
  keepspaces=true,                 % задржава размаке у тексту, корисно за одржавање увлачења у коду (можда ће требати columns=flexible)
  keywordstyle=\color{blue},       % стил кључне речи
  language=Octave,                 % језик кода
  otherkeywords={*,...},           % ако желите додати више кључних речи 
  numbers=left,                    % где да поставља бројеве линија; могуће вредности су (none, left, right)
  numbersep=5pt,                   % колико далеко су бројеви линија од кода
  numberstyle=\tiny\color{mygray}, % стил који се користи за линије кода
  rulecolor=\color{black},         % ако није постављено, боја оквира се може променити на прекидима линија у не-црном тексту (на пример cкоментари (овде зеленом))
  showspaces=false,                % приказује свуда размаке додајући специфичне доње црте што поништава 'showstringspaces'
  showstringspaces=false,          % доње црте само на стринговима
  showtabs=false,                  % приказује табове на стринговима додајући специфичне доње црте
  stepnumber=2,                    % размак између две линије-броја. Ако је 1 , свака линија ће бити нумерисана
  stringstyle=\color{mymauve},     % дослован стил стринга
  tabsize=2,	                   % поставља примаран размак таба на 2 размака
  title=\lstname                   % показује име фајла од фајлова садржаних у\lstinputlisting; такође покушајте caption уместо title
}
escapeinside

escapeinside линију треба објаснити. Опција escapeinside={A}{B} ће одређивати раздвојнике за одлажење у LaTeX код , тојест сав код између "A" и "B" биће рашчлањен као LaTeX преко тренутног стила листирања . У примеру горе, коментари за Octave почињу са %, и биће штампани у документу осим ако не почињу са %*, у том случају се читају као LaTeX (са свим задовољеним LaTeX командама) све док се поново не затворе са *). Ако додате горњи параграф, следеће се може користи за измену подешавања у коду:

\lstset{language=C,caption={Descriptive Caption Text},label=DescriptiveLabel}

Постоји још доста опција, погледајте званичну документацију.

Дефинисање стила уреди

Пакет Вам допушта да дефинишете стил, тојест профиле који одређују сет подешавања.

Пример

\lstdefinestyle{customc}{
  belowcaptionskip=1\baselineskip,
  breaklines=true,
  frame=L,
  xleftmargin=\parindent,
  language=C,
  showstringspaces=false,
  basicstyle=\footnotesize\ttfamily,
  keywordstyle=\bfseries\color{green!40!black},
  commentstyle=\itshape\color{purple!40!black},
  identifierstyle=\color{blue},
  stringstyle=\color{orange},
}

\lstdefinestyle{customasm}{
  belowcaptionskip=1\baselineskip,
  frame=L,
  xleftmargin=\parindent,
  language=[x86masm]Assembler,
  basicstyle=\footnotesize\ttfamily,
  commentstyle=\itshape\color{purple!40!black},
}

\lstset{escapechar=@,style=customc}

У нашем примеру, постављамо само две опције глобално: задани стил и карактер за излаз. Коришћење:

\begin{lstlisting}
#include <stdio.h>
#define N 10
/* Block
 * comment */

int main()
{
    int i;

    // Line comment.
    puts("Hello world!");
    
    for (i = 0; i < N; i++)
    {
        puts("LaTeX is also great for programmers!");
    }

    return 0;
}
\end{lstlisting}

\lstinputlisting[caption=Scheduler, style=customc]{hello.c}

C део ће се штампати као

 

Аутоматско укључење фајла уреди

Ако имате доста изворних фајлова које бисте желели убацити, можда Вам буде корисно да понављате исту ствар више пута. Овде macros показују своју праву моћ.

\newcommand{\includecode}[2][c]{\lstinputlisting[caption=#2, escapechar=, style=custom#1]{#2}<!---->}
% ...

\includecode{sched.c}
\includecode[asm]{sched.s}
% ...

\lstlistoflistings

у овом примеру, правимо једну команду да олакшамо инклузију изворног кода. Постављамо задану вредност на customc. Сво листирање и име као caption: не морамо да пишемо име фајла два пута захваљујући macro. Коначно све listings набрајамо са овом командом из listings пакета.

Погледајте Macros за више детаља.

Проблеми кодирања уреди

По заданој вредности,listings не подржава multi-byte кодирање изворног кода. extendedchar опција ради само за 8-битно кодирање кao што је latin1.

За рад са UTF-8, треба да кажете listings како да тумачи специјалне карактере дефинишући их на следећи начин

\lstset{literate=
  {á}{{\'a}}1 {é}{{\'e}}1 {í}{{\'i}}1 {ó}{{\'o}}1 {ú}{{\'u}}1
  {Á}{{\'A}}1 {É}{{\'E}}1 {Í}{{\'I}}1 {Ó}{{\'O}}1 {Ú}{{\'U}}1
  {à}{{\`a}}1 {è}{{\`e}}1 {ì}{{\`i}}1 {ò}{{\`o}}1 {ù}{{\`u}}1
  {À}{{\`A}}1 {È}{{\'E}}1 {Ì}{{\`I}}1 {Ò}{{\`O}}1 {Ù}{{\`U}}1
  {ä}{{\"a}}1 {ë}{{\"e}}1 {ï}{{\"i}}1 {ö}{{\"o}}1 {ü}{{\"u}}1
  {Ä}{{\"A}}1 {Ë}{{\"E}}1 {Ï}{{\"I}}1 {Ö}{{\"O}}1 {Ü}{{\"U}}1
  {â}{{\^a}}1 {ê}{{\^e}}1 {î}{{\^i}}1 {ô}{{\^o}}1 {û}{{\^u}}1
  {Â}{{\^A}}1 {Ê}{{\^E}}1 {Î}{{\^I}}1 {Ô}{{\^O}}1 {Û}{{\^U}}1
  {œ}{{\oe}}1 {Œ}{{\OE}}1 {æ}{{\ae}}1 {Æ}{{\AE}}1 {ß}{{\ss}}1
  {ű}{{\H{u}}}1 {Ű}{{\H{U}}}1 {ő}{{\H{o}}}1 {Ő}{{\H{O}}}1
  {ç}{{\c c}}1 {Ç}{{\c C}}1 {ø}{{\o}}1 {å}{{\r a}}1 {Å}{{\r A}}1
  {}{{\EUR}}1 {£}{{\pounds}}1
}

Горња табела покрива скоро све знакове латинице. За детаљнија објашњења Коришћења literate опције погледајте одељак 6.4 у Listings Documentation.

Још једна могућност је да замените \usepackage{listings} (у преамбули) са \usepackage{listingsutf8}.

Прилагођавање наслова уреди

Можете подесити разноврсне наслове за Ваше листирање користећи caption пакет. Ево примера за listings.

\usepackage{caption}
\usepackage{listings}

\DeclareCaptionFont{white}{ \color{white} }
\DeclareCaptionFormat{listing}{
  \colorbox[cmyk]{0.43, 0.35, 0.35,0.01 }{
    \parbox{\textwidth}{\hspace{15pt}#1#2#3}
  }
}
\captionsetup[lstlisting]{ format=listing, labelfont=white, textfont=white, singlelinecheck=false, margin=0pt, font={bf,footnotesize} }

% ...

\lstinputlisting[caption=My caption]{sourcefile.lang}

Пакет minted уреди

minted је алтернатива за listings који је постао популаран. Користи ектерну Python библиотеку Pygments за хајлајтовање кода, која од новембра 2014. пружа више од 300 подржаних језика и текстуалних формата.

Како се пакет ослања на екстерну Python библиотеку, подешавање захтева нешто више корака него LaTeX пакет, зато Вас молимо да погледате њихову страницу GitHub repo и њихов приручник.

Референце уреди

Доста више детаљних информација можете пронаћи на PDF by Carsten Heinz and Brooks Moses.

Детаљи и документација о Listings пакету могу се пронаћи на its CTAN website.


Претходно: Алгоритми Индекс Следеће: Лингвистика