Pređi na sadržaj

LaTeX/Algoritmi

Izvor: Викикњиге

LaTeX

Početak
  1. Uvod100% završen  Dec 13, 2015
  2. Instalacija100% završen  Dec 13, 2015
  3. Instalacija dodatnih paketa 100% završen  Dec 13, 2015
  4. Osnove 100% završen  Dec 13, 2015
  5. Kako pronaći pomoć 100% završen  Dec 13, 2015

Zajednički elementi

  1. Struktura dokumenta 100% završen  Dec 28, 2015
  2. Formatiranje teksta 100% završen  Dec 27, 2015
  3. Formatiranje paragrafa 100% završen  Jan 02, 2016
  4. Boje 100% završen  Jan 10, 2016
  5. Slova100% završen  Jan 10, 2016
  6. Struktura listi 100% završen  Jan 10, 2016
  7. Posebni znakovi 100% završen  Jan 10, 2016
  8. Internacionalizacija 100% završen  Jan 10, 2016
  9. Rotacija 100% završen  Jan 10, 2016
  10. Tabele 100% završen  Jan 10, 2016
  11. Stvaranje naslova 100% završen  Jan 10, 2016
  12. Raspored strane 100% završen  Jan 10, 2016
  13. Uvoz grafike 100% završen  Jan 10, 2016
  14. Figure i natpisi100% završen  Jan 10, 2016
  15. Fusnote i Margine100% završen  Jan 10, 2016
  16. Hiperlinkovi 100% završen  Jan 10, 2016
  17. Oznake i referenciranje100% završen  Jan 10, 2016

Mehanika

  1. Greške i upozorenja 75% završen  Jan 02, 2016
  2. Dužine 100% završen  Jan 02, 2016
  3. Brojači 100% završen  Jan 02, 2016
  4. Kutije 100% završen  Jan 02, 2016
  5. Pravila i nosači 100% završen  Jan 02, 2016

Tehnički tekstovi

  1. Matematika100% završen  Jan 10, 2016
  2. Naprednija matematika 75% završen  Jan 10, 2016
  3. Teoreme
  4. Hemijska grafika 75% završen  Jan 02, 2016
  5. Algoritmi 75% završen  Jan 02, 2016
  6. Listiranje izvornog koda 100% završen  Jan 02, 2016
  7. Lingvistika 75% završen  Jan 02, 2016

Posebne strane

  1. Indeksiranje 75% završen  Jan 02, 2016
  2. Rečnik 75% završen  Jan 02, 2016
  3. Upravljanje bibliografijom‎ 75% završen  Jan 10, 2016
  4. Više bibliografije

Posebni dokumenti

  1. Pisma 50% završen  Jan 02, 2016
  2. Prezentacije 75% završen  Jan 02, 2016
  3. Učiteljski deo 75% završen  Jan 10, 2016
  4. Kratka biografija 50% završen  Jan 02, 2016

Kreiranje grafika

  1. Predstavljanje proceduralnih grafika 100% završen  Jan 02, 2016
  2. MetaPostovi 0% završen  Jan 02, 2016
  3. Slika 50% završen  Jan 02, 2016
  4. PGF/TikZ 25% završen  Jan 02, 2016
  5. PSTricks 50% završen  Jan 02, 2016
  6. Xy-pic 25% završen  Jan 02, 2016
  7. Pravljenje 3D grafika 75% završen  Jan 02, 2016

Programiranje

  1. Makroi 100% završen  Jan 10, 2016
  2. Običan TeH‎ 100% završen  Jan 10, 2016
  3. Kreiranje paketa 100% završen  Jan 10, 2016
  4. Teme 75% završen  Jan 10, 2016

Razno

  1. Modularni Dokumenti 100% završen  Jan 10, 2016
  2. Zajedničko pisanje LaTeX dokumenata 75% završen  Jan 10, 2016
  3. Otpremanje u druge formate 100% završen  Jan 10, 2016

Pomoć i preporuke

  1. Najčešće postavljana pitanja 100% završen  Jan 10, 2016
  2. Saveti i trikovi 75% završen  Jan 10, 2016

