169 lines
5.2 KiB
TeX
169 lines
5.2 KiB
TeX
\expandafter\ifx\csname classoptions\endcsname\relax
|
|
\def\classoptions{}
|
|
\fi
|
|
\documentclass[10pt,fykos,\classoptions]{fksempty}
|
|
|
|
\usepackage{xstring}
|
|
\usepackage{fp}
|
|
\usepackage{pst-barcode}
|
|
|
|
\geometry{ignoreheadfoot,
|
|
a4paper,
|
|
hmargin=0.7cm,
|
|
tmargin=0.20cm,
|
|
bmargin=0.0cm,
|
|
headsep=0.0cm}
|
|
|
|
\usepackage[fyziklani2]{fkslegacyloader}
|
|
|
|
\problemsdir{./problems}
|
|
|
|
% this class doesn't support those, but we use same common
|
|
\newcommand{\leftheader}[1]{\relax}
|
|
\newcommand{\rightheader}[1]{\relax}
|
|
\input{common.tex}
|
|
|
|
\input{naboj_team.tex}
|
|
|
|
% needed to use before \barcode or \qrcode
|
|
% produces 9 digit code according to https://en.wikipedia.org/wiki/Routing_transit_number#Check_digit
|
|
\newcommand{\barcodedef}[1]{%
|
|
\def\probnumfull{\ifnum\theproblem<10 0\fi\theproblem}%
|
|
\def\teamnumfull{\ifnum#1<100000 0\fi\ifnum#1<10000 0\fi\ifnum#1<1000 0\fi\ifnum#1<100 0\fi\ifnum#1<10 0\fi#1}%
|
|
\StrChar{\teamnumfull}{1}[\inpA]%1
|
|
\StrChar{\teamnumfull}{2}[\inpB]%2
|
|
\StrChar{\teamnumfull}{3}[\inpC]%3
|
|
\StrChar{\teamnumfull}{4}[\inpD]%4
|
|
\StrChar{\teamnumfull}{5}[\inpE]%5
|
|
\StrChar{\teamnumfull}{6}[\inpF]%6
|
|
\StrChar{\problemnum{}{problem}}{1}[\inpGtmp]%7
|
|
\StrChar{\problemnum{}{problem}}{2}[\inpHtmp]%8
|
|
\def\inpG{\intcalcSub{\expandafter`\inpGtmp}{`A}}%
|
|
\def\inpH{\intcalcSub{\expandafter`\inpHtmp}{`A}}%
|
|
\FPeval{\result}{%
|
|
round(%
|
|
7*(\inpA+\inpD+\inpG) + %
|
|
3*(\inpB+\inpE+\inpH) + %
|
|
9*(\inpC+\inpF ) %
|
|
,0)%
|
|
}%
|
|
\FPeval{\finalresult}{round(\result-trunc(\result/10,0)*10,0)}%
|
|
}
|
|
|
|
\newcommand{\barcode}{\bf\tt\LARGE%
|
|
% sazba
|
|
{\small\inpA\inpB}\inpC\inpD\inpE\inpF\problemnum{}{problem}\finalresult%
|
|
}
|
|
|
|
\newcommand{\qrcode}{%
|
|
\begin{pspicture}(1in,1in)%
|
|
%\psbarcode{https://db.fykos.cz/fyziklani116/submit/entry/000683AA3}{}{qrcode}%
|
|
\psbarcode{https://db.fykos.cz/fyziklani\eventid/submit/entry/\inpA\inpB\inpC\inpD\inpE\inpF\problemnum{}{problem}\finalresult}{}{qrcode}%
|
|
\end{pspicture}%
|
|
}
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
% Setting problems per page
|
|
% here set appropriate height
|
|
%
|
|
% Parameters of geometry may be modified,
|
|
% (Note they're fine tuned to vertically center content
|
|
% (which should be done in a more generic way, however.))
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
\newcommand\problemtaskbox{%
|
|
\setcounter{figure}{0}
|
|
\vspace{-2mm}\par% !!MAGIC!!
|
|
\noindent\begin{minipage}[t][52mm]{\textwidth}
|
|
\centerline{\textbf{Tým \teamid{\theteamno}} {\footnotesize (\teamname{\theteamno})}}
|
|
\problemtask\par
|
|
\end{minipage}
|
|
%begin barcode
|
|
% 59.5mm !!MAGIC!!
|
|
% 5mm !!MAGIC!!
|
|
%\barcodedef{\teamid{\theteamno}}
|
|
%\vspace{-\baselineskip}\raisebox{0pt}[0pt][0pt]{\hspace{0.7\textwidth}\raisebox{59.5mm}{\hfill\barcode\hfill}}%
|
|
%\par\noindent%
|
|
%\vspace{-\baselineskip}\raisebox{0pt}[0pt][0pt]{\raisebox{5mm}{\qrcode}}%
|
|
%\par%
|
|
%end barcode
|
|
\noindent\makebox[\linewidth]{\rule{\paperwidth}{0.5pt}}
|
|
}
|
|
|
|
|
|
% here should be correct number of problems
|
|
\begin{document}
|
|
\newcounter{teamscount}\setcounter{teamscount}{\teamscount}% pocet tymu
|
|
\newcounter{teamno}\setcounter{teamno}{0}% id teamu
|
|
\newcounter{problemno}% poradi problemu
|
|
\newcounter{problemskip}% poradi problemu
|
|
\newcounter{pagecount}\setcounter{pagecount}{0}% pocet stranek
|
|
\newcounter{pageno}% id stránky
|
|
\newcounter{pagebl}% id bloku
|
|
\newcounter{pagebllgt}% lgt bloku
|
|
|
|
% jiny celk. pocet uloh
|
|
\opt{obalka}{
|
|
\setcounter{problemscount}{\theproblemscountenv}
|
|
}
|
|
\opt{balicek}{
|
|
\setcounter{problem}{\theproblemscountenv}
|
|
}
|
|
% vypocet poctu stranek
|
|
\loop{
|
|
\addtocounter{problem}{5}% 4 ulohy na str
|
|
\stepcounter{pagecount}
|
|
}\ifnum\theproblem<\theproblemscount
|
|
\repeat
|
|
|
|
% sazba pres tymy
|
|
\loop{
|
|
\stepcounter{teamno}
|
|
% counter init
|
|
\setcounter{problemno}{0}
|
|
\setcounter{problemskip}{0}
|
|
\setcounter{pageno}{0}
|
|
\setcounter{pagebl}{0}
|
|
\setcounter{pagebllgt}{0}
|
|
\opt{balicek}{
|
|
% \setcounter{problem}{\theproblemscountenv}
|
|
\setcounter{problemskip}{\theproblemscountenv}
|
|
}
|
|
% neschopna rezacka (nutno vice bloku)
|
|
\ifnum\thepagecount<\themaxcutterpaper%
|
|
\setcounter{pagebllgt}{\thepagecount}%
|
|
\else%
|
|
\setcounter{pagebllgt}{\themaxcutterpaper}%
|
|
\fi
|
|
% sazba pres stranky
|
|
\loop{
|
|
\newpage\noindent\makebox[\linewidth]{\rule{\paperwidth}{0.5pt}}\nopagebreak[4]
|
|
\setcounter {problem}{\thepageno}\addtocounter{problem}{\theproblemskip}
|
|
% PR:\theproblem INC:\thepagebllgt
|
|
% sazba stránky
|
|
\setcounter{problemno}{0}
|
|
\loop{
|
|
\ifnum\theproblem<\theproblemscount\problemtaskbox\addtocounter{problem}{-1}\fi
|
|
\addtocounter{problem}{\thepagebllgt}
|
|
\stepcounter{problemno}
|
|
}\ifnum\theproblemno<5\repeat% uloh na stranku
|
|
% posledni blok musi byt kratsi
|
|
\stepcounter{pageno}
|
|
\ifnum\themaxcutterpaper=\thepagebllgt
|
|
\pgfmathparse{Mod(\thepageno,\thepagebllgt)==0?1:0}\ifnum\pgfmathresult>0
|
|
% 3*\thepagebllgt UGLY
|
|
\addtocounter{problemskip}{\thepagebllgt}
|
|
\addtocounter{problemskip}{\thepagebllgt}
|
|
\addtocounter{problemskip}{\thepagebllgt}
|
|
\pgfmathparse{(\thepagecount-\thepageno)<\thepagebllgt?1:0}\ifnum\pgfmathresult>0
|
|
\setcounter{pagebllgt}{\thepagecount}
|
|
\addtocounter{pagebllgt}{-\thepageno}
|
|
\fi
|
|
\fi
|
|
\fi
|
|
}\ifnum\thepageno<\thepagecount\repeat
|
|
% zbytek puvodni sazby
|
|
\clearpage
|
|
}\ifnum\theteamno<\theteamscount\repeat
|
|
|
|
\end{document}
|