% Vloží do textu plovoucí obrázek.
%\newcommand{\fig}[4]{
%	\begin{figure}[!htbm]
%		\begin{center}
%			\includegraphics[scale=#4]{#1}
%		\end{center}
%		\caption{#2}
%		\label{#3}
%	\end{figure}
%}

% TODO: Použít namísto \fig.
\newcommand{\vectorfig}[4]{
	\begin{figure}[!htbm]
		\begin{center}
			\includegraphics[scale=#2]{#1}
		\end{center}
		\caption{#3}
		\label{#4}
	\end{figure}
}
\newcommand{\fig}[4]{\vectorfig{#1}{#4}{#2}{#3}}

% Vloží do textu plovoucí obrázek, u kterého je nutno udat šířku.
\newcommand{\rasterfig}[4]{
	\begin{figure}[!htbm]
		\begin{center}
			\includegraphics[keepaspectratio,width=#2]{#1}
		\end{center}
		\caption{#3}
		\label{#4}
	\end{figure}
}
% Vloží do textu plovoucí obrázek, u kterého je nutno udat šířku.
\newcommand{\figwidth}[4]{\rasterfig{#1}{#4}{#2}{#3}}

% Vloží do textu plovoucí obrázek otočený o 90°.
\newcommand{\figrotated}[4]{
	\begin{figure}[!htbm]
		\begin{center}
			\includegraphics[angle=270, scale=#4]{#1}
		\end{center}
		\caption{#2}
		\label{#3}
	\end{figure}
}

% In-line odrážkovaný seznam.
\newenvironment{inenumerate}
	{\begin{inparaenum}[(a)]}
	{\end{inparaenum}}

% Vysází hodnotu s fyzikální jednotkou
\newcommand{\qty}[2]{\ensuremath{#1\text{~}\jedn{#2}}}

% Vysází rozsah hodnoty s fyzikální jednotkou
% TODO: Použít v celé diplomové práci
\newcommand{\qtyrange}[3]{\ensuremath{#1\text{--}#2\text{~}\jedn{#3}}}

% Vysází teplotu v °C.
\newcommand{\qtyC}[1]{\ensuremath{#1\text{~}^\circ\text{C}}}

% Vysází úhel ve stupních.
\newcommand{\qtydeg}[1]{\ensuremath{#1^\circ}}

% Vysází teplotní rozsah v °C.
\newcommand{\qtyCrange}[3]{\ensuremath{(#1\text{--}#2)\text{~}\jedn{#3}}}

% Anglický termín
\newcommand{\en}[1]{\textit{#1}}

% Identifikátor
\newcommand{\n}[1]{\textsf{#1}}

% Značení součástky
\newcommand{\dev}[1]{\n{#1}}

% Symbolické značení pinu součástky
\newcommand{\pin}[1]{\n{#1}}

% Symbolické značení signálu či linky v elektrické obvodu
\newcommand{\signal}[1]{\n{#1}}

% Funkcionální operátor
% TODO: \hat{\op{X}} produkuje mírně posunutou stříšku.
\newcommand{\op}[1]{\text{\sffamily\itshape{}#1}}

% Argument obkopí zdvojenými vertikálními čarami (sazba normy vektoru)
\newcommand{\norm}[1]{\lVert#1\rVert}

% Sazba skalárního součinu dvou signálu
\newcommand{\iprod}[2]{\left(#1,\, #2\right)}

% Sazba výrazu v absolutní hodnotě
\newcommand{\abs}[1]{\left|#1\right|}

% Sazba maximální absolutní hodnoty odchylky zadané proměnné
\newcommand{\absdeltamax}[1]{\abs{\delta_{#1}}_\text{max}}

% Sazba teploty ve stupních Celsia
\newcommand{\tempC}[1]{\ensuremath{#1^\circ\text{C}}}

% Za vzorec vysází seznam jednotek.
\newcommand{\units}[1]{\quad\jedn{[#1]}}

% Sazba "inline" zlomku (se šikmou zlomkovou čarou) vhodného pro vložení
% do textu.
\newcommand{\ifrac}[2]{{}^{#1}\!/_{#2}}

\newcommand{\example}[2]{%
	\begin{list}{}{\leftmargin4em\rightmargin4em}
		\item \textbf{Příklad:} \textit{#1}\\\textbf{Řešení:} #2
	\end{list}
}

% Vysází číslo ve vědeckém tvaru (mantisa * 10^exponent).
\newcommand{\sci}[2]{#1{\cdot}10^{#2}}

% Vysází znak obchodní známky
\newcommand{\tm}{\textsuperscript{\texttrademark}}

% Vysází znak registrované obchodní známky
\newcommand{\rtm}{\textsuperscript{\textregistered}}

% Kvůli chybě v LaTeXu se \Omega nevysází, nachází-li se v příkazu \jedn.
% V tomto případě je nutna namísto \Omega použít \upOmega (jakoby "na stojato").
\newcommand{\upOmega}{\text{$\Omega$}}

% Sazba jména souboru.
\newcommand{\file}[1]{\texttt{#1}}

% Sazba identifikátoru (název funkce, proměnná, atd.).
\newcommand{\ident}[1]{\texttt{#1}}

% Sazba pomlčky (oddělující dolní a horní rozsah).
\renewcommand{\to}{\text{~--~}}

% Definice barev
\definecolor{darkgray}{RGB}{63,63,63}
\definecolor{darkblue}{RGB}{0,0,127}
\definecolor{darkgreen}{RGB}{0,127,0}
\definecolor{darkwater}{RGB}{0,63,63}
\definecolor{autumnleaf}{RGB}{96,96,0}

% Výchozí nastavení pro sázení výpišů zdrojových kódů
\lstset{%
	% Povolit znaky mimo ASCII
	extendedchars=true,%
	% Základní styl písma
	basicstyle=\ttfamily\small,%
	% Číslování řádků nalevo
	numbers=left,%
	% Styl čísel
	numberstyle=\ttfamily\color{gray},%
	% Číslovat každý řádek
	stepnumber=1,%
	% Odstup čísel řádků od kódu
	numbersep=0.5em,%
	% Orámování kódu
	frame=leftline,%
	% Barva orámování
	rulecolor=\color{gray},%
	% Odskok tabulátoru
	tabsize=4,%
	% Popisek kódu
	title=\texttt\lstname,%
	% Popisek nad kódem
	captionpos=t,%
	% Styly klíčových slov. Čísla vybírají třídy (třída = rozdělení
	% klíčových slov na podkategorie)
	keywordstyle={[1]\color{darkgreen}\bfseries},%
	keywordstyle={[2]\color{darkgreen}},%
	keywordstyle={[3]\color{autumnleaf}},%
	% Styl komentářů
	commentstyle=\ttfamily\it\color{darkwater},%
	% Styl řetězců
	stringstyle=\ttfamily\color{darkblue}%
}

% Správné číslování výpisů
\renewcommand{\thelstlisting}{\thesection-\arabic{lstlisting}}

% Definice jazyka symbolických adres pro architekturu MIPS M4K v dialektu
% GNU assembleru.
\lstdefinelanguage[GNU-MIPS-M4K]{Assembly}{%
	% Skutečné instrukce
	morekeywords=[1]{abs.fmt,add,add.fmt,addi,addiu,addu,alnv.ps,and,andi,b,bal,bc1f,bc1fl,bc1t,bc1tl,bc2f,bc2fl,bc2t,bc2tl,beq,beql,bgez,bgezal,bgezall,bgezl,bgtz,bgtzl,blez,blezl,bltz,bltzal,bltzall,blitzl,bne,bnel,break,c.cond.fmt,cache,ceil.l.fmt,ceil.w.fmt,cfc1,cfc2,clo,clz,cop2,ctc1,ctc2,cvt.d.fmt,cvt.l.fmt,cvt.ps.s,cvt.s.fmt,csv.s.pl,csv.s.pu,cvt.w.fmt,deret,di,div,div.fmt,divu,ehb,ei,eret,ext,floor.l.fmt,fllor.w.fmt,ins,j,jal,jalr,jalr.hb,jr,jr.hb,lb,lbu,ldc1,ldc2,ldxc1,lh,lhu,ll,lui,luxc1,lw,lwc1,lwc2,lwl,lwr,lwxc1,madd,madd.fmt,maddu,mfc0,mfc1,mfc2,mfhc1,mfhc2,mfhi,mflo,mov.fmt,movf,movf.fmt,movn,movn.fmt,movt,movt.fmt,movz,movz.fmt,msub,msub.fmt,msubu,mtc0,mtc1,mtc2,mthc1,mthc2,mthi,mtlo,mul,mul.fmt,mult,multu,neg.fmt,nmadd.fmt,nmsub.fmt,nop,nor,or,ori,pll.ps,plu.ps,pref,prefx,pul.ps,puu.ps,rdhwr,rdpgpr,recip.fmt,rotr,rotrv,round.l.fmt,round.w.fmt,rsqrt.fmt,sb,sc,sdbbp,sdc1,sdc2,sdxc1,seb,seh,sh,sll,sllv,slt,slti,sltiu,sltu,sqrt.fmt,sra,srav,srl,srlv,ssnop,sub,sub.fmt,subu,suxc1,sw,swc1,swc2,swl,swr,swxc1,sync,synci,syscall,teq,teqi,tge,tgei,tgeiu,tgeu,tlbp,tlbr,tlbwi,tlbwr,tlt,tlti,tltiu,tltu,tne,tnei,trunc.l.fmt,trunc.w.fmt,wait,wrpgpr,wsbh,xor,xori},%
	% Pseudoinstrukce
	morekeywords=[1]{b,bal,beqz,bge,bgt,bgtu,bgtz,ble,blt,clear,div,la,li,move,mul,not,rem}
	morekeywords=[2]{.abort,.align,.ascii,.asciz,.balign,.balignw,.balignl,.bss,.byte,.comm,.data,.def,.dim,.double,.eject,.else,.end,.elseif,.endef,.endfunc,.endif,.endm,.endr,.equ,.equiv,.err,.even,.exitm,.extern,.fail,.file,.fill,.float,.func,.global,.hword,.ident,.if,.ifdef,.ifc,.ifeq,.ifeqs,.ifge,.ifgt,.ifle,.iflt,.ifnc,.ifndef,.ifnotdef,.ifne,.ifnes,.include,.incbin,.int,.irp,.irpc,.lcomm,.lflags,.line,.ln,.list,.long,.macro,.mri,.nolist,.octa,.org,.p2align[wl],.print,.psize,.purgem,.quad,.rept,.sbttl,.scl,.section,.set,.short,.single,.size,.sleb128,.skip,.space,.stabd,.stabn,.stabs,.string,.struct,.tag,.text,.title,.type,.uleb128,.val,.vtable_entry,.word},%
	morekeywords=[3]{\$zero,\$at,\$v0,\$v1,\$a0,\$a1,\$s2,\$a3,\$t0,\$t1,\$t2,\$t3,\$t4,\$t5,\$t6,\$t7,\$s0,\$s1,\$s2,\$s3,\$s4,\$s5,\$s6,\$s7,\$t8,\$t9,\$k0,\$k1,\$gp,\$sp,\$s8,\$fp,\$ra},%
	morestring=[b]{"},%
	morestring=[b]{'},%
	morecomment=[l]{//},%
	morecomment=[s]{/*}{*/},%
	alsoletter=.,%
	sensitive=true,%
	tabsize=8,
}[keywords,comments,strings]
