summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2013-04-25 22:35:45 +0000
committerKarl Berry <karl@freefriends.org>2013-04-25 22:35:45 +0000
commit050e4ce3134f192d97181d2bb1d8fb3cacce2a0b (patch)
treedaa6d2fbd7e8f00e54daa6cf31cddbd6e9986340 /Master/texmf-dist/tex/latex
parente694cedf504de9df6982e24972ec473d2ddcf5e9 (diff)
esami (25apr13)
git-svn-id: svn://tug.org/texlive/trunk@30109 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex')
-rw-r--r--Master/texmf-dist/tex/latex/esami/esami.sty1823
1 files changed, 1823 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/esami/esami.sty b/Master/texmf-dist/tex/latex/esami/esami.sty
new file mode 100644
index 00000000000..c9dd1e51bc7
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/esami/esami.sty
@@ -0,0 +1,1823 @@
+%%%
+%% This is file `esami.sty',
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% esami.sty package, 2013-03-08 %%
+%% Copyright (C) 2008-2013 G. Messineo e S. Vassallo %%
+%% %%
+%% This program can be redistributed and/or modified %%
+%% under the terms of the LaTeX Project Public License %%
+%% Distributed from CTAN archives in directory %%
+%% macros/latex/base/lppl.txt; either version 1 of the %%
+%% License, or (at your option) any later version. %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%% CHANGELOG %%%%%%%
+% Version 1.0
+% First release to CTAN
+
+\NeedsTeXFormat{LaTeX2e} \ProvidesPackage{esami}
+ [2012/03/08 v1.0 An Exam Construction Package]
+
+% +=============================+
+% | THE OPTIONS |
+% +=============================+
+
+\newif\ifes@language \es@languagefalse
+\DeclareOption{italian}{\InputIfFileExists{es-\CurrentOption.lng}%
+ { \es@languagetrue \typeout{esami: Verr\`{a} usata la lingua italiana}}%
+ {\typeout{esami: Il file es-\CurrentOption.lng non esiste.}}}
+\DeclareOption{UKenglish}{\InputIfFileExists{es-\CurrentOption.lng}%
+ {\typeout{esami: English Language will be used} \es@languagetrue}%
+ {\typeout{esami: The file es-\CurrentOption.lng does not exists.}}}
+\DeclareOption{USenglish}{\InputIfFileExists{es-\CurrentOption.lng}%
+ {\typeout{esami: English Language will be used} \es@languagetrue}%
+ { \typeout{esami: The file es-\CurrentOption.lng does not exists.}}}
+\DeclareOption{english}{\InputIfFileExists{es-UK\CurrentOption.lng}%
+ { \typeout{esami: English Language will be used}\es@languagetrue}%
+ { \typeout{esami: The file es-\CurrentOption.lng does not exists.}}}
+\DeclareOption{french}{\InputIfFileExists{es-\CurrentOption.lng}%
+ { \typeout{esami: La langue fran\c{c}aise sera utilis\'{e}e}\es@languagetrue}
+ { \typeout{esami: The file es-\CurrentOption.lng does not exists.}}}
+\DeclareOption{spanish}{\InputIfFileExists{es-\CurrentOption.lng}%
+ { \typeout{esami:Se utilizar\'{a} el idioma espa\~{n}ol}\es@languagetrue}
+ { \typeout{esami: The file es-\CurrentOption.lng does not exists.}}}
+\DeclareOption{german}{\InputIfFileExists{es-\CurrentOption.lng}%
+ { \typeout{esami:Deutsch als Sprache soll angewandt werden}\es@languagetrue}
+ { \typeout{esami: The file es-\CurrentOption.lng does not exists.}}}
+\DeclareOption{greek}{\InputIfFileExists{es-\CurrentOption.lng}%
+ { \typeout{esami:Greek language will be used}\es@languagetrue}
+ { \typeout{esami: The file es-\CurrentOption.lng does not exists.}}}
+
+
+\newif\ifes@twocolumns
+\es@twocolumnsfalse
+\DeclareOption{twocolumns}{\es@twocolumnstrue}%%% for tests on 2 columns
+\DeclareOption{sansserif}{\renewcommand{\familydefault}{\sfdefault}}%%% sans serif font
+\DeclareOption{solutionsonly}{\es@solutionsonlytrue \es@solutionstrue}%%% only solutions (false by default)
+\newif\ifes@solutionsonly \es@solutionsonlyfalse
+\DeclareOption{allowrandomize}{\es@randomizeChoicestrue}%%% MCQ with shuffled answers (default)
+\DeclareOption{norandomize}{\es@randomizeChoicesfalse}%%% MCQ not shuffled
+\newif\ifes@randomizeChoices \es@randomizeChoicestrue
+\newif\ifes@fissa \es@fissatrue
+\newif\ifes@shuffleQuestions \es@shuffleQuestionstrue%%% the exercises are shuffled by default
+\DeclareOption{shuffle}{\es@fissatrue \es@shuffleQuestionstrue}
+\DeclareOption{shufflerandom}{\es@shuffleQuestionstrue \es@fissafalse}%% the exercises are randomly shuffled
+\DeclareOption{noshuffle}{\es@shuffleQuestionsfalse}
+\DeclareOption{fillb}{\es@fillintrue}%%% option to use if in tests there are fill-in questions
+\newif\ifes@fillin \es@fillinfalse
+\newif\ifes@pointsonright \es@pointsonrightfalse%%% the box with the points on the right side (from eqexam)
+\DeclareOption{pointsonright}{\es@pointsonrighttrue \AtEndOfPackage{\PointsOnRight}}
+\newif\ifes@solutions \es@solutionsfalse
+\DeclareOption{solutions}{\es@solutionstrue
+\AtEndDocument{\immediate\closeout\sols %
+\stringasol}
+}%%% for solutions
+\DeclareOption{nosolutions}{\es@solutionsfalse}%%% no solutions (default)
+\DeclareOption*{\InputIfFileExists{esami-\CurrentOption.cfg}{}%%% reads a configuration file
+ {\PackageError{esami}{\es@cfgerrormessageshort}
+ {\es@cfgerrormessagelong}
+ }}
+\newif\ifes@autopst \es@autopstfalse%%% Do I need auto-pst?
+\DeclareOption{autopstoff}{\es@autopstfalse}%%% autopstpdf inactive (default)
+\DeclareOption{autopston}{\es@autopsttrue }%%%% autopstpdf active
+\newif\ifes@prova \es@provafalse
+\DeclareOption{prova}{\es@solutionstrue \es@provatrue \es@randomizeChoicesfalse}%%% for the file "totale-versioni"
+\DeclareOption{correzione}{\es@correzionetrue \es@solutionsfalse}%%% to print all the exercises with solutions only
+\newif\ifes@correzione \es@correzionefalse
+\newif\ifes@param \es@paramfalse%%% to print the parametric version in "totale-versioni"
+\newif\ifes@test \es@testfalse%%% for tests
+%========================================================%
+% Parametric version %
+%========================================================%
+
+\newwrite\parametri
+\DeclareOption{param}{\es@paramtrue \AtBeginDocument{\newwrite\params
+ \renewcommand*{\selectallproblems}[1]{%%% the definition of \selectallproblem to print parametric version
+ \global\@probN=0\relax
+ \firstpasstrue
+ \setcounter{tmp@quest}{0}
+ \input{#1}
+ \firstpassfalse
+ \setcounter{tmp@quest}{0}
+ \input{#1}
+ \global\tmp@cnt=1\relax
+ \whiledo{\tmp@cnt < \@probN \TE@or \tmp@cnt = \@probN}{%
+ \immediate\openout\params=params%%% the file on which the parameters are written
+ \csname @prob@f\nome q\number\tmp@cnt\endcsname
+ \par\vspace{2mm}
+ \ifes@test
+ \immediate\closeout\params
+ \input{params} \fi%%% writes the parameters at the end of the exercise
+ \global\advance\tmp@cnt by 1\relax
+ }
+ }
+\renewcommand{\FPsv}[2][0]{(#2)}%%% \FPsv shows oparations
+\renewcommand{\FPval}[2]{\expandafter\def\csname#1\endcsname{(#2)}}
+\renewcommand{\simpsqrt}[2]{\sqrt[#1]{(#2)}}%%% \simpsqrt shows operations
+\renewcommand{\sempli}[2]{%%% all simplifications become \frac
+ \ifthenelse{\equal{#2}{1}}{(#1)}{\frac{#1}{#2}}}
+ \renewcommand{\semplix}[2]{%
+ \ifthenelse{\equal{#2}{1}}{(#1)}{\frac{#1}{#2}}}
+ \renewcommand{\sempliz}[2]{%
+ \ifthenelse{\equal{#2}{1}}{(#1)}{\frac{#1}{#2}}}
+ \renewcommand{\esempli}[2]{%
+ \ifthenelse{\equal{#2}{1}}{(#1)}{\frac{#1}{#2}}}
+ \renewcommandx{\FPsetpar}[5][1=\seme,5={}]{%%% the parameters are not assigned
+ \expandafter\def\csname#2\endcsname{#2}%%% in the parametric version, the parameter appears with its name and not with its value
+ %\expandafter\immediate\write\params{%%% write on a file
+ \immediate\write\params{%%% writes on a file
+ \string\textbf\string{\string\noindent\space \es@parametermessage{#2}{#3}{#4}
+ \space \ifx#5\@empty\else $#2\neq #5$.\fi\space \es@seedmessage{#1}
+ \string}\string\newline}}%
+ \immediate\closeout\params%
+ \PTsHook{\emph{(\esPTs\ \ifthenelse{\equal{\esPTs}{\detokenize{1}}}{\es@pointname}{\es@pointsname})} %
+ }
+}
+}
+\ProcessOptions\relax
+
+% +=============================+
+% | PACKAGES |
+% +=============================+
+
+\usepackage{graphicx}
+\usepackage{amsmath}
+\usepackage{amssymb}
+\usepackage{enumerate}
+\usepackage{fp}
+\usepackage{currfile}
+\usepackage{array}
+\usepackage{ifthen}
+\usepackage{xargs}
+\usepackage{multicol}
+\usepackage{pstricks,pstricks-add}
+\ifes@autopst
+\usepackage[crop=off,dvips={}]{auto-pst-pdf}
+ \else
+\usepackage[off]{auto-pst-pdf}
+ \fi
+
+\input random
+
+%========================================================%
+% Error Messages %
+%========================================================%
+
+\def\testversioni{\ifthenelse{\not\equal{\numcompiti}{} } {\relax} %
+ { \immediate\write16{\es@numcompitierror}
+ {\endlinechar=-1 \global\read16 to\numcompiti}}}
+ \ifthenelse{\equal{\jobname}{\detokenize{master}}}{%%
+ {%
+ \PackageError{esami} %
+ {\es@mastererror}
+ {}}}
+ \ifthenelse{\equal{\jobname}{\detokenize{master-sol}}}{%%
+ {%
+ \PackageError{esami} %
+ {\es@mastererror}
+ {}}}
+
+\ifes@language \else \InputIfFileExists{es-italian.lng}%
+ { \typeout{esami: No language chosen: Italian language will be used.}}{NO LANGUAGE!!!}\fi
+%========================================================%
+% DIMENSIONS %
+%========================================================%
+
+% We want the page full of text
+
+\setlength\topmargin{-90pt}
+\setlength\textheight\paperheight
+\addtolength\textheight{-80pt}
+\setlength\textwidth\paperwidth
+\addtolength\textwidth{-70pt}
+\setlength\oddsidemargin{-60pt}
+\setlength\footskip{28pt}
+\setlength\marginparwidth{0pt}
+\setlength\marginparsep{0pt}
+
+\newskip\aboveanswersSkip%%% the space between question and answers
+\newlength\es@tmplength
+\newdimen\es@tmpdima{}
+\newsavebox{\es@tmpbox}{}
+\newbox{\es@pointbox}
+\newlength{\es@pointboxtotalheight}%%% the height of the point box
+\newsavebox{\workareasb}
+
+%========================================================%
+% exercise %
+%========================================================%
+
+\newcommand{\priorexskip}[1]{\def\es@priorexskip{\vspace{#1}}}%%% space above and below the text of the exercise
+\let\es@postexerciseHook\relax
+\newcommand{\esexerskip}[1]{\def\es@exerskip{\vskip#1}}
+
+%========================================================%
+% test %
+%========================================================%
+
+\def\rowsep#1{\gdef\@rowsep{[#1]}\gdef\@rowskip{#1}}
+ \rowsep{\rowsep@default}
+\def\rowsepDefault#1{\def\rowsep@default{#1}}
+
+%========================================================%
+% risposta %
+%========================================================%
+
+\newlength{\es@rig}%%%% lines in "risposta"
+
+%========================================================%
+% SPACES %
+%========================================================%
+
+\setlength{\parindent}{0pt}
+\def\solutionsAfterSkip{\par\bigskip}
+\priorexskip{\medskipamount}
+\esexerskip{\medskipamount}
+\let\afterlabelhskip=\space
+
+%========================================================%
+% test %
+%========================================================%
+
+\rowsepDefault{4pt}
+\addtolength{\tabcolsep}{2pt} \addtolength{\arraycolsep}{2pt}
+\def\sq@priorhook{\medskip\noindent}
+\setlength\aboveanswersSkip{6pt}
+
+% +=============================+
+% | COUNTERS |
+% +=============================+
+
+\newcount\tmp@cnt%%% temporary counter
+\newcount\tmp@a%%% temporary counter
+\newcount\rnd@cnta%%% temporary counter in selectrandomly
+\newcount\tmp@cntb%%% temporary counter in \estrai
+\newcount\rnd@cnts%%% temporary counter in RandS
+\newcount\rnd@cnt%%% temporary counter in \FPsetpar
+\newcount\end@al%%% temporary counter in \estraialfa
+\newcount\beg@al%%% temporary counter in \estraialfa
+\newcounter{nomefile}%%% counter for year-month-day
+\newcounter{tmp@quest}%%% the number of the exercise
+\newcounter{vers}%%% the number of the version
+\setcounter{vers}{0}
+\newcounter{n@par}%%% it counts the number of parameters
+\newcount\loopCnt%%% the number of attempts in \FPsetpar
+\newcounter{fp@contatore}%%% used in \FPsetpar
+\newcount\old@randomi%%% used to change seed in \FPsetpar
+\newcount\sh@max%%% used to choose the exercises
+\newcount\@probN%%% number of exercises in \selectrandomly
+\newcount\j@m%%% temporary counter in \newproblem
+\newcount\i@sh
+\newcount\j@sh
+\newcounter{shuf@lop}
+\newcounter{temp@cnt}
+\newcounter{questionno}%%% the number of the question in test
+\newcount\@esquestiondepth \@esquestiondepth=0
+\newcounter{esquestionnoi}
+\renewcommand{\theesquestionnoi}{\arabic{esquestionnoi}}
+\newcounter{esquestionnoii}
+\renewcommand{\theesquestionnoii}{\alph{esquestionnoii}}
+\newcounter{esquestionnoiii}
+\renewcommand{\theesquestionnoiii}{\roman{esquestionnoiii}}
+
+%========================================================%
+% test %
+%========================================================%
+
+\newcounter{sq@quizno} \setcounter{sq@quizno}{0}%%% the number of the answer in a MCQ
+\renewcommand\thesq@quizno{\alph{sq@quizno}}
+\def\@shortquizCnt{0}
+\newcount\es@tabColCnt%%% The number of columns of answers in MCQ
+
+%========================================================%
+% esercizio %
+%========================================================%
+
+\newcounter{ex@no}%%% The number of the exercise
+\setcounter{ex@no}{0}
+\@addtoreset{ex@no}{section}
+\newcounter{ex@partno}%%% The parts of an exercise
+\renewcommand\theex@partno{\alph{ex@partno}}
+
+%========================================================%
+% risposta %
+%========================================================%
+
+\newcounter{risp@righe}%%% the number of lines in a long answer (environment "risposta")
+
+%========================================================%
+% matching %
+%========================================================%
+
+\newcounter{match@plu}
+\newcounter{match@plo}
+\newcounter{match@q}
+
+%========================================================%
+% aebrandom %
+%========================================================%
+
+\newcount\aeb@numChoices
+\newcount\aeb@ranChoice
+
+% +=============================+
+% | LABELS |
+% +=============================+
+
+%========================================================%
+% questions %
+%========================================================%
+
+\newcommand{\labelesquestionnoi}{\bfseries\theesquestionnoi.}
+\newcommand{\labelesquestionnoii}{\bfseries(\theesquestionnoii)}
+\newcommand{\labelesquestionnoiii}{\bfseries(\theesquestionnoiii)}
+
+%========================================================%
+% test %
+%========================================================%
+
+\newcommand\sq@label{}
+\newcommand\sqlabel{\sq@label}
+\def\linkContentFormat{\alph{sq@quizno}}
+\def\linkContentWrapper{(\hfil\linkContentFormat\hfil)}
+
+%========================================================%
+% exercise %
+%========================================================%
+
+\newcommand\exlabel{\es@exercisename}
+\newcommand\exlabelsol{\exlabel}
+\newcommand\exlabelformat{{\scshape\exlabel\ \theex@no.}}
+\newcommand\exlabelformatwp{{\scshape\exlabel\ \theex@no.}}
+\newcommand{\exsolafter}{\es@exsolafterDefault}
+\newcommand{\es@exsolafterDefault}{\textit{\es@solutionname}:}
+\newcommand{\esexlisttabheader}
+{(\hfil\theex@partno\hfil)%
+}
+\newcommand{\ex@header}
+{\hbox{\if\exerstar*\exlabelformatwp\else%
+ \exlabelformat\fi}%
+}
+
+% +=============================+
+% | COMMANDS |
+% +=============================+
+
+%========================================================%
+% Maths %
+%========================================================%
+
+\newcommand{\FPsv}[2][0]{\FPeval\fp@tmpa{round(#2:#1)}\numprint{\fp@tmpa}}%%% It does operations with #1 decimals and with the "param" option it shows operations
+\newcommand{\FPval}[2]{\FPeval#1{round(#2:0)}}%% it works like \FPsv with the option param, like \FPeval otherwise
+
+%========================================================%
+% fractions %
+%========================================================%
+
+\newcommand{\@sempli}[2]{%%%% simplification (private command)
+ \FPeval\segnofrac{round(#1:0)*round(#2:0)}
+ \FPeval\fp@tmp{round(abs(#1):0)}\FPset\fp@n{\fp@tmp}%
+ \FPeval\fp@tmp{round(abs(#2):0)}%
+ \FPifzero{\fp@tmp}\PackageError{esami}{\es@zerodenerror{#1}{#2}}\fi
+ \FPset\fp@d{\fp@tmp}%
+ \FPeval\fp@num{max(\fp@n,\fp@d)}\FPeval\fp@den{min(\fp@n,\fp@d)}\FPset\fp@resto{\fp@den}\whiledo{\fp@resto>0}%
+ {\FPset\fp@restoold{\fp@resto}\FPeval\fp@resto{round((\fp@num-trunc((\fp@num)/\fp@den:0)*(\fp@den)):0)}%
+ \FPset\fp@num{\fp@den}\FPset\fp@den{\fp@resto}}\FPeval\fp@num{round((\fp@n/\fp@restoold):0)}\FPeval\fp@den{round((\fp@d/\fp@restoold):0)}%
+ \FPifneg\segnofrac{-}\else{}\fi\ifthenelse{\fp@den=1}{\ifthenelse{\fp@num=1}{1}{\fp@num}}{\frac{\fp@num}{\fp@den}}%
+ }
+
+\newcommand{\sempli}[2]{%%% simplification (user command)
+ \FPeval\fp@tmp{round(abs(#1):0)}%
+ \FPifzero{\fp@tmp}\PackageError{esami}{\es@zeronumerrorshort{#1}{#2}}
+ {\es@zeronumerrorlong{#1}{#2}}\fi
+ \FPeval\fp@temp{round(abs(#2):0)}%
+ \FPifeq{\fp@tmp}{\fp@temp}\PackageWarning{esami}{\es@fraconewarn{#1}{#2}}\fi
+ \@sempli{#1}{#2}%
+ }
+
+\newcommand{\semplix}[2]{%%% simplification (coefficients)
+ \FPeval\fp@tmp{round(abs(#1):0)}%
+ \FPifzero{\fp@tmp}\PackageError{esami}{\es@zeronumerrorshort{#1}{#2}}
+ {\es@zeronumerrorlong{#1}{#2}}\fi
+ \FPeval\t@mpa{round(#1:0)}\FPeval\t@mpb{round(#2:0)}%
+ \ifthenelse{\t@mpa=\t@mpb}{}%
+ {\ifthenelse{\t@mpa=-\t@mpb}{-}%
+ {\@sempli{#1}{#2}}%
+ }
+ }
+
+\newcommand{\sempliz}[2]{%%% simplifications (zero)
+ \FPeval\t@mpa{round(#1:0)}%
+ \ifthenelse{\t@mpa=0}{0}%
+ {\@sempli{#1}{#2}}%
+ }
+
+\newcommand{\esempli}[2]{%%% simplification (exponents)
+ \FPeval\fp@tmp{round(abs(#1):0)}%
+ \FPifzero{\fp@tmp}\PackageError{esami}{\es@zeronumerrorshort{#1}{#2}}
+ {\es@zeronumerrorlong{#1}{#2}}\fi
+ \FPeval\t@mpa{round(#1:0)}\FPeval\t@mpb{round(#2:0)}%
+ \ifthenelse{\t@mpa=\t@mpb}{}%
+ {\ifthenelse{\t@mpa=-\t@mpb}{-1}%
+ {\@sempli{#1}{#2}}%
+ }
+ }
+
+%========================================================%
+% Radicals (simplification) %
+%========================================================%
+
+\newcommand\simpsqrt[2]{
+ \FPset\tmp@sqi{2}%
+ \FPset\sq@factor{1}%
+ \FPset\tmp@factor{1}%
+ \FPeval\sq@segno{round(#2:0)}%
+ \FPeval\sq@rad{round(abs(#2):0)}%
+ \FPeval\sq@ind{round(#1:0)}%
+ \FPeval\tmp@sqpw{round(\tmp@sqi^(\sq@ind):0)}%
+ \FPeval\tmp@sqj{round(\sq@rad+1:0)}%
+ \ifthenelse{\equal\sq@rad{0}}{0}{%
+ \whiledo{\tmp@sqpw<\tmp@sqj}{\FPeval\tmp@rad{\sq@rad/\tmp@sqpw}%
+ \FPeval\sq@resto{round((\sq@rad-trunc((\sq@rad)/\tmp@sqpw:0)*(\tmp@sqpw)):0)}%
+ \ifthenelse{\equal{\sq@resto}{0}}{\FPset\tmp@factor{\sq@factor}\FPeval\sq@factor{round(\tmp@factor*\tmp@sqi:0)}\FPeval\sq@rad{round(\tmp@rad:0)}%
+ \FPset\tmp@sqi{1}}{}\FPset\tmp@sqii{\tmp@sqi}\FPeval\tmp@sqi{round(\tmp@sqii+1:0)}\FPeval\tmp@sqpw{round(\tmp@sqi^(\sq@ind):0)}}%
+ \ifthenelse{\isodd{\sq@ind}}{%
+ \ifthenelse{\equal{\sq@factor}{1}} {\ifthenelse{\equal{\sq@rad}{1}}{\ifthenelse{\sq@segno<0}{-1}{1}}
+ {\ifthenelse{\sq@segno<0}{-\sqrt[\sq@ind]{\sq@rad}}{\sqrt[\sq@ind]{\sq@rad}}}}%
+ {\ifthenelse{\equal{\sq@rad}{1}}{\ifthenelse{\sq@segno<0}{-\sq@factor}{\sq@factor} }
+ {\ifthenelse{\sq@segno<0}{-\sq@factor\sqrt[\sq@ind]{\sq@rad}}{\sq@factor\sqrt[\sq@ind]{\sq@rad} }}}}%
+ {\ifthenelse{\sq@segno<0}{\PackageError{esami}{\es@radicalerror}}{\ifthenelse{\equal{\sq@factor}{1}} {\ifthenelse{\equal{\sq@rad}{1}}{1}
+ {\ifthenelse{\sq@ind=2}{\sqrt{\sq@rad}}{\sqrt[\sq@ind]{\sq@rad}}} }%
+ {\ifthenelse{\equal{\sq@rad}{1}}{\sq@factor}{\ifthenelse{\sq@ind=2}{\sq@factor\sqrt{\sq@rad}}{\sq@factor\sqrt[\sq@ind]{\sq@rad}}} }}}}%
+ }
+
+%========================================================%
+% Commands adapted from exerquiz %
+%========================================================%
+
+\providecommand\PBS[1]{\let\temp=\\#1\let\\=\temp}
+\def\es@lw@l{\es@l@l\ }
+\def\es@l@l{\normalsize\normalfont(d)}
+\newcommand\PTs{\def\es@star{x}\@PTs}
+\def\@PTs#1{%
+ \gdef\es@PTs{#1}\ifx\es@PTs\@empty\gdef\es@PTs{1}\fi
+ \global\let\esPTs=\es@PTs\global\let\es@PTs=\@empty
+ \if\es@star*\else\PTs@Hook\fi
+}
+\def\es@PTs{0}
+\newcommand\PTsHook[1]{\def\PTs@Hook{#1}}%%% hooks for \PTs
+\let\qMark@Hook\@empty
+\newcommand{\post@questionsHook}{}
+\newcommand{\punti}{}
+
+%========================================================%
+% Commands adapted from eqexam %
+%========================================================%
+
+%%%%% Points in a box on the right %%%%%%
+
+\ifes@pointsonright
+\def\examenddef
+{%
+\bgroup
+\raisebox{-30pt}[0pt][0pt]{%
+ \hspace*{-\parindent} %
+ {\es@rightmarginbox
+ }} %
+\egroup}
+\else
+\def\examenddef{}
+\fi
+
+\def\PointsOnRight{%
+ \let\marginpoints=\es@rightmarginbox}
+\newcommand\marginpointsboxtext{\small \emph{\punti\ifthenelse{\equal{\punti}{1}}{ \es@pointname}{ \es@pointsname}}}
+\def\es@rightmarginbox{%
+ \makebox[0pt][l]{%
+ \setlength\tabcolsep{0pt}%
+ \hspace*{\textwidth}\hspace*{\marginparsep}%
+ \raisebox{-.5\height}[0pt][0pt]{%
+ \parbox{40pt}{%
+ \tabcolsep=0pt\relax
+ \begin{tabular}{|c|}\hline
+ \vrule height20pt width0pt\hfill\\\hline
+ \makebox[40pt]{%
+ \marginpointsboxtext}\\\hline%
+ \end{tabular}%
+ }%
+ }\hfil
+ }%
+}
+\setbox\es@pointbox=\hbox{%
+ \parbox{35pt}{%
+ \tabcolsep=0pt\relax
+ \begin{tabular}{|c|}\hline
+ \vrule height15pt width0pt\\
+ \hline
+ \makebox[40pt]{%
+ \marginpointsboxtext}\\
+ \hline
+ \end{tabular}%
+ }%
+}
+
+%%%%%%% Fill in %%%%%%
+
+\ifes@solutions
+\def\fill@ans@color#1{\bfseries\color{red}{#1}}%%% with solutions answers are in red by default
+ \else
+\def\fill@ans@color#1{\phantom{#1}}%%% without solutions option -> no answers
+ \fi
+\newcommand{\fillin}[3][u]{%%% #1= the box (u=underlined, e=empty, b= boxed) #2= space for the answer, #3= the correct answer
+\space
+ \ifx#1u\let\fillin@Fmt=\underbar%%% by default underlined space
+ \else\ifx#1e\let\fillin@Fmt=\relax%%% empty space
+ \else\ifx#1b\let\fillin@Fmt=\fbox%%% box
+ \fi\fi\fi
+ \fillin@Fmt{\parbox[b][.8\height][b]{#2}{%
+ \strut\hfil\fill@ans@color{#3}\hfil}%
+ \ifes@test
+\ifes@solutions%%% to write the string of solutions
+\immediate\write\sols{\string\item\space\string\makeatletter\space\string\input\string{qf\nome q\thetmp@quest e\thevers.parametri\string}\string\makeatother}
+\immediate\write\sols{\unexpanded{#3}}
+\fi
+\fi
+ }
+ }
+
+%%%%% Other commands %%%%%%
+
+\long\def\Collect@Body#1{%%%%% This command is taken from the environ package %%%%
+ \@envbody{\expandafter#1\expandafter{\the\@envbody}}%
+ \edef\process@envbody{\the\@envbody\noexpand\end{\@currenvir}}%
+ \@envbody\@emptytoks \def\begin@stack{b}%
+ \begingroup
+ \expandafter\let\csname\@currenvir\endcsname\Collect@@Body
+ \edef\process@envbody{%
+ \expandafter\noexpand\csname\@currenvir\endcsname}%
+ \process@envbody
+}
+
+\newcommand\stepvers{\stepcounter{vers}\ifes@solutions
+\immediate\write\sols{\string\begin{minipage}{.33\string\textwidth}\string\large\string\textbf{\es@solutionname\ \versionname\ n. \thevers}}\fi}
+\newcommand\closevers{\newpage\setcounter{page}{1}\ifes@solutions\immediate\write\sols{\string\end{minipage}
+ \string\vspace{5ex}}\fi}
+
+\def\mydate#1/#2/#3\@empty{\setcounter{nomefile}{\two@digits{#3}\two@digits{#2}\two@digits{#1}}}%%% it gives to the counter "nomefile" a value determined by the date
+\PTsHook{\emph{(\esPTs\ \ifthenelse{\equal{\esPTs}{\detokenize{1}}}{\es@pointname}{\es@pointsname})}}%%% The name of the points
+\newcommand{\proofingsymbol}[1]{\def\@proofingsymbol{{#1}\hspace{-.3em}\es@segnala}}%%% this defines the symbol for the exact answer in MCQ and the label for the string of solutions
+\proofingsymbol{$\blacktriangleright$}%%% the proofing symbol that can be changed in document
+\newenvironment{gobbleenv}{\Collect@Body \@gobble}{}%%% this environment eats its content
+
+\AtBeginDocument{%%% the date and the date component of the seed and some code for solutions
+ \def\longdate{\expandafter\es@longdate\@date\@empty}
+ \def\shortdate{\expandafter\es@shortdate\@date\@empty}
+ \expandafter\mydate\@date\@empty
+\ifes@solutions
+\newwrite\sols
+\immediate\openout\sols=\jobname.sol.tex
+ \fi}
+\newcommand\es@segnala{%%% this command gives the reference of the exact answer in the string of solutions
+ \if\es@listType1\addtocounter{sq@quizno}{-1}\refstepcounter{sq@quizno}\fi
+\ifes@prova \else \label{af\nome q\number\j@n e\thevers} \immediate\write\sols{\string\item\string\ref{af\nome q\number\j@n e\thevers}}\fi
+ }
+\newcommand{\prior@questionsHook}{}
+
+%========================================================%
+% definizioni di Fpsetpar %
+%========================================================%
+
+\def\maxLoopLimit{10}%
+\newcommandx{\FPsetpar}[5][1=\seme,5={}]{%
+\old@randomi=\number\randomi%%% it saves the old seed
+\stepcounter{n@par}%
+\setcounter{fp@contatore}{-\value{vers}}%
+\randomi=#1%
+\advance\randomi\value{n@par}%
+\addtocounter{fp@contatore}{-#3}%
+\advance\randomi\value{vers}%
+\whiledo{\value{fp@contatore}<\value{questionno}}{\nextrandom\stepcounter{fp@contatore}}%
+\setrannum{\tmp@a}{#3}{#4}%
+\def\rand@ne{#5}%%% checks the parameter (adapted from rangen)
+\ifx\rand@ne\@empty\else\loopCnt=0\relax%
+\@whilenum\loopCnt<\maxLoopLimit\do{%
+\rnd@cnt=1\relax%
+\@for\ne@@tmp:=\rand@ne\do{%
+\ifnum\tmp@a=\ne@@tmp\relax%
+\multiply\rnd@cnt0\relax%
+\else%
+\multiply\rnd@cnt1\relax%
+\fi%
+}%
+\ifnum\rnd@cnt=1\relax%%% all conditions are satisfied
+\loopCnt=\maxLoopLimit%
+\else%
+\advance\loopCnt1\relax%
+\ifnum\loopCnt=\maxLoopLimit%
+\PackageError{esami}{\es@fpsetparerrorshort}{\es@fpsetparerrorshort}%
+\else%
+\setrannum{\tmp@a}{#3}{#4}%
+\fi%
+\fi%
+}%
+\fi%
+\FPeval{#2}{round(\number\tmp@a:0)}%
+\ifes@fillin%
+%\expandafter
+\immediate\write\parametri{\string\FPeval\string{#2\string}\string{round(\number\tmp@a:0)\string}}%
+\fi%
+\randomi=\number\old@randomi%%% restores the seed
+}%
+
+%%%%%% Alternative definitions of \FPsetpar with different randomization process (we left them for archive purposes) %%%%
+
+%\newcommandx{\FPsetpar}[5][1=\seme,5={}]{%
+%\stepcounter{n@par}
+%\FPeval\diff{round(#4-#3+1:0)}
+%\pdfsetrandomseed #1
+%\setcounter{fp@contatore}{-\value{vers}}%
+%\tmp@cnt=\pdfuniformdeviate \diff
+%\FPeval\tmp@seed{round(#1+\then@par:0)}
+%\pdfsetrandomseed \tmp@seed %%% aggiunta 2010.04.19
+%\addtocounter{fp@contatore}{-#3}
+%\FPeval\tmp@seed{round(tmp@seed+\thevers:0)}
+%\pdfsetrandomseed \tmp@seed%%% aggiunta 2010.04.19
+%\whiledo{\value{fp@contatore}<\value{questionno}}
+%{\tmp@cnt=\pdfuniformdeviate \diff \stepcounter{fp@contatore}}
+%\FPeval{fp@tmp}{round((1-1/\diff)*\number\tmp@cnt+#3:0)}
+% \def\rand@ne{#5}
+% \ifx\rand@ne\@empty\else\loopCnt=0\relax
+% \@whilenum\loopCnt<\maxLoopLimit\do{%
+% \rnd@cnt=1\relax
+% \@for\ne@@tmp:=\rand@ne\do{%
+% \ifnum\fp@tmp=\ne@@tmp\relax
+% \multiply\rnd@cnt0\relax
+% \else
+% \multiply\rnd@cnt1\relax
+% \fi
+% }
+% \ifnum\rnd@cnt=1\relax
+% \loopCnt=\maxLoopLimit
+% \else
+% \advance\loopCnt1\relax
+% \ifnum\loopCnt=\maxLoopLimit
+% \PackageWarning{esami}{Non sono state soddisfatte tutte le condizioni
+% dopo \maxLoopLimit\space tentativi}
+% \else
+% \tmp@cnt=\pdfuniformdeviate \diff
+% \FPeval{fp@tmp}{round((1-1/\diff)*\number\tmp@cnt+#3:0)}
+% \fi
+% \fi
+% }%
+% \fi
+%\FPeval{#2}{round((1-1/\diff)*\number\tmp@cnt+#3:0)}}
+%
+%\newcommand{\FPsetpar}[4][\seme]{%
+%\gdef\#2min{#3}
+% \gdef\#2max{#4}
+%\old@randomi=\number\randomi
+%\stepcounter{n@par}
+%\setcounter{fp@contatore}{-\value{vers}}
+%\setrannum{\tmp@cnt}{#3}{#4}
+%\randomi=#1
+%\advance\randomi\value{n@par}
+%\addtocounter{fp@contatore}{-#3}
+%\advance\randomi\value{vers}
+%\whiledo{\value{fp@contatore}<\value{questionno}}{\nextrandom\stepcounter{fp@contatore}}%{\nextrandom\setrannum{\tmp@cnt}{#3}{#4} \stepcounter{fp@contatore}}
+%\setrannum{\tmp@cnt}{#3}{#4}
+%%\def\s@ss{#2}
+%\FPeval{#2}{round(\number\tmp@cnt:0)}
+%\ifes@fillin
+% \expandafter\immediate\write\parametri{\string\FPeval\string{#2\string}\string{round(\number\tmp@cnt:0)\string}}
+% \fi
+% \randomi=\number\old@randomi
+%}
+%
+%\newcommand{\FPsetpar}[4][\seme]{%
+%\setcounter{fp@contatore}{-\value{vers}}
+%\FPeval\dud{round(#1:0)}
+%\FPseed=\dud
+%\whiledo{\value{fp@contatore}<\value{questionno}}{
+%\FPrandom\tmp@cnt
+%\FPeval{#2}{trunc((#4+1-#3)*tmp@cnt+#3:0)}
+%\stepcounter{fp@contatore}
+%}
+%}
+
+%%%% Command for random sign (taken from rangen) %%%%%
+\newcommand{\RandS}{%
+\setrannum{\rnd@cnts}{0}{1}
+\ifnum\number\rnd@cnts>0
++
+\else
+-
+\fi}%
+
+% +===================================+
+% | OTHER ENVIRONMENTS AND EXERCISES |
+% +===================================+
+
+%========================================================%
+% Tabella %
+%========================================================%
+
+\newcolumntype{$}{>{\global\let\currentrowstyle\relax}}
+\newcolumntype{^}{>{\currentrowstyle}}
+\newcommand{\rowstyle}[1]{\gdef\currentrowstyle{#1}#1\ignorespaces}
+\ifes@solutions
+\colorlet{tab@ans@color}{red}
+\newcolumntype{C}[1]{>{\color{tab@ans@color}}#1}%%% the column of the solutions is red (option solution)
+\else
+\def\cancella#1\finqui{\phantom{#1}}
+\newcolumntype{C}[1]{>{\cancella}#1<{\finqui}}%%% the column of the solutions is empty (exam)
+\fi
+\newenvironment{tabella}[3][2]{\bigskip%%% open answers in columns #1=n. of visible columns (+1 invisible), #2={r,c,l} alignment of visible columns, #3={r,c,l} alignment of invisible column
+\renewcommand\arraystretch{2}
+\begin{tabular}{$#2*{#1}{|^C#3}} }{
+\end{tabular} \renewcommand\arraystretch{1}}
+
+%========================================================%
+% Risposta %
+%========================================================%
+
+\ifes@solutions
+\newenvironment{risposta}[2][l]{\relax}{}
+\else
+\newenvironment{risposta}[2][b]{% #1={b,l} box or lines, #2= heigth of box or number of lines
+\setlength{\es@rig}{#2cm minus 12pt}
+ \ifx#1b \fbox{\parbox[b][\es@rig]{\textwidth}{\vfill\hfill }}
+ \else
+ \ifx#1l \setcounter{risp@righe}{-#2}\stepcounter{risp@righe}
+{\whiledo{\therisp@righe < #2}
+{ \par \vspace{.2cm} \dotfill \stepcounter{risp@righe}}}\else \fi\fi}
+{}
+\fi
+
+%========================================================%
+% matching (from an idea of examdesign) %
+%========================================================%
+
+\newcommand{\pair}[2]{%%% pairing of items
+\stepcounter{match@q}
+\expandafter\gdef\csname match@qst\thematch@q\endcsname{#1}
+\expandafter\gdef\csname match@ans\thematch@q\endcsname{#2}
+\expandafter\edef\csname match@num\thematch@q\endcsname{\thematch@q}
+}
+\ifes@solutions
+\def\match@ans@color#1{\bfseries\color{red}{#1}}%%% visible solutions in red (solutions)
+\else
+\def\match@ans@color#1{\phantom{#1}}%%% invisible solutions (exam)
+\fi
+\newcommand{\matching}{%%% it generates the 2 columns
+\@getitemsr \@getitemsl
+\vspace{5mm}
+\setcounter{match@q}{0}
+}
+\def\@getitemsl{%%% left column and shuffle of items
+\i@sh=\thematch@q
+\loop
+\expandafter\let \csname flag\number\i@sh\endcsname a%
+\advance\i@sh by-1
+\ifnum\i@sh > 0 \repeat
+\i@sh=\thematch@q
+\loop
+\setrannum{\j@sh}{1}{\thematch@q}
+\expandafter\ifx \csname flag\number\j@sh\endcsname a%
+\expandafter\let \csname flag\number\j@sh\endcsname b%%% Sets the flag.
+\expandafter\edef\csname match@qsti\number\i@sh\endcsname{\noexpand\csname match@qstii\number\j@sh\endcsname}
+\setcounter{match@plu}{\thematch@q}
+\addtocounter{match@plu}{-\csname match@numii\number\j@sh\endcsname}
+\addtocounter{match@plu}{1}
+\setcounter{match@plo}{\thematch@q}
+\addtocounter{match@plo}{- \number\i@sh}
+\addtocounter{match@plo}{1}
+\expandafter\edef\csname match@numi\number\i@sh\endcsname{(\Alph{match@plu})}
+\vspace{2ex}
+
+\begin{tabular}{p{.05\textwidth}p{.40\textwidth}p{.01\textwidth}p{.40\textwidth}}
+\underbar{\makebox[.5cm]{\match@ans@color{\csname match@numi\number\i@sh\endcsname}}} & \csname match@qsti\number\i@sh\endcsname&&(\Alph{match@plo})\hspace{3mm}\csname match@ansi\number\i@sh\endcsname%\tabularnewline
+\end{tabular}
+ \advance\i@sh by-1
+ \ifnum\i@sh > 0 \fi
+ \fi
+ \ifnum\i@sh > 0
+\repeat
+}
+\def\@getitemsr{%%% right column and shuffle of tems
+\i@sh=\thematch@q
+\loop
+\expandafter\let \csname flago\number\i@sh\endcsname c%
+\advance\i@sh by-1
+\ifnum\i@sh > 0 \repeat
+\i@sh=\thematch@q
+\loop
+\setrannum{\j@sh}{1}{\thematch@q}
+\expandafter\ifx \csname flago\number\j@sh\endcsname c%
+\expandafter\let \csname flago\number\j@sh\endcsname d%
+\expandafter\edef\csname match@qstii\number\i@sh\expandafter\endcsname{\noexpand\csname match@qst\number\j@sh\endcsname}
+\expandafter\edef\csname match@ansi\number\i@sh\expandafter\endcsname{\noexpand\csname match@ans\number\j@sh\endcsname}
+\expandafter\edef\csname match@numii\number\i@sh\endcsname{\csname match@num\number\i@sh\endcsname}
+\advance\i@sh by-1
+\ifnum\i@sh > 0 \fi
+\fi
+\ifnum\i@sh > 0
+\repeat
+}
+
+%========================================================%
+% Commands adapted from probsoln %
+%========================================================%
+
+%%%%%% \newproblem %%%%%%%%%%%%%
+
+\newif\iffirstpass
+\ifes@prova
+\newcommand{\newproblem}[1]{%%% \newproblem for the file "totale-versioni"
+\stepcounter{tmp@quest}
+\iffirstpass
+\global\advance\@probN by 1
+\else
+\let\nome\currfilebase
+ \ifes@fillin
+ \immediate\openout\parametri=qf\nome q\number\j@n e\thevers.parametri.tex
+ \fi
+\expandafter\global\expandafter\newcommand\csname @prob@f\nome q\thetmp@quest \endcsname{#1}%%% it assigns a name to exercise
+ \fi
+}
+\else
+ \ifes@correzione
+ \newcommand{\newproblem}[1]{%%% \newproblem for the "correzione" option
+ \stepcounter{tmp@quest}
+ \iffirstpass
+ \global\advance\@probN by 1
+ \else
+ \let\nome\currfilebase
+ \ifes@fillin
+ \immediate\openout\parametri=qf\nome q\thetmp@quest e\thevers.parametri.tex
+ \fi
+\expandafter\global\expandafter\newcommand\csname @prob@f\nome q\thetmp@quest e\thevers \endcsname{\unexpanded{#1}}
+ \expandafter\global\expandafter\newcommand\csname @prob@f\nome q\thetmp@quest \endcsname{#1}
+ \fi
+ }
+ \else
+\newcommand{\newproblem}[1]{%%% \newproblem for the exam
+\stepcounter{tmp@quest}
+\iffirstpass
+\global\advance\@probN by 1
+\else
+\let\nome\currfilebase
+ \ifes@fillin
+ \immediate\openout\parametri=qf\nome q\thetmp@quest e\thevers.parametri.tex
+ \fi
+\expandafter\global\expandafter\newcommand\csname @prob@f\nome q\thetmp@quest e\thevers \endcsname{\unexpanded{#1}}
+\expandafter\global\expandafter\newcommand\csname @probi@f\nome q\thetmp@quest e\thevers \endcsname{#1}%%% it assigns a unique name to exercise
+\fi
+}
+\fi
+\fi
+
+%%%%%%%% \selectrandomly %%%%%%%
+
+\newcommand{\selectrandomly}[1]{%
+\global\@probN=0\relax
+\firstpasstrue
+\setcounter{tmp@quest}{0}
+\input{#1}%%%%%
+\FPeval\restotrentasei{round(\thevers+\thenomefile+1-trunc((\thevers+\thenomefile)/36:0)*36:0)}
+\ifcase\@probN\or
+\def\j@n{1}%%% just one variant
+\or%%% 2 variants
+\ifthenelse{\isodd{\thevers}}{\def\j@n{1}}{\def\j@n{2}}
+\or%%% 3 variants
+\def\j@n{\ifcase\restotrentasei\or 3\or 2\or 1\or 2\or 1\or 3\or 1\or 3\or 2\or 3\or 1\or 2\or 1\or 2\or 3\or 2\or 3\or 1\or 3\or 2\or 1\or 2\or 1\or 3\or 1\or 3\or 2\or 3\or 1\or 2\or 1\or 2\or 3\or 2\or 3\or 1\fi}%
+\or%%% 4 variants
+\def\j@n{\ifcase\restotrentasei\or 3\or 4\or 1\or 2\or 1\or 2\or 3\or 4\or 3\or 1\or 4\or 2\or 4\or 2\or 3\or 1\or 2\or 3\or 1\or 4\or 1\or 4\or 2\or 3\or 3\or 2\or 1\or 4\or 2\or 3\or 4\or 1\or 4\or 3\or 2\or 1\fi}%
+\or%%% 5 variants
+\def\j@n{\ifcase\restotrentasei\or 5\or 1\or 2\or 3\or 4\or 5\or 2\or 3\or 5\or 1\or 4\or 3\or 1\or 4\or 2\or 5\or 4\or 2\or 3\or 5\or 1\or 5\or 1\or 4\or 2\or 3\or 1\or 3\or 5\or 4\or 2\or 3\or 4\or 5\or 2\or 1\fi}%
+\or%%% 6 variants
+\def\j@n{\ifcase\restotrentasei\or 2\or 5\or 1\or 3\or 4\or 2\or 6\or 1\or 3\or 6\or 5\or 4\or 2\or 3\or 2\or 5\or 4\or 1\or 6\or 1\or 4\or 3\or 2\or 6\or 5\or 4\or 6\or 2\or 5\or 1\or 3\or 6\or 3\or 5\or 1\or 4\fi}%
+\or%%% 7 variants
+\def\j@n{\ifcase\restotrentasei\or 2\or 4\or 1\or 5\or 3\or 6\or 7\or 4\or 1\or 5\or 7\or 6\or 2\or 3\or 7\or 2\or 4\or 6\or 5\or 3\or 1\or 3\or 4\or 7\or 2\or 6\or 1\or 5\or 4\or 5\or 6\or 7\or 3\or 2\or 1\or 5\fi}%
+\or%%% 8 variants
+\def\j@n{\ifcase\restotrentasei\or 2\or 8\or 6\or 7\or 4\or 3\or 1\or 5\or 8\or 5\or 1\or 3\or 7\or 6\or 4\or 2\or 7\or 1\or 8\or 6\or 3\or 2\or 5\or 4\or 1\or 3\or 7\or 5\or 6\or 4\or 2\or 8\or 4\or 3\or 1\or 5\fi}%
+\else%%% if there are more than 8 variants, the choice is random
+\setrannum{\rnd@cnta}{1}{\@probN}
+\def\j@n{\number\rnd@cnta}
+\fi
+\firstpassfalse%%% now prints the question
+\setcounter{tmp@quest}{0}
+\input{#1}
+\ifes@test
+\begin{minipage}{.95\linewidth}\csname @probi@f\nome q\number\j@n e\thevers\endcsname \vspace{5mm}\end{minipage}
+\else
+\csname @probi@f\nome q\number\j@n e\thevers\endcsname \vspace{5mm}
+\fi
+ \ifes@fillin
+ \immediate\closeout\parametri
+ \fi
+}
+
+%%%% \selectallproblems %%%%%
+
+\newcommand*{\selectallproblems}[1]{%%% it selects all the problems of a file and prints them for "totale-versioni"
+\global\@probN=0\relax
+\firstpasstrue
+\setcounter{tmp@quest}{0}
+\input{#1}%
+\firstpassfalse
+\setcounter{tmp@quest}{0}
+\input{#1}%
+\global\j@m=1\relax
+\whiledo{\j@m < \@probN \TE@or \j@m = \@probN}{%
+\csname @prob@f\nome q\number\j@m
+\endcsname \vspace{4mm}
+\global\advance\j@m by 1\relax
+}}
+
+% +=============================+
+% | ENVIRONMENTS |
+% +=============================+
+
+%========================================================%
+% TEST %
+%========================================================%
+
+%%%%% Test %%%%%
+
+ \newenvironment{test}[1][]{%%% test for MCQ, ecc.
+ \es@testtrue
+ \renewcommand{\punti}{#1}
+ \examenddef\begin{shortquiz}
+ \ifes@twocolumns
+ \begin{multicols}{2}
+ \fi
+ }{
+ \ifes@twocolumns
+ \end{multicols}
+ \fi
+ \end{shortquiz}
+}
+
+%%%%% questions (the environment in which you put the MCQ) %%%%%%
+
+\newenvironment{questions}
+{%
+\stepcounter{questionno}
+ \ifnum\@esquestiondepth>\tw@\@toodeep\else\advance\@esquestiondepth\@ne\fi
+ \def\@quesctr{esquestionno\romannumeral\the\@esquestiondepth}%
+ \begin{list}{\qMark@Hook\prior@questionsHook\gdef\esPTs{1}%
+ \makebox[\labelwidth][r]{\normalfont\bfseries\csname label\@quesctr\endcsname}%
+ \post@questionsHook}%
+ {\usecounter{\@quesctr}%
+ \settowidth{\labelwidth}{\normalfont\bfseries00.\ }%
+ \setlength{\topsep}{3pt}\setlength{\parsep}{0pt}%
+ \setlength{\itemindent}{0pt}\setlength{\itemsep}{3pt}%
+ \setlength{\leftmargin}{\labelwidth}%
+ \settowidth{\labelsep}{\ }}
+ \ifes@solutions
+ \immediate\write\sols{\string\begin{enumerate}}
+ \fi%
+}{\end{list}
+\ifes@solutions
+\immediate\write\sols{\string\par\string\end{enumerate}\string\vspace{3ex}}
+\fi
+}
+
+%%%%%%% shortquiz (where to put the environment questions) %%%%
+
+\newenvironment{shortquiz}
+{\es@testtrue%
+ \goodbreak
+ \@shortquiz
+}{
+\setcounter{sq@quizno}{0}%
+ \par\aftershortquizskip}
+\def\@shortquiz{
+ \let\@Ans\Ans@sq@l
+ \setcounter{questionno}{0}%
+ \let\answers\answers@sq
+ \let\endanswers\endanswers@sq
+ \sq@priorhook\sqlabel\space
+ \ignorespaces
+}
+\def\aftershortquizskip{\medskip}
+\def\aeb@endshortquiz{\setcounter{sq@quizno}{0}%
+ \par\aftershortquizskip
+}
+\def\answers@sq{\stepcounter{questionno}%
+ \answers@@sq
+ }
+\def\answers@@sq#1{%
+ \gdef\aeb@numCols{#1}%
+\ifx#11\gdef\es@listType{1}\expandafter\answers@sq@list\else
+ \gdef\es@listType{0}\expandafter\answers@@sq@tabular\fi{#1}%
+}
+\newcommand\Ans@list[2][0]{\gdef\es@pPTs{#1}%
+ \xdef\Ans@choice{#2}\item\relax\if\es@listType1%
+ \addtocounter{sq@quizno}{-1}\refstepcounter{sq@quizno}\fi}
+\newenvironment{answers@sq@list}[1]
+{%
+ \let\endanswers=\endanswers@sq@list
+ \vskip\aboveanswersSkip
+ \begin{list}{\strut\@Ans}
+ {%
+ \settowidth{\labelwidth}{\es@lw@l}%
+ \setlength{\parsep}{0pt}\setlength{\itemindent}{0pt}%
+ \setlength{\topsep}{0pt}\setlength{\partopsep}{0pt}%
+ \setlength{\listparindent}{\parindent}%
+ \setlength{\leftmargin}{\labelwidth}%
+ \setlength{\labelsep}{0pt}%
+ \def\Ans{\Ans@list}%
+ }%
+}%
+{\end{list}\setcounter{sq@quizno}{0}}
+\newcommand\Ans@tabular[2][0]{\gdef\es@pPTs{#1}%
+ \xdef\Ans@choice{#2}\leavevmode\@Ans
+}
+\def\answers@@sq@tabular#1{%
+ \vskip\aboveanswersSkip\noindent\tabcolsep=0pt
+ \es@tmpdima=\linewidth \divide \es@tmpdima by#1 %
+ \def\Ans{\Ans@tabular}%
+ \begin{tabular}{*{#1}{p{\es@tmpdima}}}}%
+\def\endanswers@sq{\end{tabular}\setcounter{sq@quizno}{0}}%
+\def\Ans@sq@l{%
+ \leavevmode\if\es@listType1\stepcounter{sq@quizno}%
+ \else\refstepcounter{sq@quizno}\fi\PBS\raggedright
+ \settowidth{\es@tmplength}{\es@l@l}\sbox{\es@tmpbox}{\es@lw@l}%
+ \es@tmpdima=\wd\es@tmpbox
+ \def\link@@Content{\linkContentWrapper}%
+ \hangindent=\es@tmplength\hangafter=1\relax
+ {\makebox[\es@tmpdima]{\link@@Content}}%
+ \Ans@proofing{\es@tmpdima}%
+\ \ignorespaces}
+\def\Ans@proofing#1{%
+ \ifes@solutions\if\Ans@choice1\relax
+ \llap{\@proofingsymbol\,\hskip#1\relax}%
+ \fi\fi
+}
+\newcommand\answers@q
+{%
+ \setdefault@Ans
+ \stepcounter{questionno}%
+ \answers@@q
+}
+\def\answers@@q#1%
+{%
+ \gdef\aeb@numCols{#1}%
+ \ifx#11\gdef\es@listType{1}\expandafter\answers@q@list\else
+ \gdef\es@listType{0}\expandafter\answers@q@tabular\fi{#1}%
+}
+\newenvironment{answers@q@list}%[1]
+{%
+ \let\endanswers=\endanswers@q@list
+ \vskip\aboveanswersSkip
+ \begin{list}{\strut\@Ans}%\
+ {%
+ \setlength{\parsep}{0pt}\setlength{\itemindent}{0pt}%
+ \setlength{\listparindent}{\parindent}
+ \setlength{\leftmargin}{\labelwidth}%
+ \setlength{\labelsep}{0pt}
+ \def\Ans{\Ans@list}%
+ }%
+}{\end{list}\setcounter{sq@quizno}{0}%
+ \setdefault@Ans
+}
+\def\answers@q@tabular#1{%
+ \vskip\aboveanswersSkip\noindent\tabcolsep=0pt
+ \es@tmpdima=\linewidth \advance\es@tmpdima-\leftskip
+ \divide\es@tmpdima by#1
+ \def\Ans{\Ans@tabular}%
+ \let\endanswers=\endanswers@q@tabular
+ \begin{tabular}{*{#1}{p{\es@tmpdima}}}%
+}
+\def\endanswers@q@tabular
+{%
+ \end{tabular}\setcounter{sq@quizno}{0}%
+ \setdefault@Ans
+}
+
+\define@key{bchoice}{nCols}{\def\bChoiceNumCols{#1}}
+\@for\i:=1,2,3,4,5,6,7,8,9,10 \do{\edef\temp@expand@def{%
+ \noexpand\define@key{bchoice}{\i}[\i]{%
+ \noexpand\def\noexpand\bChoiceNumCols{\i}}%
+ }\temp@expand@def
+}
+\def\bChoiceNumCols{\aeb@numCols}
+\define@key{bchoice}{random}[true]{%
+ \csname if#1\endcsname\es@randomizeChoicestrue
+ \else\es@randomizeChoicesfalse\fi
+}
+\def\bChoices{\@ifnextchar[{\@ansChoices}{\@ansChoices[\aeb@numCols]}}
+\def\@ansChoices[#1]%
+{%
+ \setkeys{bchoice}{#1}%
+ \global\es@tabColCnt=0
+ \ifnum\aeb@numCols=1 % list mode
+ \def\es@next{\@layoutListAns}%
+ \else % tabular mode
+ \def\es@next{\@layoutTabularAns{\bChoiceNumCols}}%
+ \fi
+ \es@next
+}
+\let\eChoices\relax
+\def\@layoutListAns{\@ifnextchar\Ans{\@getListAns}%
+ {\@lookforendansChoices{\@layoutListAns}}%
+}
+\long\def\@getListAns\Ans#1\eAns{%
+ \Ans#1\vspace{\@rowskip}%
+ \@layoutListAns
+}
+\long\def\@lookforendansChoices#1{%
+ \@ifnextchar\eChoices{\rowsep{\rowsep@default}%
+ \expandafter\@findendans\@gobble}{\expandafter#1\@gobble}%
+}
+\def\@layoutTabularAns#1{%
+ \let\es@tabSep=\@empty
+ \xdef\numShortCols{#1}%
+ \ifnum#1>\aeb@numCols \xdef\numShortCols{\aeb@numCols}\fi
+ \@@layoutTabularAns
+}
+\def\@@layoutTabularAns{%
+ \@ifnextchar\Ans{\@getTabAns}%
+ {\@lookforendansChoices{\@@layoutTabularAns}}%
+}
+\long\def\@getTabAns\Ans#1\eAns{%
+ \global\advance\es@tabColCnt1
+ \let\@save@tabSep=\es@tabSep
+ \ifnum\es@tabColCnt=\numShortCols
+ \global\es@tabColCnt=0
+ \xdef\es@tabSep{\noexpand\\\noalign{\kern\@rowskip\relax}}%
+ \else
+ \gdef\es@tabSep{&}%
+ \fi
+ \@ifnextchar\eChoices{\@save@tabSep\Ans#1\rowsep{\rowsep@default}
+ \expandafter\@findendans\@gobble}%
+ {\@save@tabSep\Ans#1\@@layoutTabularAns}%
+}
+\def\@findendans{\@ifnextchar\end{}{\expandafter\@findendans\@gobble}}
+
+%========================================================%
+% EXERCISE AND SIMILAR %
+%========================================================%
+
+%%%% Exercise (adapted from exerquiz) %%%%
+
+\newenvironment{exercise}
+{\es@testfalse%%% you can't use it in test
+ \par\es@priorexskip\noindent
+ \def\es@argi{ex@no}
+ \if\es@exerstarEnv*\def\exerstar{*}\else\def\exerstar{x}\fi
+ \if\exerstar*%
+\def\exerstar{*}\fi
+\@exercise
+}{\es@postexerciseHook\par\global\es@exerciseheadingtrue\es@exerskip}
+\newif\ifes@exerciseheading \es@exerciseheadingtrue
+\def\@exercise
+{%
+ \if\es@argi0\else\refstepcounter{\es@argi}\fi
+ \if\exerstar*% exercise with parts
+ \else
+ \ifes@solutions
+ \else
+ \gdef\es@writeexheader{%
+ \set@display@protect
+ \set@typeset@protect
+ }
+ \fi
+ \fi
+ \ifvmode\ifdim\lastskip>\z@
+ \vskip-\lastskip
+ \fi\fi
+ \if\exerstar*%
+ \let\solution=\solnexer@woparts
+ \let\endsolution=\endsolnexer@woparts
+ \let\parts=\exercise@parts
+ \let\endparts\endexercise@parts
+ \else
+ \let\solution=\solnexer@woparts
+ \let\endsolution=\endsolnexer@woparts
+ \let\parts=\relax
+ \let\endparts=\relax
+ \fi
+ \ifes@exerciseheading
+\ex@header
+ \afterlabelhskip\ignorespaces
+ \fi
+}
+\long\def\setsolnspace#1{%
+ \def\newsolnspace{#1}%
+ \let\solnhspace\newsolnspace
+}
+\let\solnhspace\space
+\def\solnexer@woparts{\def\bLeaveVspace{x}%
+ \def\next{\@ifnextchar[{\solnexer@@woparts}%
+ {\solnexer@@woparts[\null]}}%
+ \next}
+\let\esPriorVspace\@gobble
+\def\solnexer@@woparts[#1]{%
+ \ifx#1\null
+ \else
+ \gdef\sameVspace{#1}%
+ \ifes@solutions\else
+ \let\bLeaveVspace=\@empty
+ \def\leavevspace{%
+ \par\esPriorVspace{#1}%
+ {\nobreak\parbox[b][#1][t]{\linewidth}{\vfill}}%
+ }%
+ \fi
+ \fi
+ \solnexer@@@woparts
+}
+\def\solutionsafterSkip{\smallskip}
+\def\solnexer@@@woparts
+{%
+ \ifx\bLeaveVspace\@empty\leavevspace\fi
+ \def\es@next{%
+ \ifes@solutions
+ \ifx\exsolafter\@empty\else
+ \par\solutionsafterSkip
+ \noindent\exsolafter\space\ignorespaces\fi
+ \else
+ \global\es@solutionsfalse\expandafter\gobbleenv
+ \fi
+ }%
+ \es@next}
+\def\endsolnexerhook{}
+\def\endsolnexerhookaux{}
+\def\endsolnexer@woparts
+{%
+ \ifes@solutions
+ \else
+ \endgobbleenv
+ \endsolnexerhookaux
+ \fi
+\endsolnexerhook}
+\let\es@exerstarEnv\relax
+\newenvironment{exercise*}{\def\es@exerstarEnv{*}\exercise}
+{\endexercise}
+\def\exercise@parts{\@@par\ifdim\parskip>\z@\vskip-\parskip\fi
+ \let\endparts=\endexercise@parts@list\exercise@parts@list%}
+ }
+\def\es@extralabelsep{0pt}
+\newenvironment{exercise@parts@list}
+{\settowidth{\es@tmplength}{\normalfont(d)}%
+\begin{list}{\normalfont
+ \makebox[\es@tmplength]{\esexlisttabheader}%
+}{%
+ \usecounter{ex@partno}%
+ \setlength{\topsep}{3pt}%
+ \setlength{\partopsep}{0pt plus 1pt minus 1pt}%
+ \setlength{\parsep}{0pt}\setlength{\itemindent}{0pt}%
+ \setlength{\listparindent}{\parindent}%
+ \settowidth{\labelsep}{\normalfont\ }%
+ \addtolength{\labelsep}{\es@extralabelsep}%
+ \settowidth{\labelwidth}{\normalfont(d)}%
+ \setlength{\leftmargin}{\labelwidth}%
+ \addtolength{\leftmargin}{\labelsep}%
+ }%
+}{\end{list}}
+
+
+%%%%% Problem %%%%%%%%
+
+\newenvironment{problem}[1][]{%%% it's like exercise, but with points
+\es@testfalse
+\renewcommand{\punti}{#1}
+\ifes@solutionsonly\else\examenddef\fi
+\begin{exercise}}
+{ \ifes@param \immediate\closeout\params \input{params}\fi \end{exercise} }
+\newenvironment{problem*}[1][]{\es@testfalse
+\renewcommand{\punti}{#1}
+\ifes@solutionsonly\else\examenddef\fi
+\begin{exercise*}
+}
+{ \ifes@param \immediate\closeout\params \input{params}\fi \end{exercise*} }
+
+
+%%%%%%%% Domanda %%%%%%%%
+%%%% (it can be used to hide the text of the exercise and print only the solution) %%%
+
+\ifes@solutionsonly
+ \newenvironment{domanda}{\gobbleenv}{\endgobbleenv}%
+ \else
+ \newenvironment{domanda}{}{}
+ \fi
+
+%%%%%%%%%%%%% workarea (adapted from exerquiz) %%%%%
+
+\newenvironment{workarea}[2][\linewidth]%%% #1=width #2=heigth
+{%
+ \edef\workareadepth{#2}%
+ \begin{lrbox}{\workareasb}\setlength{\es@tmplength}{#1}
+ \begin{minipage}[b][\workareadepth][t]{\es@tmplength}\vspace*{3pt}%
+}
+{%
+ \end{minipage}\end{lrbox}%
+ \par\ifes@solutions%
+ \else
+ \vspace{-\baselineskip}
+ \noindent\strut\smash{\usebox{\workareasb}}%
+ \fi
+}
+
+%==========================================%
+% Format %
+%==========================================%
+
+%%% Sections %%%
+
+\renewcommand\section{\setcounter{ex@no}{0}
+\@startsection
+{section}{1}{0mm}
+{-\baselineskip}
+{0.5\baselineskip}
+{\sffamily\Large\centering}}
+
+%%% Subsections %%%
+
+\renewcommand\subsection{
+\@startsection
+{subsection}{1}{0mm}
+{-\baselineskip}
+{1\baselineskip}
+{\sffamily\centering}}
+
+% +===================================+
+% | PERMUTATIONS, SHUFFLE, ECC. |
+% +===================================+
+
+%========================================================%
+% Permutations %
+%========================================================%
+
+%% These values are used in pseudorandom permutations: they must be calculated for any version
+\newcommand{\permuta}{
+\FPeval\restosei{round(\thevers+\thenomefile+1-trunc((\thevers+\thenomefile)/6:0)*6:0)}%%% for 2 or 3 exercises permutations
+\FPeval\restoventiquattro{round(\thevers+\thenomefile+1-trunc((\thevers+\thenomefile)/24:0)*24:0)}%%%% for 4 exercises permutations
+\FPeval\restotrenta{round(\thevers+\thenomefile+1-trunc((\thevers+\thenomefile)/30:0)*30:0)} %%%% for 5,6,7,8 exercises permutations
+}
+
+%%% pseudorandom versions (permutations of 1 esercise!!!!!!!!)
+\def\sceglii#1#2{\expandafter\def\csname #2i\endcsname{#1}}
+\def\prendii#1#2{\sceglii{#1}{#2}}
+%%% pseudorandom versions (permutations of 2 esercises)
+\def\scegliii#1#2#3{\expandafter\def\csname #3i\endcsname{#1}\expandafter\def\csname #3ii\endcsname{#2}}
+\def\prendiii#1#2#3{\ifthenelse{\isodd{\thevers}}{\scegliii{#2}{#1}{#3}}{\scegliii{#1}{#2}{#3}}}
+%%% pseudorandom versions (permutations of 3 esercises)
+\def\scegliiii#1#2#3#4{\expandafter\def\csname #4i\endcsname{#1}\expandafter\def\csname #4ii\endcsname{#2}%
+\expandafter\def\csname #4iii\endcsname{#3}}
+\def\prendiiii#1#2#3#4{\ifcase\restosei\or%
+\scegliiii{#3}{#2}{#1}{#4}\or%
+\scegliiii{#2}{#1}{#3}{#4}\or%
+\scegliiii{#1}{#3}{#2}{#4}\or%
+\scegliiii{#3}{#1}{#2}{#4}\or%
+\scegliiii{#1}{#2}{#3}{#4}\or%
+\scegliiii{#2}{#3}{#1}{#4}
+\fi}
+%%% pseudorandom versions (permutations of 4 esercises)
+\def\scegliiv#1#2#3#4#5{\expandafter\def\csname #5i\endcsname{#1}\expandafter\def\csname #5ii\endcsname{#2}%%
+\expandafter\def\csname #5iii\endcsname{#3}\expandafter\def\csname #5iv\endcsname{#4}}
+\def\prendiiv#1#2#3#4#5{\ifcase\restoventiquattro\or%
+\scegliiv{#3}{#4}{#1}{#2}{#5}\or%
+\scegliiv{#1}{#2}{#3}{#4}{#5}\or%
+\scegliiv{#3}{#1}{#4}{#2}{#5}\or%
+\scegliiv{#4}{#2}{#3}{#1}{#5}\or%
+\scegliiv{#2}{#3}{#1}{#4}{#5}\or%
+\scegliiv{#1}{#4}{#2}{#3}{#5}\or%
+\scegliiv{#2}{#3}{#4}{#1}{#5}\or%
+\scegliiv{#3}{#2}{#1}{#4}{#5}\or%
+\scegliiv{#2}{#1}{#3}{#4}{#5}\or%
+\scegliiv{#3}{#4}{#2}{#1}{#5}\or%
+\scegliiv{#4}{#1}{#3}{#2}{#5}\or%
+\scegliiv{#1}{#2}{#4}{#3}{#5}\or%
+\scegliiv{#4}{#3}{#1}{#2}{#5}\or%
+\scegliiv{#3}{#1}{#2}{#4}{#5}\or%
+\scegliiv{#2}{#1}{#4}{#3}{#5}\or%
+\scegliiv{#4}{#3}{#2}{#1}{#5}\or%
+\scegliiv{#2}{#4}{#1}{#3}{#5}\or%
+\scegliiv{#1}{#3}{#2}{#4}{#5}\or%
+\scegliiv{#2}{#4}{#3}{#1}{#5}\or%
+\scegliiv{#4}{#1}{#2}{#3}{#5}\or%
+\scegliiv{#1}{#4}{#3}{#2}{#5}\or%
+\scegliiv{#3}{#2}{#4}{#1}{#5}\or%
+\scegliiv{#4}{#2}{#1}{#3}{#5}\or%
+\scegliiv{#1}{#3}{#4}{#2}{#5}\fi}
+%%% pseudorandom versions (permutations of 5 esercises)
+\def\scegliv#1#2#3#4#5#6{\expandafter\def\csname #6i\endcsname{#1}\expandafter\def\csname #6ii\endcsname{#2}%%
+\expandafter\def\csname #6iii\endcsname{#3}\expandafter\def\csname #6iv\endcsname{#4}\expandafter\def\csname #6v\endcsname{#5}}
+\def\prendiv#1#2#3#4#5#6{\ifcase\restotrenta\or
+\scegliv{#1}{#5}{#3}{#2}{#4}{#6}\or%
+\scegliv{#2}{#3}{#5}{#1}{#4}{#6}\or%
+\scegliv{#3}{#1}{#4}{#5}{#2}{#6}\or%
+\scegliv{#4}{#2}{#3}{#5}{#1}{#6}\or%
+\scegliv{#5}{#1}{#2}{#4}{#3}{#6}\or%
+\scegliv{#2}{#5}{#1}{#3}{#4}{#6}\or%
+\scegliv{#1}{#3}{#5}{#4}{#2}{#6}\or%
+\scegliv{#3}{#4}{#1}{#2}{#5}{#6}\or%
+\scegliv{#4}{#5}{#1}{#3}{#2}{#6}\or%
+\scegliv{#5}{#3}{#4}{#1}{#2}{#6}\or%
+\scegliv{#4}{#1}{#5}{#3}{#2}{#6}\or%
+\scegliv{#1}{#4}{#3}{#2}{#5}{#6}\or%
+\scegliv{#2}{#5}{#1}{#4}{#3}{#6}\or%
+\scegliv{#5}{#2}{#4}{#1}{#3}{#6}\or%
+\scegliv{#4}{#5}{#3}{#1}{#2}{#6}\or%
+\scegliv{#3}{#4}{#2}{#5}{#1}{#6}\or%
+\scegliv{#3}{#1}{#4}{#2}{#5}{#6}\or%
+\scegliv{#1}{#5}{#2}{#3}{#4}{#6}\or%
+\scegliv{#5}{#4}{#3}{#2}{#1}{#6}\or%
+\scegliv{#1}{#4}{#5}{#3}{#2}{#6}\or%
+\scegliv{#5}{#3}{#1}{#4}{#2}{#6}\or%
+\scegliv{#1}{#2}{#4}{#3}{#5}{#6}\or%
+\scegliv{#3}{#2}{#4}{#1}{#5}{#6}\or%
+\scegliv{#4}{#2}{#1}{#3}{#5}{#6}\or%
+\scegliv{#2}{#3}{#5}{#4}{#1}{#6}\or%
+\scegliv{#3}{#1}{#2}{#5}{#4}{#6}\or%
+\scegliv{#5}{#2}{#4}{#3}{#1}{#6}\or%
+\scegliv{#2}{#4}{#3}{#1}{#5}{#6}\or%
+\scegliv{#4}{#3}{#2}{#5}{#1}{#6}\or%
+\scegliv{#2}{#1}{#5}{#4}{#3}{#6}\fi}
+%%% pseudorandom versions (permutations of 6 esercises)
+\def\sceglivi#1#2#3#4#5#6#7{\expandafter\def\csname #7i\endcsname{#1}\expandafter\def\csname #7ii\endcsname{#2}%%
+\expandafter\def\csname #7iii\endcsname{#3}\expandafter\def\csname #7iv\endcsname{#4}\expandafter\def\csname #7v\endcsname{#5}%%
+\expandafter\def\csname #7vi\endcsname{#6}}
+\def\prendivi#1#2#3#4#5#6#7{\ifcase\restotrenta\or%
+\sceglivi{#6}{#2}{#1}{#4}{#5}{#3}{#7}\or%
+\sceglivi{#2}{#6}{#4}{#3}{#5}{#1}{#7}\or%
+\sceglivi{#3}{#4}{#5}{#6}{#1}{#2}{#7}\or%
+\sceglivi{#1}{#3}{#6}{#4}{#2}{#5}{#7}\or%
+\sceglivi{#4}{#2}{#3}{#1}{#6}{#5}{#7}\or%
+\sceglivi{#3}{#1}{#4}{#5}{#6}{#2}{#7}\or%
+\sceglivi{#1}{#6}{#2}{#4}{#5}{#3}{#7}\or%
+\sceglivi{#2}{#5}{#4}{#1}{#3}{#6}{#7}\or%
+\sceglivi{#3}{#1}{#6}{#2}{#4}{#5}{#7}\or%
+\sceglivi{#2}{#1}{#3}{#5}{#4}{#6}{#7}\or%
+\sceglivi{#5}{#1}{#3}{#4}{#2}{#6}{#7}\or%
+\sceglivi{#1}{#3}{#6}{#5}{#4}{#2}{#7}\or%
+\sceglivi{#3}{#2}{#5}{#4}{#1}{#6}{#7}\or%
+\sceglivi{#1}{#4}{#3}{#2}{#6}{#5}{#7}\or%
+\sceglivi{#4}{#6}{#2}{#5}{#1}{#3}{#7}\or%
+\sceglivi{#6}{#3}{#5}{#1}{#4}{#2}{#7}\or%
+\sceglivi{#3}{#5}{#6}{#4}{#2}{#1}{#7}\or%
+\sceglivi{#4}{#1}{#2}{#6}{#3}{#5}{#7}\or%
+\sceglivi{#1}{#6}{#5}{#4}{#2}{#3}{#7}\or%
+\sceglivi{#5}{#4}{#6}{#3}{#1}{#2}{#7}\or%
+\sceglivi{#6}{#1}{#5}{#3}{#2}{#4}{#7}\or%
+\sceglivi{#6}{#1}{#5}{#4}{#3}{#2}{#7}\or%
+\sceglivi{#5}{#1}{#4}{#3}{#2}{#6}{#7}\or%
+\sceglivi{#2}{#3}{#4}{#6}{#5}{#1}{#7}\or%
+\sceglivi{#4}{#2}{#6}{#1}{#3}{#5}{#7}\or%
+\sceglivi{#3}{#4}{#6}{#5}{#1}{#2}{#7}\or%
+\sceglivi{#1}{#3}{#2}{#6}{#4}{#5}{#7}\or%
+\sceglivi{#4}{#3}{#1}{#5}{#6}{#2}{#7}\or%
+\sceglivi{#5}{#6}{#1}{#3}{#2}{#4}{#7}\or%
+\sceglivi{#2}{#6}{#3}{#4}{#5}{#1}{#7}\fi}
+%%% pseudorandom versions (permutations of 7 esercises)
+\def\sceglivii#1#2#3#4#5#6#7#8{\expandafter\def\csname #8i\endcsname{#1}\expandafter\def\csname #8ii\endcsname{#2}%%
+\expandafter\def\csname #8iii\endcsname{#3}\expandafter\def\csname #8iv\endcsname{#4}\expandafter\def\csname #8v\endcsname{#5}%%
+\expandafter\def\csname #8vi\endcsname{#6}\expandafter\def\csname #8vii\endcsname{#7}}
+\def\prendivii#1#2#3#4#5#6#7#8{\ifcase\restotrenta\or%
+\sceglivii{#5}{#7}{#1}{#4}{#6}{#3}{#2}{#8}\or%
+\sceglivii{#1}{#5}{#2}{#6}{#7}{#4}{#3}{#8}\or%
+\sceglivii{#6}{#3}{#4}{#2}{#1}{#5}{#7}{#8}\or%
+\sceglivii{#1}{#2}{#7}{#5}{#3}{#4}{#6}{#8}\or%
+\sceglivii{#5}{#6}{#4}{#1}{#7}{#3}{#2}{#8}\or%
+\sceglivii{#6}{#4}{#1}{#5}{#3}{#2}{#7}{#8}\or%
+\sceglivii{#4}{#1}{#5}{#7}{#6}{#2}{#3}{#8}\or%
+\sceglivii{#7}{#2}{#4}{#6}{#5}{#3}{#1}{#8}\or%
+\sceglivii{#3}{#4}{#7}{#2}{#6}{#1}{#5}{#8}\or%
+\sceglivii{#4}{#5}{#6}{#7}{#3}{#2}{#1}{#8}\or%
+\sceglivii{#3}{#6}{#7}{#4}{#1}{#2}{#5}{#8}\or%
+\sceglivii{#5}{#7}{#4}{#3}{#2}{#1}{#6}{#8}\or%
+\sceglivii{#1}{#2}{#6}{#7}{#5}{#3}{#4}{#8}\or%
+\sceglivii{#6}{#1}{#4}{#3}{#7}{#2}{#5}{#8}\or%
+\sceglivii{#3}{#4}{#5}{#1}{#6}{#7}{#2}{#8}\or%
+\sceglivii{#5}{#1}{#4}{#3}{#2}{#6}{#7}{#8}\or%
+\sceglivii{#7}{#6}{#1}{#4}{#3}{#5}{#2}{#8}\or%
+\sceglivii{#2}{#4}{#7}{#3}{#5}{#1}{#6}{#8}\or%
+\sceglivii{#6}{#5}{#2}{#1}{#3}{#7}{#4}{#8}\or%
+\sceglivii{#7}{#3}{#6}{#5}{#2}{#4}{#1}{#8}\or%
+\sceglivii{#4}{#2}{#3}{#6}{#5}{#7}{#1}{#8}\or%
+\sceglivii{#1}{#3}{#4}{#2}{#7}{#6}{#5}{#8}\or%
+\sceglivii{#4}{#5}{#6}{#3}{#1}{#7}{#2}{#8}\or%
+\sceglivii{#5}{#6}{#1}{#2}{#3}{#4}{#7}{#8}\or%
+\sceglivii{#1}{#3}{#5}{#4}{#2}{#7}{#6}{#8}\or%
+\sceglivii{#2}{#7}{#3}{#5}{#6}{#1}{#4}{#8}\or%
+\sceglivii{#1}{#6}{#4}{#2}{#7}{#5}{#3}{#8}\or%
+\sceglivii{#7}{#5}{#2}{#4}{#1}{#3}{#6}{#8}\or%
+\sceglivii{#2}{#7}{#3}{#1}{#6}{#5}{#4}{#8}\or%
+\sceglivii{#3}{#5}{#1}{#6}{#2}{#4}{#7}{#8}\fi}
+%%% pseudorandom versions (permutations of 8 esercises)
+\def\scegliviii#1#2#3#4#5#6#7#8#9{\expandafter\def\csname #9i\endcsname{#1}\expandafter\def\csname #9ii\endcsname{#2}%%
+\expandafter\def\csname #9iii\endcsname{#3}\expandafter\def\csname #9iv\endcsname{#4}\expandafter\def\csname #9v\endcsname{#5}%%
+\expandafter\def\csname #9vi\endcsname{#6}\expandafter\def\csname #9vii\endcsname{#7}\expandafter\def\csname #9viii\endcsname{#8}}
+\def\prendiviii#1#2#3#4#5#6#7#8#9{\ifcase\restotrenta\or%
+\scegliviii{#2}{#8}{#6}{#7}{#4}{#3}{#1}{#5}{#9}\or%
+\scegliviii{#8}{#5}{#1}{#3}{#7}{#6}{#4}{#2}{#9}\or%
+\scegliviii{#7}{#1}{#8}{#6}{#3}{#2}{#5}{#4}{#9}\or%
+\scegliviii{#1}{#3}{#7}{#5}{#6}{#4}{#2}{#8}{#9}\or%
+\scegliviii{#4}{#1}{#2}{#3}{#5}{#7}{#8}{#6}{#9}\or%
+\scegliviii{#3}{#8}{#7}{#1}{#6}{#4}{#5}{#2}{#9}\or%
+\scegliviii{#5}{#3}{#8}{#6}{#1}{#7}{#2}{#4}{#9}\or%
+\scegliviii{#8}{#6}{#3}{#4}{#7}{#2}{#5}{#1}{#9}\or%
+\scegliviii{#6}{#3}{#8}{#7}{#5}{#1}{#4}{#2}{#9}\or%
+\scegliviii{#3}{#2}{#7}{#5}{#4}{#6}{#1}{#8}{#9}\or%
+\scegliviii{#4}{#3}{#6}{#7}{#8}{#1}{#2}{#5}{#9}\or%
+\scegliviii{#3}{#7}{#5}{#2}{#4}{#8}{#6}{#1}{#9}\or%
+\scegliviii{#7}{#2}{#4}{#8}{#5}{#6}{#1}{#3}{#9}\or%
+\scegliviii{#1}{#7}{#2}{#3}{#4}{#5}{#6}{#8}{#9}\or%
+\scegliviii{#7}{#1}{#8}{#5}{#2}{#4}{#3}{#6}{#9}\or%
+\scegliviii{#1}{#5}{#3}{#4}{#8}{#2}{#6}{#7}{#9}\or%
+\scegliviii{#5}{#1}{#8}{#3}{#4}{#6}{#7}{#2}{#9}\or%
+\scegliviii{#4}{#7}{#2}{#5}{#1}{#8}{#6}{#3}{#9}\or%
+\scegliviii{#5}{#3}{#1}{#6}{#2}{#4}{#8}{#7}{#9}\or%
+\scegliviii{#1}{#2}{#7}{#3}{#4}{#8}{#5}{#6}{#9}\or%
+\scegliviii{#1}{#8}{#6}{#4}{#5}{#2}{#3}{#7}{#9}\or%
+\scegliviii{#3}{#1}{#8}{#5}{#4}{#7}{#6}{#2}{#9}\or%
+\scegliviii{#6}{#5}{#4}{#1}{#3}{#2}{#7}{#8}{#9}\or%
+\scegliviii{#5}{#4}{#3}{#2}{#6}{#7}{#8}{#1}{#9}\or%
+\scegliviii{#1}{#6}{#2}{#8}{#3}{#5}{#7}{#4}{#9}\or%
+\scegliviii{#5}{#8}{#3}{#4}{#7}{#6}{#1}{#2}{#9}\or%
+\scegliviii{#2}{#7}{#8}{#1}{#4}{#3}{#5}{#6}{#9}\or%
+\scegliviii{#4}{#8}{#7}{#3}{#2}{#1}{#6}{#5}{#9}\or%
+\scegliviii{#7}{#4}{#2}{#5}{#1}{#6}{#8}{#3}{#9}\or%
+\scegliviii{#2}{#3}{#7}{#1}{#6}{#5}{#4}{#8}{#9}\fi}
+
+%========================================================%
+% Shuffle %
+%========================================================%
+
+\newcommand\shuf@ch{}%%% the exercise list
+\renewcommand{\theshuf@lop}{\roman{shuf@lop}}%
+\newcommand\shuf@ifch[3]{% #2=the input item
+\ifthenelse{\not\equal{\shuf@ch}{#1}}{\stepcounter{shuf@lop}\expandafter\edef\csname #2\theshuf@lop\endcsname{#3}}{}%
+}
+\newcommand\es@item[2]{%%% #1=the list #2=name of the input item
+ \edef\es@Lista{\zap@space#1 \@empty}%
+ \@for\shuf@ch:=\es@Lista\do{%
+ \shuf@ifch{}{#2}{\shuf@ch}%
+}
+}
+\newcommand{\sh@chex}[2]{%%% #1=the list #2=name of the input item
+\setcounter{shuf@lop}{0}%
+\renewcommand{\theshuf@lop}{\roman{shuf@lop}}%
+\es@item{#1}{#2}%
+\renewcommand{\theshuf@lop}{\arabic{shuf@lop}}%
+}
+
+%%% the command \es@estrai choices in list #1: #2=name input file, #3=name output file, #4=counter name
+\newcommand{\es@estrai}[4]{\sh@max=0\sh@chex{#1}{#2}\@getitems{#2}{#4}{#3}}
+
+%%% the command \es@randestrai choices in the list #2 leaving out #1 elements. #3=name input file, #4=name output file, #5=total number of file
+\newcommand{\es@randestrai}[5][0]{\sh@max=#1\sh@chex{#2}{#3}\rand@getitems{#5}{#4}[#3]}%
+\newcommand{\es@trai}[3][0]{%%% it extracts objects from the list #2 leaving out #1 elements. The objects will be named #3i, #3ii, ecc.
+\es@randestrai[#1]{#2}{tmp@in}{#3}{\theshuf@lop}
+}
+%%% \estrai is the user command to extract objects from the list #2 leaving out #1 elements.
+%%% \estraialfa extracts #1 random objects from the list #2 preserving order and naming them #3i,#3ii, ecc.
+
+\ifes@param%%% for parametric version
+\newcommand{\estrai}[3][0]{
+\es@trai[#1]{#2}{tmp@out}
+ \tmp@cntb=\value{shuf@lop}
+ \advance\tmp@cntb by -#1
+ \loop
+ \expandafter\edef\csname #3\romannumeral\tmp@cntb\endcsname{#3\romannumeral\tmp@cntb}%
+ \advance\tmp@cntb by-1
+ \ifnum\tmp@cntb>0
+ \repeat
+\immediate\write\params{\es@EstraiMessage{#2}{#3}}%%% writes to a file
+ \immediate\closeout\params
+}
+\newcommand{\estraialfa}[3]{
+\beg@al=#1
+\loop
+\expandafter\edef\csname #3\romannumeral\beg@al \endcsname{(#3\romannumeral\beg@al)}
+\advance\beg@al by-1
+\ifnum\beg@al>0
+\repeat
+\immediate\write\params{\es@EstraiMessage{#2}{#3}}%%% writes to a file
+}
+\else
+\newcommand{\estrai}[3][0]{
+\es@trai[#1]{#2}{tmp@out}
+ \tmp@cntb=\value{shuf@lop}
+ \advance\tmp@cntb by -#1
+ \loop
+ \expandafter\edef\csname #3\romannumeral\tmp@cntb\endcsname{\csname tmp@out\romannumeral\tmp@cntb\endcsname}%
+ \advance\tmp@cntb by-1
+ \ifnum\tmp@cntb>0
+ \repeat
+ }%
+ \newcommand{\estraialfa}[3]{\sh@chex{#2}{al@f}%
+\end@al=\value{shuf@lop}%
+\beg@al=#1%
+\loop%
+\advance\beg@al by-1%
+\FPsetpar{tmpalf}{\beg@al}{\end@al}[\beg@al]%
+\advance\beg@al by1 %
+\expandafter\edef\csname #3\romannumeral\beg@al \endcsname{\csname al@f\romannumeral\tmpalf \endcsname}%
+\advance\beg@al by-1%
+\end@al=\tmpalf%
+\advance\end@al by-1%
+\ifnum\beg@al>0%
+\repeat%
+}
+\fi
+
+%%% \esestrai is the user command to extract exercises from the list #2 leaving out #1 elements.
+
+\newcommand{\estraies}[2][0]{\es@trai[#1]{#2}{tmp@out}
+ \tmp@cnt=\value{shuf@lop}
+ \advance\tmp@cnt by -#1
+ \loop
+ \selectrandomly{\cartella/\csname tmp@out\romannumeral\tmp@cnt\endcsname}
+ \advance\tmp@cnt by-1
+ \ifnum\tmp@cnt>0
+ \repeat}%
+
+%%% \esercizi is the command that selects and shuffles the exercises from the list #1
+
+\newcommand{\esercizi}[1]{\sh@max=0\sh@chex{#1}{exe}\sh@mixex}
+
+\newcommandx{\rand@getitems}[3][3=item]{%%% randomly shuffles #1 elements named #2i, #2ii, ecc. and renames them #3i, #3ii, ecc.
+ \i@sh=#1
+ \loop%
+ \expandafter\let \csname flag\number\i@sh\endcsname a%
+ \advance\i@sh by-1%
+ \ifnum\i@sh > 0 \repeat%
+ \i@sh=#1
+ \loop%
+ \setrannum{\j@sh}{1}{#1}%
+ \expandafter\ifx \csname flag\number\j@sh\endcsname a%
+ \expandafter\let \csname flag\number\j@sh\endcsname b
+ \FPeval\n@tmp{round(#1-\number\i@sh+1:0)}%
+ \expandafter\edef\csname #2\romannumeral\n@tmp\endcsname{\csname #3\romannumeral\j@sh\endcsname}%
+ \advance\i@sh by-1%
+ \fi%
+ \ifnum\i@sh>0 \repeat
+}
+\ifes@fissa%%% with n<8 exercises the shuffle is pseudorandom and it's random otherwise
+\def\@getitems#1#2#3{
+\ifcase#2\or\prendii{\csname #1i\endcsname}{#3}%
+\or\prendiii{\csname #1i\endcsname}{\csname #1ii\endcsname}{#3}%
+\or\prendiiii{\csname #1i\endcsname}{\csname #1ii\endcsname}{\csname #1iii\endcsname}{#3}%
+\or\prendiiv{\csname #1i\endcsname}{\csname #1ii\endcsname}{\csname #1iii\endcsname}{\csname #1iv\endcsname}{#3}%
+\or\prendiv{\csname #1i\endcsname}{\csname #1ii\endcsname}{\csname #1iii\endcsname}{\csname #1iv\endcsname}{\csname #1v\endcsname}{#3}%
+\or\prendivi{\csname #1i\endcsname}{\csname #1ii\endcsname}{\csname #1iii\endcsname}{\csname #1iv\endcsname}{\csname #1v\endcsname}{\csname #1vi\endcsname}{#3}%
+\or\prendivii{\csname #1i\endcsname}{\csname #1ii\endcsname}{\csname #1iii\endcsname}{\csname #1iv\endcsname}{\csname #1v\endcsname}{\csname #1vi\endcsname}{\csname #1vii\endcsname}{#3}%
+\or\prendiviii{\csname #1i\endcsname}{\csname #1ii\endcsname}{\csname #1iii\endcsname}{\csname #1iv\endcsname}{\csname #1v\endcsname}{\csname #1vi\endcsname}{\csname #1vii\endcsname}{\csname #1viii\endcsname}{#3}%
+\else\rand@getitems{#2}{#3}[#1]%
+\fi%
+}%
+\else
+\def\@getitems#1#2#3{%%% random shuffle
+\rand@getitems{#2}{#3}[#1]%
+}
+\fi
+\def\cartella{\currfiledir}
+\ifthenelse{\equal{\cartella}{}}{\def\cartella{.}}{}
+\ifes@shuffleQuestions
+\newcommand{\sh@mixex}{%%% shuffled exercises
+\@getitems{exe}{\theshuf@lop}{file}%
+ \tmp@cnt=\value{shuf@lop}
+ \loop
+ \selectrandomly{\cartella/\csname file\romannumeral\tmp@cnt\endcsname}
+ \advance\tmp@cnt by-1
+ \ifnum\tmp@cnt>0
+ \repeat
+}%
+\else
+\newcommand{\sh@mixex}{%%% the exercises are not shuffled
+ \tmp@cnt=\value{shuf@lop}
+ \loop%
+ \selectrandomly{\cartella/\csname exe\romannumeral\tmp@cnt\endcsname}
+ \advance\tmp@cnt by-1
+ \ifnum\tmp@cnt>0
+ \repeat
+}
+\fi
+
+%========================================================%
+% Random (adapted from aebrandom) %
+%========================================================%
+
+\ifes@randomizeChoices
+\def\@ansChoices[#1]%
+{%
+ \ifes@randomizeChoices
+ \setkeys{bchoice}{#1,random=true}%
+ \else
+ \setkeys{bchoice}{#1}%
+ \fi
+ \global\es@tabColCnt=0
+ \ifes@randomizeChoices\expandafter\@@bChoices
+ \else\expandafter\@@ansChoices\fi
+}
+\def\@@ansChoices{%
+ \ifnum\aeb@numCols=1% % list mode
+ \def\es@next{\@layoutListAns}%
+ \else% % tabular mode
+ \edef\es@next{\noexpand\@layoutTabularAns{\bChoiceNumCols}}%
+ \fi
+ \es@next
+}
+\newtoks\aeb@hold\aeb@hold={}
+\def\@@bChoices{\gdef\@temphold{}\gdef\@tempholdrandom{}%
+ \gdef\@tempholdfreeze{}\aeb@searchfortoken{\@getAns}%
+}
+\def\aeb@searchfortoken#1{%
+ \@ifnextchar\Ans{\advance\aeb@numChoices1\relax#1}
+ {\@ifnextchar\eFreeze{\expandafter\@getFreezeAns\@gobble}
+ {\@ifnextchar\par{\def\@@temp{\aeb@searchfortoken{#1}}%
+ \expandafter\@@temp\@gobble}{\@eChoices}}}%
+}
+\long\def\@getAns\Ans#1\eAns{%
+ \g@addto@macro\@temphold{{\Ans#1\eAns}}%
+ \aeb@searchfortoken{\@getAns}%
+}
+\def\@getFreezeAns{\aeb@searchfortoken{\@@getFreezeAns}}
+\long\def\@@getFreezeAns\Ans#1\eAns{%
+ \g@addto@macro\@tempholdfreeze{\Ans#1\eAns}%
+ \aeb@searchfortoken{\@@getFreezeAns}%
+}
+\long\def\@eChoices#1\eChoices{%
+ \aeb@randomizeChoices{\the\aeb@numChoices}%
+}
+\def\aeb@randomizeChoices#1{%
+ \setrannum{\aeb@ranChoice}{1}{#1}
+ \count0=0 \aeb@hold=\expandafter{\@temphold}\def\@temphold{}%
+ \expandafter\@tfor\expandafter
+ \@temp\expandafter:\expandafter=\the\aeb@hold \do {%
+ \advance\count0by1
+ \ifnum\count0=\aeb@ranChoice
+ \aeb@hold=\expandafter\expandafter\expandafter
+ {\expandafter\@tempholdrandom\@temp}%
+ \edef\@tempholdrandom{\the\aeb@hold}%
+ \else
+ \aeb@hold=\expandafter\expandafter\expandafter
+ {\expandafter\@temphold\expandafter{\@temp}}%
+ \edef\@temphold{\the\aeb@hold}%
+ \fi
+ }%
+ \aeb@numChoices=#1
+ \advance\aeb@numChoices-1
+ \ifnum\aeb@numChoices=0\relax\def\@next{\aeb@finishedRandomizing}\else
+ \def\@next{\aeb@randomizeChoices{\the\aeb@numChoices}}\fi
+ \@next
+}
+\def\aeb@finishedRandomizing{%
+ \aeb@hold=\expandafter\expandafter\expandafter
+ {\expandafter\@tempholdrandom\@tempholdfreeze}%
+ \gdef\@temphold{}\gdef\@tempholdrandom{}\gdef\@tempholdfreeze{}%
+ \edef\finished@Randomizing{%
+ \noexpand\@@ansChoices
+ \the\aeb@hold
+ \noexpand\eChoices}%
+ \finished@Randomizing
+}
+\fi
+
+%========================================================%
+% Some shortcuts and Italian maths %
+%========================================================%
+
+\DeclareMathOperator{\sen}{sen}
+\DeclareMathOperator{\tg}{tg}
+\DeclareMathOperator{\arcsen}{arcsen}
+\DeclareMathOperator{\arctg}{arctg}
+\providecommand*{\dif}{\mathop{}\!\mathrm{d}}
+\providecommand{\dlim}{\displaystyle \lim}
+\providecommand{\me}{\mathrm{e}}
+\providecommand{\D}{\displaystyle}
+
+\newenvironment{sistema}{%%% Taken from somewhere in GUIT forum to write equations systems
+\left\lbrace\begin{array}{@{}l@{}}}%
+ {\end{array}\right.%
+ }
+
+\DeclareRobustCommand{\annu}[2]{_{%%% the annuity command
+ \def\arraystretch{0}
+ \setlength\arraycolsep{1pt}
+\setlength\arrayrulewidth{.2pt}
+\begin{array}[b]{c c}
+ \setlength\arraycolsep{1.5pt}
+ \begin{array}
+ [b]{r|}\hline
+ \\[\arraycolsep]
+ \scriptstyle #1
+ \end{array}&\scriptstyle#2%
+\end{array}%
+}}
+
+\newcommand{\vect}[1]{\boldsymbol{#1}}
+
+%%% We prefer var greek math %%%
+
+\newcommand{\eps}{\varepsilon}
+\newcommand{\oldtheta}{\theta} \renewcommand{\theta}{\vartheta}
+\newcommand{\oldepsilon}{\epsilon} \renewcommand{\epsilon}{\varepsilon}
+\newcommand{\oldrho}{\rho} \renewcommand{\rho}{\varrho}
+\newcommand{\oldphi}{\phi} \renewcommand{\phi}{\varphi}
+
+\endinput