Dodaci

  1. Autori 0% završen  Jan 10, 2016
  2. Linkovi 0% završen  Jan 10, 2016
  3. Oznake paketa 0% završen  Jan 10, 2016
  4. Primeri LaTeX dokumenata 0% završen  Jan 10, 2016
  5. Indeks 0% završen  Jan 10, 2016
  6. Rečnik naredbi 0% završen  Jan 10, 2016

LaTeX ima nekoliko paketa za algoritme u formi "pseudocode". Oni obezbeđuju stilizovana poboljšanja preko ujednačenog stila (tojest., u typewriter fontu) tako da petlje ili kondicionali budu vizualono odvojeni od ostalog teksta . Za typesetting real kod, kucan u pravom programskom jeziku, pogledajte listings paket opisan u Listiranje izvornog koda.

Podešavanje typesetting korišćenjem algorithmic paketa

[uredi]

algorithmic paket koristi drugačiji set komandi od algorithmicx paketa. ovo nije kompatibilno sa revtex4-1. Osnovne komande su:

 \STATE <text>
 \IF{<condition>} \STATE{<text>} \ELSE \STATE{<text>} \ENDIF
 \FOR{<condition>} \STATE{<text>} \ENDFOR
 \FOR{<condition> \TO <condition> } \STATE{<text>} \ENDFOR
 \FORALL{<condition>} \STATE{<text>} \ENDFOR
 \WHILE{<condition>} \STATE{<text>} \ENDWHILE
 \REPEAT \STATE{<text>} \UNTIL{<condition>}
 \LOOP \STATE{<text>} \ENDLOOP
 \REQUIRE <text>
 \ENSURE <text>
 \RETURN <text>
 \PRINT <text>
 \COMMENT{<text>}
 \AND, \OR, \XOR, \NOT, \TO, \TRUE, \FALSE

Komplenta dokumentacija se nalazi na [2]. Većina komandi je slična algorithmicx ekvivalentima, ali sa drugačijim naglašavanjem.

algorithms bundle пакет на ctan repository, dated 2009-08-24, описује algorithmic окружење (за typesetting алгоритма) као и  algorithm  floating wrapper  (погледајте below) који је дизајниран да обмота окружење алготитма.

algorithmic paket se preporučuje za IEEE journals jer je deo njihovog uobičajenog stila.[1]

Podešavanje typesetting koprišćenjem algorithm2e paketa

[uredi]

algorithm2e paket (prvo objavljen 1995., a poseldnje unapređenje dobio januara 2013. kako se navodi na v5.0 manual) omogućava typesetting algotitma sa dosta mogućnosti prilagođavanja. Kao algorithmic paket, ovaj paket takođe nije kompatibilan sa Revtex-4.1.[2]

Za razliku od algorithmic, algorithm2e omogućava relativno veliki broj opcija prilagođavanja za izgled algoritma koje zadovoljavaju potrebe korisnika. CTAN-manual obezbeđuje razumljivu listu primera i set kotrola.

Uobičajeno, upotreba između \begin{algorithm} i \end{algorithm} bila bi
1. Postavljanje seta ključnih reči (to typeset as functions/operators), kotrole izgleda, naslova, teksta u zaglavlju (koji se pojavljuje pre glavnih koraka algoritma na primer.: Input,Output)
2. Pisanje glavnih koraka algoritma, gde se svaki korak završava sa \;
Možemo pronaći analogiju sa latex-preambulom pre no što počnemo sam dokument.

Paket se učitava kao

\usepackage[]{algorithm2e}

jednostavan primer, uzet iz v4.01 uputstva, je

\begin{algorithm}[H]
 \KwData{this text}
 \KwResult{how to write algorithm with \LaTeX2e }
 initialization\;
 \While{not at end of this document}{
  read current\;
  \eIf{understand}{
   go to next section\;
   current section becomes this one\;
   }{
   go back to the beginning of current section\;
  }
 }
 \caption{How to write algorithms}
\end{algorithm}

Koji pravi

Više informacija su u priručniku priloženom na ctan website.

Podešavanje typesetting koprišćenjem algorithmicx paketa

[uredi]

