%
% styl do przygotowania zestaw�w pyta� egzaminacyjnych
% wersja bardzo robocza
% copyleft by Jan Je�owicki, Wroc�aw, czerwiec 2005
% dozwolone u�ywanie w dowolnym celu i bez �adnych ogranicze�
%
\ProvidesPackage{zestawy}[2005/12/01 wersja bardzo robocza]%
\typeout{`zestawy': wersja bardzo robocza}
%
\DeclareOption{list}{\def\@TrybSkladu{\@TrybLista}}
\DeclareOption{group}{\def\@TrybSkladu{\@TrybZestawy}}
\DeclareOption{nonames}{\def\zestawName{}\def\zadanieName{}}
\DeclareOption{date}{\def\date#1{\gdef\@date{#1}\def\@DATE{#1}}\def\@DATE{\today}}
\DeclareOption{random}{\setcounter{@@losowanko}{1}\def\@@NrPytania{\number\@@nrpytania}\def\@@LosujPytanie#1{\setrannum{\@@nrpytania}{1}{\value{@@LiczbaPytan}}}}
\DeclareOption{permute}{\setcounter{@@losowanko}{2}\def\@@NrPytania{\number\@@nrpytania}\def\@@LosujPytanie#1{\setrannum{\@@nrpytania}{1}{\value{@@LiczbaPytan}}}}
\DeclareOption{help}{%
\typeout{`zestawy' -- opcje -------}
\typeout{  `list'   : wydruk pyta\'n rozdzia\l\ po rozdziale wg temat\'ow}
\typeout{  `group'  : wydruk pyta\'n pogrupowanych w zestawy}
\typeout{  `nonames': wy\l\k acza nazywanie element\'ow}
\typeout{  `date'   : drukuje w nag\l\'owku dat\k e}
\typeout{  `random' : wybiera losowo pytania z poszczeg\'olnych grup}
\typeout{  `permute': miesza losowo pytania z poszczeg\'olnych grup}
\typeout{  `help'   : drukuje ten opis}
\typeout{--------------------------}
}
\newcounter{@@losowanko}%
\newcount\@@nrpytania%
%
%% redefinicja nag��wk�w, w��cznie z uk�adem typograficznym
%
\def\zestawName{Zestaw}
\def\zadanieName{Zadanie}

\def\@TrybZestawy{1}
\def\@TrybLista{0}
\def\@DATE{}
\def\@@spacja{\kern0.2em}
\def\@@Spacja{\kern0.6em}

\ExecuteOptions{list}
\ProcessOptions
\input{random.tex}%

\newcounter{zadanie}[section]\def\thezadanie{@\Roman{section}@@\roman{zadanie}}
\newcounter{@@zadanie}
\newcounter{@@ZADANIA}
\newcounter{@@ZESTAWY}
\newcounter{@@@ZESTAWY}
\newcounter{@@LiczbaPytan}
\def\ZadanWZestawie#1{\setcounter{@@ZADANIA}{#1}}

\def\ZESTAWY#1{%
\setcounter{@@ZESTAWY}{#1}%
\setcounter{@@LiczbaPytan}{#1}%
\setcounter{@@@ZESTAWY}{0}\setcounter{zadanie}{0}%
\loop\ifnum\value{@@@ZESTAWY}<\value{@@ZESTAWY}\addtocounter{@@@ZESTAWY}{1}\ZESTAW\repeat
}%

\ifnum\@TrybSkladu=\@TrybLista
\def\thezadanie{\arabic{section}.\arabic{zadanie}}%
\def\ZADANIE#1{\addtocounter{zadanie}{1}\TYTUL{\zadanieName\@@spacja\makebox[2em]{\thezadanie.\hfill}} \TRESC{#1}\par}%
\def\ZESTAW{}%
\else
\def\ZADANIE#1{\addtocounter{zadanie}{1}%
\expandafter\def\csname @Zadanie\thezadanie\endcsname {\TRESC{#1}}}
\newlength{\zestawheight}\setlength{\zestawheight}{0.3\textheight}
\def\ZESTAW{\parbox[t][\zestawheight]{\textwidth}{\parskip0pt\addtocounter{zadanie}{1}%
%
%% TODO:
%% * wykluczy� powt�rzenia losowanych pyta�
%% * uporz�dkowa� konwencje nazw
%
\TYTUL{\zestawName\@@spacja\Roman{zadanie}.}\hfill\@DATE\\
\OPIS{\@@opisZestawu}
\setcounter{@@zadanie}{0}%
\loop\ifnum\value{@@zadanie}<\value{@@ZADANIA}%
\addtocounter{@@zadanie}{1}%
\ifnum\value{@@losowanko}=0\@@nrpytania=\value{zadanie}%
\else\@@LosujPytanie{}%
%%%{ (\number\@@nrpytania)}% %%% odkomentuj je�eli chcesz kontrolny wydruk wylosowanego numeru
\fi%
%
\TYTUL{\zadanieName\@@spacja\arabic{@@zadanie}.}\@@Spacja\csname @Zadanie@\Roman{@@zadanie}@@\romannumeral\@@nrpytania\endcsname\par\repeat
}\par
}
\fi

\def\@@opisZestawu{}
\def\OpisZestawu#1{\def\@@opisZestawu{#1}}

\def\TRESC#1{#1}
\def\TYTUL{\textbf}
\def\OPIS#1{{\small #1}}
\setcounter{@@ZADANIA}{1}
\setcounter{@@ZESTAWY}{0}
\ifnum\value{@@losowanko}>0\nextrandom\else\fi
%
\endinput%
%