]> mj.ucw.cz Git - ads2.git/commitdiff
Makra: Sazba algoritmu, cviceni a odkazu z algobooku
authorMartin Mares <mj@ucw.cz>
Sun, 15 Jan 2012 22:35:33 +0000 (23:35 +0100)
committerMartin Mares <mj@ucw.cz>
Sun, 15 Jan 2012 22:35:33 +0000 (23:35 +0100)
Pozor, tyto zmeny nejsou zpetne kompatibilni, je nutno predelat
vsechny kapitoly.

lecnotes.tex

index 9606a847d8b4bc677635ccdc53e2b0688e3dbe30..ebf27cba3414f9b35c068325b772937222006bdd 100644 (file)
@@ -43,6 +43,9 @@
 % ... pokud je v seznamu:
 \def\qeditem{{\parfillskip=0pt\hfill\rlap{\hskip\rightskip\llap{$\heartsuit$}}\par}}
 
+% Zvyrazneni pojmu
+\def\em#1{{\it #1\/}}
+
 % Poznamky pod carou
 \newcount\footcnt
 \footcnt=0
 % \noindent se casto hodi, tak na nej mame zkratku
 \let\>=\noindent
 
-% Sazba algoritmu:
-%      \algo
+%%% Sazba algoritmu %%%
+
+%      \algon{jmeno algoritmu}
 %      \algin popis vstupu
 %      \:krok
 %      \:krok
 %      \::vnoreny krok
-%      \algout pop
+%      \algout popis vystupu
 %      \endalgo
 
-\def\algo{
-\begingroup
+\def\typedalgo#1#2{
 \vskip\preitemizeskip
+\begingroup
 \let\:=\algoitem
 \parskip=1pt plus 1pt minus 0.3pt
 \rightskip=2em
 \itemcount=0
+{\bo #1\/} \alg{#2}%
 }
+\def\algo#1{\typedalgo{Algoritmus}{#1}}
+\def\proc#1{\typedalgo{Procedura}{#1}}
 \def\endalgo{\vskip\postitemizeskip\endgroup}
+\let\endproc=\endalgo
 \def\algopar{\par
 \parindent=2em
 \hangindent=4em
 \hangafter=1
 \leavevmode
 }
-\def\algoitem{\algopar\advance\itemcount by 1
+\def\algoitem{
+\ifnum\itemcount=0\smallskip\fi
+\algopar\advance\itemcount by 1
 \hbox to 2em{\hss \the\itemcount. }%
 \futurelet\next\algoitemh}
 \def\algoitemh{\ifx\next:\let\next=\algohang\else\let\next=\relax\fi\next}
 \def\algohang:{\advance\hangindent by 2em \hskip 2em\futurelet\next\algoitemh}
-\def\algin{\:{\I Vstup:} }
-\def\algout{\:{\I Výstup:} }
+\def\algin{\par{\it Vstup:\/} }
+\def\algout{\par\smallskip{\it Výstup:\/} }
+
+% Jmeno algoritmu v textu nebo ve formuli
+\def\alg#1{\hbox{\csc #1}}
+
+%%% Konstrukce pouzivane v algoritmech %%%
 
 % Priraditko
 \def\={\leftarrow}
 
-% Komentar v programu
+% Komentar
 \def\cmt#1{~~{\sl (#1)}}
 
 % Nekolikapismenkova promenna (mozno pouzit v textovem i math modu)
 }
 
 \footline={\hfil {\tenrm\the\count0}\hfil \llap{\sevenrm\currentversion}}
+
+%%% Cviceni %%%
+
+\newcount\excount
+
+\def\exercises{\medskip
+\begingroup
+\h{Cvièení}
+\nobreak
+\excount=0
+\advance\leftskip by 1.5em
+\parindent=0pt
+}
+
+\def\endexercises{\endgroup}
+
+\long\def\exwith#1#2{\par
+\advance\excount by 1
+\>\llap{\hbox to 1.5em{\the\excount\rlap{#1}.\hfil}}%
+#2}
+
+% Cviceni obycejne a tezsi
+\def\ex{\exwith{}}
+\def\exx{\exwith{*}}
+\def\exxx{\exwith{*\kern-0.1em*}}
+
+% Napoveda, pise se pod cviceni, ale casem se bude sama sazet na jinem miste knizky
+\long\def\hint#1{\par
+\>\em{Hint:} #1}
+
+% Reseni cviceni, pise pod cviceni (a pripadne pod \hint)
+\long\def\solution#1{\par
+\>\em{Øe¹ení:} #1}
+
+%%% Odkazy na kapitoly a jine objekty %%%
+
+% Poridime si soubor, do ktereho budeme zapisovat identifikatory
+\newwrite\ids
+\def\writeid#1#2{\immediate\write\ids{\string\def\expandafter\string\csname id#1\endcsname{#2}}}
+
+\immediate\openin\ids=ids.aux
+\ifeof\ids
+\else
+\input ids.aux
+\fi
+\immediate\closein\ids
+\immediate\openout\ids=ids.aux
+
+\def\ref#1{\expandafter\ifx\csname id#1\endcsname\relax
+{\bo ??}%
+\immediate\write16{*** Warning: Reference #1 undefined ***}%
+\else
+\csname id#1\endcsname
+\fi
+}