algorithmicx paket obezbeđuje dosta konstrukata za dizajn algoritma. Postavite \usepackage{algpseudocode} u preabmuli da biste koristili algoritamsko okruženje za pisanje algotitamskog pseudokoda (\begin{algorithmic}...\end{algorithmic}). Možda biste želeli da koristite (\usepackage{algorithm}) da obuhvatite kod algotitma u algoritamsko okruženje (\begin{algorithm}...\end{algorithm}) da napravite floating okruženje sa numerisanim algoritmima.

Komandi \begin{algorithmic} može se dodeliti ppoizvoljni argument pozitivnog intidžera, koji ako zadat prouzrokuje da se linije nabrajanja javljaju na sadržatelju tog intidžera. npr. \begin{algorithmic}[5] će ući u algoritamsko oruženje i pobrojati svaku petu liniju.

Ispod je primer typesetting elementarnog algoritma korišćenjem algorithmicx paketa (ne zaboravite da ubacite i \usepackage{algpseudocode} iskaz u preambuli vašeg dokumenta):

\begin{algorithmic}
\If {$i\geq maxval$}
    \State $i\gets 0$
\Else
    \If {$i+k\leq maxval$}
        \State $i\gets i+k$
    \EndIf
\EndIf
\end{algorithmic}

LaTeX izvor se može pisati u formi oznatoj svim programerima tako da bude lako čitljiv. Ovo ipak neće uticati na finalni izgled dokumenta.

Osnovne komande imaju sledeću sintaksu:

Iskaz (\Iskaz sa kosom crtom prebacuje u novi red, i može se takođe koristiti ispred ostalih komandi)

\State $x\gets <value>$

Tri forme if-iskaza:

\If{<condition>} <text> \EndIf
\If{<condition>} <text> \Else <text> \EndIf
\If{<condition>} <text> \ElsIf{<condition>} <text> \Else <text> \EndIf

Treća forma prihvata onoliko \ElsIf{} klauzula koliko je potrebno. Obratite pažnju da se koristi \ElsIf a ne \ElseIf.

Petlje:

\For{<condition>} <text> \EndFor
\ForAll{<condition>} <text> \EndFor
\While{<condition>} <text> \EndWhile
\Repeat <text> \Until{<condition>}
\Loop <text> \EndLoop

Pre- and postcondition:

\Require <text>
\Ensure <text>

Funkcije

\Function{<name>}{<params>} <body> \EndFunction
\Return <text>
\Call{<name>}{<params>}

Ova komanda će se obično koristiti u kombinaciji sa \State komandom na ovaj način:

\Function{Increment}{$a$}
    \State $a \gets a+1$
    \State \Return $a$
\EndFunction

Komentari:

\Comment{<text>}

Korisnicima koje su se prebacili sa starog algorithmic paketa: komentari se mogu nalaziti bilo gde; nema ograničenja kao u starom algorithmic paketu.

Preimenovanje: algorithm to procedure, require/ensure to input/output

[uredi]
\floatname{algorithm}{Procedure}
\renewcommand{\algorithmicrequire}{\textbf{Input:}}
\renewcommand{\algorithmicensure}{\textbf{Output:}}

Prilagodljivi blokovi algoritma

[uredi]
algorithmicx пакет Вам омогућава да дефинишете ваша сопствена окружења.

Da biste definisali početak sa početnom komandom i kraj sa krajnjom komandom, koristite,

\algblock[<block>]{<start>}{<end>}

Ovo definiše dve komande \<start> i \<end> koje nemaju parametre. Tekst prikazan je \textbf{<start>} i \textbf{<end>}.

Sa \algblockdefx možete postavti tekst kao autput koristeći početak i kraj komande i brojeve parametara za ove komande. U tekstu n-ti parametar se referencira sa #n.

\algblockdefx[<block>]{<start>}{<end>}
    [<startparamcount>][<default value>]{<start text>}
    [<endparamcount>][<default value>]{<end text>}

Primer:

