%%% Tento soubor obsahuje definice různých užitečných maker a prostředí %%%
%%% Další makra připisujte sem, ať nepřekáží v ostatních souborech.     %%%

%%% Drobné úpravy stylu

% Tato makra přesvědčují mírně ošklivým trikem LaTeX, aby hlavičky kapitol
% sázel příčetněji a nevynechával nad nimi spoustu místa. Směle ignorujte.
\makeatletter
\def\@makechapterhead#1{
  {\parindent \z@ \raggedright \normalfont
   \Huge\bfseries \thechapter. #1
   \par\nobreak
   \vskip 20\p@
}}
\def\@makeschapterhead#1{
  {\parindent \z@ \raggedright \normalfont
   \Huge\bfseries #1
   \par\nobreak
   \vskip 20\p@
}}
\makeatother

% Toto makro přesvědčí LaTeX, aby vkládal mezeru mezi theorem prostředími,
% pokud je použitý parskip.
{
    \makeatletter
    \@for\theoremstyle:=definition,remark,plain\do{%
        \expandafter\g@addto@macro\csname th@\theoremstyle\endcsname{%
            \addtolength\thm@preskip\parskip
            }%
        }
}

% Toto makro definuje kapitolu, která není očíslovaná, ale je uvedena v obsahu.
\def\chapwithtoc#1{
\chapter*{#1}
\addcontentsline{toc}{chapter}{#1}
}

% Trochu volnější nastavení dělení slov, než je default.
\lefthyphenmin=2
\righthyphenmin=2

% Zapne černé "slimáky" na koncích řádků, které přetekly, abychom si
% jich lépe všimli.
\overfullrule=1mm

%%% Makra pro definice, věty, tvrzení, příklady, ... (vyžaduje baliček amsthm)

\theoremstyle{plain}
\newtheorem{veta}{Věta}
\newtheorem{lemma}[veta]{Lemma}
\newtheorem{tvrz}[veta]{Tvrzení}

\theoremstyle{plain}
\newtheorem{definice}{Definice}

\theoremstyle{remark}
\newtheorem*{dusl}{Důsledek}
\newtheorem*{pozn}{Poznámka}
\newtheorem*{prikl}{Příklad}

%%% Prostředí pro důkazy

\newenvironment{dukaz}{
  \par\medskip\noindent
  \textit{Důkaz}.
}{
\newline
\rightline{$\square$}  % nebo \SquareCastShadowBottomRight z balíčku bbding
}

%%% Prostředí pro sazbu kódu, případně vstupu/výstupu počítačových
%%% programů. (Vyžaduje balíček fancyvrb -- fancy verbatim.)

\DefineVerbatimEnvironment{code}{Verbatim}{fontsize=\small, frame=single}

%%% Prostředí pro sazbu algoritmů

\makeatletter
\newcounter{algocnt} % Pro unikátní identifikátory řádků
\newcounter{algoline}
\renewcommand*{\theHalgoline}{\thealgocnt.\thealgoline}
\def\newalgo#1#2#3{
\newenvironment{#1}{
\algo@start
#2
}{#3\endgroup}
}
\def\newnamedalgo#1#2#3#4{
\newenvironment{#1}[2][\@nil]{
\algo@start
#3
\def\tmp{##1}
\ifx\tmp\@nnil\else\alg@label{##1}{##2}\fi
\algo@name{#2}{##2}
}{#4\endgroup}
}
\def\algo@start{
\goodbreak
\begingroup
\let\:=\algo@item
\def\={\leftarrow}
\stepcounter{algocnt}
\setcounter{algoline}{0}
\parskip1pt
}
\def\algo@par{\par
\parindent=2em
\hangindent=2.5em
\hangafter=1
\leavevmode
}
\def\algo@item{
\ifnum\thealgoline=0\par\nobreak\smallskip\fi
\algo@par\refstepcounter{algoline}
\hbox to 0.5em{\hss \thealgoline.~~}%
\futurelet\next\algo@itemh
} 
\def\algo@itemh{\ifx\next:\let\next=\algo@hang\else\let\next=\relax\fi\next}
\def\algo@hang:{\advance\hangindent by 2em \hskip 2em\futurelet\next\algo@itemh}
\def\algo@name#1#2{{\fontseries{b}\selectfont #1} \textsc{#2}}
\newcommand{\alg@label}[2]{%
\protected@write\@auxout{}{\string \newlabel {#1}{{\textsc{#2}}{\thepage}{\textsc{#2}}{#1}{}} }%
\hypertarget{#1}{}%
}
\makeatother

\def\algin{\par\nobreak{\it Vstup:\/} }
\def\algout{\par\nobreak\parindent=0pt{\it Výstup:\/} }

\def\cmt#1{\unskip~~\hfill\fullcmt{#1}\ignorespaces}
\def\fullcmt#1{{$\triangleleft$\hskip0.5em\it #1}}

\newnamedalgo{algo}{Algoritmus}{\bigskip}{\vskip\dimexpr \bigskipamount - \parskip \relax}
\newnamedalgo{procedure}{Procedura}{\bigskip}{\vskip\dimexpr \bigskipamount - \parskip \relax}
\newalgo{shortalgo}{\smallskip}{\vskip\dimexpr \smallskipamount - \parskip \relax}

%%% Vychytávky pro algoritmy

\def\fget#1{\xleftarrow{#1}}
\def\fput#1{\xrightarrow{#1}}
\def\O{\mathcal{O}}

%%% Prostor reálných, resp. přirozených čísel
\newcommand{\R}{\mathbb{R}}
\newcommand{\N}{\mathbb{N}}

%%% Užitečné operátory pro statistiku a pravděpodobnost
\DeclareMathOperator{\pr}{\textsf{P}}
\DeclareMathOperator{\E}{\textsf{E}\,}
\DeclareMathOperator{\var}{\textrm{var}}
\DeclareMathOperator{\sd}{\textrm{sd}}

%%% Příkaz pro transpozici vektoru/matice
\newcommand{\T}[1]{#1^\top}

%%% Vychytávky pro matematiku
\newcommand{\goto}{\rightarrow}
\newcommand{\gotop}{\stackrel{P}{\longrightarrow}}
\newcommand{\maon}[1]{o(n^{#1})}
\newcommand{\abs}[1]{\left|{#1}\right|}
\newcommand{\dint}{\int_0^\tau\!\!\int_0^\tau}
\newcommand{\isqr}[1]{\frac{1}{\sqrt{#1}}}

%%% Vychytávky pro tabulky
\newcommand{\pulrad}[1]{\raisebox{1.5ex}[0pt]{#1}}
\newcommand{\mc}[1]{\multicolumn{1}{c}{#1}}
