Parser of berki style problems and generator of latex file
Samo Penic
2018-11-03 c9c8d5997209b1f00b25a6bc2b7fa2b3fb186640
commit | author | age
cc53f3 1 \usepackage{marginnote}
SP 2 \usepackage{qrcode}
3 \newcommand{\marker}[1]{\raisebox{0.3ex}{\marginnote{ #1}}}
4 %\newcommand{\marker}[1]{\normalmarginpar\marginpar{\hskip0.0cm\raisebox{0ex}{#1}}}
5 %\usepackage{titleps}
6 \usepackage{amsmath}%
7 \usepackage{MnSymbol}%
8 \usepackage{wasysym}%
9 \usepackage{a4wide}
10 \usepackage[slovene]{babel}
11 \usepackage[utf8]{inputenc}
12
13
14 \usepackage{upgreek}  % Za pokoncne grske crke
15 \usepackage{graphicx}
16 \usepackage{rotating}
17 %\usepackage{a4wide,everyshi,keyval}
18 %\usepackage{textcomp}
19 %\usepackage{calc}
20 %\usepackage{refcount}
21 %\usepackage{xstring}
22 %\usepackage{ragged2e}
23 \usepackage{tikz}
24 \usepackage{ifthen}
25 \usetikzlibrary{calc}
26
27 %ADD PACKAGES HERE
28
29
30 \setlength{\topmargin}{0mm} %-17mm
31 \setlength{\hoffset}{0mm}
32 \setlength{\voffset}{-22mm}
33 \setlength{\headheight}{14mm}
34 \setlength{\headsep}{20mm}
35 \setlength{\footskip}{8mm}
36 \setlength{\oddsidemargin}{-15mm}
37 \setlength{\evensidemargin}{-15mm}
38 \setlength{\marginparwidth}{5mm}
39 \setlength{\textwidth}{190mm}
40 \setlength{\textheight}{232mm}
41
42 %some useful counters
43 \newcounter{problemsetid}
44 \newcounter{pageinproblemset}
45 \newcounter{firstinproblemset}
46 \newcounter{subproblem}
47
48
49 %We are not using newpagestyle from titleps, but we define it here:
50 \newcommand{\newpagestyle}[3]{%
51 \expandafter\newcommand\csname ps@#1\endcsname{\def\@oddhead{#2}\let\@evenhead\@oddhead
52 \def\@oddfoot{#3}\let\@evenfoot\@oddfoot}}
53
54 %this creates the qr code and a human name for the header (in first and in all subsequent pages)
55 \newcommand{\idlinewithname}[9]{\vskip3mm
56 \begin{minipage}[c]{0.09\textwidth} %place for QR Code
57 \qrcode[height=1.5cm]{#1,#2,#3,#4,#5}
58 \end{minipage}%
59 \begin{minipage}[c]{0.91\textwidth} %place for name and other info
60 %\settowidth{\namelength}{#6}
61 \hfill{\scriptsize\rm Študent/ka:\hskip3ex} \fbox{\parbox[c][7mm]{50mm}{\vspace{0mm}\hfil\Large{#6}\hfil\\\vspace{0mm}\hfil\small{\studentid}\hfil}}
62 \vskip1.5mm{\scriptsize\rm #7 }
63 \vskip-2mm\rule{\textwidth}{1pt}
64 \end{minipage}
65 \vskip2mm
66 \parbox{\textwidth}{
67 {\bfseries\large #8}\hfill #9}
68 }
69
70
71 %footer
72 \newcommand{\makefooter}[1]{
73     \vskip1mm\rule{\textwidth}{1pt}{
74         \parbox{\textwidth}{
75             \parbox{\textwidth}{\rm #1}\vskip3mm
76         \parbox{\textwidth}{\scriptsize\rm \productname~{\the\year}.~Razvijalci=$\left\{\parbox{9.5mm}{{\tiny{Fo\v{s}nari\v{c}}\\ \vskip-2.5mm{Peni\v{c}}\\ \vskip-3.3mm{Berkopec}}}\right.$\text{ver.}~\productversion%    
77         %\hfill\if\thelastintest1{\rm $\star$ $\longleftrightarrow$ $\star$ }\else\fi
78         %\parbox{\textwidth}
79     \setcounter{pageinproblemset}{-\value{firstinproblemset}}
80     \addtocounter{pageinproblemset}{\value{page}}
81     \addtocounter{pageinproblemset}{1}
82     \hfill Podpis: \rule{40mm}{0.2pt}\hskip1cm Stran \thepageinproblemset, pola \theproblemsetid, rok \examid. }
83         }
84     }
85 }
86
87
88
89
90 %a style for first page. Header (see above) and the name of the faculty and the exam.
91 \newpagestyle{firstpagewithname}{%
92 %upper markers
93 \parbox{\textwidth}{
94 \setcounter{firstinproblemset}{\thepage}
95 \stepcounter{problemsetid}
96 \parbox{\textwidth}{\hskip1mm\parbox[t]{48mm}{$\blacksquare$}\parbox[t]{48mm}{$\blacksquare$}\parbox[t]{48mm}{$\blacksquare$}\parbox[t]{48mm}{$\blacksquare$}}
97 %the header of the exam
98
99 \idlinewithname{\facultyid}{\examid}{\theproblemsetid}{1}{\studentid}{\studentname}{\facultyname}{\examtitle}{\examdate}
100 }
101 }{\parbox{\textwidth}{\makefooter{\footertext}}}
102
103 \newpagestyle{otherswithname}{%
104 %upper markers
105 \parbox{\textwidth}{
106 \parbox{\textwidth}{\hskip1mm\parbox[t]{48mm}{$\blacksquare$}\parbox[t]{48mm}{$\blacksquare$}\parbox[t]{48mm}{$\blacksquare$}\parbox[t]{48mm}{$\blacksquare$}}
107 %the header of the exam
108 %
109 \setcounter{pageinproblemset}{-\value{firstinproblemset}}
110 \addtocounter{pageinproblemset}{\value{page}}
111 \addtocounter{pageinproblemset}{1}
112
113 \idlinewithname{\facultyid}{\examid}{\theproblemsetid}{\thepageinproblemset}{\studentid}{\studentname}{\facultyname}{\ }{\ }
114 }
115 }{\parbox{\textwidth}{\makefooter{\footertext}}}
116
117
118 %OLD STYLE PAGES
119 %this creates the qr code and SID for the header (in first and in all subsequent pages)
120 %
121 %
122
123 \def\xloop<#1#2>{%
124   \ifx\relax#1
125     \else
126       \sevensegnum{#1}\hskip1mm\xloop<#2>% here you can set the distance between the numbers
127   \fi}  
128 \def\markletters#1{\xloop<#1\relax>}
129
130 \newcommand{\sid}[1]{
131 \markletters{#1}
132 }
133
134 \newcommand{\idlinewithsid}[8][]{\vskip3mm
135 \begin{minipage}[c]{0.09\textwidth} %place for QR Code
136 \qrcode[height=1.5cm]{#2,#3,#4,#5}
137 \end{minipage}%
138 \begin{minipage}[c]{0.91\textwidth} %place for name and other info
139 \ifx&#1& 
140 \phantom{
141 \hfill{\scriptsize\rm Ime in priimek:\hskip3ex \fbox{\parbox[c][7mm]{50mm}{\vspace{0mm}\hspace{50mm}}}\hfill\rm Vpisna \v{s}t.:\hskip3ex\hskip0mm\raisebox{-4mm}{#1}}
142 }
143 \else
144 \hfill{\scriptsize\rm Ime in priimek:\hskip3ex \fbox{\parbox[c][7mm]{50mm}{\vspace{0mm}\hspace{50mm}}}\hfill\rm Vpisna \v{s}t.:\hskip3ex\hskip0mm\raisebox{-4mm}{#1}}
145 \fi
146 \vskip1.5mm{\scriptsize\rm #6 }
147 \vskip-2mm\rule{\textwidth}{1pt}
148 \end{minipage}
149 \vskip2mm
150 \parbox{\textwidth}{
151 {\bfseries\large #7}\hfill #8}
152 }
153
154 \newpagestyle{firstpagewithsid}{%
155 %upper markers
156 \parbox{\textwidth}{
157 \setcounter{firstinproblemset}{\thepage}
158 \stepcounter{problemsetid}
159 \parbox{\textwidth}{\hskip1mm\parbox[t]{48mm}{$\blacksquare$}\parbox[t]{48mm}{$\blacksquare$}\parbox[t]{48mm}{$\blacksquare$}\parbox[t]{48mm}{$\blacksquare$}}
160 %the header of the exam
161
162 \idlinewithsid[\sidprefill]{\facultyid}{\examid}{\theproblemsetid}{1}{\facultyname}{\examtitle}{\examdate}
163 }
164 }{\parbox{\textwidth}{\makefooter{\footertext}}}
165
166 \newpagestyle{otherswithsid}{%
167 %upper markers
168 \parbox{\textwidth}{
169 \parbox{\textwidth}{\hskip1mm\parbox[t]{48mm}{$\blacksquare$}\parbox[t]{48mm}{$\blacksquare$}\parbox[t]{48mm}{$\blacksquare$}\parbox[t]{48mm}{$\blacksquare$}}
170 %the header of the exam
171 %
172 \setcounter{pageinproblemset}{-\value{firstinproblemset}}
173 \addtocounter{pageinproblemset}{\value{page}}
174 \addtocounter{pageinproblemset}{1}
175
176 \idlinewithsid{\facultyid}{\examid}{\theproblemsetid}{\thepageinproblemset}{\facultyname}{\ }{\ }
177 }
178 }{\parbox{\textwidth}{\makefooter{\footertext}}}
179 %
180 %
181 %
182 %%%%% END OLD STYLE
183
184
185 \newcommand{\problemtext}[3][]{%
186 \setcounter{subproblem}{0}%
187 \noindent{\hskip1mm\parbox[t]{4mm}{\bfseries\rightline{#2. }}}%
188 \noindent\parbox[t]{0.95\textwidth}{ #3  \ifx&#1& \else $\mathbf{[}$\textbf{#1}$\mathbf{]}$ \fi}%
189 }
190
191 \newcommand{\subproblemtext}[1]{%
192 \addtocounter{subproblem}{1}%
193 \parbox[t]{0.95\textwidth}{\alph{subproblem}) #1}%
194 }
195
196 \newcommand{\answersinline}[4]{\noindent%
197 \parbox[t][][t]{180mm}{
198 \makebox[48mm][l]{\textcircled{\scriptsize{\rm{A}}}\hskip2pt\begin{minipage}[t][][t]{42mm}{{\small\begin{flushleft} #1\end{flushleft}}}\end{minipage}}%
993a25 199 \makebox[48mm][l]{\textcircled{\scriptsize{\rm{B}}}\hskip2pt\begin{minipage}[t][][t]{42mm}{{\small\begin{flushleft} #2\end{flushleft}}}\end{minipage}}%
SP 200 \makebox[48mm][l]{\textcircled{\scriptsize{\rm{C}}}\hskip2pt\begin{minipage}[t][][t]{42mm}{{\small\begin{flushleft} #3\end{flushleft}}}\end{minipage}}%
201 \makebox[48mm][l]{\textcircled{\scriptsize{\rm{D}}}\hskip2pt\begin{minipage}[t][][t]{42mm}{{\small\begin{flushleft} #4\end{flushleft}}}\end{minipage}}%
cc53f3 202 \marker{$\blacksquare$}
SP 203 }
204 }
205
206 %Answer multiline template
207 \newcommand{\answersmultiline}[4]{\noindent%
208 \parbox[t][][t]{180mm}{
209 \marker{$\blacktriangledown$}\textcircled{\scriptsize{\rm{A}}}\hskip4pt{\parbox[t][][t]{0.95\textwidth}{\small #1}}%
210 \vskip\multilinesep
211 \marker{$\blacktriangle$}\textcircled{\scriptsize{\rm{B}}}\hskip4pt{\parbox[t][][t]{0.95\textwidth}{\small #2}}%
212 \vskip\multilinesep
213 \marker{$\blacktriangle$}\textcircled{\scriptsize{\rm{C}}}\hskip4pt{\parbox[t][][t]{0.95\textwidth}{\small #3}}%
214 \vskip\multilinesep
215 \marker{$\blacktriangle$}\textcircled{\scriptsize{\rm{D}}}\hskip4pt{\parbox[t][][t]{0.95\textwidth}{\small #4}}%
216 }
217 }
218
219
220
221
222 %%7-segment display
223 %from: http://www.texample.net/tikz/examples/segment-display/
224 \pgfkeys{
225   /sevenseg/.is family, /sevenseg,
226   slant/.estore in      = \sevensegSlant,     % vertical slant in degrees
227   size/.estore in       = \sevensegSize,      % length of a segment
228   shrink/.estore in     = \sevensegShrink,    % avoids overlapping of segments
229   line width/.estore in = \sevensegLinewidth, % thickness of the segments
230   line cap/.estore in   = \sevensegLinecap,   % end cap style rect, round, butt
231   oncolor/.estore in    = \sevensegOncolor,   % color of an ON segment
232   offcolor/.estore in   = \sevensegOffcolor,  % color of an OFF segment
233 }
234
235 \pgfkeys{
236   /sevenseg,
237   default/.style = {slant = 0, size = 0.4cm, shrink = 0.1, 
238                     line width = 0.9mm, line cap = round, 
239                     oncolor = black, offcolor = gray!10}
240 }
241
242 %===============================================
243 %                     a b c d e f g - segment values
244 % \sevenseg[options]{{1,1,1,1,1,1,0,}}
245 %
246 \newcommand{\sevenseg}[2][]% options values
247 {%
248 \pgfkeys{/sevenseg, default, #1}%
249 \def\sevensegarray{#2}%
250   \begin{tikzpicture}%
251     % first define the position of the 6 corner points
252     \path (0,0) ++(0,0)                             coordinate (P1);
253     \path (0,0) ++(\sevensegSize,0)                 coordinate (P2);
254     \path (0,0) ++(90-\sevensegSlant:\sevensegSize) coordinate (P3);
255     \path (P2)  ++(90-\sevensegSlant:\sevensegSize) coordinate (P4);
256     \path (P3)  ++(90-\sevensegSlant:\sevensegSize) coordinate (P5);
257     \path (P4)  ++(90-\sevensegSlant:\sevensegSize) coordinate (P6);
258     % then step through the 1/0 values in the segment array
259     \foreach \i in {0,...,6}%
260     {
261       \pgfmathparse{\sevensegarray[\i]}
262       \ifthenelse{\equal{\pgfmathresult}{1}}%
263         {\let\mycolor=\sevensegOncolor}%  segment is on
264         {\let\mycolor=\sevensegOffcolor}% segment is off
265       \tikzstyle{segstyle} = [draw=\mycolor, line width = \sevensegLinewidth,
266                               line cap = \sevensegLinecap]
267       %-----------------------
268       \ifthenelse{\equal{\i}{0}}{\path[segstyle] 
269         (${1-\sevensegShrink}*(P5)+\sevensegShrink*(P6)$) 
270         -- ($\sevensegShrink*(P5)+{1-\sevensegShrink}*(P6)$);}{} % a
271       \ifthenelse{\equal{\i}{1}}{\path[segstyle] 
272         (${1-\sevensegShrink}*(P6)+\sevensegShrink*(P4)$) 
273         -- ($\sevensegShrink*(P6)+{1-\sevensegShrink}*(P4)$);}{} % b
274       \ifthenelse{\equal{\i}{2}}{\path[segstyle] 
275         (${1-\sevensegShrink}*(P4)+\sevensegShrink*(P2)$) 
276         -- ($\sevensegShrink*(P4)+{1-\sevensegShrink}*(P2)$);}{} % c
277       \ifthenelse{\equal{\i}{3}}{\path[segstyle] 
278         (${1-\sevensegShrink}*(P1)+\sevensegShrink*(P2)$) 
279         -- ($\sevensegShrink*(P1)+{1-\sevensegShrink}*(P2)$);}{} % d
280       \ifthenelse{\equal{\i}{4}}{\path[segstyle] 
281         (${1-\sevensegShrink}*(P1)+\sevensegShrink*(P3)$) 
282         -- ($\sevensegShrink*(P1)+{1-\sevensegShrink}*(P3)$);}{} % e
283       \ifthenelse{\equal{\i}{5}}{\path[segstyle] 
284         (${1-\sevensegShrink}*(P3)+\sevensegShrink*(P5)$) 
285         -- ($\sevensegShrink*(P3)+{1-\sevensegShrink}*(P5)$);}{} % f
286       \ifthenelse{\equal{\i}{6}}{\path[segstyle] 
287         (${1-\sevensegShrink}*(P3)+\sevensegShrink*(P4)$) 
288         -- ($\sevensegShrink*(P3)+{1-\sevensegShrink}*(P4)$);}{} % g
289     }
290   \end{tikzpicture}%
291 }
292
293 \newcommand{\sevensegnum}[2][]% sample characvters
294 {%                                          
295   \ifthenelse{\equal{#2}{0}}{\sevenseg[#1]{{1,1,1,1,1,1,0,}}}{%
296   \ifthenelse{\equal{#2}{1}}{\sevenseg[#1]{{0,1,1,0,0,0,0,}}}{%
297   \ifthenelse{\equal{#2}{2}}{\sevenseg[#1]{{1,1,0,1,1,0,1,}}}{%
298   \ifthenelse{\equal{#2}{3}}{\sevenseg[#1]{{1,1,1,1,0,0,1,}}}{%
299   \ifthenelse{\equal{#2}{4}}{\sevenseg[#1]{{0,1,1,0,0,1,1,}}}{%
300   \ifthenelse{\equal{#2}{5}}{\sevenseg[#1]{{1,0,1,1,0,1,1,}}}{%
301   \ifthenelse{\equal{#2}{6}}{\sevenseg[#1]{{1,0,1,1,1,1,1,}}}{%
302   \ifthenelse{\equal{#2}{7}}{\sevenseg[#1]{{1,1,1,0,0,0,0,}}}{%
303   \ifthenelse{\equal{#2}{8}}{\sevenseg[#1]{{1,1,1,1,1,1,1,}}}{%
304   \ifthenelse{\equal{#2}{9}}{\sevenseg[#1]{{1,1,1,1,0,1,1,}}}{%
305   \ifthenelse{\equal{#2}{A}}{\sevenseg[#1]{{1,1,1,0,1,1,1,}}}{%
306   \ifthenelse{\equal{#2}{B}}{\sevenseg[#1]{{0,0,1,1,1,1,1,}}}{%
307   \ifthenelse{\equal{#2}{C}}{\sevenseg[#1]{{0,0,0,1,1,0,1,}}}{%
308   \ifthenelse{\equal{#2}{D}}{\sevenseg[#1]{{0,1,1,1,1,0,1,}}}{%
309   \ifthenelse{\equal{#2}{E}}{\sevenseg[#1]{{1,0,0,1,1,1,1,}}}{%
310   \ifthenelse{\equal{#2}{F}}{\sevenseg[#1]{{1,0,0,0,1,1,1,}}}{%
311   \ifthenelse{\equal{#2}{x}}{\sevenseg[#1]{{0,0,0,0,0,0,0,}}}{%
312   {\sevenseg[#1]{{0,0,0,0,0,0,0,}}}}}}}}}}}}}}}}}}}}%
313 }
314