\algblock[Name]{Start}{End}
\algblockdefx[NAME]{START}{END}%
    [2][Unknown]{Start #1(#2)}%
    {Ending}
\algblockdefx[NAME]{}{OTHEREND}%
    [1]{Until (#1)}
\begin{algorithmic}
\Start
    \Start
        \START[One]{x}
        \END
        \START{0}
        \OTHEREND{\texttt{True}}
    \End
    \Start
    \End
\End
\end{algorithmic}

Naprednija prilagođavanja i ostali konstrukti su opisani u algorithmicx priručniku: http://mirror.ctan.org/macros/latex/contrib/algorithmicx/algorithmicx.pdf

algorithm okruženje

[uredi]

Često je korisno za algoritme napravljene sa algorithmic da budu "floated" do optimalne tačke u dokumentu da bi se izbeglo njihovo razdvajanje po stranici .Okruženje algorithm omogućava ovo i još nekoliko korisnih osobina. Uključite je dodajući
\usepackage{algorithm} u preambulu dokumenta. U njega se ulazi sa

\begin{algorithm}
\caption{<your caption for this algorithm>}
\label{<your label for references later in your document>}
\begin{algorithmic}
<algorithmic environment>
\end{algorithmic}
\end{algorithm}

Nabrajanje algoritma

[uredi]

Osnovni sistem nabrajanja za algorithm paket je da nabrajate algoritme sekvencijalno. Ovo često nije poželjno, posebno u velikom dokumentu gde se nabraja po poglavljima. Na nabrajanje algoritma se može uticati tako što se dodeli komponenta ime dokumenta u kojoj je nabrajanje preporučeno. Legalne vrednosti za ovu opciju su: part, chapter, section, subsection, subsubsection or nothing (default). Na primer:

\usepackage[chapter]{algorithm}

Lista algoritma

[uredi]

Kada koristite figure ili tabele, možete ih ubaciti u listu sličnu sadržaju; algorithm paket omogućava sličnu komandu. Samo stavite

\listofalgorithms

bilo gde u dokumentu, i LaTeX će štampati listu "algoritamskih" okruženja u dokumetnu sa odgovarajućom stranicom i naslovom.

Primer iz priručnika

[uredi]

Ovaj primer je uzet iz (official manual, p.14)

\begin{algorithm}                      % enter the algorithm environment
\caption{Calculate $y = x^n$}          % give the algorithm a caption
\label{alg1}                           % and a label for \ref{} commands later in the document
\begin{algorithmic}                    % enter the algorithmic environment
    \REQUIRE $n \geq 0 \vee x \neq 0$
    \ENSURE $y = x^n$
    \STATE $y \Leftarrow 1$
    \IF{$n < 0$}
        \STATE $X \Leftarrow 1 / x$
        \STATE $N \Leftarrow -n$
    \ELSE
        \STATE $X \Leftarrow x$
        \STATE $N \Leftarrow n$
    \ENDIF
    \WHILE{$N \neq 0$}
        \IF{$N$ is even}
            \STATE $X \Leftarrow X \times X$
            \STATE $N \Leftarrow N / 2$
        \ELSE[$N$ is odd]
            \STATE $y \Leftarrow y \times X$
            \STATE $N \Leftarrow N - 1$
        \ENDIF
    \ENDWHILE
\end{algorithmic}
\end{algorithm}


Zvanični priručnik se nalazi na
http://mirrors.ctan.org/macros/latex/contrib/algorithms/algorithms.pdf


Podešavanje typesetting korišćenjem program paketa

[uredi]

Paket program obezbeđuje macros za typesetting algoritma. Svaka linija je podešena u math modu, tako da su raymaci i naglašavanja automatski odrađeni . |variable_name| može biti korišćena i u normalnom tekstu, matematičkim ekspresijama ili programima da naglasi ime varijable. Koristite \origbar da biste dobili normalni | simbol u programu. Komande \A, \B, \P, \Q, \R, \S, \T i \Z mogu se slagati i sa boldovanim slovom sledećeg objekta kao podskripta (eg \S1 typesets {\bf S$_1$} etc). Osnovni rade normalno, eg \S‘‘.

Ispod je primer typesetting osnovnog algoritma koristeći program paket (ne zaboravite da dodate \usepackage{program} iskaz u preambuli dokumenta):

\begin{program}
\mbox{A fast exponentiation procedure:}
\BEGIN \\ %
  \FOR i:=1 \TO 10 \STEP 1 \DO
     |expt|(2,i); \\ |newline|() \OD %
\rcomment{This text will be set flush to the right margin}
\WHERE
\PROC |expt|(x,n) \BODY
          z:=1;
          \DO \IF n=0 \THEN \EXIT \FI;
             \DO \IF |odd|(n) \THEN \EXIT \FI;
\COMMENT{This is a comment statement};
                n:=n/2; x:=x*x \OD;
             \{ n>0 \};
             n:=n-1; z:=z*x \OD;
          |print|(z) \ENDPROC
\END
\end{program}

Komande \( and \) su redefinisane da bi se algoritam predstavio u vidu male stranice, tako da se može prikazti kao jedan prozor ili u formuli. Na primer, da bi izkazali da je određeni sistem akcija ekvivalentan WHILE petlji možete pisati:

\[
\( \ACTIONS A:
        A \EQ \IF \B{} \THEN \S{}; \CALL A
                       \ELSE \CALL Z \FI \QE
   \ENDACTIONS \)
\EQT
\( \WHILE \B{} \DO \S{} \OD \)
\]

Dijkstra kondicionali i petlje:

\begin{program}
\IF x = 1 \AR y:=y+1
\BAR x = 2 \AR y:=y^2
\utdots
\BAR x = n \AR y:=\displaystyle\sum_{i=1}^n y_i \FI

\DO 2 \origbar x \AND x>0 \AR x:= x/2
\BAR \NOT 2 \origbar x    \AR x:= \modbar{x+3} \OD
\end{program}

Petlje sa više izlaza:

\begin{program} 
\DO \DO \IF \B1 \THEN \EXIT \FI;
        \S1;
        \IF \B2 \THEN \EXIT(2) \FI \OD;
    \IF \B1 \THEN \EXIT \FI \OD
\end{program}

Primer obratnog inženjeringa.

Ovo je originalni program:

\begin{program} 
 \VAR \seq{m := 0, p := 0, |last| := `` ''}; 
 \ACTIONS |prog|: 
|prog| \ACTIONEQ %
    \seq{|line| := `` '', m := 0, i := 1};
    \CALL |inhere| \ENDACTION
l \ACTIONEQ %
    i := i+1; 
    \IF (i=(n+1)) \THEN \CALL |alldone| \FI ; 
    m := 1; 
    \IF |item|[i] \neq |last|
        \THEN |write|(|line|); |line| := `` ''; m := 0;
              \CALL |inhere| \FI ; 
    \CALL |more| \ENDACTION
|inhere| \ACTIONEQ %
    p := |number|[i]; |line| := |item|[i];
    |line| := |line| \concat `` '' \concat p;
    \CALL |more| \ENDACTION
|more| \ACTIONEQ %
    \IF (m=1) \THEN p := |number|[i];
    |line| := |line| \concat ``, '' \concat p \FI ; 
    |last| := |item|[i]; 
    \CALL l  \ENDACTION  
|alldone| \ACTIONEQ |write|(|line|); \CALL Z \ENDACTION \ENDACTIONS \END 
\end{program}

A ovo trensformisana, prepravljena verzija:

\begin{program} 
\seq{|line| := `` '', i := 1};
\WHILE i \neq n+1 \DO 
  |line| := |item|[i] \concat `` '' \concat |number|[i]; 
  i := i+1; 
  \WHILE i \neq n+1 \AND |item|[i] = |item|[i-1] \DO 
    |line| := |line| \concat ``, '' \concat |number|[i]);
    i := i+1 \OD ; 
  |write|(|line|) \OD 
\end{program}

Paket takođe obezbeđuje macro za typesetting set kao ovaj: \set{x \in N | x > 0}.

Linije se mogu nabrajati postavljajući \NumberProgramstrue i isključenjem nabrajanja \NumberProgramsfalse

Package page

Package documentation

Reference

[uredi]
  1. [1]
  2. http://tex.stackexchange.com/questions/70181/revtex4-1-and-algorithm2e-indentation-clash



Prethodno: Hemijska grafika Indeks Sledeće: Listiranje izvornog koda