summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/toptesi/toptesi.dtx
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/toptesi/toptesi.dtx
Initial commit
Diffstat (limited to 'macros/latex/contrib/toptesi/toptesi.dtx')
-rw-r--r--macros/latex/contrib/toptesi/toptesi.dtx8981
1 files changed, 8981 insertions, 0 deletions
diff --git a/macros/latex/contrib/toptesi/toptesi.dtx b/macros/latex/contrib/toptesi/toptesi.dtx
new file mode 100644
index 0000000000..ef86c19b16
--- /dev/null
+++ b/macros/latex/contrib/toptesi/toptesi.dtx
@@ -0,0 +1,8981 @@
+% \iffalse meta-comment
+% !TEX TS-program = pdflatex
+% !TEX encoding = UTF-8 Unicode
+%<*internal>
+\begingroup
+\input docstrip.tex
+\keepsilent
+
+
+\preamble
+ ______________________________________________________
+ The TOPtesi bundle
+ Copyright (C) 2015-2019 Claudio Beccari
+ All rights reserved
+
+ License information appended
+
+\endpreamble
+\postamble
+
+Copyright 2005-2019 Claudio Beccari
+
+Distributable under the LaTeX Project Public License,
+version 1.3c or higher (your choice). The latest version of
+this license is at: http://www.latex-project.org/lppl.txt
+
+For important further details see the English or the Italian
+documentation.
+
+This work is "author-maintained"
+
+This work consists of this file toptesi.dtx, a README file
+the manifest.txt file, and the derived files:
+ toptesi.cls,
+ toptesi.sty,
+ topfront.sty,
+ topcommand.sty,
+ toptesi-scudo.sty,
+ toptesi.cfg,
+ toptesi-monografia.sty,
+ toptesi-sss.sty,
+ toptesi-magistrale.sty,
+ toptesi-dottorale.sty,
+and the English documentation toptesi.pdf.
+
+Furthermore the bundle contains the documentation source
+file toptesi-it.tex and the derived file
+toptesi-it.pdf.
+
+The toptesi-example.tex source file is just an example
+that shows how to use the various commands; by commenting
+or uncommenting certain source lines it is possible to
+typeset different kind of theses and their front pages.
+
+The topfront-example.tex source file is an example of how
+to produce just the title page with TOPtesi and the external
+package frontespizio.
+
+The toptesi-scudo-example.tex source file is an example
+that shows the particular features available with TOPtesi,
+when a doctoral thesis is produced for the Scuola di
+Dottorato (ScuDo) of Politecnico di Torino.
+
+The toptesi.cfg file is a sample of a local configuration
+file that can be copied to another file and its copy freely
+edited and customised.
+
+The other toptesi-*.sty files are extension modules for
+typesetting the specific thesis kinds described by the
+suffix that replaces the asterisk.
+
+By running pdflatex on toptesi.dtx the user gets the class,
+sty and cfg files and the English documentation file in
+PDF format.
+
+The source file of the Italian documentation file
+toptesi-it.pdf is another example of how to use TOPtesi.
+This file toptesi-it.tex may be typeset with pdfLaTeX,
+XeLaTeX, and LuaLateX; see the first comment lines of
+the file for how-to information. In spite of being mainly
+written in Italian, it contains several sections in English
+for the benefit of foreign students attending the Doctoral
+School of Turin.
+\endpostamble
+
+\askforoverwritefalse
+
+\generate{\file{toptesi.cls}{\from{toptesi.dtx}{class}}
+ \file{toptesi.sty}{\from{toptesi.dtx}{topsty}}
+ \file{topcoman.sty}{\from{toptesi.dtx}{topcmn}}
+ \file{topfront.sty}{\from{toptesi.dtx}{topfrn}}
+ \file{toptesi.cfg}{\from{toptesi.dtx}{topcfg}}
+ \file{toptesi-scudo.sty}{\from{toptesi.dtx}{topscu}}
+ \file{toptesi-monografia.sty}{\from{toptesi.dtx}{topmon}}
+ \file{toptesi-sss.sty}{\from{toptesi.dtx}{topsss}}
+ \file{toptesi-magistrale.sty}{\from{toptesi.dtx}{topmag}}
+ \file{toptesi-dottorale.sty}{\from{toptesi.dtx}{topdoc}}
+ }
+
+\def\tmpa{plain}
+\ifx\tmpa\fmtname\endgroup\expandafter\bye\fi
+\endgroup
+%</internal>
+%
+% Copyright 1989--2019 Claudio Beccari
+%
+% This file is part of the TOPtesi bundle
+% -------------------------------------------
+%
+% It may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2003/12/01 or later.
+%
+% This file has the LPPL maintenance status "author-maintained".
+%
+% The list of all files belonging to the TOPtesi bundle is
+% given in the file `manifest.txt'.
+%
+% The set of derived (unpacked) files belonging to the distribution
+% and covered by LPPL is created by the self unpacking file toptesi.dtx
+% which is the principal part of the distribution.
+%
+% \fi
+%
+% \iffalse
+%^^A The following trick uses the same date for every file header.
+%<class,topsty,topcmn,topfrn,topscu,topmon,topsss,topmag>\NeedsTeXFormat{LaTeX2e}[2018/01/01]
+%<*driver>
+\ProvidesFile{toptesi.dtx}[%
+%</driver>
+%<class>\ProvidesClass{toptesi}[%
+%<topsty>\ProvidesPackage{toptesi}[%
+%<topcmn>\ProvidesPackage{topcoman}[%
+%<topfrn>\ProvidesPackage{topfront}[%
+%<topscu>\ProvidesPackage{toptesi-scudo}[%
+%<topmon>\ProvidesPackage{toptesi-monografia}[%
+%<topsss>\ProvidesPackage{toptesi-sss}[%
+%<topmag>\ProvidesPackage{toptesi-magistrale}[%
+%<topdoc>\ProvidesPackage{toptesi-dottorale}[%
+%<*driver,class,topsty,topcmn,topfrn,topscu,topmon,topsss,topmag,topdoc>
+2019-07-26 v.6.3.06
+%<class>Class for typesetting university theses]
+%<topsty>Extension for toptesi.cls]
+%<topcmn>Additional commands for the TOPtesi bundle]
+%<topfrn>Title page for TOPtesi and other classes]
+%<topscu>Extension for ScuDo theses]
+%<topmon>Bachelor degree title page]
+%<topsss>High school title page]
+%<topmag>Master degree title page]
+%<topdoc>Ph.D. degree title page]
+%</driver,class,topsty,topcmn,topfrn,topscu,topmon,topsss,topmag,topdoc>
+%<*driver>
+]
+%</driver>
+%<*driver>
+\documentclass{ltxdoc}
+\GetFileInfo{toptesi.dtx}
+\title{The TOPtesi bundle}
+\date{\fileversion\space--- \filedate}
+ \author{\makebox[\textwidth]{Claudio Beccari --- \texttt{claudio dot beccari at gmail dot com}}}
+\usepackage[utf8]{inputenc}
+\usepackage[LGR,T1]{fontenc}
+\usepackage{metalogo,multicol,enumitem,xspace,
+ xparse,curve2e,etoolbox,textcomp}
+\let\originalmeta\meta
+\renewcommand\meta[1]{{\normalfont\originalmeta{#1}}}
+\def\prog#1{\textsf{#1}}
+\def\pack#1{\textsf{\slshape#1}}
+\def\env#1{\textit{#1}}\let\amb\env
+\def\file#1{\texttt{#1}}
+\def\marg#1{{\normalfont\texttt{\{}\meta{#1}\texttt{\}}}}
+\def\Marg#1{{\texttt{\{#1\}}}}
+\def\opz#1{{\normalfont\textsl{#1}}}
+\def\oarg#1{{\normalfont\texttt{[\meta{#1}]}}}
+\def\Oarg#1{{\normalfont\texttt{[#1]}}}
+\def\parg#1{{\normalfont\texttt{(\meta)}}}
+\def\Parg#1{{\normalfont\texttt{(#1)}}}
+\def\TeXLive{TeXLive\xspace}
+\def\pdfLaTeX{pdf\/\LaTeX\unskip\xspace}
+\newcommand*\Bambiente[1]{\texttt{\char92begin}\Marg{#1}}
+\newcommand*\Eambiente[1]{\texttt{\char92end}\Marg{#1}}
+\DeclareRobustCommand\sigla[1]{\lowercase{\textsc{#1}}}
+\newenvironment{ttsintassi}{\flushleft\ttfamily\obeylines}{\endflushleft}
+%
+%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+% Some macros to typeset a framed box of natural or specified
+% width and height within the picture environment.
+% Needs packages curve2e, etoolbox, and xparse.
+% Syntax:
+% \Zbox(<position>)(<dimensions>)[<alignment>]{<box contents>}
+% The first and fourth arguments are mandatory; the second
+% and third arguments are optional; their default values are
+% (0,0) and [bl]. Furthermore the <position> and <dimension>
+% values are a comma separated pair of numbers representing
+% measures in \unitlength units, as well as it is done within the
+% picture environment. No provision is coded to take the measure
+% of the <box contents>. This contents should be some text, and when
+% <dimensions> are specified larger than zero, a \parbox is used
+% to typeset it. The <alignment> value(s) define the reference point
+% that is \put at the <position> coordinates.
+%
+\def\TOPsplitArgs(#1,#2)#3#4{\edef#3{#1}\edef#4{#2}}
+
+\NewDocumentCommand\Zbox{R(){0,0} D(){0,0} O{bl} m}{%
+\TOPsplitArgs(#2)\ZboxX\ZboxY % separa la x e la y della scatola
+\fboxsep=2\unitlength
+\ifnum\ZboxX=\csuse{z@}
+ \def\ZTesto{\fbox{#4}}%
+\else
+ \ifnum\ZboxY=\csuse{z@}
+ \def\ZTesto{\fbox{\parbox{\ZboxX\unitlength}{#4}}}%
+ \else
+ \def\ZTesto{%
+ \setbox2560=\hbox{\fbox{%
+ \parbox[c][\ZboxY\unitlength][c]{\ZboxX\unitlength}{#4}}}%
+ \dimen2560=\dimexpr(\ht2560 +\dp2560)/2\relax
+ \ht2560=\dimen2560\relax
+ \dp2560=\dimen2560\relax
+ \box2560%
+ }%
+ \fi
+\fi
+\put(#1){\makebox(0,0)[#3]{\ZTesto}}}
+
+\NewDocumentCommand\fileicon{R(){0,0} m}{%
+\put(#1){\moveto(0,-10)
+\curveto(7.5,-10)(7.5,-7.5)(15,-7.5)
+\lineto(15,10)
+\curveto(7.5,10)(7.5,7.5)(0,7.5)
+\lineto(0,-10)
+\strokepath}\put(#1){\put(7.5,0){\makebox(0,0){\ttfamily#2}}}
+}
+
+\def\ifTOPnextchar{\csuse{@ifnextchar}}
+
+\def\polyvector(#1){\def\TOPlastpoint{#1}\TOPpolyvector}
+
+\def\TOPpolyvector(#1){\ifTOPnextchar({\segment(\TOPlastpoint)(#1)%
+\def\TOPlastpoint{#1}\TOPpolyvector}{\VECTOR(\TOPlastpoint)(#1)}} % )
+
+
+%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+\begin{document}\errorcontextlines=9
+\maketitle
+\begin{multicols}{2}
+\tableofcontents
+\end{multicols}
+ \setlength\hfuzz{20pt}
+ \DocInput{toptesi.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{7660}
+%
+% \begin{abstract}
+% This file describes the TOPtesi bundle; it consists of a set of files
+% designed to typeset a university final report that in Italian
+% is generally called “tesi”; it was originally developed at
+% the Technical University of Turin (Politecnico di Torino) but
+% it was adapted for typesetting theses in any Italian university.
+% Well\dots\ since the Erasmus student mobility is very extended
+% and many Italian students participate in the so called
+% \textit{double degree} programs, their theses, or whatever they
+% are called in other countries, may be typeset so as to comply
+% also with the host university rules; therefore this set of
+% files has the ambition to be suited for typesetting theses in
+% any university in the world\dots\ This ambition can't be
+% fulfilled, though, because of the complexity of the title
+% page (and possibly of the legal page) requirements. This
+% version is compliant with the \XeLaTeX\ and the \LuaLaTeX\
+% programs. Up to now the few conflicts that have
+% been spotted have been solved with suitable corrections or
+% additions. The most important feature with \XeLaTeX\ is that
+% the option \opz{pdfa} cannot be used any more; this is due to the
+% fact that the typesetting engine \XeTeX\ does not directly
+% produce any \sigla{PDF} output but a modified, extended DVI one,
+% that is immediately converted into a \sigla{PDF} file through
+% |xdvipdfmx|, a special version of the conversion program. Another
+% minor \XeLaTeX\ feature is that it cannot fully exploit the
+% typesetting facilities of the |microtype| package, but the wide
+% choice of OpenType font properties replaces almost completely
+% such missing |microtype| features.
+%
+% With version~6.xx, the bundle has been modularised in a (hopefully)
+% more efficient way, although it is backwards compatible, so that
+% version~5.xx functionalities are still available.
+%
+% A totally new module is the one that allows to typeset the Italian
+% high school “tesina”, a document that is examined by the
+% graduation exam committee at the end of secondary studies.
+%
+% The user should not be scared by the number of pages of this
+% documentation; s/he should read part of the first 31 pages,
+% those that concern his/her thesis. The rest is just the code
+% and its documentation; it is useful mostly for me, as the
+% author, and to other programmers and/or curious users.
+% The “normal” user should not spend his/her time to read
+% unnecessary information.
+%
+% \textcolor{red}{This bundle is distributed under the \LaTeX\ Project
+% Public Licence (LPPL) which is appended to the Italian documentation
+% file \texttt{toptesi-it.pdf} included in this bundle; personal
+% customisation of parts of this bundle are discouraged but are
+% permitted only in conformance with the LPPL. See also section~\ref{sec:LPPL}.}
+% \end{abstract}
+%
+% \section{History}
+% The TOPtesi bundle at its very beginning in the early nineties
+% was just one |.sty| file to be used with the |report| class.
+% At that time there was only \LaTeX{\,209} and extension
+% packages were called “style files”; the |.sty| extension
+% is still used today for backwards compatibility, but |.sty|
+% files are not any more used to change the style of the document.
+%
+% With version 2.x, suitable for \LaTeXe, the bundle was
+% modified in order to have a class of its own,
+% |toptesi.cls|, which provided to collecting the necessary
+% options and to pass them to the |report| class; it
+% loaded the |toptesi.sty| just afterwords.
+% The latter file was not monolithic any more; it was split
+% in three parts: |toptesi.sty| contained most settings and
+% the macros to be used in the body of the document;
+% |topfront.sty| provided the commands for entering all the
+% necessary and optional data for the frontispiece (or title
+% page) and actually typeset the title page in different
+% styles; |topcoman.sty| contained the definitions of several
+% useful commands; actually this module could be used without
+% reference to the TOPtesi bundle, being suitable as an
+% extension to any class.
+%
+% The general scheme may be represented by the flow diagram
+% in figure~\ref{fig:simple-flow-diagram}.
+%\begin{figure}\centering
+%\unitlength=0.00925\textwidth
+%\begin{picture}(106,20)
+%\fileicon(0,10){.tex}\VECTOR(15,10)(20,10)
+%\Zbox(20,10)(18,0)[l]{\ttfamily toptesi.cls\\toptesi.sty}\VECTOR(41.5,10)(47,10)
+%\Zbox(47,10)[l]{\ttfamily topfront}\VECTOR(63.5,10)(70,10)
+%\Zbox(70,10)[l]{\ttfamily topcoman}\VECTOR(86.5,10)(91,10)
+%\fileicon(91,10){.pdf}
+%\end{picture}
+%\caption{Quasi original TOPtesi bundle flow diagram}
+%\label{fig:simple-flow-diagram}
+%\end{figure}
+%
+% Version 3.x was modified, on request of several users, in
+% order to avoid the |toptesi.cls| class file, but to allow
+% the other files, from |toptesi.sty| on, to be used with
+% any standard or custom class.
+%
+% On request of other users, after other upgrades, the bundle was
+% upgraded to version 5.85; the purpose was to introduce the
+% possibility of typesetting the thesis title page with a package
+% totally independent from the TOPtesi bundle. In particular the
+% |frontespizio| package by Enrico Gregorio was considered
+% a fancy choice for most Italian users, but the new approach
+% was open to any other package. The choice was made by
+% setting suitable switches (boolean variables). The solution
+% opened the bundle to other external contributions, although
+% the mechanism was sort of tricky. The bundle was made
+% compatible with other packages, for example |caption|
+% and/or |geometry|, while before this change such packages produced
+% options clashes and/or other errors, so that their use
+% was explicitly forbidden. Meanwhile the |topfront| module
+% was configured to be loaded just after the preamble end,
+% so as to be able to check if the user loaded packages that
+% required special attention in order to avoid conflicts;
+% see figure~\ref{fig:toptesi+frontspizio}.
+%
+%\begin{figure}\centering\unitlength=0.009\textwidth
+%\begin{picture}(115,45)(0,-3)
+%\fileicon(0,10){.tex}\VECTOR(15,10)(20,10)
+%\Zbox(20,10)(18,0)[l]{\ttfamily toptesi.cls\\toptesi.sty}
+%\Zbox(20,30)(18,0)[l]{\centering\ttfamily user loaded\\packages}
+%\VECTOR(42,10)(50,10)
+%\VECTOR(31,23)(31,15)
+%\polygon(50,10)(55,5)(60,10)(55,15)
+%\polyvector(55,5)(55,0)(60,0)
+%\Zbox(60,0)[l]{\ttfamily topfront}
+%\polyvector(55,15)(55,20)(60,20)
+%\Zbox(60,20)[l]{\ttfamily frontespizio}
+%\VECTOR(42,30)(47,30)\put(49,30){\circle{4}}\VECTOR(51,30)(60,30)
+%\polyvector(42,12)(49,12)(49,28)
+%\Zbox(60,30)[l]{\ttfamily topcoman}
+%\put(87,10){\circle{4}}\VECTOR(89,10)(95,10)
+%\polyvector(84,20)(87,20)(87,12)
+%\polyvector(77,0)(87,0)(87,8)
+%\polyvector(77,30)(90,30)(90,15)(95,15)
+%\fileicon(95,10){.pdf}
+%\end{picture}
+%\caption{Advanced TOPtesi bundle flow diagram}
+%\label{fig:toptesi+frontspizio}
+%\end{figure}
+%
+% Version 5.x introduced a new feature: the specific settings
+% for the doctoral theses written at Politecnico di Torino
+% (Technical Institute od Turin); after all the bundle was
+% born in that university. The switching mechanism to select
+% the various thesis title page settings still worked with
+% suitable boolean variables, but it was becoming a little
+% too clumsy.
+%
+% In order to put some order in this situation I decided to
+% upgrade to version 6.x; the class options now use the
+% \emph{key\,$=$\,value} syntax (of course the value
+% |true| is the default setting for boolean variables).
+% This allows to select the thesis type with a
+% \emph{key\,$=$\,value} option, therefore the selection and
+% configuration of the title page should be simpler than before.
+%
+% The new situation flow diagram is represented in
+% figure~\ref{fig:key-value-option}; the diagram is
+% complicated but, once selected a specific option
+% for the thesis type, the diagram reduces to a linear one.
+%
+%\begin{figure}[p]\centering
+%\unitlength=0.010\textwidth
+%\makebox[\textwidth]{\begin{picture}(112.5,140)
+%\fileicon(0,33){.tex}
+%\polyvector(15,33)(20,33)(20,48)(0,48)(0,58)(5,58)
+%\Zbox(5,58)(18,0)[l]{\small\ttfamily toptesi.cls\\toptesi.sty}
+%\VECTOR(27,58)(32,58)
+%\put(36.5,57){\rotatebox[origin=Bl]{90}{%
+% \makebox(0,0){\fboxsep=2\unitlength
+% \framebox(116,9){\parbox[c][5\unitlength][c]{112\unitlength}%
+% {\centering Options\\\texttt{tipotesi\,=\,}\emph{value}}}}}}
+%\VECTOR(41,6)(45,6)\Zbox(45,6)(25,0)[l]{%
+%\centering\texttt{topfront} (\emph{default})}
+%\VECTOR(41,22)(45,22)\Zbox(45,22)(31,0)[l]{\centering\texttt{toptesi-triennale}}
+%\VECTOR(41,37)(45,37)\Zbox(45,37)(33,0)[l]{\centering\texttt{toptesi-magistrale}}
+%\VECTOR(41,52)(45,52)\Zbox(45,52)(31,0)[l]{\centering\texttt{toptesi-dottorale}}
+%\VECTOR(41,67)(45,67)\Zbox(45,67)(31,0)[l]{\centering\texttt{toptesi-scudo}}
+%\VECTOR(41,81)(45,81)\Zbox(45,81)(32,0)[l]{\centering\texttt{toptesi-sss}}
+%\VECTOR(41,96)(45,96)\Zbox(45,96)(32,0)[l]{\centering\texttt{frontespizio}}
+%\VECTOR(41,111)(45,111)\Zbox(45,111)(32,0)[l]{\centering\texttt{custom}}
+%\Zbox(5,129.5)(18,0)[l]{\centering\ttfamily user loaded\\packages}
+%\VECTOR(16,125)(16,63)
+%\VECTOR(27,129.5)(35,129.5)\put(37,129.5){\circle{4}}
+%\VECTOR(39,129.5)(45,129.5)
+%\Zbox(45,129.5)(16,0)[l]{\centering\ttfamily topcoman}
+%\polyvector(27,61)(29,61)(29,120)(37,120)(37,127.5)
+%\put(90,67){\circle{4}}\VECTOR(92,67)(97.5,67)
+%\polyvector(65,129.5)(93,129.5)(93,70)(97.5,70)^^A topcomand
+%\polyvector(81,111)(90,111)(90,69)^^A custom
+%\polyvector(81,96)(88,96)(88,72)(89,68.4)^^A frontespizio
+%\polyvector(81,81)(86,81)(86,70)(88.4,68.2)^^A secondaria
+%\VECTOR(80,67)(88,67)^^A scudo
+%\polyvector(80,52)(86,52)(86,63)(88.4,65.6)^^A dottorale
+%\polyvector(82,37)(88,37)(88,60)(89,65.2)^^A magistrale
+%\polyvector(80,22)(90,22)(90,65)^^A triennale
+%\polyvector(74,6)(92,6)(92,62)(91,65.1)^^A topfront
+%\fileicon(97.5,68.5){.pdf}
+%\end{picture}}
+%\caption{Version 6.x TOPtesi bundle flow diagram}
+%\label{fig:key-value-option}
+%\end{figure}
+%
+% Special care was paid to maintain backwards compatibility;
+% the various |.sty| module-files (with descriptive names)
+% should be usable also with other classes, if desired.
+% It is possible to specify a |custom| value for a thesis type;
+% in this case the user is required to explicitly load his/her
+% personal package, or to avoid loading anything and use
+% either a different typesetting program to produce a title
+% page (in \sigla{pdf} format to be included by means of
+% the |pdfpages| package), or even create his/her personal
+% title page by means of the standard |titlepage| environment.
+%
+% All this implied the rewriting of both the English and
+% Italian documentation files; the user can find useful
+% information in the English file |toptesi.pdf| included
+% in the bundle; this file is pretty lengthy because it
+% contains also the documented code. The Italian documentation
+% in |toptesi-it.pdf|, is also part of this bundle; it is
+% partly written in English for the benefit of the many foreign
+% students that study in the doctoral school of Politecnico di
+% Torino; it contains many examples enriched with graphic
+% “demonstrations”. These two documentation files complement
+% one another.
+%
+% \section{Introduction}
+% The new TOPtesi bundle contains a certain number of files.
+% \begin{enumerate}[noitemsep]
+% \item
+% A class file \texttt{toptesi.cls} to be used as the main
+% document class; the main document may be any of a certain
+% number of reports that in Italy are called with various names:
+% “monografia”, “monografia di laurea”, “tesi di laurea”,
+% “tesi di laurea triennale”, “tesi di laurea specialistica”,
+% “tesi di laurea magistrale”, “tesi di dottorato”,
+% “dissertazione di dottorato”, and so on.
+% All these documents have in common the fact that they all
+% conclude a period of university education. Moreover since they
+% may conclude a double degree university program, they may receive
+% foreign names such as, for example, “Projet de fin d'\'etudes”,
+% “Master thesis”, and the like.
+% \item
+% An extension package \texttt{toptesi.sty} that contains most
+% of the code for the real typesetting; it might be used as an
+% extension to other classes, although this use is seldom necessary.
+% \item
+% A second extension package \texttt{topfront.sty} that contains
+% the commands and the typesetting macros for the title page; this
+% file may be used as an independent extension package to be added
+% to, say, the report or the book class files for typesetting just
+% the title page; this file might be used as a template for setting
+% up the title page fixed information in languages different from
+% Italian. This package is part of the bundle, but it is
+% automatically loaded only if the user did not specify the
+% |tipotesi=|\meta{thesis type} option to the class; if the
+% |toptesi=frontespizio| option is specified, the external package
+% |frontespizio| gets loaded; if the |toptesi=custom| option is
+% specified the user should do everything by him/herself.
+% The |tipotesi=custom| is very tolerant; in the sense that the user
+% is allowed to avoid loading any custom package, and simply create
+% the title page by means of the standard |titlepage| environment.
+% The available thesis kinds are the following; for each value of
+% the |tipotesi|key e differnet titlepage is typeset as the following
+% list specifies.
+% \begin{itemize}[noitemsep]
+% \item \opz{tipotesi=triennale} (or \opz{monografia} for
+% backwards compatibility) for the bachelor degree final work;
+% \item \opz{tipotesi=magistrale} for the master thesis;
+% \item \opz{tipotesi=dottorale} for a generic Ph.D.\ thesis;
+% \item \opz{tipotesi=scudo} for the special version of the Ph.D.\
+% thesis at Politecnico di Torino;
+% \item \opz{tipotesi=secondaria} for the high school “tesina”;
+% \item \opz{tipotesi=custom} for using another title page package,
+% possibly a customised one the user may create in
+% accordance with a certain template that implements his/her
+% university requirements.
+% \item \opz{tipotesi=frontespizio} for typesetting a
+% title page according to the style of the |frontespizio| package.
+% \end{itemize}
+% The user who needs a different title page style is neither
+% obliged to create a custom module, nor to create his/her title
+% page “by hand” within the |titlepage| environment: before this
+% decision we suggest to use the package |frontespizio| and we
+% address the user to its documentation.
+%
+% It is important to recall that if the |topfront| package has
+% to be loaded, it is only at the execution of the |\begin{document}|
+% command. Therefore no title page commands of any kind (those
+% defined by |topfront| or by the other modules) can be used in the
+% preamble.
+% \item
+% A third extension package \texttt{topcoman.sty} that defines
+% a certain number of user commands suitable for typesetting
+% technical matters.
+% \item
+% Several extension files are available by means of the
+% |toptesi=|\meta{module} option. They share the \meta{module}
+% name in the form \texttt{toptesi-\meta{module}.sty}.
+% The \meta{module} may assume the following values:
+% \begin{itemize}
+% \item |monografia| or |triennale|,
+% \item |magistrale|,
+% \item |dottorale|,
+% \item |scudo|,
+% \item |sss|.
+% \end{itemize}
+% These modules are specifically designed to typeset particular
+% thesis kinds; |scudo| refers to the particular doctoral school
+% of Politecnico di Torino, whose official name is \emph{Scuola di
+% Dottorato}, whence the acronym “ScuDo”. Such ScuDo theses must
+% be typeset only in English, and must have a special title page,
+% very different from the other ones that can be typeset with
+% the various options of the TOPtesi bundle, and by the
+% commands contained in the various modules. In all cases where
+% specific modules exists, a specific module switch is set such
+% that \texttt{topfront.sty} does not get loaded, and
+% another set of commands is made available to set up
+% the necessary information.
+% \item
+% Previous versions of this bundle contained also the logos of
+% a set of universities; these logos are not distributed anymore
+% because of legal constraints. Every user who is working on
+% his/her degree course final report may retrieve the logo of
+% his/her university, but s/he should pay attention to use it in
+% accordance with the rules and limitations of the university.
+% \item
+% A documentation file \texttt{toptesi-it.pdf} written mostly
+% in Italian, explains in detail every feature; essential information
+% is given in this Italian documentation. The source file of the
+% documentation \texttt{toptesi-it.tex} may be used as a sample
+% or template for typesetting one's thesis with any of \pdfLaTeX,
+% \XeLaTeX, or \LuaLaTeX.
+% \end{enumerate}
+%
+% The above files are complemented with a configuration file
+% that any user may customise at will; this customisation file
+% makes it easy to configure the bundle so as to make it suitable
+% for another language; in facts the \textsf{babel} and
+% \textsf{polyglossia} packages contain localisations for many
+% languages, but such localisations deal with the standard infix
+% \LaTeX\ names and phrases and do not cope with the thesis
+% title page requirements. This configuration file is usable only
+% when no custom or external files are used for typesetting
+% the title page; but they may be used for all standard modules
+% of this bundle.
+%
+% TOPtesi was specifically conceived for typesetting theses
+% with the \LaTeX\ mark-up, and initially it was using the
+% \textsf{tex} typesetting engine; later on this engine was
+% substantially substituted by the \textsf{pdftex} one, which
+% was capable of direct output of \sigla{PDF} files. Since about 2006
+% the typesetting engine \XeTeX\ has been available; the most important
+% feature of this engine is its capability of using OpenType
+% fonts, among which those that are available to the
+% operating system of the specific platform where the document
+% is being typeset. Since 2017 a stable version of \LuaTeX\ is
+% available that does much more than \XeTeX.
+%
+% For what concerns theses these programs might be of essential
+% importance when they deal with specific languages that use
+% different scripts (Greek, Russian, Bulgarian, Chinese, Japanese,
+% Korean, Hebrew, Arabic, Farsi, Thai, and so on). Of course
+% \LuaLaTeX\ has many more functionalities and can perform very
+% well where the other engines are sort of limited; in particular
+% \LuaLaTeX\ can produce \sigla{ISO}-compliant archivable-documents more
+% easily than the other typesetting engines; but the user does not
+% have to learn too many more concepts in order to typeset a
+%“normal” thesis.
+%
+% This version of TOPtesi has been tested also with \XeLaTeX\ and
+% \LuaLaTeX. Some conflicts have been spotted and solved; may
+% be there are still hidden ones, so that feedback from users
+% is particularly welcome. The only main drawback still present
+% when running \XeLaTeX\ is the fact that this program cannot still
+% \emph{directly} produce the output file in \sigla{PDF} format,
+% although it automatically transforms its specific output file
+% into that format.
+% This implies that the specific \textsf{pdftex} features required
+% to produce a \sigla{PDF/A} compliant output \sigla{PDF} file suitable for
+% long term archiving cannot be used. But with some attention the
+% \sigla{PDF} file output by \XeLaTeX\ may be converted to \sigla{PDF/A}
+% by using the \pack{pdfpages} package.
+%
+% \section{User commands}
+% The \texttt{toptesi.cls} is basically an extension of the
+% standard class \texttt{report.cls}; it redefines the page
+% typesetting grid, the headers and the footers, and the title
+% page layout and commands. \texttt{toptesi.cls} does not set
+% such crazy settings as “double spaced” text; it is intended
+% to typeset the thesis with the quality of a \LaTeX\ well typeset
+% document, not as a typewriter written one.
+%
+% Very often theses are full of specialised material: formulas,
+% diagrams and pictures, texts written in non Latin alphabets,
+% special symbols for philological mark-up, and the like; a
+% common typewriter would not be suitable because the specific
+% contents requires professional typesetting; this is why
+% I strongly believe that instructions on typesetting styles that
+% refer to the “good, old, gone-by times” of mechanical typewriters
+% should be banned.
+%
+% At the same time the class allows to typeset theses on any paper
+% format; nowadays, in facts, Universities are requesting theses
+% in smaller formats than A4 or letter paper. With smaller paper
+% sizes the layout changes automatically, but the title page might
+% require some more attention. The default paper size is A4, but
+% the user can set any paper size among those accepted by the
+% |report| standard class. If the \opz{tipotesi=frontespizio}
+% option is specified so that package |frontespizio| gets
+% loaded, it is necessary to remind that it can easily create
+% pretty nice title pages, but by default it is preset to use A4
+% paper, onto which it can typeset the title page in two styles, one so
+% called “standard”, and the other called “elements”; the latter one
+% mimics that of the famous book \emph{Elements of typographic
+% style} by Robert Bringhurst; this is so at least with
+% |frontespizio| version dated 2011/09/21 or earlier. It is
+% possible to use |frontespizio| to use a different paper size,
+% but it is necessary to use certain customisation commands
+% described in its documentation.
+%
+% Therefore if you want to typeset your thesis while typesetting
+% the title page by means of the functionalities of package
+% |frontespizio|, you have to follow carefully how to use that
+% package options in the proper way as to bypass the two fixed
+% styles it can produce. See also the Italian documentation
+% contained in the document |toptesi-it.pdf|.
+%
+% Most new commands refer themselves to the information that should
+% be typeset in the title page; some class options specify special
+% stylistic page details; the rest is simple and traditional
+% \LaTeX\ mark-up as it is implemented in the \LaTeX\ kernel and
+% in the report class. If \XeLaTeX\ or \LuaLaTeX\ has to be used,
+% some essential preamble specific commands are to be used, but
+% the body of the thesis has the same mark-up.
+%
+% For theses to be typeset for the ScuDo doctoral school,
+% all necessary commands become available when the class
+% option \opz{tipotesi=scudo} is specified; such commands are
+% available \emph{only} with that option.
+
+% Notice that only the ScuDo module of TOPtesi contains a setup
+% for typesetting the bibliography. For other thesis kinds
+% the user is in charge of loading the suitable extension
+% packages s/he likes best in order to customise his/her
+% bibliography/ies. Instructions for customisation are given
+% only in the specific section~\ref{sec:scudo}. Other suitable
+% sections describe the other special thesis modules and their
+% specific options.
+%
+% \subsection{Class options}
+% The class honors all the options accepted by the |report|
+% document class plus the ones defined here:
+% \begin{description}[noitemsep]\def\Item[#1]{\item[\opz{#1}]}
+% \Item[chapterbib] Allows to typeset a list of references at the
+% end of each chapter and the bibliography items are numbered with
+% a \emph{chapter.item} indication. This implies a manual build
+% up of each end-of-chapter bibliography by means off a specific
+% |thebibliography| environment. This work may be avoided if the
+% user relies on the various packages already available in any
+% complete \TeX\ system distribution and the facilities offered
+% by packages such as \pack{biblatex}, and on the sorting and formatting
+% engines such as \prog{biber}. The use of this option, retained for
+% backwards compatibility, is strongly deprecated.
+%
+% \Item[stile=classica] Specifies a general modification of certain
+% details that are supposed to be more adequate for theses in
+% humanities; specifically this option lets old style numbers to
+% be used for some numerical pieces of information; some variations
+% are also introduced in the title page. This option is active also
+% when using some of the modules for specific theses, in particular
+% with the |dottorale| thesis option.
+%
+% \Item[cucitura=\meta{displacement}] In two sided printing
+% it is better to move the typesetting grid towards the outer
+% edge so as to cope with the thesis binding that is generally
+% not made up by sewing together a number of signatures; the
+% default outer displacement is fixed to~7mm, but it can be
+% customised by means of a proper value to the class option
+% |cucitura=|\meta{displacement} or by using an explicit command
+% in the preamble: \cs{setbindingcorrection}\marg{displacement}.
+% The \meta{displacement} specification is necessary but it
+% remains inactive if the key \texttt{cucitura} is absent while
+% using the \cs{setbindingcorrection} command.
+%
+% \Item[corpo=\meta{font size}] Extends the normal size
+% choice to the chosen \meta{font size}; it is
+% appreciated in certain fields of humanities, but I would
+% discourage this use in a technical thesis, where the default
+% 10 point size sometimes might be too small, but 11 point or
+% 12 point typesetting may be adequate. In any case the
+% \meta{font size} may be specified in any units the \TeX\
+% system accepts, and any value, even fractional, may be used.
+% Please, do not exaggerate with small sized normal fonts, where
+% I would say that 9.5pt is the absolute minimum acceptable size
+% for normal text. Do not exaggerate with large sizes; 14pt is
+% acceptable for certain theses where unusual signs are
+% used above or below some alphabetic strings, otherwise 14pt
+% is already too much; let us say that 12.5pt or 13pt are
+% the maximum normally accepted; larger sizes are used only
+% for books to be used in the first years of the elementary
+% school or for people with various types of visual impairment.
+%
+% \Item[autoretitolo] This option modifies the left hand (even
+% numbered) pages in two side typesetting; normally the even
+% numbered page headings contain the chapter title, while the
+% odd numbered ones contain the current section title.
+% If and only if the \opz{classica} option has been specified, then
+% the |autoretitolo| option makes even numbered page headings
+% contain the author's name and the thesis title, while the odd
+% numbered ones contain the chapter title.
+% Since the thesis title might be too long to fit into the header
+% together with the author's name, the |\title| macro as been
+% redefined so as to accept an optional short title: this feature
+% mimics the ordinary sectioning commands.
+%
+% \Item[oldstyle] Also this option works only if \opz{classica}
+% had already been specified; it typesets several numerical data
+% with the old style numbers.
+%
+% \Item[numerazioneromana] Sets the front matter folios in Roman
+% numerals; if this option is not used, the folios are in Arabic
+% numerals and do not restart from~1 when the first main matter
+% chapter is typeset. The traditional Roman numbering of front
+% matter folios had its explanation when typesetters used metal
+% type; with this technique they could produce all the front
+% matter material, including references, tables of contents, and
+% the like, only when the main matter was complete, corrected
+% and stable. Nowadays with electronic typesetting there is no
+% need to to use this artifice, but in some disciplines it is
+% still considered an elegant touch.
+%\end{description}
+%
+% Since version 6.xx.yy options to the TOPtesi class follow the
+% syntax \emph{key${}={}$value}; depending on the kind of thesis
+% there there are some values that are particularly significant;
+% the key for all of them is |tipotesi| (\emph{thesis kind});
+% the values are indicated hereafter.
+%
+%\begin{description}[noitemsep]\def\Item[#1]{\item[\opz{#1}]}
+%
+% \Item[tipotesi-topfront] is the default and it is not necessary
+% to specify it. This means that if you specify |tipotesi| without
+% a value, or if you completely omit this option, the generic
+% |topfront| module is used to typeset the title page.
+%
+% \Item[tipotesi=frontespizio] omits loading the generic module
+% |topfront| and loads the external package |frontespizio|'
+% without any option; this implies that the user should read its
+% documentation and use it accordingly.
+%
+% \Item[tipotesi=scudo] sets up the suitable switches and allows
+% loading the specific extensions to typeset doctoral theses for
+% the ScuDo doctoral school. This implies that not only the title
+% page is typeset according to this School regulations, but that
+% some other packages get preloaded; the user can read further
+% on what actually becomes available with this option; the most
+% relevant difference is that the default language becomes English
+% also for the naming of the user commands.
+%
+% \Item[tipotesi=triennale] and \opz{tipotesi=monografia}
+% (aliases of one another) load the specific module to
+% typeset the bachelor degree final-work title-page. Some
+% user commands are redefined so as to be more user friendly
+% than those of the generic package |topfront|.
+%
+% \Item[tipotesi=magistrale] loads the specific module
+% to typeset the master degree thesis title-page. This module
+% is substantially equivalent to the generic module |topfront|
+% except that typesets only the master-degree thesis title-page.
+%
+% \Item[tipotesi=dottorale] loads the specific
+% module to typeset doctoral thesis title-pages. This module is
+% very basilar and has nothing to do with the module for the
+% ScuDo doctoral theses that require a particular title-page
+% layout; we suggest to customise this module through a suitable
+% configuration file, rather than tweaking the ScuDo module.
+%
+% \Item[tipotesi=secondaria] loads the module to typeset the
+% secondary school (high school) final work title page. The
+% default language, also for the user commands, is Italian.
+% Of course the secondary school final work title page is very
+% different from the one suited for university theses. In any
+% case, except for few additional packages, the body of the
+% TOPtesi functionality is maintained intact.
+%
+% \Item[tipotesi=custom]
+% is a very simple option: sets the various internal switches
+% so as not to load any internal module or external file.
+% If the user explicitly loads one before the |\begin{document}|
+% statement, this file becomes the one that the user must follow
+% to create his/her own title page; otherwise if the user wants
+% a custom title page s/he may use the |titlepage| environment;
+% in this case the user is completely free to write what s/he
+% wants, where s/he prefers, using the fonts s/he likes, and
+% so on. In alternative the user prepares the title page in
+% \sigla{pdf} format with some other program and includes it
+% in his/her thesis by means of the functionalities of the
+% |pdfpages| package. In any case the user is not forced by
+% this TOPtesi bundle to use any of its title page facilities;
+% its title page facilities are highly recommended for theses
+% to be submitted to the Student Office of Politecnico di Torino,
+% and for the ScuDo doctoral theses; in other universities and
+% in disciplines different from those connected with Politecnico
+% di Torino, the user is free to follow his/her University
+% prescriptions without any constraint by the TOPtesi bundle.
+%
+% \item[Attention!] It goes by itself that each one of the last
+% options does not load the generic module |topfront|, therefore
+% the commands provided by this standard module are not available
+% any more. Every effort has been made in the various modules to
+% maintain the same commands, but in certain thesis kinds they
+% might behave differently than expected.
+%
+% The user therefore is strongly urged to consult the documentation
+% files, both |toptesi.pdf| and |toptesi-it.pdf|, in order to
+% avoid problems with commands that are not suited for a particular
+% thesis type. Please examine also the examples that accompany
+% this bundle
+% \end{description}
+%
+% \subsection{Title page commands}
+% Note: Skip this section if you decide to load an external
+% package, such as, for example, |frontespizio|, for typesetting the
+% title~page. Notice also that if you want to load an external
+% package for this task, you should load it \emph{after}
+% specifying the input encoding you use for your text files.\bigskip
+%
+% \noindent The user must specify a certain number of commands
+% in order to have the title page contain all the required
+% information. It must be specified that most of these commands
+% may be used in the configuration file so as to avoid repeating
+% the same data for different “final reports”: a university
+% student might write a bachelor's “monografia”, then a master
+% thesis and finally a doctoral dissertation; why should s/he
+% repeat his/her name, the name of the institution, and so on?
+%
+% Many user commands for the title page redefine default
+% values or strings; they are particularly usefull when the thesis is
+% typeset in a different language; if none of the required information
+% is given, the default values and strings are typeset, possibly
+% with hilarious results\dots
+%
+% Except for the self made customised module for the title-page,
+% all the modules accept the same commands as those available in
+% the |TOPfront| module. Pay attention, though, that some commands are
+% meaningless in certain theses, therefore do not reverse the
+% statement: for example the doctoral cycle command (|\cycle|)
+% is meaningless in a bachelor degree final-work title-page.
+%
+% Since most users are supposed to be Italian, the user commands
+% are mostly in Italian; the following description gives their
+% names and meanings; every command receives one argument; only
+% the command |\title| accepts an optional argument according to
+% the usual \LaTeX\ syntax:
+% \[
+% \makebox[0pt]{%
+% \texttt{\char92}\meta{command}\oarg{opt-arg}\marg{req-arg}\relax
+% }
+% \]
+% Since the only language allowed in the ScuDo doctoral thesis is
+% English, all its commands are in English; this was done to help
+% the high number of foreign Ph.D.\ students in that school.
+% Therefore, for example, the general environment |frontespizio|
+% becomes |ThesisTitlePage|\footnote{Actually
+% \texttt{ThesisTitlePage} is a wrapper to a particular instance
+% of environment \texttt{frontespizio}. Similar wrappers are
+% defined in the other specific thesis modules.}. Except this
+% module, and, possibly, the personal customised module, the
+% other ones use mostly the same commands for the same purposes.
+%
+% \begin{description}[noitemsep]
+% \def\cs#1{\texttt{\char92#1}}
+% \def\Item[#1]{\item[\normalfont\cs{#1}]}
+%^^A
+% \item[\textnormal{\ttfamily frontespizio}] and
+% \texttt{frontespizio*} are two environments that typeset the
+% title page with two opposite styles: with the university logo
+% in the header vs the university logo in the lower part of the
+% front page. The commands described in the following items shall
+% be used either in the configuration file or within the body of
+% these environments.
+%
+% \Item[frontespizio] {\tolerance=6000 Even if the above
+% environments are strongly recommended, the command
+% |\frontespizio|, defined in the previous versions of the
+% TOPtesi bundle, is still usable. It typesets the title page
+% according to the actual status of the boolean |\topTPTlogos|;
+% the user, before issuing the |\frontespizio| command, may set
+% this boolean by means of the |\topTPTlogostrue|
+% or |\topTPTlogosfalse|, or with either one of the commands
+% |\booltrue{topTPTlogos}| and |\boolfalse{topTPTlogos}|.\par}
+%
+% \Item[monografia] sets the bachelor's report style and retrieves
+% its title; the command\cs{titolo} that is not available for this
+% purpose with the standard module |TOPfront|, is available when
+% the specific module has been loaded by means of the
+% \opz{monografia} or \opz{triennale} options.
+%
+% \Item[titolo] gets the master or PhD thesis title and an
+% optional thesis short title.
+%
+% \Item[sottotitolo] gets the thesis subtitle if any.
+%
+% \Item[materia] gets the name of the discipline the thesis deals with.
+%
+% \Item[Materia] alias for \cs{materia}.
+%
+% \Item[direttore] gets the name of the Doctoral School Director.
+%
+% \Item[coordinatore] gets the name of the Doctoral School
+% Coordinator
+% \Item[QualificaDirettore] gets the phrase that describes the
+% director or coordinator official position; by
+% using the command \cs{direttore} the default phrase
+% “Direttore della Scuola di Dottorato” is printed
+% above the “director's” name; if \cs{coordinatore}
+% is used the default phrase “Coordinatore della
+% Scuola di Dottorato” is printed instead.
+% If neither one is applicable or a description
+% in another language is required, this macro is
+% available for specifying such position.
+%
+% \Item[relatore] gets the name of the thesis principal supervisor.
+%
+% \Item[secondorelatore] gets the name of the second supervisor,
+% if any.
+% \Item[terzorelatore] gets the name of the third supervisor,
+% if any; it is assumed that the number of
+% supervisors never exceeds three; in case follow
+% one of the tricks exemplified
+% in the example file \file{toptesi-example.tex} in
+% order to manage such situation.
+% \Item[tutore] gets the name of the doctorate tutor; there is no
+% difference with regards to the \cs{relatore}, but
+% the default phrase “Tutore” is printed above this
+% person's name.
+% \Item[TutorName] gets the phrase that describes the tutor
+% position, possibly in a different language.
+% \Item[AdvisorName] gets the string that qualifies the
+% supervisor(s); the default string
+% is “Relatore:” or “Relatori:” for the plural;
+% in another language this command is used to
+% define the string, say, “Supervisors:” if the
+% thesis has been supervised by more than one
+% person.
+% \Item[CoAdvisorName] gets the string that qualifies the
+% co-supervisor(s); the default string is
+% “Correlatore:” or “Correlatori:” in the
+% plural; this command may be used to define the
+% string, say, “Corapporteur:” in a French Projet
+% de fin d'\'etudes. This command may be used also
+% for setting an Italian singular name when the
+% tricks exemplified in file
+% \file{toptesi-example.tex} are used.
+% \Item[candidato] gets the name and surname of a male author (M).
+% \Item[candidata] gets the name and surname name of a female author (F).
+% \Item[secondocandidato] gets the name and surname of the second M author.
+% \Item[secondacandidata] gets the name and surname of the second F author.
+% \Item[terzocandidato] gets the name and surname of the third M author.
+% \Item[terzacandidata] gets the name and surname of the third F author;
+% most often the thesis author is just one person;
+% but there are some institutions where group final
+% works are accepted; it is assumed that the group
+% does not contain more than three authors. The
+% specification of the gender allows the software
+% to determine the correct labelling phrase in
+% the proper gender and proper number.
+% For different languages there might be no
+% difference in gender but there is a difference
+% in plural.
+% \Item[CandidateName] gets the string that describes the student
+% status in a foreign
+% language or even in Italian; the default string
+% is `Candidato:” (with colons) adjusted to
+% masculine or feminine, singular or plural; with
+% option \opz{classica} the string becomes
+% “Laureando:”; in other languages it is
+% necessary to specify this string in the proper
+% gender and number.
+% \Item[sedutadilaurea] gets the date of the final exam, or
+% presentation, or defence of the thesis; if this
+% date is omitted the default date is the current
+% month and year in the current language (generally
+% Itallian).
+% \Item[esamedidottorato] an alias for \cs{sedutadilaurea} to be used
+% for doctoral dissertations.
+% \Item[ciclodidottorato] gets the roman numeral that specifies
+% the doctoral cycle.
+% \Item[CycleName] redefines the string that expresses the name of
+% the doctoral cycle; by default this is “ciclo”
+% but this command is useful to set the name in a
+% different language.
+% \Item[corsodilaurea] gets the proper name of the degree course;
+% the phrase that describes the degree course is
+% specified, if necessary, with the next command;
+% with this one you specify just, say,
+% “Electrical Engineering”.
+% \Item[CorsoDiLaureaIn] gets the generic name of the degree course,
+% for example “Bachelor Degree in”.
+% \Item[TesiDiLaurea] gets the generic phrase that describes the
+% thesis; by default it is “Tesi di Laurea”; in
+% English one might set it to “Master Thesis”.
+% \Item[NomeMonografia] gets the phrase that describes the
+% bachelor's report; by default it is “Monografia
+% di Laurea”. In some Italian universities
+% it might be called
+% “Tesi di Laurea”, so that the master thesis
+% should be given another qualification, for
+% example “Tesi di Laurea Magistrale”.
+% \Item[NomeDissertazione] gets the phrase that describes the
+% doctoral thesis; by default it is “Tesi di
+% Dottorato”.
+% \Item[InName] infix strings often require adjusting of the
+% prepositions; this macro gets the preposition
+% that stands for “in” (the default). In German
+% it might become “auf”.
+% \Item[NomeAnnoAccademico] defines the infix string that stands for
+% “Academic year”. This macro is defined only if
+% the option \opz{classica} is in force;
+% after all the command |\annoaccademico| is
+% defined only with that option. In any case, even
+% without the \opz{classica} option you can use
+% any string in the field of \cs{sedutadilaurea}.
+% \Item[logosede] specifies the name of the file or the files that
+% contain the university logos; no default is
+% defined; rather a warning message is issued if
+% no name is given or the file is missing, but
+% typesetting goes on without the inclusion of any
+% logo. A list of logos can be specified, useful
+% when a thesis is carried on in a multiple
+% University environment such as, for example, in
+% a double degree Erasmus program; or under the
+% Erasmus Mundus program. The “string” of
+% logos is scaled properly so that they may fit
+% in |\textwidth|.
+% \Item[setbindingcorrection] sets up the length to displace the text
+% block to the external margin so as to have a
+% wider internal margin to accommodate the binding
+% correction. Its argument is not optional and is
+% used to modify the default correction of 7\,mm.
+% Notice that 7\,mm is already a large
+% displacement; most often than not the binding
+% correction is unnecessary.
+% \Item[retrofrontespizio] with its argument, made up of one or more
+% paragraphs, defines what should be printed on the
+% verso of the title page, generally named
+% “copyright page”; if this command is specified
+% with an empty text or if it is not used at all,
+% no copyright page is assumed.
+% \end{description}
+%
+% Since the infix strings are all memorised into control sequences
+% and for each of them it is possible to use a defining command,
+% all strings can be modified at will, so that there is no
+% difficulty to localise the package in another language; this
+% comes particularly handy for the Erasmus students on double
+% degree programs.
+
+% As a final remark notice that the commands for typesetting the
+% title page and the copyright page are contained in the
+% package \texttt{topfront.sty}, which can be used as an autonomous
+% extension to the \texttt{report} document class. One could easily
+% typeset either just the title page with a separate \TeX\ source
+% so as to test the completeness of the commands and coherence of the
+% configuration file, or for just printing the isolated title and
+% copyright pages (if any). The same applies if you use the special
+% modules for each thesis type.
+%
+% \section{ScuDo doctoral theses}\label{sec:scudo}
+% Theses at the ScuDo doctoral school require special facilities
+% that are described in the code description section; here we
+% focus on the title page.
+%
+% \subsection{The ScuDo titlepage}
+% The title page for such special theses is typeset by making
+% use of a specific environment within which the following
+% commands are available to set up the necessary information.
+% \begin{description}[noitemsep]
+% \def\cs#1{\texttt{\char92#1}}
+% \def\Item[#1]{\item[\normalfont\cs{#1}]}
+%
+% \item[\normalfont\ttfamily ThesisTitlePage] is the environment
+% within which the title page data are specified; some data are
+% preset to default values; some data receive global definitions
+% so that they remain available for setting up some metadata.
+% In the following every command with its argument is described
+% and it is specified which is the preset value, if any. If a
+% preset value is specified, the user does not need to use the
+% command, unless s/he wants to change the preset value. If an
+% empty preset value is specified, the command and its value
+% may be optional; but personal data are never preset because,
+% obviously, they are mandatory.
+%
+% \Item[PhDschoolLogo]\marg{logo file name} (preset: Logo-Scudo)
+% selects an image
+% specified by \meta{logo file name} to insert the school logo;
+% a file logo \file{Logo-Scudo.jpg} is available from the ScuDo
+% doctoral school; the students must ask such logo file from
+% the Student Office, because such file is a legal property of
+% the School and can be used only with permission. In any case
+% the logo file must be of one of the allowed formats: \sigla{PDF},
+% \sigla{EPS}, \sigla{JPG}, \sigla{PNG}; vector files are generally
+% preferred, but they might not be available; raster files should
+% be of a minimum definition of 150 pixels per inch.
+%
+% \Item[Ndissertation]\marg{dissertation name} (preset: Doctoral
+% Dissertation) specifies the specific name of the document.
+%
+% \Item[Ndoctoralprogram]\marg{doctoral program} (preset: Doctoral
+% Program in) specifies the degree course name prefix.
+%
+% \Item[ProgramName]\marg{program name} (mandatory: preset empty)
+% specifies the degree course name.
+%
+% \Item[CycleNumber]\meta{ordinal number} (optional; preset
+% empty) specifies the ordinal number of the program cycle; at
+% ScuDo it is a mandatory information. In other doctoral schools
+% it might be useless.
+%
+% \Item[title]\marg{dissertation title} (preset empty) sets the
+% specific title of the dissertation; it is better to keep it
+% short, and use the sub title to add further titling information.
+%
+% \Item[subtitle]\marg{dissertation subtitle} (optional: preset
+% empty) adds a possible subtitle.
+%
+% \Item[author]\marg{author's name} (mandatory: preset
+% empty); it is recommended to pay attention to insert proper
+% name(s) first and surname(s) second.
+%
+% \Item[Nsupervisor]\meta{Supervisor(s) heading} (preset:
+% Supervisor:) specifies the short heading labelling the list
+% of supervisors; the preset value is singular and followed by
+% a colon. In case of more than one supervisor, it is necessary
+% to specify a plural name; the colon sign is optional.
+%
+% \Item[SupervisorList]\marg{list of supervisors} (mandatory:
+% preset empty) specifies the list of supervisors, one per line,
+% with a |\\| at the end of each line; the name(s) and surname(s)
+% are preceded by their academic title, and followed by their
+% role as supervisor, or co-supervisor.
+%
+% \Item[NExaminationCommittee]\marg{examination committee
+% heading} (preset: Doctoral Examination Committee:) specifies
+% the heading of the list of examiners.
+%
+% \Item[ExaminerList]\marg{list of examiners} (preset empty)
+% specifies the list of examiners, one per line, each line
+% terminated by |\\|; each line contains the academic title,
+% the name(s) and surname(s), the role (referee for the
+% supervisors; nothing for the other examiners), the academic
+% institution they belong to -- full official institution name,
+% city and country.
+%
+% \Item[Nlocation]\marg{examination location} (preset:
+% Politecnico di Torino) specifies the institution where the
+% examination takes place.
+%
+% \Item[ExaminationDate]\marg{examination date} (preset empty)
+% specifies the date when the examination is to take place.
+%
+% \Item[Disclaimer]\marg{disclaimer statement} (preset: some long
+% sentences agreed upon by the ScuDo doctoral school) mandatory
+% in most universities; the specific statement(s) may be different
+% in different universities.
+%
+% \Item[Signature]\marg{the author's signature} (preset: a few
+% lines where the city is preset to “Turin”, and the date is
+% assumed to be equal to the examination date; also the signer
+% name is assumed equal to that of the dissertation author)
+% specifies a different layout of the signature field.
+%
+% \end{description}
+%
+% Several examples of thesis title-page are shown in the
+% \texttt{toptesi-it.pdf} Italian"-English documentation.
+%
+% \subsection{Languages}
+% The TOPtesi bundle and the |toptesi| document class accept
+% all \LaTeX\ commands provided by the \LaTeX\ \texttt{kernel},
+% the \texttt{report} document class, and the \texttt{graphicx}
+% extension package, besides those provided by the \texttt{babel}
+% package. If the source thesis file is being typeset by means
+% of \XeLaTeX\ or \LuaLaTeX\ the \texttt{babel} package is not
+% loaded; in its place the \texttt{polyglossia} package gets
+% loaded that should implement in \XeLaTeX\ and \LuaLaTeX\ most of
+% the functionality provided by \texttt{babel} in \LaTeX.
+% “Most” means that not all the functionality is available,
+% therefore it is better to consult the documentation of
+% \texttt{polyglossia} before using its built-in commands.
+%
+% With this respect it must be underlined that the Italian and
+% English languages are specified by default, the Italian one
+% being the main language. Only with the \opz{tipotesi=scudo} option
+% in force, the main language is English. An initial specification
+% of |\selectlanguage{english}| sets the English language as the
+% default (unnecessary when \opz{scudo} is in force).
+%
+% Should a student typeset the thesis in French by means of
+% \prog{pdflatex}, it would be necessary to specify the option
+% \opz{french} among the \emph{class} options, and then start
+% the document by specifying |\selectlanguage{french}|.
+% But the user should pay attention to use \texttt{babel} in the
+% proper way.
+% \begin{enumerate}[noitemsep]
+% \item Due to the way \LaTeX\ classes load the requested files,
+% and to the fact that the \texttt{babel} package has already
+% been loaded by the \texttt{toptesi} class, the user cannot
+% reload it with a different list of language options; therefore
+% the latter language options \emph{must be specified} as a global
+% class options; so if the thesis has to be typeset, for example,
+% in French, is is necessary to do the following:
+%\begin{verbatim}
+%\documentclass[...,french,...]{toptesi}
+%...
+%\begin{document}
+%\selectlanguage{french}
+%\end{verbatim}
+% But if the thesis should be typeset in French by means of
+% \XeLaTeX\ or \LuaLaTeX, then it is perfectly legal to specify the
+% auxiliary language in this way:
+%\begin{verbatim}
+%\documentclass[...]{toptesi}
+%\setotherlanguage{french}
+%...
+%\begin{document}
+%\selectlanguage{french}
+%\end{verbatim}
+%
+% \item With the 2010 \TeX\ system complete distributions,
+% both \TeXLive and MiKTeX, all language hyphenation rules
+% known (to \LaTeX) are preloaded; with other less up to date
+% \TeX\ system distributions this might not be true. With both
+% distributions also the language hyphenation rules known to
+% \XeLaTeX\ are all preloaded. On the opposite \LuaLaTeX\
+% loads the hyphenation rules at run time and only for the
+% declared languages of the current document.
+%
+% Remember that \texttt{babel} and \texttt{polyglossia} macros
+% select the language typesetting rules, but hyphenation is
+% activated only if the program format file has been generated
+% with the pertinent language hyphenation rules. You can check
+% this detail by reading the first dozen lines of your thesis
+% \texttt{.log} file; it contains the list of all language
+% hyphenation rules that are available in the format file.
+%
+% While (American) English is the default language and almost
+% any \emph{basic} distribution of the \TeX\ system has several
+% preloaded languages, it is more likely that French is preloaded
+% while Italian is not. Complete distributions don't exhibit
+% this~flaw.
+%
+% Should the required language(s) be missing, the user is forced
+% to read his/her distribution instructions, so as to find out
+% how to configure his/her system in order to preload the
+% languages s/he wants to work with, and finally s/he must recreate
+% the format files.
+%
+% The user is invited to carefully investigate on these fine
+% points and to properly configure the system; it would be very
+% upsetting to use fine software to produce a perfectly typeset
+% thesis that, unfortunately, has wrong hyphenation points!
+% Luckily enough, most recent distributions of the \TeX\
+% system have all the known hyphenation rules preloaded; in any
+% case, even older distributions have available command-line
+% commands or graphical user interfaces that make it easy to
+% perform the tasks of changing the list of preloaded hyphenation
+% rules and rebuilding all the format files, moving them to the
+% proper places.
+% \end{enumerate}
+%
+% \subsection{Bibliography}
+% \textcolor{red}{The ScuDo module is the only one that preloads some
+% suitable packages to typeset one or more bibliographies. None of the
+% other modules preload any bibliography management utility.} This is due
+% to the fact that the module was originally developed for
+% typesetting PhD theses in the scientific domains related to the
+% Institute of Electrical and Electronics Engineers (IEEE); such
+% module was in facts used primarily by PhD students in those fields.
+% The ScuDo doctoral School does not manage doctoral curriculums only
+% for the “electrically oriented doctorands”, therefore alternatives
+% had to be offered to the other PhD students in order to typeset
+% their bibliographies according to the styles normally used in their
+% scientific domains. The procedure is better described in
+% section~\ref{sec:scudo} but it is suitable with minimal
+% modifications also for the other thesis types.
+%
+%\subsection{Typesetting commands provided by \pack{topcoman}}
+% The TOPtesi bundle adds very little to the user commands defined
+% by the |report| class; nevertheless the package \texttt{topcoman.sty},
+% that is part of this bundle and is automatically loaded, defines some
+% useful commands for typesetting technical matters in such a way as to
+% fulfil some (not all) \sigla{ISO} regulations.
+% Some of these commands are already defined with the \texttt{babel}
+% Italian option, but if your thesis is written in different languages
+% it may happen that such commands are not available any more when you
+% select another language; with the presence of the definitions contained
+% in \texttt{topcoman.sty} such useful commands should remain available
+% with every language. The \texttt{polyglossia} package does not
+% produce any useful additional command for writing in an almost
+% \sigla{ISO} compliant way\footnote{Nevertheless, when typesetting with
+% \XeLaTeX\ or \LuaLaTeX\ and using OpenType fonts, even for
+% typesetting math, the calling of the |unicode-math| package with
+% option \opz{mathstyle=\sigla{ISO}} lets you typeset in an \sigla{ISO}
+% compliant way almost everything you need.}, therefore the macros
+% contained in the \texttt{topcoman.sty} package may come handy.
+%
+% The following description specifies these particular commands.
+% \begin{description}[noitemsep]
+% \def\Item[#1]{\item[\normalfont\texttt{\char92#1}]}
+%
+% \Item[DeclareSlantedCapitalGreekLetters] does exactly what
+% its name means: it changes the definitions of the mathematical
+% capital Greek letters so that they are typeset in “italics”;
+% they are actually taken from the math italic alphabet,
+% instead of the default roman one. This command is useful with
+% \LaTeX, while with \XeLaTeX\ and \LuaLaTeX\ it is unnecessary
+% due to the larger set of math alphabets and math font commands
+% that are available with proper \sigla{UNICODE} math fonts and
+% options.
+%
+% \Item[ensuremath] should be already defined in the \LaTeX\ kernel;
+% should one still be using an obsolete version, this command gets
+% available anyhow.
+% %
+% \Item[ohm] typesets an upright capital omega even if the
+% capital Greek letters are in italics; another good point
+% is that |\ohm| can be used also in text mode.
+% %
+% \Item[ped] inserts an index/subscript in upright type; the \sigla{ISO}
+% regulations require the use of italics for physical or
+% mathematical variables, and upright type for anything that
+% is not a variable, from the names of functions (such as sin,
+% cos, log, etc.), to the indices that contain information
+% on something that is not variable. This means that $V_i$
+% requires an italic index to imply that the object $V$ is
+% the $i$-th in a set, while, say, $V_{\mathrm{max}}$
+% indicates the maximum value of the variable $V$. This
+% command |\ped| may be used in both math and text mode.
+% %
+% \Item[ap] similarly |\ap| inserts an apex/superscript in
+% upright type, in both math and text mode.
+% %
+% \Item[unit] sets the unit of measure close to the numerical
+% measure value by inserting a non breakable thin space and
+% by setting the units of measure in upright type; this works
+% both in math and text mode. Of course it is necessary to
+% input the |\unit| command without intervening spaces in the
+% source file; it's necessary to typeset, say, |35\unit{km}|
+% while avoiding a form such as \verb*+35 \unit{km}+.
+% This command, as it is defined, conflicts with the definition
+% of the homonymous command |\unit| as defined by some packages such as
+% \texttt{unitx}, \texttt{siunitx}, etc., but since this latter package is
+% necessarily input in the preamble, while \texttt{topcomand.sty}
+% is read at the execution of |\begin{document}|, the latter file has
+% provisions to test if any of those packages has already been loaded,
+% so as not to overwrite the latter package definition and to avoid
+% every possible conflict.
+% %
+% \Item[micro] sets the decimal prefix $\mu$ (providing, if
+% possible, the sign with serifs, \textmu, taken from the Text
+% Companion font or any other font that contains this variety
+% of the Greek letter {\usefont{LGR}{lmr}{m}{rs}m}) when typesetting
+% units of measure.
+% %
+% \Item[gradi] sets the small circle that defines the sexagesimal
+% degrees, for example $35^\circ$; it may be used also for the
+% celsius degrees by writing in the source file, say,
+% |35\unit{\gradi C}| in order to get $35\,^\circ\mathrm{C}$;
+% notice the difference with |35\gradi|, that yields $35^\circ$
+% without any space between the measure and the “degree” little
+% circle; this is what the \sigla{ISO} regulations require; the small
+% space inserted by |\unit| is required when the unit of measure
+% symbol contains at least one letter.
+% %
+% \Item[gei] inserts the imaginary unit in upright type with the
+% “spelling” used by the Italian technologists: “j”. This command
+% may be redefined, of course, but this strange name is due to the fact
+% that nowadays the letter “j” in Italian is called with the
+% one-syllable English name (much shorter than the traditional
+% Italian three syllable name “i~lunga”) and the indicated spelling
+%“gei” is the phonetic Italian rendering of the English word.
+% The imaginary unit is not a variable, and the \sigla{ISO} regulations
+% require it is typeset with an upright serifed font.
+% %
+% \Item[eu] inserts the Napier number symbol “e” in upright
+% type; since this entity is not a variable, but it is
+% a mathematical constant, the \sigla{ISO} regulations require it to
+% be typeset in upright type. The \sigla{ISO} regulations require the
+% upright type for “e” and any other mathematical constant,
+% but requires the electron charge $e$ is typeset in math italics because
+% this is a physical “constant”, not a mathematical one.
+% \XeTeX\ and \LuaLaTeX\ allow to typeset upright math Greek
+% letters, so there is the facility to typeset an upright
+% “{\usefont{LGR}{lmr}{m}{rs}p}” (the number) to be distinguished
+% from a slanted “$\pi$” (the angle).
+% %
+% \Item[goodpagebreak] inserts a conditional page break after
+% the point where this command appears; it is not equivalent to
+% the |\raggedbottom| declaration that does not vertically
+% justify \emph{any} page; this command tests the amount of space
+% remaining on the page, and if it is less than a given number
+% of lines, it inserts a page break; the result is a ragged
+% bottom \emph{single} page, that sometimes is better than excessive
+% spacing between paragraphs, or within items of a list, or
+% before or after displayed material. It is handy also to use
+% before starting a new section, because at least four
+% lines are required by \LaTeX\ in order to avoid orphan lines.
+% \cs{goodpagebreak} accepts an optional argument that sets the
+% number of lines to test the necessary space for a break;
+% by default this number is~4.
+%
+% \Item[listing] requires for its argument the name of a file
+% and typesets it in verbatim mode; this command is very useful
+% for typesetting the listings of the programs that were written
+% for the thesis; for best results it is recommended that the
+% source program has lines not longer than 80 characters.
+%
+% The original definition of command |\listing| dates back to the
+% old times of \LaTeX\,209; it has become \textcolor{red}{obsolete}; for
+% backwards compatibility it is maintained but as {\color{red}an alias
+% to the command |\VerbatimInput| of package |fancyvrb|}; its
+% functionality may be configured with the same commands
+% specified in the |fancyvrb| documentation for the original
+% command. The |fancyvrb| package was preferred to the |listings|
+% one, because it typesets verbatim material even while
+% using font with multibyte encoding (therefore it works fine
+% with \XeLaTeX\ and \LuaLaTeX), while the fancier package
+% |listings| performs correctly only with \sigla{ascii}
+% characters and requires special settings to use selected characters
+% encoded with more than 7~bits.
+% \end{description}
+%
+% All these commands are defined into the separate package
+% \texttt{topcoman.sty} that might be used as an independent
+% extension package with any document class.
+%
+% \section{The monografia module}
+%
+% The |toptesi-monografia| module gets loaded if one of the
+% \opz{tipotesi=triennale} or \opz{tipotesi=monografia} options
+% was specified to the |TOPtesi| class. It can be used as a
+% standalone module, as well as the |topfront| general one, although
+% supposedly, it is used most often with its mother class.
+%
+% In order to use it as a standalone module, some definitions
+% must be established in order to have available at least some
+% if not all of the settings and the switches that are available
+% when the module is used with |TOPtesi|. Of course suitable
+% tests are made in order to check if certain packages are
+% already loaded and if certain switches are already defined;
+% and some options are defined.
+%
+% The rest of the module is a subset of the |topfront| package;
+% all commands that refer to information used for other types
+% of theses are eliminated and the title page is typeset by means
+% of another environment that does not rely on the environment
+% |frontespizio| (with or without asterisk). The new environment
+% |ThesisTitlePage| is more or less the only difference compared
+% to the way a bachelor thesis title page is typeset with the
+% |topfront| package. It will be described later on; but, with
+% the due differences, this environment mimics the one defined
+% in the |toptesi-scudo| module.
+%
+% The commands contained in this module are divided in there sorts.
+% \begin{enumerate}[noitemsep]
+% \item
+% The commands to define the infix words, so as to use them
+% explicitly within the |ThesisTitlePage| environment or
+% within a configuration file either to change the default
+% strings or to define them for languages different from
+% Italian; no attempt was made to establish such strings
+% for English, because is is supposed the most often than
+% not this module is used by Italian students to write their
+% bachelor degree final works in Italian universities;
+% nevertheless the possibility to change these strings is
+% always available.
+% \item
+% The commands that define the default values for every
+% command that may be used or may be skipped while setting
+% up the title page.
+% \item
+% The commands that define the values for the variable
+% information necessary for every individual thesis.
+% \end{enumerate}
+% As explained above the first group is used essentially to
+% define or redefine the infix strings. The second group is to
+% define most default values for information that might or
+% might not be entered by the user; these values are tested
+% against the |\empty| value in order to decide if using or
+% neglecting them. The third group is the one that the user
+% directly or through a configuration file uses for his/her
+% personal data and his/her specific thesis.
+%
+% \subsection{The configuration file}
+% This module for the bachelor thesis final work searches
+% for a configuration file with the same name as the thesis
+% main file and with extension |.cfg|. Internally this main
+% file name is stored in the internal variable |\jobname|;
+% therefore this module searches the file |\jobname.cfg|. If
+% this file does not exist, the typesetting engine does
+% not use any specific setup, except what has been defined
+% in this module for the default settings.
+%
+% Such configuration file might contains the redefining commands
+% for the infix strings, and/or the other commands that can be
+% used within the |ThesisTitlePage| environment.
+%
+% If a configuration file was loaded, the commands it contains
+% are overwritten by those that are specified within the
+% |ThesisTitlePage| environment. So the user should pay attention
+% to what the configuration file contains and to what s/he writes
+% within the |ThesisTilePage| environment, but if s/he uses again
+% a command already used in the configuration file, it should be
+% for a good reason; simply s/he should remember that the last
+% setting is the one that is actually used.
+%
+% \subsection{Module options}
+% If the module is loaded by |toptesi|, it receives the necessary
+% options by |toptesi| itself. If the module is used as a self
+% standing one and called by another class, it may be called with
+% specific options that are listed here. In general they behave
+% as the |toptesi| options; should they perform differently the
+% details are explained hereafter.
+% \begin{description}[noitemsep]
+%\def\Item[#1]{\item[\opz{#1}]}
+%
+% \Item[evenboxes] The boxe containing the supervisor name(s)
+% and that containing the candidate name(s) are typeset by
+% aligning their first lines; if this option is not specified
+% the boxes are skewed, so that there is enough place to set
+% the supervisor signature(s) on the right and the candidate
+% signature on the left; if the bachelor degree final work does
+% not imply a supervisor, the candidate name is centred and
+% there is no question of aligning any box.
+%
+% \Item[cucitura]
+% Specifies a displacement of the text body towards
+% the outer margin. See the |toptesi| description. This option,
+% differently from the one defined in |toptesi| and |topfront|
+% is not of the type \emph{key\,$=$\,value}; therefore in
+% order to change its preset value it is necessary to use
+% the \cs{setbindingcorrection} command. This remark applies
+% only to the case when this module is called by another class.
+%
+% \Item[classica]
+% Uses some \opz{classica} features; see the |toptesi|
+% description.
+%
+% \Item[autoretitolo]
+% Similarly with the main stream |toptesi| bundle, this
+% questionable option is for changing the internal page
+% style; it is useless for this module, but there are some
+% tests that derive from the general |topfront| package,
+% so that the option is maintained for compatibility purposes.
+%
+% \Item[oldstyle] On the opposite this option is maintained,
+% at least to typeset the academic year interval with old
+% style numbers.
+% \end{description}
+%
+% \subsection{User commands and environments}
+%
+% The only user environment defined by this module is
+% |ThesisTitlePage|. It plays the same role as the |frontespizio|
+% environment, but it is incompatible with the |\frontespizio|
+% command. In other words if this module is used, the user must
+% use the |ThesisTitlePage| environment only and does not have
+% available the various title page environments and commands
+% available with the |topfont| package.
+%
+% This environment accepts an optional asterisk as an argument;
+% the syntax is the following:
+%\begin{ttsintassi}
+%\cs{begin}\Marg{ThesisTitlePage}\meta{*}
+%\meta{thesis definition commands}
+%\cs{end}\Marg{ThesisTitlePage}
+%\end{ttsintassi}
+% where, differently from other \LaTeX\ environments that accept
+% an optional asterisk, this optional token is not within the
+% opening (and closing) environment braces, but it is the very
+% first entered element into the environment body. Its function
+% is the following: if the asterisk is missing, the university
+% logo(s) are typeset at the top of the page; if the asterisk
+% is present, the logo(s) are set in the page lower half, below
+% the possible subtitle.
+%
+% The commands available with this module, divided into the three
+% groups described above, are the following.
+% \begin{description}[noitemsep]
+% \def\Item[#1]{\item[\normalfont\cs{#1}]}
+% \item[String settings]
+% \begin{description}[noitemsep]
+% \Item[NomeAnnoAccademico] Sets the default string for the
+% “Academic Year”; by default it is “Anno accademico”.
+% \Item[NomeCorso] sets the default string “Corso di laurea
+% in” followed by an intelligent space.
+% \Item[AnnoAccademico] sets a different string in place
+% of the default “Anno Accademico” one.
+% \Item[Struttura di] sets the default structure prefix;
+% for example this prefix might be “Department of”,
+% and the structure name entered with \cs{struttura}
+% might be “Electrical Engineering”; therefore the
+% title page is typeset with the complete string
+% “Department of “Electrical Engineering”. The default
+% string is in Italian, but by using this command,
+% remember to enter the string you need terminated by
+% the intelligent space macro \cs{xspace}.
+% \Item[CorsoDiStudi] sets the default string for the
+% degree course type; it might be “Laurea triennale”,
+% or “Bachelor degree” or similar strings in other
+% languages. It replaces the obsolete following command:
+% \Item[CorsoDiLaureaIn] that remains available with the backwards
+% compatible |topfront| standard module.
+% \Item[NomeElaborato] Sets the name that qualifies the
+% document; by default it is “Monografia”, but this
+% user command may be used to set it, for example, to
+% “Tesi di laurea triennale”, or anything else in
+% Italian, in English, or the used main language.
+% The |topfront| command |\NomeMonografia| is let to
+% to |\NomeElaborato| for backwards compatibility and its
+% use is evidently discouraged.
+% \Item[CandidateNames] sets the labelling command for the
+% box that lists the candidate names; by default these names are the
+% masculine, feminine, singular and plural Italian names
+% starting with “Candidato”; if the \opz{classica} option
+% is in force they start with “Laureando”;
+% the user couldn use this command which it has a non standard syntax
+% (delimited arguments); therefore it is suggested that
+% end users refrain from using it, unless they know how to handle
+% the delimited argument commands.
+% This command sets the four strings to any desired value,
+% if, as in English, there is no difference between masculine
+% and feminine, repeat the same name for the feminine positions,
+% the last ones; the syntax in facts is the following:
+%\begin{ttsintassi}
+%\cs{CandidateNames},\%
+%\qquad\marg{masculine singular},\%
+%\qquad\marg{masculine plural},\%
+%\qquad\marg{feminine singular},\%
+%\qquad\marg{feminine plural},!
+%\end{ttsintassi}
+% \Item[TitoloListaCandidati] is a much simpler command the user
+% should prefer to the previous one; in facts it accepts a single
+% argument formed by a comma separated list of names; from zero
+% up to four names (in the same order as described above).
+% Therefore the following commands are all valid ones:
+%\begin{ttsintassi}\small%
+%\cs{TitoloListaCandidati}\Marg{}
+%\cs{TitoloListaCandidati}\Marg{\'Etudiant}
+%\cs{TitoloListaCandidati}\Marg{Estudiante,Estudiantes}
+%\cs{TitoloListaCandidati}\Marg{Kandidat,Kandidaten,Kandidatin,Kandidatinen}
+%\end{ttsintassi}
+% \Item[CandidateName] this command used to be the default one
+% with the standard |topfront| module, and remains available
+% with this package; it sets just one name (disregarding
+% singular/plural and masculine/feminine variants) to substitute
+% the default ones. Please notice that this command is not
+% available with the other thesis type options.
+% \Item[Relatore] Sets the string that labels
+% the supervisor box; by default it is the Italian
+% name “Relatore”; the command my be used to set
+% any different string.
+% \Item[Correlatore] sets the string that
+% labels the list of co-superpervisors when there is
+% just one “second” supervisor.
+% \Item[Correlatori] sets the string that
+% labels the list of co-supervisors when there are
+% three supervisors, a supervisor and two co-supervisors.
+% \end{description}
+% \item[Variable data settings]
+% \begin{description}[noitemsep]
+% \Item[titolo] sets the bachelor degree final work title.
+% The main module |topfront| uses in its place the command
+% \cs{monografia}; the user can still use the old command,
+% but |\titolo| is more descriptive.
+% \Item[sottotitolo] sets the optional subtitle.
+% \Item[corsodistudi] and \cs{corsodilaurea} specify the actual
+% name of the degree course; \cs{corsodistudi} should be
+% preferred; \cs{corsodilaurea} is deprecated, but is maintained
+% for backwards compatibility.
+% \Item[materia] and \cs{Materia} set the optional discipline
+% the thesis deals with.
+% \Item[relatore] sets the name of the only or the principal
+% supervisor.
+% \Item[secondorelatore] sets the name of a second supervisor,
+% if any.
+% \Item[terzorelatore] sets the name of a third supervisor,
+% if any.
+% \Item[candidato] sets the name of the first or only ‘M’
+% candidate; in general bachelor degree final works are
+% done by just one candidate but, in case, there are
+% available also the commands for a second and a third
+% candidate. Masculine and feminine commands are available
+% and the heading of the candidates box il labelled accordingly.
+% \Item[candidata] sets the name of the first or only ‘F’
+% candidate.
+% \item[\normalfont\cs{secondocandidato} or \cs{secondacanddata}]
+% set the names of a possible second ‘M’ or ‘F’ candidate.
+% \item[\normalfont\cs{terzocandidato} or \cs{terzacandidata}]
+% set the names of a possible ‘M’ or ‘F’ third candidate.
+% \Item[ID] to be used just after the candidate's name, but as
+% part of the setting command argument, establishes the
+% candidate's ID label string |\IDlabel| that prefixes the
+% candidate's ID number. The user should not worry about this string,
+% unless s/he wants to modify it; by default it is set to
+% |\\\quad matricola\ |; in other words, the ID number is set
+% indented under the candidate's name and a space is put between
+% the string and the number.
+% \Item[sedutadilaurea] sets the date of the final examination;
+% by default the current month and year are typeset if this
+% command is not specified; but the user can specify anything;
+% s/he can even prefix the year range with the
+% \cs{AnnoAccademico} command, that typesets (in the current
+% language if localisation has been made by means of the
+% suitable command of group~1) a string equivalent to
+% “Academic Year”; in any case the user can write down what
+% s/he likes best in place of the predefined value.
+% \Item[NomeAteneo] sets the proper name of a specific
+% university; it will be typeset in suitable uppercase type
+% under the generic name of the university; if this command
+% is not used, no name gets typeset in the title page.
+% \Item[struttura] sets the name of the university entity
+% that supervises the development of the degree course;
+% it may be a “faculty”, a “department”, a “school”,
+% it depends from the specific university. Some universities
+% do not require this information on the title page. In any
+% case if this command is used it accepts two arguments:
+% the first one is optional, and, if used, is an uppercase
+% roman numeral that indicates the ordinal of the structure;
+% the second argument is the complete structure name.
+% \Item[setlogodistance] sets the distance between adjacent
+% university logos, if more then one is used.
+% \Item[logosede] sets the name of a graphics file that
+% contains the logo of the university; the default value of
+% this command il \cs{empty}; this macro may be used several
+% times, in case the bachelor degree final work is developed
+% within a multiple degree Erasmus program; this might be
+% unusual with bachelor degree courses but not impossible.
+% In any case if no logo file
+% name is specified, no logos are printed and no space
+% is used in the title page; if one or more logos are used
+% they are assembled with the same height into a horizontal
+% box, that before being printed is measured; if the width
+% exceeds the text width, the whole box is scaled down by
+% preserving the aspect ratio so as to fit it inside the
+% text width; after these tests and possible scaling down,
+% the logo box is printed. The logo distance my be varied
+% from its 3em default value by using \cs{setlogodistance}, but
+% it is suggested not to vary it too much. The \cs{logosede}
+% accepts an optional value that is the common height of the
+% logos; this possibility does exist but it is strongly
+% discouraged.
+% \Item[tutoreaziendale] set the name of a possible company
+% tutor, in case the final work is developed in a Company
+% external to the university
+% \end{description}
+% \end{description}
+%
+% \section{The module for a master degree thesis}
+%\label{sec:topmagistrale}
+%
+% The module for the master degree thesis,
+% |toptesi-magistrale.sty| is almost identical to the generic
+% module |topfront|; the obvious differences are that it
+% lacks the latter module commands that refer to the bachelor
+% degree or the Ph.D.~theses. Evidently such specific commands
+% are useless in a master degree thesis.
+%
+% \begin{sloppypar}
+% Such eliminated commands include |\manografia|,
+% |\sedutadidottorato|, |\ciclo|, |\Direttore|, and so forth.
+% \end{sloppypar}
+%
+% A tricky situation arises if the thesis is typeset in several
+% tomes. There are substantially two different situations with
+% different implementations with the generic module |topfront|
+% and this specific module |toptesi-magistrale|.
+%\begin{enumerate}[noitemsep]
+%\item
+% Setting the tome number on each tome title-page is realised by means
+% of the |\tomo| command that requires a preliminary
+% specification of all the necessary data before |\tomo|
+% can play its role; it actually uses the |\frontespizio|
+% environmnet, but before the |tomo| counter is stepped up.
+%
+% This allows to typeset the various tomes in a single
+% document, so that the user can cross-reference elements
+% belonging to different tomes. When the single multi\-tome
+% document is completed the user can split its \sigla{PDF} file
+% in separate files (by means of the |pdfpages| package
+% functionalities) and print them; in printed pages the
+% cross-references do not require hyperlinking, while
+% the single document file may be completely hyperlinked;
+% reading the printed tomes is correct, and reading the
+% whole thesis in a single document on the screen allows
+% the cross-linked navigation from one point to another.
+%
+% The draw back of this procedure is that splitting the
+% single \sigla{PDf} file in several files require another processing
+% job, and any editing of the source thesis files may require
+% repeating this splitting job because the number of pages
+% may be modified and/or cross references do not point
+% to the correct page number.
+%
+%\item
+% With the |ThesisTitlePage| environment of this
+% |toptesi-magistrale| module the |\tomo| command is used
+% before or within within the environment and it just
+% steps up the |tomo| counter while allowing typesetting
+% the necessary tome information on the title page.
+%
+% In this way it is necessary to typeset each tome with
+% its own source file(s) to produce different output \sigla{PDF}
+% files; when printed they are substantially identical to
+% the split documents obtained with the previous approach
+% but it simply avoids splitting the single document file
+% in several files. The drawback is thet if hyperlinked cross-referencing
+% is used, each tome is correctly hyperlinked to its
+% internal targets, but no cross-referencing can be
+% automatically done to items in other tomes. I do not
+% think this is a real draw back in practical situations,
+% but of course it produces a limitation to reading the
+% tomes on the screen.
+%\end{enumerate}
+%
+% I assume that multi\-tome theses are very rare; \LaTeX can
+% handle the production of different documents (different
+% tomes/volumes) maintaining correct cross references also to
+% material external to any specific volume, but the handling
+% of the whole job becomes very complicated not to mention
+% the programming difficulties. For master theses I would avoid
+% splitting one's thesis is several tomes; nevertheless this
+% functionality has been asked for, so that this bundle
+% realises a couple of solutions that require some compromise
+% and some manual work by the author. A better solution
+% is on the TODO list, but it is not to come in a short time.
+%
+% In summary this |toptesi-magistrale| module keeps all the
+% commands defined on the |topfront| module; modifies the
+% definition of the |\tomo| command; adds the |ThesisTitlePage|
+% environment within which the configuration file is read and where all
+% commands for the title page data are to be inserted. The
+% peculiarity of thes environment is that the possible asterisk
+% necessary to switch from the the logos set in the title page
+% lower half (no asterisk) to the logos at the page top
+% (asterisk) must be inserted the same way as in the other
+% modules, that is as the first token at the beginning of
+% the environment.
+%
+% \section{The Ph.D.\ module for general use}
+% Except for the ScuDo theses, for which the University
+% specified the necessary requirements for both contents
+% and appearance of the title page, we provide a generic
+% module for Ph.D.\ theses for other universities. It goes
+% by itself that if the specifications cannot be customised
+% by using the customising commands of the ScuDo module,
+% nor by this module, it is necessary to use a custom
+% module that the user must create as specified in the next
+% section.
+%
+% This module is generic as much as the |topfront| one.
+% It differs only for the elimination of the title page commands
+% that refer to other thesis types and the only addition is
+% the |ThesisTitlePage| environment, just as it has been done
+% for the other bundle modules.
+%
+% The data insertion or modification commands are a subset
+% of those described in subsection~\ref{sec:topfront},
+% of course without those that are specific to other thesis
+% types; therefore we do not repeat them here.
+%
+% Special care should be dedicated to the university
+% specifications; in some universities the supervisor(s)
+% should not be indicated and in such a case the (unique)
+% candidate may be indicated without any legend on top of
+% it. The University logo might already contain the explicit
+% wording with the the university name and in this case
+% repeating the name would be pleonastic. At my level I
+% cannot foresee the user requirements therefore it is up
+% to the user to take care of inputting the correct
+% fixed word data and the specific thesis data. I hope
+% this module is useful for most Ph.D.\ students, but if
+% the user compares the title page requirements with those
+% prescribed for the ScuDo theses, s/he sees how much such
+% requirement might be different from one university to the other.
+%
+% May be in such circumstances the user might prefer to create
+% his/her custom title page and would not use this module at all.
+%
+% \section{The custom module for the title-page}\label{sec:custom}
+% The construction of the customised title page module is the full
+% responsibility of the user.
+% In facts the user, beyond specifying the |tipotesi=custom|
+% to the |toptesi| class class, at the beginning of the
+% document explicitly inputs a personal package file, say
+% |mycustomfile.sty| by means of the simple
+% |\usepackage{mycustomfile}| command, and this is all the user
+% needs. Of course this is an understatement; in facts s/he
+% should select a package form the many existing ones, s/he
+% can create him/herself a new package branched on other existing
+% software; s/he may refrain form using external packages,
+% and simply insert his/her title page data within a |titlepage|
+% environment where s/he wants, with the fonts families, series,
+% shapes, and sizes s/he prefers and so on.
+%
+% Needless to say that in order to create a custom title page
+% module the user must perfectly know the intricacies of the
+% \LaTeX\ language. It may be helpful to read the Italian
+% documentation |toptesi-it.pdf| where an example of landscape
+% title page is already described in full detail. Of course a
+% landscape title page requires a custom layout and is no
+% surprise that the example deals with this particular one.
+% Nevertheless that example gives a good idea on how to create
+% a custom title page.
+%
+% We don't go further in describing the |tipotesi=custom| option,
+% except remembering the this option just inhibits loading both
+% the standard default module, and any other predefined module, unless the
+% user directly loads one with or without the specific module options.
+%
+% \section{The high school final work module}
+%
+% The suffix |sss| is the acronym for the Italian name of
+% “High School”, \emph{Scuola Secondaria Superiore}.
+% Elegance of bureaucratic language; the elementary school
+% now is `Scuola Primaria', and junior high school is `Scuola
+% Secondaria Inferiore'. As well as it was in Germany and
+% in some Swiss Cantons, the total number of school years
+% is 13 instead of 12, as it is in most countries. The advantage
+% is that no general education is taught in university, no
+% \emph{classes pr\'eparatoires}, because it is assumed that
+% the high school diploma assures a sufficient level of general
+% education.
+%
+% Differently from most high school systems in the world,
+% in Italy each school has a special “mission” and receives
+% different names, all under the general definition of Scuola
+% Secondaria Superiore. But it s possible to distinguish
+% between Licei (University preparatory), Istituti tecnici
+% with various specialisation (for technical education in
+% different domains); Istituti professionali (for vocational
+% training); all of them end with a state examination, and
+% almost all of them allow entrance in University, although
+% a certain level of auto\-selection is actually performed.
+% Many university Schools, formerly Faculties, submit applicants
+% to entrance tests intended mostly to let them perform a
+% conscious choice of their future studies; sometimes the
+% tests are intended also to form ranks in those schools where
+% the \emph{numerus clausus} is applied.
+%
+% This off topic is necessary to let the general reader
+% understand the importance of the \emph{esame di maturità}
+% and the important role that the high school final work
+% (nicknamed \emph{thesina}, `little thesis') plays in this
+% generally difficult exam; statistics say that the percentage of
+% flunking students is very low, but the final passing grade
+% (a numerical value in the range from 60 to 100 with honours)
+% plays also an important role in the following career, therefore
+% students work very hard to pass with good grades.
+%
+% The above off topic explains why in Italy the final high
+% school state exam includes the evaluation of a personal
+% written report on some subject chosen by each student;
+% this choice is often performed with
+% an initial support by a teacher, that gives help in
+% choosing the subject, and, maybe, offers some initial input.
+% They do not supervise the student work; but this work is
+% submitted to the examining committee (the members of which
+% are external to the specific school) that after due reading,
+% ask questions on the work and investigate the depth to which
+% the student has gone into his/her chosen subject.
+%
+% Certainly this final work has not the importance of a
+% university thesis, but it is the first time when the
+% student is asked questions on a subject of his/her choice,
+% where the examining committee assumes s/he has examined all
+% the facets with the approach of a young adult, not that
+% of an old teenager.
+%
+% Some high school students have discovered \LaTeX, and some
+% of them do really appreciate the typesetting results all
+% \LaTeX\ users love; therefore they like the idea of
+% typesetting their final high school work with the powerful
+% \LaTeX\ functionalities.
+%
+% Of course their title page must be very different from those
+% suitable for university theses, therefore a special module is
+% necessary, and I decided to to add such a module to this bundle.
+%
+% Actually high school students require less information on the
+% title page; the school generic and proper names, obviously the
+% title and a possible subtitle, their name, maybe the logo of
+% their school, the examination date, and such similar data.
+%
+% They certainly do not need the advanced features needed for
+% the functionalities of the |topfront| extension package;
+% nevertheless the title page must have a professional look,
+% not just what they may achieve by using a word processor.
+%
+% The contents of the \emph{tesina} may also have a professional
+% look if the students do not tickle the typesetting program
+% to behave as a word processor. Several guides are available
+% for high school students, as well for university ones, to
+% recall how a “technical report” should be properly written;
+% unfortunately today students prefer to read their smartphones,
+% rather than real printed or electronic books; but those
+% students who use \LaTeX\ know very well that they need reading
+% suitable guides for using the program \emph{and} for structuring
+% their document.
+%
+% Mirko Mondini suggested to extend the TOPtesi bundle to
+% include the title page for high school final works. He
+% also suggested the layout of the page. This module may be
+% considered “work in progress” because we both have little
+% experience with the requirements of such final works.
+% As the maintainer of this bundle I thank him very much;
+% Marco may suggest specific changes in the near future;
+% his contributions are very welcome. I would add that
+% commentaries and suggestions by the students to whom this
+% module is dedicated are very welcome just as well.
+%
+% We assume the student already knows the fundamentals of \LaTeX;
+% we assume the Italian student has read the companion
+% documentation |toptesi-it.pdf| distributed with this bundle;
+% we assume also that the student has already a valid
+% installation of the \TeX\ system, preferably \TeXLive,
+% that is available for all most popular operating systems,
+% Windows included of course, although for Windows there is
+% also the alternative installation MiKTeX. As my personal opinion,
+% I think that \TeXLive may be updated more easily than MiKTeX
+% and, not negligibly, its default installation is complete,
+% while MiKTeX by default has a basic installation, so that very
+% often offline MiKTeX users suffer from “missing package” errors.
+%
+% Since this module is going to be used only by Italian high
+% school students, all user commands are in Italian.
+%
+% Here we concentrate on the title page. But before entering
+% this subject let us recall that this module already loads a
+% certain number of packages.
+% \begin{enumerate}[noitemsep]
+%\item
+% Packages |amsmath|, |amssymb| (only \pdfLaTeX) and |amsthm|
+% are already loaded, but a test is made to verify if the user
+% has loaded in his/her preamble the math packages |newtxmath|
+% or |newpxmath| (possibly together with their companions
+% |new...text|), because the latter packages already provide
+% for their functionalities.
+%\item
+% If they typeset with \LuaLaTeX\ or \XeLaTeX, the suitable
+% packages are already loaded, in particular the |unicode-math|
+% one; the user, though, should load a matching OpenType Math
+% font among those available with the \TeXLive distribution.
+%\item
+% Service packages such as |xparse|, |xspace|, and |xcolor|
+% are already loaded for the benefit of this bundle and this
+% module, but the user is free to use their functionalities,
+% mostly those of |xcolor|.
+%\item
+% Packages |calc| and |ifthen| are functional for the module;
+% supposedly the end users should not have any necessity to use
+% them, but, of course, they can if they need to.
+%\item
+% Package |multirow| has been loaded, because many users like
+% to imitate word processor functionalities; this package allows
+% to create table cells that span several rows; as a general
+% rule this practice should be avoided.
+%\item
+% Package |booktabs|, is very useful to set professional
+% tables (reading its documentation is necessary).
+%\item
+% No particular package has been loaded to create a specialised
+% bibliography; either the student directly uses its own
+% |thebibliography| environment, or provides to chose whatever
+% style s/he likes best and, if s/he decides to load package
+% |biblatex|, s/he should specify the desired options. In the first
+% case one of the most useful packages is |natbib|; in the
+% second case |biblatex| supports other bibliographic style
+% files. Both approaches require the preparation of a
+% bibliography database by means of programs |jabref|,
+% |bibdesk|, or similar applications: but with |natbib|
+% the |bibtex| database handler is required, while with
+% |biblatex| case the |biber| handler yields the best
+% performances. In both cases it is required the careful
+% reading of either package documentation.
+%\end{enumerate}
+%
+% The commands the user can use for the title page follow.
+%
+% Remember that they may be used directly within the
+% |FrontespizioTesina| environment; if the user prefers, s/he
+% can write them in a configuration file; such file must be
+% named with the same name as the document main file, and
+% it must be saved in the same folder; the information
+% read from the configuration file is possibly overridden
+% by the same commands, with different data, specified within
+% the |FrontespizioTesina| environment.
+% Just to be sure to be clear, if your document main file is
+% named |LaMiaBellaTesina.tex|, the configuration file should
+% be named |LaMiaBellaTesina.cfg| and both files should be
+% saved in the same folder.
+%
+% The title page commands are the following:
+%\begin{description}\def\Item[#1]{\item[\normalfont\cs{#1}]}
+%\Item[SSSLogo]
+% is used to define the name of the graphic file containing
+% the high school logo; not necessarily the school allows to
+% use its logo; in any case if such command is not used, the
+% logo information is ignored. The syntax is
+% \begin{ttsintassi}
+% \cs{SSSLogo}\marg{file name}
+% \end{ttsintassi}
+% Remember that the graphic file must have one of these
+% extensions: |.pdf|, |.eps|, |.png|, or |.jpg|; the first
+% two may contains vector images and give the best results;
+% the second two are bitmapped, therefore their rendering
+% depends very much on the pixel density of the file contents.
+%\Item[NomeTesina] sets the name of the document; the default value
+% is “Tesina di maturità”. Syntax:
+% \begin{ttsintassi}
+% \cs{NomeTesina}\marg{nome dell'elaborato}
+% \end{ttsintassi}
+%\Item[NomeCandidato]
+% is used to set the label to typeset over the author's name;
+% default “Studente” or “Studentessa” depending on the
+% state of the boolean switch |femminile|, but if this command
+% is used for the user tesina, s/he needs not to specify any
+% switch and uses the only name necessary for his/her document.
+% Syntax:
+% \begin{ttsintassi}
+% \cs{NomeCandidato}{examinand label}
+% \end{ttsintassi}
+% This command might be used to set the label with a different
+% name in the correct gender.
+%\Item[IndirizzoMiur]
+% sets the Ministry of Education special address. If this
+% command is omitted, this address, considered optional,
+% is neglected. Syntax:
+% \begin{ttsintassi}
+% \cs{IndirizzoMiur}\marg{Ministry of Education special address}
+% \end{ttsintassi}
+%\Item[OpzioneMiur]
+% sets the specification that distinguishes the school
+% mission, if any. Syntax:
+% \begin{ttsintassi}
+% \cs{OpzioneMiur}\marg{Ministry of Education option}
+% \end{ttsintassi}
+%\Item[TipoScuola]
+% sets the specific generic name of the school; default
+% none; therefore use of this commands is mandatory;
+% the user might specify “Liceo classico”, or “Istituto
+% tecnico industriale di stato”, or whatever applies for
+% the students' specific school. Syntax:
+% \begin{ttsintassi}
+% \cs{TipoScuola}\marg{generic school name}
+% \end{ttsintassi}
+%\Item[NomeScuola]
+% sets the specific name of the school; generally schools
+% are dedicated to famous scientists or heroes, or presidents,
+% or kings/queens, or writers, et cetera; default “empty”.
+% Syntax:
+% \begin{ttsintassi}
+% \cs{NomeScuola}\marg{specific school name}
+% \end{ttsintassi}
+%\Item[SedeScuola]
+% sets the actual location of the school; it may be just the
+% city or a full postal address; it may contain new line
+% commands in order to format a full address of several lines;
+% no default. Syntax:
+% \begin{ttsintassi}
+% \cs{SedeScuola}\marg{the school basic or full address}
+% \end{ttsintassi}
+%\Item[AnnoScolastico]
+% sets the school year at the end of which the state
+% examination is undertaken; no default. Syntax:
+% \begin{ttsintassi}
+% \cs{AnnoScolastico}\marg{school year}
+% \end{ttsintassi}
+%\Item[titolo]
+% sets the title of the document; please don't use long titles;
+% if a short sentence is not descriptive enough, use the
+% |\sottotitolo| argument to add specifications to the title;
+% no default. Syntax:
+% \begin{ttsintassi}
+% \cs{titolo}\marg{main title}
+% \end{ttsintassi}
+%\Item[sottotitolo]
+% sets an optional subtitle; if this command is not used
+% the subtitle field is ignored; no default. Syntax:
+% \begin{ttsintassi}
+% \cs{sottotitolo}\marg{optional subtitle}
+% \end{ttsintassi}
+% The subtitle, if any, is typeset in a normal sized font,
+% therefore it can be several lines long; nevertheless pay
+% attention to use the tie command |~| to connect with an
+% unbreakable space to the following ones such words as
+% prepositions, articles, short adverbs, and such similar
+% items.
+%\Item[studente] or \cs{studentessa}, depending on the gender
+% of the student, sets the name of the author of the
+% document, i.e.\ the name of the student undergoing the
+% examination; no default. Syntax:
+% \begin{ttsintassi}
+% \cs{studente}\marg{proper name(s) followed by the surname(s)}
+% \cs{studentessa}\marg{proper name(s) followed by the surname(s)}
+% \end{ttsintassi}
+% Remember: \textbf{never ever use the surname(s) before
+% the name(s)}.
+% If the \cs{NomeCandidato} macro has not been used, these commands
+% set the proper status to the |femminile| switch, so that the
+% proper default label is used.
+%\Item[Presidente]
+% sets the name of the chairperson of the examining committee;
+% no default. Syntax:
+% \begin{ttsintassi}
+% \cs{Presidente}\marg{examining committee chairperson full name}
+% \end{ttsintassi}
+% Again remember to write the necessary academic titles
+% in lowercase, end the name(s) before the surname(s).
+%\Item[NumeroCommissione]
+% sets the examining committee ID number; no default.Syntax:
+% \begin{ttsintassi}
+% \cs{NumeroCommissione}\marg{Examing committee ID number}
+% \end{ttsintassi}
+%\end{description}
+%
+% The actual title page is created within the environment
+% |FrontespizioTesina|. This environment first reads a the
+% configuration file if one exists, then it analyses the
+% commands possibly set within the environment by the author,
+% possibly superseding the information read from the
+% configuration file; the closing commands actually typeset
+% the title page; the schematic working is the following:
+%\begin{flushleft}\ttfamily\obeylines
+%\Bambiente{FrontespizioTesina} \% reads the config.\ file if any
+%\meta{user commands with user data}
+%\Eambiente{FrontespizioTesina} \% typesets the title page
+%\end{flushleft}
+% There are no options to specify; the title page is sort
+% of rigid in the sense that every piece of information goes
+% where it should and interlaced with proper spaces so as to fill
+% up the text grid in a sensible way. No doubt some users may
+% complain that the title page does not allow to do this or
+% that; that the spacings should be different from what they
+% actually are.
+%
+% There are work-arounds to these complains.
+%\begin{enumerate}[noitemsep]
+% \item
+% Instead of using the above environment, s/he uses the |titlepage|
+% environment within which s/he inserts what s/he wants and
+% where s/he likes best, with the typefaces s/he prefers,
+% with the vertical spacings that accomodate his/her aesthetical
+% feelings. Of corse it is necessary to know what is being done;
+% if not, the results may be worse than the predefined layout.
+%\item
+% Even better: the user may use a custom layout and set it
+% following the instructions described in section~\ref{sec:custom}.
+% \end{enumerate}
+%
+%^^A PDFA/A
+%
+% \section{\sigla{PDF/A} archivable format}
+% This section in general applies also if the thesis is typeset
+% by means of \LuaLaTeX\ or \XeLaTeX, but with \XeLaTeX\ special
+% attention should be paid to the details of the procedure as
+% described in the documentation of the \pack{pdfx} package. Even
+% better, \LuaLaTeX, whose source file is practically the same as
+% that of \XeLaTeX, may produce in a simpler way a \sigla{PDF/A}
+% compliant output file if the users follow attentively the
+% instructions contained in the documentation of the \pack{pdfx}
+% package.
+%
+% More details are given in the Italian documentation contained
+% in the \texttt{toptesi\discretionary{-}{}{-}it} which is part
+% of the TOPtesi bundle.
+%
+% Politecnico di Torino and several other Italian and foreign
+% universities are moving towards archiving theses in electronic
+% format, specifically in the \sigla{PDF} one. The problem of
+% course is: “Will it be possible to read the archived documents,
+% say, fifty years from now?”
+%
+% This essential question has been answered by the International
+% Standards Organisation (\sigla{ISO}) that in 2005 published the
+% regulation \sigla{ISO}~19005-1; in 2011 and 2012 enhancements of
+% this regulation have been published. This regulation defines
+% a \sigla{PDF} variant suitable for archiving, named \sigla{PDF/A}, that
+% has two sub-formats distinguished as \sigla{PDF/A}-1a, and
+% \sigla{PDF/A}-1b.
+% The `a' sub-format is more exacting, while the `b' one is less
+% stringent. In spite of the recently published upgrades,
+% here we stick to the older ones, that are a sub set of the
+% newer ones, and for which suitable software is available.
+%
+% The requirements for the `a' sub-format imply not only those
+% requested for the `b' one, but also that the logical structure
+% of the document be accessible from outside (Tagged \sigla{PDF}).
+% The requirements for the `b' sub-format are that the
+% document must be reproducible without modifications exactly
+% as it was at the moment of archiving. Both sub-formats must
+% contain \emph{metadata} that are searchable even without
+% decompressing the normally compressed \sigla{PDF} file, and that
+% contain information useful for archive maintenance; among
+% these informations, of course, the \sigla{PDF/A} category the document
+% belongs to, the document title, the authors, and few other
+% optional pieces of information, such as the keywords that
+% ease up library searches.
+%
+% Since version 1.40, the program \texttt{pdflatex} is capable
+% of producing \sigla{PDF/A}-1b compliant files, provided that some
+% attention is put into editing of the thesis source file. Since the
+% year 2008 the \TeX\ system, the executable \texttt{pdflatex} has
+% version number 1.40.9 (or higher); therefore today there should not
+% be any difficulty in producing \sigla{pdf/a} compliant documents.
+%
+% The particular attention needed to avoid problems with the
+% \sigla{PDF/A} compliance is summarised as follows:
+% \begin{enumerate}[noitemsep]
+% \item
+% The preliminary essential requirement is that the
+% \texttt{pdflatex} engine used to typeset the thesis be
+% sufficiently recent to support the \sigla{PDF/A} requirements.
+% It's better to have the most recent distribution of
+% the \TeX\ system installed on your PC. Do not try to
+% typeset the thesis with the `old' \prog{latex}; you
+% \emph{must} process the input thesis file(s) with
+% \texttt{pdflatex} or with \prog{lualatex} or with \prog{xelatex};
+% in the following, no specific check will be made in
+% order to verify if you are actually using \texttt{pdflatex}.
+% If you really need to use the `old' \LaTeX, you get a DVI
+% file and you need to transform it with |dvips| into a
+% PS file; at this point you have lost the possibility of
+% exploiting the internal commands of |pdflatex|
+% version~1.40.9 or later. You can still produce a \sigla{PDF/A}
+% final document, but you have to transform it by means of the
+% procedures described in the Italian documentation; such
+% documentation describes several more or less effective
+% methods to transform a non compliant \sigla{PDF/A} file into a
+% compliant one, and how to correct the “imperfections”
+% that forbid any valid transformation.
+%
+% \item
+% Since 2016 the TeXLive distribution contains a new version
+% of \pack{pdfx} and now \sigla{PDF} documents produced with
+% \prog{lualatex} may be fully compatible with the standard
+% \sigla{PDF/A}. With some special care and some post"processing,
+% even \prog{xelatex} can now produce \sigla{PDF/A} compliant output
+% files.
+%
+% \item
+% Your up-to-date complete \TeX\ distribution should
+% contain the package \textsf{pdfx}; if it does not,
+% upgrade your \TeX\ system complete distribution. Be sure
+% that the version number of the \pack{pdfx} package has
+% version number~1.5.8 or higher.
+%
+% \item
+% In the 2018 version of \TeXLive, with the upgrade of |pdfx|
+% a glitch emerged due to licence questions; the |sRGB.icc| distributed
+% with earlier versions was under a limited licence that is not
+% compliant with the free nature of the \TeX\ system. The maintainers
+% are aware of this problem and, while they are further upgrading the
+% \pack{pdfx} file, they suggest a work-around (that will be described
+% below); it is possible that when you read this documentations the
+% work-around, described below, is not necessary any more.
+% With version 1.61 of \pack{pdfx} the problem is solved even if one uses
+% a \TeXLive\ installation prior to the one distributed in the year 2018.
+% In any case the most recent version 1.61 or higher of |pdfx| is
+% necessary.
+%
+% \item
+% If your thesis main file, the one you run your typesetting
+% program on, is named, say, \texttt{JohnSmithMasterThesis.tex},
+% prepare in the same directory another file named
+% \texttt{JohnSmithMasterThesis.xmpdata} that contains the
+% \emph{metadata} relative to the thesis.
+% Pay attention to follow the stringent metadata syntax described
+% and exemplified in the \textsf{pdfx} documentation. A minimal
+% example set of \emph{metadata} would be the following one:
+% \begin{verbatim}
+% \Title{Experiments in Trichotetratomy}
+% \Author{John Smith}
+% \end{verbatim}
+% The keyword list requires a specific format that can be
+% examined in the |pdfx| package documentation. The best way to
+% be sure that this file accompanies the thesis main file,
+% is to put its contents in a \env{filecontents*} environment.
+% The details are in the documentation of the \pack{pdfx} package and
+% examples are shown in the Italian documentation of |TOPtesi|.
+% In order to override the constraints of the \LaTeX\ kernel
+% |filecontents| environment, TOPtesi loads the package |filecontents|
+% that eliminates the mentioned constraints, but requires that the
+% environment be used within the preamble, in any case before
+% loading the |pdfx| package. Actually this does not forbid to use the
+% environment before the |\documentclass| statement, as it was in the
+% previous versions of TOPtesi. The new version is backwards compatible
+% with the previous ones with this simple difference: when the environment
+% is used before the |\documentclass| statement, any modification of
+% its contents does not take place unless the previous |xmpdata| file
+% is deleted, because the kernel environment does not overwrite existing
+% files; on the opposite, if the environment is used after the
+% |\documentclass| statement ,the |xmpdata| file is simply overwritten
+% without the need to delete a previous version.
+%
+% The work-around mentioned above consists in adding another line
+% at the very end of the metadata file; it looks like this:
+%\begin{verbatim}
+%\setRGBcolorprofile{sRGB.icc}{sRGB}{Argyll CMS, sRGB color profile}%
+%{https://www.argyllcms.com/}
+%\end{verbatim}
+% Thanks to the new |filecontents| functionalities there is no need
+% to delete a previous |.xmpdata| file. But, as specified above, this
+% work-around is not necessary anymore if the most recent version 1.6.1
+% or later of \pack{pdfx} is used; this work-around information is
+% maintained in this documentation just for backwards compatibility.
+%
+% This work-around is required if you get an error message that
+% refers to line 1084 of the |pdfx.sty| file; if you don't patch
+% the metadata file and you do not get the above error, it means
+% that the |pdfx| package has already been corrected.
+%
+% \item
+% Some mathematical symbol commands obtained from the standard
+% \LaTeX\ set-up and the standard mathematical fonts require
+% some patching that is already included in this \texttt{TOPtesi}
+% bundle; but it is not excluded that with other fonts similar
+% patches might be requested. The \sigla{UNICODE} math fonts used
+% by \XeLaTeX\ and \LuaLaTeX\ do not require any patch.
+%
+% \item
+% Use only \sigla{PNG} and \sigla{JPG} images with \sigla{RGB} color
+% profiles. But if a \sigla{PNG} image file contains some transparencies,
+% the document \sigla{PDF} cannot be validated as \sigla{PDF/A}-1b
+% compliant.
+%
+% \item
+% If you include \sigla{PDF} images that contain some text, be sure
+% that the fonts for this text are completely embedded in
+% the included files. Should the \sigla{PDF} files come from an external
+% drawing program be sure to configure that program so that
+% it embeds all the fonts used in each image. If you don't
+% succeed, open the \sigla{PDF} file with the free software
+% \texttt{inkscape} and save it back in \sigla{PDF} format; the
+% missing fonts will be replaced with their outlines and
+% this will not disturb the \sigla{PDF/A} conformity. Pay attention,
+% because Inkscape might save your file with some
+% specifications for transparency; but transparency
+% specifications destroy the \sigla{PDF/A} compliance.
+% Should this inconvenience take place, instead of asking
+% \texttt{inkscape} to save in \sigla{PDF} format, ask to save in
+% \sigla{EPS} format; this one does not support transparencies,
+% therefore they get abolished from the very beginning. This is useful
+% also when \texttt{inkscape} is used to change the color
+% profile of an image. Once this program is used to convert an
+% image to \sigla{EPS} format without transparencies and/or with the
+% accepted \sigla{RGB} color profile, import the image as usual with
+% |\includegraphics|; all the suggested typesetting programs,
+% \prog{pdflatex} included, can import \sigla{EPS} files, therefore
+% these problems, thanks \texttt{inkscape} may be easily overridden.
+% Once you got the corrected EPS file, you might distill it to PDF,
+% so as to compress it in a compatible way; EPS files are generally
+% human readable so they are very large in terms of memory size.
+%
+% \item
+% Verify your final \sigla{PDF} file with a suitable program and
+% do not give up doing the necessary corrections or
+% modifications while the verification program keeps saying
+% that this or that is not compliant with the \sigla{PDF/A}
+% specification. A suitable program is the Preflight module
+% of Adobe Acrobat Pro~XI (or later), but this, although the most
+% authoritative, is a commercial program; probably your
+% university has special facilities for this task. In any
+% case you can install the \prog{veraPDF} free software
+% from the Internet, and use this handy verification program
+% (in 2017 the stable release was made available).
+%
+%\end{enumerate}
+%
+% Warning: if you are using Adobe Reader X (or later), this
+% program will open a \sigla{PDF} file beginning with an information
+% header stating that the file claims to be \sigla{PDF/A} compliant;
+% maybe it's true, but do not trust this information too much,
+% at least don't believe that this information is a
+% “certification” of the \sigla{PDF/A} compliance. I have seen
+% files with this comforting information that did not pass
+% the Preflight test! Actually the Reader is correct in saying
+% that “\dots\ the program claims to be \sigla{PDF/A} compliant\dots”;
+% the Reader just notices that the metadata contain such a claim,
+% but this does not imply that the claim is true.
+%
+% Up to today the realisation of \sigla{PDF/A} conforming files sets
+% forth several problems that are of great concern for
+% large Institutions that have thousands of documents a year
+% to archive; it is not a question implied in the free nature
+% of the \prog{pdflatex}, \prog{xelatex}, and \prog{lualatex}
+% programs, that, on the opposite, according to my experience,
+% have a very high rate of success in producing \sigla{PDF/A}
+% compliant documents. If you stick to the default \TeX\ system
+% Type~1, 256-glyph fonts, or to the \sigla{UNICODE} encoded otf
+% or ttf fonts and use this version of the TOPtesi bundle
+% you should be able to avoid most problems.
+%
+% \section{Customisation}\label{sec:LPPL}
+% Customisation of parts of this bundle is discouraged, but is not
+% forbidden, provided that it is done according to the \LaTeX\ Project
+% Public Licence (LPPL). The full text of this licence is contained at the
+% end of the Italian documentation file \texttt{toptesi-it.pdf},
+% besides being available from the \sigla{ctan} web site.
+%
+% The parts of this bundle already contain several customising
+% commands and environments; other parts are not directly
+% customisable; for example the geometry of the page; the various
+% standard title pages (where the \texttt{tipotesi=custom} option
+% already allows complete customisation of the title page); the
+% super sectioning of the final document by means of |\frontmatter|,
+% |\mainmatter|, and |\backmatter|; what appears in the table of
+% contents; and so on.
+%
+% Nevertheless, in spite of being discouraged, some user might
+% want to customise some details. There are several ways to do
+% such customisation that conform the LPPL.
+%
+% \textcolor{red}{The main restriction set by the LPPL is that
+% the bundle files may be modified, but their names must be changed,
+% although the original author and licence are maintained in their
+% initial comments, and that the file maintainer name is changed so
+% that any user of the modified version knows to whom address
+% him/herself in case of need; the original author is not responsible
+% of any modified file.}
+%
+% \paragraph{Direct modification}
+% In order to make a direct modification to any original file, first
+% duplicate the original file and change name to the duplicated file;
+% the modify this copy name and make the changes that are deemed
+% necessary, without forgetting to delete my name as the maintainer
+% while adding your name; it would be useful if some comments are
+% added so as to describe what has benne modified, why and how.
+%
+% Remember to change accordingly the references to the modified
+% file(s) in the other bundle files; this implies that all the
+% bundle files get modified and that their names must be changed
+% accordingly while modifying the initial comment lines so as to
+% delete my name as the maintainer.
+%
+% \paragraph{Modification of single commands and/or environments}
+% Another way to perform some customisation that does not infringe
+% the LPPL licence is the following.
+%
+% In facts a simpler way to customise some commands and or
+% environments is to copy their code from the original bundle
+% files, and paste it into a personal \texttt{.sty} file to be
+% input with a |\usepackage| command inside the argument of
+% another |\AtBeginDocument| command; modify your personal file
+% the way you like, and test the result.
+
+% If your modifications do not produce any difference in the
+% output PDF file, then you have to load your modified file after
+% the |\begin{document}| line. In this case you have to change
+% your file extension from \texttt{.sty} to \texttt{.tex}, and
+% you probably have to start your file with a |\makeatletter| and
+% finish it with a |\makeatother| commands, since many macros
+% used inside the original code are “protected” with an |@| sign
+% with its category code changed to “letter”. Needless to say that
+% in order to suse thei |.tex| file, the |\input| command must be
+% used in place of the |\usepackage| one.
+%
+% \paragraph{Command patching}
+% A third way to modify some commands and/or environments is to
+% patch their definitions by means of the patching commands provided
+% by the |etoolbox| package, that is already loaded by this bundle.
+% Such |etoolbox| commands allow to add or to append some code to
+% selected macros; other |etoolbox| commands allow to insert some code
+% in the middle of a replacement text of selected macros or to replace
+% some code in any position of its replacement text.
+%
+% The use of these patching commands requires some attention and
+% is not recommended for \LaTeX\ beginners; nevertheless it is the
+% best way to apply personal modifications to existing commands.
+% The details of this procedure must be examined in the |etoolbox|
+% documentation.
+%
+% \StopEventually{}
+%
+% \newpage
+%
+% \section{Documented code}
+% \subsection{The class code}
+%
+% Here begins the usual machinery for stating the required
+% \TeX\ format and for sharing some code between the driver
+% and the class part of the code, since they are supposed to
+% carry the same date and version number, besides their specific
+% description string.
+% \iffalse
+%<*class>
+% \fi
+%
+% The class itself is very simple since it loads just the
+% \texttt{report} document class and some packages with a few
+% default options. All options specified to the \texttt{toptesi}
+% class are passed on to the \texttt{report} class; the
+% |a4paper| option is made the default, but the user can invoke
+% the class with any valid \LaTeX\ paper size. According to the
+% \LaTeX\ and |xkeyval| machinery of option passing, the |\ExecuteOptionX|
+% command assures that |a4paper| is the default size, but it
+% is not used if another paper size code is specified to the class.
+%
+% The same holds true for the other class options, except for
+% the encoding string because their option passing machinery does
+% not hold true for the \pack{inputenc} package; therefore this
+% package is not loaded any more as it was in previous versions
+% of the class\footnote{Thanks to Enrico Gregorio who pointed
+% out this feature.}.
+%
+% On the opposite, while typesetting with
+% |pdfLaTeX|, if another language is specified in the list of
+% \pack{toptesi} class options this language is appended to the
+% \pack{babel} package default options and, beware!, it would
+% become the default language; with XeLaTeX and LuaLaTeX a
+% language option is useless (and harmless) due to their way of
+% specifying languages; with these programs other languages must
+% be specified with their |\setotherlanguage| or |\setotherlanguages|
+% commands which do not change the preset main language.
+%
+% The |filecontents| package is loaded: it removes the constraints
+% the original kernel environment |filecontents|, with or without
+% the asterisk, sets up for its use. In particular that what is
+% contained in the environment gets saved in the named file, only
+% if the named file does not exist. This implies that if some
+% changes are introduced in the environment contents, such changes
+% do not get saved in the named file unless a pre\-existing file is
+% deleted.
+%
+% Another piece of code follows in order to abort the job if the
+% |toptesi| date, contained in it |\ProvidePacckage| argument is
+% older than the class date. Should this happen, the job is aborted
+% with a strong message on the console. In order to work properly
+% the |toptesi| package is loaded and its date is fetched by means
+% of the defined |\GetFileInfo|macro. This macro is almost identical
+% to the one that is available when this documented file is processed;
+% it simply differs in the sense that the |v.| prefix to the file
+% version number is taken as a separator; should be necessary to
+% compare also the version number, the |\fileversion| macro gets
+% defined properly without any prefix. The |\@parse@version| macro
+% is a \LaTeX\ kernel one; in spite spite of its name, it extracts
+% from the first macro token the data in a form suitable for comparison
+% with the second macro token, so that a numerical test can be performed
+% without the intervention of non digit symbols. The prominent class
+% error message is output only if the numerical value of the package
+% date is strictly lower than the class date. This version control was
+% necessary because apparently there are some vintage versions still
+% on the web, and some newbie \TeX{}ies fetch them instead of using
+% the most recent \TeX\ system complete and updated installation.
+% \begin{macrocode}
+\usepackage{trace}
+\RequirePackage{xkeyval}
+\DeclareOptionX{formato}[a4paper]{\PassOptionsToClass{#1}{report}}
+\DeclareOptionX*{\PassOptionsToClass{\CurrentOption}{report}}
+\ExecuteOptionsX{formato}
+\ProcessOptionsX*\relax
+\LoadClass{report}
+
+\RequirePackage{iftex}
+\ifPDFTeX
+ \usepackage[english,italian]{babel}
+\else
+ \usepackage{fontspec}
+ \defaultfontfeatures{Ligatures=TeX}
+ \usepackage{polyglossia}
+ \setmainlanguage{italian}
+ \setotherlanguage{english}
+ \renewcommand*{\iflanguage}[1]{%
+ \ifnum\the\language=\csname l@#1\endcsname
+ \expandafter\@firstoftwo\else
+ \expandafter\@secondoftwo\fi}
+\fi
+\RequirePackage{filecontents}
+\providecommand\GetFileInfo[1]{%
+ \def\filename{#1}%
+ \def\@tempb##1 v.##2 ##3\relax##4\relax{%
+ \def\filedate{##1}%
+ \def\fileversion{##2}%
+ \def\fileinfo{##3}}%
+ \edef\@tempa{\csname ver@#1\endcsname}%
+ \expandafter\@tempb\@tempa\relax? ? \relax\relax}
+
+\usepackage{toptesi}
+\GetFileInfo{toptesi.sty}\let\stydate\filedate
+\GetFileInfo{toptesi.cls}\let\classdate\filedate
+
+ \ifnum\expandafter\@parse@version\stydate//00\@nil<%
+ \expandafter\@parse@version\classdate//00\@nil
+ \ClassError{toptesi}{\MessageBreak
+ ******************\MessageBreak
+ This class requires a sty file not older than the class\MessageBreak
+ This class has a date of \classdate\space while\MessageBreak
+ the sty file you are using has a date of \stydate\MessageBreak
+ \MessageBreak
+ This job is therefore aborted\MessageBreak\@gobble
+ ******************\MessageBreak
+ \MessageBreak
+ Update your TeX system installation and/or \MessageBreak
+ avoid using vintage toptesi.sty files%
+ }{%
+ }
+ \expandafter\stop
+ \fi
+%
+% \end{macrocode}
+% \iffalse
+%</class>
+% \fi
+% \subsection{The \texttt{toptesi.sty} code}
+% The greatest part of the \texttt{toptesi} class code is
+% saved into a separate file partly for backward compatibility
+% reasons (before version 3.x \texttt{toptesi} was just an
+% extension to the \texttt{report} class) and partly because
+% it might be used as a stand alone package, but, take
+% notice, it might create some conflicts with with other
+% classes internal code, although with the latest versions
+% of |toptesi| we did not notice any conflict with the |book|
+% class; it is certainly incompatible with the \texttt{article}
+% class.
+%
+% This package |toptesi.sty| must contain its own \TeX\ format
+% declaration in view that it might be used as an extension to
+% other classes
+%
+% \iffalse
+%<*topsty>
+% \fi
+%
+% We start by defining the debugging macros; these trace
+% commands and macros are the usual ones I used for debugging.
+% I know the \texttt{trace} package is supposed to be much better,
+% but sometimes I use these ones, especially when I want to
+% trace math snippets, where the tracing functionalities of
+% \pack{trace} are turned off.
+% \begin{macrocode}
+\def\TRON{\tracingcommands \tw@ \tracingmacros \tw@}
+\def\TROFF{\tracingcommands\z@ \tracingmacros \z@}
+\let\TROF\TROFF
+% \end{macrocode}
+%
+% Now we define the specific package options: \texttt{classica} and
+% \texttt{trieste} are identical; the use of \texttt{trieste} is
+% deprecated, but this option is maintained for backward
+% compatibility.
+%
+% The option \opz{scudo} is used only to typeset doctoral
+% dissertations with the special look required by the “Scuola
+% di Dottorato” of Politecnico di Torino. The other options for
+% specific types of thesis, \opz{triennale}, \opz{monografia},
+% \opz{magistrale}, \opz{dottorale}, \opz{secondaria}, are
+% described further on; options \opz{frontespizio} and
+% \opz{custom} avoid loading the default module |topfront| or any
+% of the previous listed modules; the are used to create title pages
+% different from the ones that are available with TOPtesi.
+%
+% The |corpo = value| option can receive “any” value; if this
+% value is not lower than 14\,pt , the |\if@xixpt| switch is
+% set to true; the value assigned to |corpo| specifies the normal
+% size; the TOPtesi bundle uses the |\changefontsizes| macro
+% provided by package |scrextend|, that is part of any \TeX\
+% system complete and up-to-date TeXLive or MiKTeX installation.
+%
+% Option \opz{chapterbib} allows to set a list of references at
+% the end of each chapter. The option is maintained for backward
+% compatibility, but we discourage its use, because of the amount
+% of manual work involved; it is much better to use the |biblatex|
+% functionalities and/or other packages created for this purpose.
+%
+% For other options some boolean variables are
+% defined and the option definitions set some of them to the value
+% “true”.
+% \begin{macrocode}
+\newif\ifevenboxes \evenboxesfalse
+\newif\if@utoretitolo \@utoretitolofalse
+\newif\if@ldstyle \@ldstylefalse
+\newif\if@xivpt \@xivptfalse
+\newif\iflibro \librofalse
+\newif\ifT@Pfrontespizio \T@Pfrontespiziofalse
+\newif\ifTOPfront \TOPfronttrue
+%
+\newif\ifScuDo \ScuDofalse
+\newif\ifmonografia\monografiafalse
+\newif\iftriennale\monografiafalse
+\newif\ifmagistrale\magistralefalse
+\newif\ifdottorato\dottoratofalse
+\newif\ifsecondaria\secondariafalse
+\newif\ifcustom\customfalse
+\newif\ifTOPnumerazioneromana\TOPnumerazioneromanafalse
+% \end{macrocode}
+%
+% A binding correction is established; its default value is
+% parametrised to the paper dimensions, even if this correction
+% should actually not depend on the paper size; the paper
+% flexibility at the spine margin should be independent from
+% its width; nevertheless large sizes allow for larger default
+% corrections. In any case the user can override this setting by
+% using the specific command |\setbindingcorrection|.
+% The recommendation to the user is to not exaggerate with this
+% correction. In particular the user is warned not to use this
+% option in order to move che text body grid towards the outer
+% edge, simply because s/he does not understand why two side
+% typesetting uses an inner margin smaller than the outer one.
+% In any case see further on a deeper explanation about margins
+% and binding correction.
+%
+% The options |usefrontespizio| and |noTOPfront| are set by the
+% specific “function” executed by the |tipotesi=|\meta{value} options.
+% \begin{macrocode}
+\newlength\T@Pbinding
+\def\setbindingcorrection#1{\T@Pbinding=#1}
+\newif\if@binding \@bindingfalse
+\newif\ifchapterbibliography \chapterbibliographyfalse
+\newif\ifclassica \classicafalse
+
+\@ifpackageloaded{xkeyval}{}{\RequirePackage{xkeyval}}
+\@ifpackageloaded{scrextend}{}{\RequirePackage{scrextend}}
+\@ifpackageloaded{iftex}{}{\RequirePackage{iftex}}
+\@ifpackageloaded{xspace}{}{\RequirePackage{xspace}}
+\@ifpackageloaded{xparse}{}{\RequirePackage{xparse}}
+
+\DeclareOptionX{cucitura}[7mm]{\setlength\T@Pbinding{#1}\@bindingtrue}
+\DeclareOptionX{corpo}[10pt]{\unless\ifdim#1<\@xivpt\p@\@xivpttrue\fi
+ \changefontsizes{#1}}
+\DeclareOptionX{chapterbib}[true]{\chapterbibliographtrue}
+\DeclareOptionX{evenboxes}[true]{\evenboxestrue}
+\DeclareOptionX{libro}[true]{\librotrue}
+\DeclareOptionX{stile}[standard]{\setkeys{toptesi}{stile=#1}}
+\define@choicekey{toptesi}{stile}[\val\nr]{standard,classica,trieste}{%
+ \ifcase\nr
+ \typeout{valore=\number\nr}\classicafalse
+ \or
+ \typeout{valore=\number\nr}\classicatrue
+ \or
+ \typeout{valore=\number\nr}\classicatrue
+ \else
+ \typeout{valore=\number\nr}\classicafalse
+ \fi}
+\DeclareOptionX{autoretitolo}[true]{\ifclassica\@utoretitolotrue\fi}
+\DeclareOptionX{oldstyle}[true]{\ifclassica\@ldstyletrue\fi}
+\DeclareOptionX{pdfa}{\PackageWarning{toptesi}{%
+ ***********************************************\MessageBreak%
+ Option pdfa ignored.\MessageBreak%
+ Read documentation toptesi-it-*.pdf,\MessageBreak%
+ because package pdfx has changed\MessageBreak%
+ ***********************************************\MessageBreak%
+ }}
+
+\DeclareOptionX{numerazioneromana}[true]{\TOPnumerazioneromanatrue}
+
+\newcommand\NoValidTipo[1]{%
+\PackageError{toptesi}{Option value `#1' not defined\MessageBreak
+}{Type `X' to exit and check your input}}
+
+
+\DeclareOptionX{tipotesi}[topfront]{%
+ \ifstrequal{#1}{frontespizio}{\TOPfrontfalse\T@Pfrontespiziotrue
+ \AtEndOfPackage{\RequirePackage{frontespizio}}%
+ }{%
+ \ifstrequal{#1}{topfront}{\TOPfronttrue\T@Pfrontespiziofalse
+ \AtEndOfPackage{\RequirePackage{topfront}}%
+ }{%
+ \TOPfrontfalse\T@Pfrontespiziofalse
+ \ifstrequal{#1}{custom}{\relax}{%
+ \ifstrequal{#1}{triennale}{%
+ \def\TPT@tipo{toptesi-monografia}% opz: monografia
+ }{\ifstrequal{#1}{secondaria}{% opz: secondaria
+ \edef\TPT@tipo{toptesi-sss}%
+ }{%
+ \edef\TPT@tipo{toptesi-#1}% opz: triennale,
+ }% % magistrale, dottorale
+ }%
+ \AtEndOfPackage{%
+ \IfFileExists{\TPT@tipo.sty}%
+ {\RequirePackage{\TPT@tipo}}{\NoValidTipo{#1}}%
+ }%
+ }% opz: custom
+ }% opz: topfront
+ }% opz: frontespizio
+ }
+\ProcessOptionsX*
+
+% \end{macrocode}
+% The \texttt{graphicx} package is loaded by default; it is
+% required to insert the university logo(s); if the user
+% forgets that this package has already been loaded nothing
+% dramatic happens, because the |\usepackage| and |\RequirePackage|
+% macros perform the necessary tests in order to avoid
+% reloading the same packages again and again.
+% On the occasion of loading package|etoolbox|, we define
+% |\ifempty| that controls if its argument is a void or empty
+% string; it is not sufficient to use |\ifdefempty| or |\ifdefvoid|,
+% because the argument generally is not a macro; neither it is
+% possible to check the string by means of |\ifcsempty| or
+% |\ifcsvoid|, because sometimes it is a macro and in any case
+% there might be situations when the argument string happens
+% to equal an existing control sequence name; therefore first
+% we expand the possible argument into an internal macro, then we test
+% such macro for emptiness.
+%
+% \begin{macrocode}
+\RequirePackage{graphicx}
+\RequirePackage{etoolbox}
+\RequirePackage{xspace}
+\newcommand*\ifempty[1]{\edef\@tempA{#1}%
+\ifx\@tempA\@empty\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi}
+% \end{macrocode}
+%
+% The |\textheight| is parametrised to the paper height and
+% adjusted so as to contain an integer number of normal text
+% lines. A new dimension is defined to hold the actual value
+% of the inner/spine margin.
+%
+% \begin{macrocode}
+\newlength\interno
+\normalsize% necessary to have the correct value for \baselineskip
+\textheight \paperwidth
+\setlength{\textheight}{%
+\dimexpr\textheight*\baselineskip/\baselineskip+\topskip}
+% \end{macrocode}
+% The inner margin is parametrised to the paper width, but
+% a small correction is made if the extra size of 14pt is
+% chosen. Also |\footskip| is parametrised to the paper height
+% in a slightly different way when the large normal font size
+% is not smaller than 14\,pt; the |\if@xivpt| switch is set to true when the value is assigned to the key |corpo|.
+% \begin{macrocode}
+\iflibro
+ \unless\if@xivpt
+ \textwidth=\dimexpr0.70711\paperwidth\relax
+ \setlength\interno{\dimexpr\paperwidth/8}
+ \footskip=1.5\baselineskip
+ \else
+ \textwidth=\dimexpr0.79549875\paperwidth\relax
+ \setlength\interno{\dimexpr\paperwidth/9}
+ \footskip=2\baselineskip
+ \fi
+\else
+ \unless\if@xivpt
+ \textwidth=\dimexpr0.70711\paperwidth\relax
+ \setlength\interno{\dimexpr\paperwidth/6}
+ \footskip=1.5\baselineskip
+ \else
+ \textwidth=\dimexpr0.79549875\paperwidth\relax
+ \setlength\interno{\dimexpr\paperwidth/7}
+ \footskip=2\baselineskip
+ \fi
+\fi
+% \end{macrocode}
+% The convenience of holding the spine margin within a
+% dimensional register becomes really useful now in order
+% to define the other text-body-grid dimensions.
+% Without binding correction the inner and outer margin
+% are chosen equal, but the grid is moved outwards if the
+% binding correction option is specified. With the |libro|
+% option in force, the outer, lower margin are larger than
+% the corresponding inner and top margins. Without such
+% option, the margins are initially set equal, unless the
+% binding correction is specified.
+% \begin{macrocode}
+\iflibro
+ \interno=\dimexpr\paperwidth-\textwidth\relax
+ \oddsidemargin=0.414214\interno\relax
+ \evensidemargin=\dimexpr\paperwidth-\textwidth-\oddsidemargin\relax
+\else
+ \oddsidemargin=\dimexpr(\paperwidth-\textwidth)/2\relax
+ \evensidemargin=\oddsidemargin
+\fi
+\marginparwidth=\dimexpr\evensidemargin-2.5\marginparsep
+\oddsidemargin=\dimexpr\oddsidemargin-1in\relax
+\evensidemargin=\dimexpr\evensidemargin-1in\relax
+\AtBeginDocument{%
+\if@binding
+ \PackageInfo{TOPtesi}{Margin width recalculation}
+ \PackageInfo{TOPtesi}{Before:\MessageBreak
+ oddsidemargin\space\space \the\oddsidemargin\MessageBreak
+ evensidemargin\space \the\evensidemargin}
+ \advance\oddsidemargin \T@Pbinding
+ \advance\evensidemargin -\T@Pbinding
+ \advance\marginparwidth -\T@Pbinding
+ \PackageInfo{TOPtesi}{After:\MessageBreak
+ oddsidemargin\space\space \the\oddsidemargin\MessageBreak
+ evensidemargin\space \the\evensidemargin}
+\fi}
+
+% \end{macrocode}
+%
+% We now establish the page style. We start by setting to
+% “empty” the tokens that keep the left and the right
+% marks; we define a box so as to set the headers inside
+% this box; we redefine also the plain page style; it is
+% actually a leftover from the previous versions when the
+% page number was set at the foot in bold face, but we leave
+% it here without the bold face specification, so that in
+% future versions folios may be redefined in a common way
+% with the other page styles. Notice that in all page styles
+% folios are always in the footers.
+%
+% By defining |\lapagina| to be equivalent to |\thepage|
+% we can later on redefine |\lapagina| the way we like; we
+% actually do so with the option \texttt{classica}.
+% \begin{macrocode}
+\def\lapagina{\thepage}
+\mark{{}{}}
+\newbox\@intesta
+%
+\def\ps@plain{\let\@mkboth\@gobbletwo
+\def\@oddfoot{\null\hfill {\scshape\lapagina}\hfill \null}\def\@oddhead{}
+\def\@evenhead{}\let\@evenfoot\@oddfoot}
+% \end{macrocode}
+% Other page styles are defined in a different way according
+% to the choice of one side or two side printing. In any case
+% the header is set without the uppercasing that is done in
+% all the default document classes, and it is underlined at
+% a fixed distance from the base line. If the chapter or section
+% heading exceed the |\textwidth| a warning is issued so as
+% to invite the user to exploit the sectioning commands
+% optional short argument.
+% \begin{macrocode}
+\if@twoside
+ \def\ps@headings{\let\@mkboth\markboth% autoretitolo
+ \def\@oddfoot{\null\hfill {\scshape\lapagina} \hfill\null}
+ \let\@evenfoot\@oddfoot
+ %
+ \def\@evenhead{\setbox\@intesta\hbox{\footnotesize\slshape
+ \leftmark}%
+ \ifdim\wd\@intesta>\textwidth \headWarn{\chapter}\fi%
+ \underline{\makebox[\textwidth]{\footnotesize\slshape
+ \strut\leftmark}}}%
+ \def\@oddhead{\setbox\@intesta\hbox{\footnotesize\slshape
+ \rightmark}%
+ \ifdim\wd\@intesta>\textwidth \headWarn{\section}\fi%
+ \underline{\makebox[\textwidth]{\footnotesize\slshape
+ \strut\rightmark}}}%
+ \def\chaptermark##1{%
+ \markboth{\thechapter\ -- ##1}{\thechapter\ -- ##1}}
+ \def\sectionmark##1{\markright{\ifnum\c@secnumdepth>\z@
+ \thesection\ -- \fi ##1}}}
+\else
+ \def\ps@headings{\let\@mkboth\markboth
+ \def\@oddfoot{\null\hfill {\scshape\lapagina} \hfill\null}
+ \def\@evenfoot{}
+ \def\@oddhead{\setbox\@intesta\hbox{\footnotesize\slshape
+ \rightmark}%
+ \ifdim\wd\@intesta>\textwidth \headWarn{\chapter}\fi%
+ \underline{\makebox[\textwidth]{\footnotesize\slshape
+ \strut\rightmark}}}%
+ \def\chaptermark##1{\markright{\thechapter\ -- ##1}}}
+\fi
+
+\def\headWarn#1{\PackageWarning{toptesi}{%
+*******************************************\MessageBreak
+ THE HEADING IS TOO LONG\MessageBreak
+ Use the optional argument of command \string#1\MessageBreak
+ See the LaTeX Handbook (1994) on section C.4.1\MessageBreak
+*******************************************\MessageBreak}}
+% \end{macrocode}
+% It is also necessary to redefine the format of the unnumbered
+% chapter entries in the table of contents so as to have page
+% numbers in small caps.
+% \begin{macrocode}
+\renewcommand\l@chapter[2]{%
+ \ifnum \c@tocdepth >\m@ne
+ \addpenalty{-\@highpenalty}%
+ \vskip 1.0em \@plus\p@
+ \setlength\@tempdima{1.5em}%
+ \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \leavevmode \bfseries
+ \advance\leftskip\@tempdima
+ \hskip -\leftskip
+ #1\nobreak\hfil \nobreak
+ \hb@xt@\@pnumwidth{\hss\ifPDFTeX\normalfont\fi\scshape{#2}}\par
+ \penalty\@highpenalty
+ \endgroup
+ \fi}
+% \end{macrocode}
+% The various tables of contents, or figures, or tables
+% require some boolean variables to be defined; in facts,
+% although the \sigla{ISO} regulations require that every technical
+% report contains the list of figures and/or tables,
+% in Italy theses rarely contain these lists; the question is: “is a
+% thesis a technical report?”. In Italy, in most cases, the answer is “no”.
+% We require also some other boolean variables to handle the
+% difference between front matter and main matter; this
+% differences are already defined in the \texttt{book}
+% document class, but not in the \texttt{report} one.
+% \begin{macrocode}
+\newif\iffigurespage
+\newif\iftablespage
+\newif\ifnumeriromani
+\newif\if@mainmatter
+\newif\iffrontmatter
+% \end{macrocode}
+% The |\frontmatter| and |\mainmatter| commands are defined
+% and at the beginning of the document the default situation
+% of front matter is established. For the |\backmatter|
+% command it suffices to turn out sectional numbering, and
+% to allow opening chapters also on even numbered pages.
+% \begin{macrocode}
+\def\frontmatter{\clearpage\ps@plain\@mainmatterfalse
+ \ifTOPnumerazioneromana\numeriromanitrue\fi
+ \frontmattertrue\@openrightfalse\c@secnumdepth=-2\relax
+}
+
+\def\mainmatter{\@mainmattertrue
+\if@twoside\@openrighttrue\fi
+ \ifTOPnumerazioneromana\numeriromanifalse\fi
+ \frontmatterfalse
+ \c@secnumdepth=2
+ \clearpage\ps@headings
+ \ifTOPnumerazioneromana\pagenumbering{arabic}\fi
+}
+\newcommand\backmatter{\cleardoublepage[empty]%
+\@mainmatterfalse
+\setcounter{secnumdepth}{-1}\if@twoside\@openrightfalse\fi}
+
+\AtBeginDocument{%
+ \ifTOPnumerazioneromana\pagenumbering{roman}\fi\frontmatter
+}
+% \end{macrocode}
+%
+% The main matter is automatically established with the
+% first |\chapter| command issued by the user; this means
+% that every command that starts a section at the
+% “chapter” level within the front matter must be
+% executed without an explicit call to |\chapter|. This
+% refers especially to the |\sommario|/|\summary| and
+% |\ringraziamenti|/|\acknowledgements| sections. On the
+% contrary even an unnumbered chapter (for example a preface)
+% turns on the main matter typesetting style.
+%
+% By default we set to false the boolean variables that
+% control the typesetting of the list of figures and the list
+% of tables.
+% \begin{macrocode}
+\figurespagefalse
+\tablespagefalse
+
+% \end{macrocode}
+%
+% Before going further on, we redefine the |\cleardoublepage|
+% command so that it uses by default the plain page style
+% for the blank page to be possibly inserted if chapters
+% should start on an odd page: but with the |\blankpagestyle|
+% command can be set to any other style, for example the
+% |empty| page style.
+% \begin{macrocode}
+\let\ps@blank\ps@plain
+\newcommand*\blankpagestyle[1]{%
+ \expandafter\let\expandafter\ps@blank\csname ps@#1\endcsname}
+\renewcommand\cleardoublepage[1][blank]{\clearpage
+\unless\ifodd\value{page}
+ \if@twoside
+ \if@openright
+ \null\thispagestyle{#1}\clearpage
+ \fi\fi\fi}
+
+% \end{macrocode}
+%
+% We have to define the front matter sectioning names |\sommario|
+% (alias |\summary|) and |\ringraziamenti| (alias
+% |\acknowledgements|) so as to remain in the front matter.
+% \begin{macrocode}
+\def\sommario{%
+ \iffrontmatter\else\frontmattertrue\fi
+ \chapter*{\summaryname}}
+\let\summary\sommario
+%
+\def\ringraziamenti{%
+ \iffrontmatter\else\frontmattertrue\fi
+ \chapter*{\acknowledgename}}
+\let\acknowledgements\ringraziamenti
+% \end{macrocode}
+% The strings |\summaryname| and |\acknowledgename| are not
+% defined for every language option to \texttt{babel}. Default
+% definitions are given below, and the user must define new
+% names for localising the package in a language different
+% from Italian and English.
+%
+% We have to modify the |\chapter| and |\part| commands so
+% that as the user first uses one of these commands the
+% typesetting style is switched to that of the main matter.
+% But by exploiting certain facilities of the |xparse| package,
+% some delicate tests could be developed by |xparse| itself; therefore
+% the whole command was redefined so that the new syntax is the following:
+%\begin{flushleft}\obeylines
+%\cs{chapter}\meta{$\star$}\oarg{toc entry}\oarg{headings entries}\marg{title}\oarg{pagestyle}
+%\end{flushleft}
+% The \meta{$\star$} is optional, and simply implies that no toc
+% entry will be generated and the chapter title will not be
+% numbered. In this way the previous \LaTeX\ kernel macros
+% |\chapter| and |\chapter*| maintain their usual behaviour:
+%\begin{flushleft}\obeylines
+%\cs{chapter}\oarg{toc entry}\marg{title}
+%\cs{chapter*}\marg{title}
+%\end{flushleft}
+% But the various optional arguments play different roles and
+% implement new functionalities. The star itself now is a special
+% argument, numbered |#1|, therefore the total number of arguments
+% is five. Their meaning is the following.
+%\begin{description}
+%
+%\item[\meta{$\star$}] Controls the chapter numbering and the
+% toc entry; its absence implies numbering and toc entry;
+% its presence implies no numbering and no toc entry;
+% nevertheless is does not cancels the possibility of having
+% an header (if the page style accepts left and right marks);
+% for example, a command such as this one\\[1ex]
+%\cs{chapter*}\Oarg{Short entry}\Marg{Long title}\\[1ex]
+% does not number the chapter with the |Long title|, but gets
+% the string |Short entry|; lacking the optional argument both
+% headers (see below) will contain the string |Long title|.
+% If you want an empty header, you have to specify an empty
+% optional argument; or before using the command, you specify
+% an empty or a plain page style
+%\item[\meta{toc entry}] is the entry for the table of contents;
+% its default value is \meta{title}, but since more often than
+% not the actual \meta{title} is a long string, it is better
+% to use such optional argument: of course, if the optional star
+% is used, its \meta{toc entry} is passed on as a default value
+% for the \meta{headings entry}.
+%
+%
+%\item[\meta{headings entry}] contains the string to be inserted
+% in both left and right headers, if the page style uses such
+% pieces of information; this is a deliberate choice in order
+% to have both headers correctly indicating the chapter title
+% even if the “chapter” contains no sections, for example indices,
+% lists of figures and/or tables, forewords and similar thesis
+% items. Of course if sections are used, their entries replace
+% that chapter entry in the right header. This choice of defining
+% both headings is useful also for those numbered chapters that
+% have a longish text preceding the first section.
+%
+%
+%\item[\meta{title}] with no surprise is the chapter title that
+% is printed in its opening page. It defines also the default
+% \meta{toc entry} and therefore the \meta{headings entry}.
+%
+%
+%\item[\meta{pagestyle}] solves a problem that arises more often
+% than not: by default the chapter opening page is typeset with
+% the |plain| page style; sometimes a different style is desired,
+% for example the |empty| one. The use can specify this optional
+% argument with |empty| to have a headerless opening page without
+% a printed folio. Actually the user can specify any page style,
+% provided it satisfies the typographical best practice.
+%
+%\end{description}
+% Actually the commands to typeset the Summary and the
+% Acknowledgements chapters, as defined above, are regularly
+% typeset in the front matter style, opening on any page
+% (even or odd) and possibly numbered with small caps roman numerals.
+% \begin{macrocode}
+\RenewDocumentCommand{\chapter}
+ {s O{#4} O{#2} m O{plain}}{%
+ \if@openright\cleardoublepage
+ \else\clearpage\fi
+ \thispagestyle{#5}%
+ \global\@topnum\z@
+ \@afterindentfalse
+\IfBooleanTF{#1}{%
+ \c@secnumdepth=-3\relax
+ \let\iftoc\iffalse
+}{%
+ \iffrontmatter\mainmatter\fi
+ \let\iftoc\iftrue
+}%
+% Numbering and TOC entry
+ \ifnum \c@secnumdepth >\m@ne
+ \if@mainmatter % where \if@mainmatter is defined
+ % (e.g. book.cls, toptesi.cls)
+ \refstepcounter{chapter}%
+ \typeout{\@chapapp\space\thechapter.}%
+ \iftoc\addcontentsline{toc}{chapter}{%
+ \protect\numberline{\thechapter}#2}\fi
+ \else %
+ \iftoc\addcontentsline{toc}{chapter}{#2}\fi
+ \fi
+ \else % Were \mainmatter is not defined (e.g.report.cls)
+ \iftoc\addcontentsline{toc}{chapter}{#2}\fi
+ \fi
+% Headers
+ \markboth{#3}{#3}% No \MakeUppercase
+ \iftoc
+ \addtocontents{lof}%
+ {\protect\addvspace{10\p@}}%
+ \addtocontents{lot}%
+ {\protect\addvspace{10\p@}}%
+ \fi
+% Actual title in the opening chapter page.
+ \if@twocolumn
+ \@topnewpage[\@makechapterhead{#4}]%
+ \else
+ \@makechapterhead{#4}%
+ \@afterheading
+ \fi
+}
+% \end{macrocode}
+% It would be possible to redefine in a similar manner also
+% the |\part| command, but it was deemed unnecessary, since
+% theses are seldom divided into parts.
+% \begin{macrocode}
+\def\@part[#1]#2{\iffrontmatter\mainmatter\fi
+ \ifnum \c@secnumdepth >-2\relax
+ \refstepcounter{part}%
+ \addcontentsline{toc}{part}{\thepart\hspace{1em}#1}%
+ \else
+ \addcontentsline{toc}{part}{#1}%
+ \fi
+ \markboth{}{}%
+ {\centering
+ \interlinepenalty \@M
+ \normalfont
+ \ifnum \c@secnumdepth >-2\relax
+ \huge\bfseries \partname\nobreakspace\thepart
+ \par
+ \vskip 20\p@
+ \fi
+ \Huge \bfseries #2\par}%
+ \@endpart}
+
+% \end{macrocode}
+% At the same time we have to make sure that |\tableofcontents|,
+% |\listoftables| and |\listoffigures| do not exit from the
+% front matter style. We assume these commands are issued
+% while in front matter, the default at the begin document phase,
+% so we use starred |\chapter| commands but add the necessary
+% toc entries with the native commands. We need not define the
+% headers, because the default title is good for this purpose;
+% but since such thesis elements are typeset with the front
+% matter page style (|plain|), no headers are used; With long
+% indices and/or lists of tables and/or figures, the user might
+% desire to have headers, so that the declaration
+% |\pagestyle{headings}| should be specifies before using the
+% |\indici| or |\allcontents| commands.
+%
+% The table of contents itself is not linked at all, but in order
+% to link the lists of tables and figures, that are listed into
+% the toc, it is better that such lists contain a possible
+% target; the |\phantomsection| macro defined by the |hyperref|
+% package is used; in case |hyperref| is not loaded, a dummy
+% definition avoids “Undefined control sequence” error messages.
+% \begin{macrocode}
+\renewcommand\tableofcontents{%
+ \chapter*{\contentsname}%
+ \@starttoc{toc}%
+ \clearpage
+ \if@restonecol\twocolumn\fi
+ }
+
+\providecommand\phantomsection{}% in case \hyperref was not loaded
+
+\renewcommand\listoffigures{%
+ \phantomsection
+ \chapter*{\listfigurename}%
+ \addcontentsline{toc}{chapter}{\listfigurename}
+ \@starttoc{lof}%
+ \clearpage
+ \if@restonecol\twocolumn\fi
+ }
+
+\renewcommand\listoftables{%
+ \phantomsection
+ \chapter*{\listtablename}%
+ \addcontentsline{toc}{chapter}{\listtablename}
+ \@starttoc{lot}%
+ \clearpage
+ \if@restonecol\twocolumn\fi
+ }
+% \end{macrocode}
+%
+% We need to define |\indici| (alias |\allcontents|) that typesets
+% the table of contents and, optionally, the lists of tables and/or
+% figures while softly maintaining the front matter style for
+% typesetting. In facts, if the user wants a diffferent styl s/he can select it with a suitable argument the |\pagestyle| command.
+% \begin{macrocode}
+\def\indici{% If headings are desired, the pagestyle must be set in advance
+ \iffrontmatter\else\frontmattertrue\fi
+ \tableofcontents
+ \iftablespage
+ {\addvspace{10pt}
+ \let\saveaddvspace=\addvspace
+ \def\addvspace##1{}
+ \listoftables
+ \let\addvspace=\saveaddvspace}
+ \fi
+ \iffigurespage%
+ {\addvspace{10pt}
+ \let\saveaddvspace=\addvspace
+ \def\addvspace##1{}
+ \listoffigures
+ \let\addvspace=\saveaddvspace}
+ \fi
+\ifbool{@twoside}{\cleardoublepage[empty]}{}}
+\let\allcontents\indici
+
+% \end{macrocode}
+%
+% Command |\onecolumn| is not actually necessary; it simply
+% overrides the possible misused option \texttt{twocolumn}
+% in the opening document class statement; no thesis should
+% be typeset in two columns.
+% \begin{macrocode}
+\onecolumn
+% \end{macrocode}
+%
+% Here come some declarations for vertical justification
+% and for avoiding an hyphenated word at the bottom of a page
+% \begin{macrocode}
+\if@twoside
+ \unless\ifScuDo
+ \flushbottom
+ \else
+ \raggedbottom
+ \fi
+\else
+ \ifx\@xivpt\f@size
+ \raggedbottom
+ \else
+ \flushbottom
+ \fi
+\fi
+\brokenpenalty=10000
+% \end{macrocode}
+%
+% Here comes a questionable command and/or environment; good
+% typesetting requires the baseline skip to be proportioned
+% to the font size, generally it is some 10--20\% larger
+% than the font size. In some reasonable instances a larger
+% or a smaller baseline skip might be required; the \LaTeX\
+% kernel allows to use the |\linespread| command; in the
+% previous versions of this bundle a command |\interlinea|
+% and an environment \texttt{interlinea} were defined so as
+% to allow setting the line spread factor. The experience has
+% shown that some students tend to use this command so as
+% to typeset a poor and thin thesis on more pages. Well, every
+% instrument can be judiciously or maliciously used; this is
+% one of those double sided instruments.
+% \begin{macrocode}
+\def\interlinea#1{\linespread{#1}\selectfont}
+\def\endinterlinea{\par}
+% \end{macrocode}
+% But whatever might be the current line spread factor within
+% figures and tables we reset this factor to the unit value;
+% floating bodies do not belong to this or that section
+% of text where a different spread factor might be reasonable.
+% \begin{macrocode}
+\def\@floatboxreset{%
+ \reset@font
+ \linespread{1}%
+ \normalsize
+ \@setminipage
+}
+% \end{macrocode}
+% Since we are at it we define the floating bodies placing
+% parameters; not only the values “here”, “page top”
+% and “page bottom”, that we set as the default ones
+% leaving to the user to explicitly specify the
+% “page of floats”, but also the numerical and geometrical
+% parameters that control the float placements.
+% These geometrical parameters are critical and everybody
+% has his/her own ideas of what are the best values for them.
+% According to my experience the parameters set by this
+% extension file work quite well but I would not suggest
+% them for every kind of typewritten document.
+%
+% In particular the zero value for the text fraction appears
+% strange, but students have the tendency to create large figures
+% (more often than large tables) and these tend to clog the
+% figures queue. A 100\% space for the top of page figures
+% and a requirement of 0\% text allows large floats
+% to exit the queue provided they do not exceed the
+% text height.
+% \begin{macrocode}
+\def\fps@figure{htb} \def\fps@table{htb}
+%
+\setcounter{topnumber}{2}
+\def\topfraction{1}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.5}
+\setcounter{totalnumber}{2}
+\def\textfraction{0}
+\def\floatpagefraction{0}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{1}
+\def\dblfloatpagefraction{0}
+
+% \end{macrocode}
+% One command that the default definition does not satisfy
+% me very much is the |\caption| command; of course it is
+% possible to configure the caption styles by means of the
+% \pack{caption} package and its handy set of option styles
+% specified by means of the \textit{key$=$value} syntax;
+% but if this package is not used, then it is convenient
+% to redefine the internal |\@makecaption| macro that
+% performs the job as explained hereafter. Since it does
+% not cost much I add also the definition of |\captionof|.
+%
+% The issue is that I prefer a narrower justified caption
+% rather than one where the last line is just a short word
+% or the right segment of an hyphenated last word. If one
+% sets the |\finalhyphendemerits| parameter to an extremely
+% high value, one might succeed in avoiding a hyphenated
+% penultimate caption line, but this might lead to a very
+% loose typesetting of the caption paragraph, especially
+% if the horizontal box that contains it hardly exceeds the
+% caption width. I initially set the caption width (a new
+% length) to the overall text width diminished by 3em; then
+% if the caption text, inclusive of the caption label and
+% number, is shorter than the text width it is typeset as
+% centred text; if it exceeds the text width, it is set as
+% a justified paragraph whose line width equals the
+% established caption width; but in any case the last
+% line of the paragraph is measured and, if it is shorter
+% than one third of the caption width, this width is
+% shortened a little bit and the paragraph is set again
+% with this shortened caption width; in order to be sure
+% that one iteration is sufficient, the caption width
+% shrinking must be computed according to the number of
+% lines the paragraph occupies.
+%
+% In order to count the number of lines of the caption
+% paragraph, it is necessary to recall that the first line
+% occupies a vertical space that equals |\topskip| while
+% the other lines occupy a vertical space equal to
+% |\baselineskip|; the latter one is generally larger
+% than |\topskip| therefore the integer division of the
+% height of the vertical box divided by the |\baselineskip|
+% is truncated to count one line less than the true value.
+% In our case if the caption does not stay in one line,
+% its text is typeset in a vertical box with a line spread
+% of~0.95 so as to make the caption a little more compact
+% than the regular text.
+% Therefore the baseline skip is a little shorter than the
+% regular one, but it should still exceed the default
+% |\topskip|; when we first typeset the caption in a
+% vertical box we strip off the last line and we must
+% remember the presence of this line in our arithmetics.
+%
+% If the length of the stripped last line is larger that
+% one third of the caption width, then the vertical box
+% is recomposed by re\-stacking the individual lines,
+% but if this last line is shorter than one third of the
+% caption width, this width is recomputed in this way:
+% let $N-1$ be the number of lines obtained with the
+% integer division, i.e.\ one line less than those
+% actually contained in the vertical box. Let $x$ be
+% the initial caption width, and $x_2$ the last line
+% width; let $y$ be the new caption width; then the total
+% length of the caption of width $x$ is $Nx+x_2$ and this
+% should be distributed over $N+1$ lines; if we obtained
+% the new caption width $y$ by dividing the total length
+% by $N+1$ we should be able to typeset the whole
+% caption with all the lines of equal length. This does
+% not actually take place because the new lines do not
+% necessarily contain the same amount of inter word space,
+% some words might have been hyphenated in a different way,
+% and so on.
+%
+% Moreover we do not want a caption that barely exceeds the
+% length of |\captionwidth| to be retyped into a two
+% line caption width that is about one half of the width of
+% the other captions.
+%
+% Therefore we allow for some white space in the last
+% line by computing the new caption width with the following formula
+% \[ y=\frac{(N+0.5)x + x_2}{N+1} \]
+% By the way, if the package \pack{caption} has been loaded
+% in the preamble, this specific recalculation must not be
+% executed at all; it is necessary to delay this definition
+% at |\AtBeginDocument| so we know for sure if that the package
+% has been actually loaded. Of course if the \pack{caption} package
+% has not been loaded the |\captionsetup| macro is not
+% defined and its use (for example, as a leftover of some
+% experiments with the \pack{caption} package) would produce
+% an error for this reason we define it as a gobbling macro
+% so as to neutralise its presence.
+%
+% At this point it is very simple to add the |\captionof|
+% command in order to use a caption also for figures that
+% are set outside floating bodies; it might be useful when
+% small figures or tables are inserted in unusual places,
+% such as a table, a minipage, or similar non floating
+% environments. The only thing that suffices to insert is
+% the name of the corresponding not used float.
+% \begin{macrocode}
+\AtBeginDocument{\@ifpackageloaded{caption}{}{%
+\providecommand\captionsetup{}\renewcommand\captionsetup[2][]{}%
+\providecommand\captionof[1]{\def\@captype{#1}\caption}
+\let\originalcaption\caption
+\newdimen\captionwidth
+\newdimen\fullwidth
+\if@twocolumn\fullwidth=\columnwidth\else\fullwidth=\textwidth\fi
+\belowcaptionskip=\abovecaptionskip
+\long\def\@makecaption#1#2{%
+ \begingroup
+ \small \parskip\z@ \parindent\z@
+ \finalhyphendemerits 100000\relax
+ \linespread{0.95}\selectfont
+ \vskip \abovecaptionskip
+ \ifdim\hsize<\fullwidth \captionwidth=\hsize\else
+ \captionwidth=\dimexpr\hsize-3em\fi
+ \setbox0 \hbox{\ifblank{#1}{}{#1.\quad}#2}%
+ \ifdim\wd0>\hsize
+ \setbox1 \vbox{\hsize=\captionwidth
+ \unhbox0\par\global\setbox2\lastbox}%
+ \setbox2\hbox{\unhbox2}%
+ \ifdim\wd2<0.333333\captionwidth
+ \count255=\ht1 \advance\count255 \dp1
+ \divide\count255\baselineskip
+ \advance\count255\@ne
+ \@tempdima=\wd2
+ \advance\@tempdima \count255\captionwidth
+ \advance\@tempdima 0.5\captionwidth
+ \advance \count255\@ne
+ \divide \@tempdima \count255
+ \captionwidth=\@tempdima
+ \setbox0 \vbox{\hsize\captionwidth
+ #1.\quad#2}
+ \else
+ \setbox2\hbox to\captionwidth{\unhbox2 \hfill}%
+ \setbox0\vbox{\unvbox1\box2}%
+ \fi
+ \fi
+ \makebox[\hsize]{\box0}%
+ \vskip \belowcaptionskip
+ \endgroup
+}}}
+
+% \end{macrocode}
+%
+% ^^A SDFIGURE
+% Always delayed to the |\begin{document}| statement execution
+% we define a new (possibly floated) environment
+% |SD| that creates a box where there is the main environment
+% contents with its caption to a side, precisely to the side
+% close to the outer margin of the page. This implies that
+% in one side printing the caption is always on the right,
+% while in two side printing the caption is on the right in
+% right/odd pages and on the left in left/even pages.
+%
+% The environment opening statements requires the name of
+% a floating object, even if this environment does not float
+% anything, but the name is just used to describe its contents;
+% it is possible therefore to specify \verb|\begin{SD}{figure}|
+% or \verb|\begin{SD}{table}|, or whatever other environment
+% name defined with the \pack{float} package functionality;
+% this little repetition is for using the correct prefix to
+% the caption text even when the environment is used outside
+% a formal floating one. In the following paragraphs we speak
+% about an “image” to mean the “environment main contents”.
+%
+% This new special environment box gets actually floated if
+% explicitly inserted within a formal floating environment;
+% but this special environment box is usable even as
+% a standalone environment, or as an object in a fixed position,
+% such as when it is set within a mini-page or another similar
+% environment; in such situations it is not required to use
+% |\captionof|; actually this command is simulated within this
+% very \amb{SD} environment
+%.
+% The actual commands for inserting
+% the picture and its caption within the |figure| environment
+% have names starting with |SD|, namely |\SDcaption| and
+% |\SDimage|. Its syntax is as follows:
+%\begin{flushleft}\obeylines
+%\Bambiente{SD}\marg{contents kind}\meta{*}\oarg{fraction}
+%\cs{SDimage}\marg{image commands}
+%\cs{SDcaption}\oarg{lof entry}\marg{caption}\marg{label}
+%\Eambiente{SDfigure}
+%\end{flushleft}
+% The \meta{contents kind} equals one of the formal floating
+% environments; this information is used to prefix the
+% caption text with the proper name and number.
+%
+% The meaning of the optional asterisk is that its presence
+% allows protrusion of the box into the external margin,
+% while its absence forces the box width to equal the text
+% width. The optional \meta{fraction} is used to specify the
+% fraction of the current object width that is dedicated to the
+% caption, the remaining space being dedicated to the image;
+% actually both widths are reduced a little bit to allow a space
+% between the caption and image boxes. But remember this simple
+% rule: a small value of this \meta{fraction} implies a narrow caption.
+%
+% Since it is necessary to maintain in separate independent
+% areas the picture and the caption, and we need to shuffle
+% them when odd or even pages are involved, their handling
+% is particular. The |\SDimage| (or |\SDtabular| as an alias
+% of |\SDimage|) command syntax is very simple:
+%\begin{flushleft}
+%\cs{SDimage}\marg{image commands}
+%\end{flushleft}
+% where the \meta{image commands} may be anything suitable so be
+% used within a a floating environment; a picture, a tabular,
+% a drawing, a box, any command to place the object in the
+% correct position within the dedicated space; any argument
+% is substantially valid with the caution that this “anything”
+% remains local to that particular “image”. In any case when
+% the “mage” is a real picture and has to be resized to a
+% relative dimension, remember that both the picture and its
+% caption are typeset within boxes narrower than the total text
+% width or the total environment width; the best way to access
+% the width is to use its |\hsize| value.
+%
+% The |\SDcaption| is very similar to that of |\caption| except
+% for a small detail; its syntax is the following:
+%\begin{flushleft}
+%\cs{SDcaption}\oarg{lof entry}\marg{image}\marg{label}
+%\end{flushleft}
+% where the parameters have the following meanings.
+%\begin{enumerate}
+%\item The \oarg{lof entry} optional bracket delimited argument
+% contains the usual short caption entry for the list of
+% figures or tables or specific other floats.
+%\item The \marg{caption} mandatory brace delimited argument
+% contains the image caption.
+%\item The \marg{label} mandatory brace delimited argument
+% contains the string that is usually passed to the |\label|
+% command; this string is mandatory in the sense that it
+% is the |\SDcaption| command that takes care of issuing
+% the |\label|\marg{label} command but, since this \meta{label}
+% is used to recover the page number (possibly after a second
+% compilation run) in order to establish the page number parity,
+% it is necessary that the |\label| command is issued at the
+% proper moment and that at the same time the \meta{label}
+% string is globally saved into a suitable macro so as to use
+% it at the right moment.
+%\end{enumerate}
+% Remember: the TOPtesi caption setting differs from the
+% standard one and from its redefinitions with other packages
+% such as the |caption| one. The TOPtesi particular redefinition
+% tries to adjust the caption with in such a way as to avoid an
+% unusually short last line in multi line captions. Therefore
+% it may be noticed that sometimes some captions are slightly
+% less wide than expected. It is not a bug, it may be considered
+% a feature.
+%
+% Here comes its documented code. First some dimension registers,
+% counters and boxes must be defined.
+% \begin{macrocode}
+
+\newdimen\SDcaptionwidth
+\newdimen\SDfigurewidth
+\newdimen\SDlinewidth
+\newbox\SDfigbox \setbox\SDfigbox\hbox{}%
+\newbox\SDcapbox \setbox\SDcapbox\hbox{}%
+\newcounter{SDpage}%
+\newcounter{NumberSD} \setcounter{NumberSD}{0}
+\providecommand*\theNumberSD{\value{NumberSD}}
+\newif\ifNumberFloat \NumberFloattrue
+% \end{macrocode}
+%
+% Then we redefine the |\caption| command in order to add
+% the |\caption*| variety that prints just the caption
+% without any numbering and any prefix; of course it does
+% not increment the suitable float counter nor it adds any
+% entry to the list of any float.
+% We have to memorise the original definition and add
+% the |xparse| extended new definition. Notice that this
+% new |\caption| macro accepts the same syntax as the
+% original one when no asterisk is specified, while when
+% the |\caption*| command is used only the long caption
+% argument is used, and the list of floats entry, if
+% present, is neglected. This new command may be directly
+% used by the final user in those rare circumstances where
+% just an explanation is required and the object being
+% explained does not require to be cross referenced.
+%^^A CONFLITTO CON \CAPTION* DI LONGTABLE? -- CONTROLLARE<<<< !
+% \begin{macrocode}
+\NewDocumentCommand\captionSD{s O{} m}{% O: optional arg. with null default
+ \IfBooleanTF{#1}%
+ {%
+ \@makecaption{}{#3}%
+ }{%
+ \ifempty{#2}%
+ {%
+ \originalcaption{#3}%
+ }{%
+ \originalcaption[#2]{#3}%
+ }%
+ }%
+}
+% \end{macrocode}
+
+% Then the environment |SDbox| is defined by means of the
+% facilities of the |xparse| package; this allows the use of
+% the “non delimited” asterisk argument. It also requires other
+% arguments, the first of which is mandatory and specifies the
+% contents kind, be it a figure, or a table, or an algorithm,
+% or anything else that has been introduced with the facilities
+% of the |float| package; \dots\ or nothing, in the sense that
+% the float should not be numbered and therefore its caption
+% should have no number. Among the opening commands we deal
+% with the (optional) asterisk dependent box width; with the
+% asterisk the SD environment protrudes into the external margin.
+% \begin{macrocode}
+\DeclareDocumentEnvironment{SDbox}{ G{} s O{0.5} }{%------OPENING
+\NumberFloattrue
+\ifempty{#1}%
+ {\NumberFloatfalse}%
+ {\def\@captype{#1}}%
+\IfBooleanTF{#2}%
+ {\SDlinewidth=\dimexpr\textwidth+0.8\marginparwidth}%
+ {\SDlinewidth=\textwidth}%
+% \end{macrocode}
+% Then we fix our attention to the correct use of the optional third
+% argument, whose descriptor assigns it a default value of |0.5|:
+% \begin{macrocode}
+\SDcaptionwidth=#3\SDlinewidth
+\ifdim\SDcaptionwidth<0.3\SDlinewidth
+ \SDcaptionwidth=0.3\SDlinewidth
+\fi
+\ifdim\SDcaptionwidth>0.7\SDlinewidth
+ \SDcaptionwidth=0.7\SDlinewidth
+\fi
+\SDfigurewidth=\dimexpr\SDlinewidth-\SDcaptionwidth\relax
+\SDcaptionwidth=\dimexpr\SDcaptionwidth-\columnsep\relax
+\SDfigurewidth=\dimexpr\SDfigurewidth-\columnsep\relax
+% \end{macrocode}
+% We add some test to verify if the environment is used within
+% the |figure| floating environment, or it is used ad a fixed
+% object; we first test if we are within a floating environment;
+% if not we define |\@captype| to contain the string `figure';
+% if yes we have to test if we are really within the |figure|
+% environment: if not, we locally define |\@captype| else
+% we relax. This means that we can insert the |SDfigure| even
+% within a |table| environment as sometimes a tabular and a
+% drawing should float together (may be because a drawing with
+% its own caption represents the tabular entries).
+%
+% And this is all for the opening commands; all these settings
+% shall be used by |\SDimage| and |\SDcaption| described hereafter;
+% here we describe the environment closing commands,
+% taking into account that the above commands have saved the
+% \meta{label} string into the |\@tempSD| macro and have set
+% their image and caption-text respectively into boxes
+% |\SDfigbox| and |\SDcapbox|.
+%
+% The code tests if the saved \meta{label} string is empty;
+% this should never take place, but it is better to perform
+% such task. If the string is empty, a fall back value equal
+% to the page number of the page that is still open at
+% processing time is used; may be a warning message would
+% be helpful, but since this empty string should never be
+% empty, it appears as a super luxury feature, that we can
+% do without.
+%
+% But if the string is not empty, we test if the saved
+% |\label| data, possibly read from the |.aux| file on a second
+% typesetting run, has the normal \LaTeX\ structure or the
+% |hyperref| modified one; the former contains two braced
+% arguments, while the latter contains five such arguments;
+% in both cases the interesting page number is the second
+% argument. The existence of a |ver@hyperref.sty| macro
+% allows to know if the |hyperref| package has been invoked
+% in the preamble, therefore upon testing this macro we
+% know if we should use |\@secondoffive| or |\@secondoftwo|
+% to read the real page number of the current |SDfigure|
+% environment. Before reading the actual value of the
+% |.aux| file |\label| saved data, we must access the
+% string that contains these data but we have to expand
+% several times the saved macros until we have the real
+% string in |\@temD|.
+% \begin{macrocode}
+}{%---------------------------------------------------CLOSING
+ {\ifcsdef{r@\@tempSD}%
+ {%
+ \edef\@tempD{r@\@tempSD}%
+ \edef\@tempD{\expandafter\csuse\expandafter{\@tempD}}%
+ \edef\@tempD{\@tempD}%
+ \ifcsdef{ver@hyperref.sty}%
+ {%
+ \edef\@tempD{\noexpand\@secondoffive\@tempD}%
+ }%
+ {%
+ \edef\@tempD{\noexpand\@secondoftwo\@tempD}%
+ }%
+ \edef\@tempD{\@tempD}%
+ \setcounter{SDpage}{\@tempD}%
+ }%
+ {%
+ \setcounter{SDpage}{\thepage}%
+ }%
+ }%
+% \end{macrocode}
+% At this point we have all the necessary pieces of information
+% and we can shuffle the caption and image boxes depending
+% on one or two side typesetting, and on the parity of the
+% correct page number.
+% \begin{macrocode}
+\ifbool{@twoside}%
+ {%
+ \ifnumodd{\value{SDpage}}%
+ {%
+ \makebox[\textwidth][l]{\makebox[\SDlinewidth]{%
+ \usebox{\SDfigbox}\hfill\usebox{\SDcapbox}}}%
+ }{%
+ \makebox[\textwidth][r]{\makebox[\SDlinewidth]{%
+ \usebox{\SDcapbox}\hfill\usebox{\SDfigbox}}}%
+ }%
+ }{%
+ \makebox[\textwidth][l]{\makebox[\SDlinewidth]{%
+ \usebox{\SDfigbox}\hfill\usebox{\SDcapbox}}}%
+ }
+}
+% \end{macrocode}
+%
+% The |\SDcaption| code appears to be strangely complicated;
+% but it actually performs several actions; the first
+% (optional) argument is intended to collect the “short
+% caption” to be used, if specified, for the list of floats
+% entry; if not specified ,as usual, the “long caption”
+% second argument is used for this entry. The (optional)
+% brace delimited argument, on the contrary, is the label
+% string that usually is passed as the argument of the
+% |\label| command. If specified it is this |\SDcaption|
+% macro duty to enter this command at the proper moment;
+% the caption prefix is established by the value of the
+% first (optional) argument of the |SDbox| environment,
+% or by the floating environment where the |SDbox| one is
+% nested. On the opposite if this macro |\SDcaption| argument
+% is not specified, the caption is not numbered nor prefixed,
+% and cannot be cross referenced; there are circumstances
+% when this situation is very useful, but it is up to the
+% user to decide when it is useful for his/her needs.
+% interpretation.
+%
+% In this macro definition the boolean switch |NumberSD|
+% has been already set by the opening statement commands
+% of the |SDbox| environment; it is true only if the first
+% environment (optional) argument has been specified or
+% the environment is nested within a floating environment.
+% Therefore if this boolean is false the unnumbered caption
+% gets typeset, otherwise a second boolean is tested, the
+% contents of the third (optional) argument of this macro
+% |\SDcaption|. If it is specified, the numbered and prefixed
+% caption gets typeset and this argument is used to label
+% this caption; otherwise and unnumbered and not prefixed
+% caption gets typeset with and internally generated label
+% that allows to fetch the final page number so as to decide
+% if the caption has to be typeset to the right or to the
+% left side of the object depending on the page number parity.
+% \begin{macrocode}
+\NewDocumentCommand\SDcaption{ O{} m G{} }{%
+ \notbool{NumberFloat}%
+ {%
+ \stepcounter{NumberSD}%
+ \edef\@tempSD{SD\the\c@NumberSD}%
+ \begin{lrbox}{\SDcapbox}%
+ \parbox[t]{\SDcaptionwidth}%
+ {%
+ \captionSD*{#2}\relax
+ \expandafter\label\expandafter{\@tempSD}%
+ }%
+ \end{lrbox}%
+ }%
+ {%
+ \ifempty{#3}%
+ {%
+ \NumberFloatfalse
+ \stepcounter{NumberSD}%
+ \edef\@tempSD{SD\the\c@NumberSD}%
+ \begin{lrbox}{\SDcapbox}%
+ \parbox[t]{\SDcaptionwidth}%
+ {%
+ \captionSD*{#2}\relax
+ \expandafter\label\expandafter{\@tempSD}%
+ }%
+ \end{lrbox}%
+ }{%
+ \begin{lrbox}{\SDcapbox}%
+ \parbox[t]{\SDcaptionwidth}%
+ {%
+ \captionSD[#1]{#2}\label{#3}\gdef\@tempSD{#3}%
+ }%
+ \end{lrbox}%
+ }%
+ }%
+}
+% \end{macrocode}
+%
+% We call the object to be shown within the |SDbox| with the
+% name “image” which can be anything that can be enclosed
+% in a parbox or a minipage; it can be an actual picture
+% imported with an |includegraphics| command, it can be a
+% drawing or a diagram created with the |picture|, or |tikz|,
+% or |pgfplots|, or |pstricks| commands; it can be a table,
+% an algorithm, an example, a theorem; anything that can be
+% typeset within a box. With this name in mind we create
+% the |SDimage| command to insert the object into our |SDbox|.
+% A |\SDtabular| command is an alias to |\SDimage|; the user
+% may define other such aliases for inserting other objects
+% that suit his/her preferences and the logical contents.
+%
+% Also the |\SDimage| command is not so simple; in order to
+% have both caption and image boxes aligned at the top, we
+% must be sure that such boxes have their reference points
+% at their top left corner; due to the heterogeneity of such
+% “images”, we need to lower the image box to have the
+% upper left corner raised with respect to the base line the
+% amount of a capital `M' in the current font.
+% \begin{macrocode}
+\newcommand\SDimage[1]{%
+ \setbox0\hbox{M}\dimen0\ht0\relax
+ \begin{lrbox}{\SDfigbox}\parbox[t]{\SDfigurewidth}{#1}\end{lrbox}%
+ \dimen2\dimexpr\ht\SDfigbox+\dimen0\relax
+ \setbox\SDfigbox\hbox{\raisebox{-\dimen2}{\box\SDfigbox}}%
+}
+\let\SDtabular\SDimage
+% \end{macrocode}
+% We do not suggest to use a floating or a fixed |SDbox|
+% environment for all figures, tables or what else; its
+% use simply depends on the box contents; this environment
+% may be useful when a normal setting would cause a lot of white
+% space around the displayed material.
+%
+% We define the |\goodpagepbreak| command; we have to
+% distinguish if the command is issued in vertical or in
+% horizontal mode; in the former instance we assume it
+% has been issued between two paragraphs and a
+% potential page break is required before the second
+% paragraph; while in the latter case we assume that
+% a |\vadjust| element should be inserted so that a page
+% break takes place after the current line has been typeset.
+% The command accepts an optional argument that represents
+% the maximum number of lines that should be available on
+% the page in order to issue a |\newpage| command; in other
+% words if the number of lines available on the page are
+% less or equal to the optional number, then a |\newpage|
+% command is issued, otherwise noting is done; the test
+% |\ifhmode| is used in order to avoid any action if in math mode.
+% \begin{macrocode}
+\newcommand\goodpagebreak[1][4]{\ifvmode
+\unless\ifdim\dimexpr\pagegoal-\pagetotal>#1\baselineskip\newpage\fi
+\else\ifhmode\vadjust{\newpage}\fi\fi}
+% \end{macrocode}
+%
+% The (deprecated) option \opz{chapterbib} requires a redefinition
+% of the \texttt{thebibliogrpahy} environment in case a
+% separate reference list is required for every chapter.
+% The point is that for this task the reference key must
+% contain also the chapter number; the rest is simply a
+% redefinition of the environment that behaves differently
+% according to the chosen option. In any case the bibliography
+% goes to the table of contents as an unnumbered chapter or
+% section.
+% \begin{macrocode}
+\def\redef@bibitem{\def\@bibitem##1{\item\if@filesw
+ \immediate\write\@auxout
+ {\string\bibcite{##1}{\thechapter.\the\c@enumi}}\fi\ignorespaces}}
+%
+\def\thebibliography#1{%
+ \ifchapterbibliography\section*{\bibname}\relax
+ \if@twoside\markright{\bibname}\fi
+ \addcontentsline{toc}{section}{\bibname}\relax
+ \redef@bibitem
+ \list{[\thechapter.\arabic{enumi}]}{%
+ \settowidth\labelwidth{[\thechapter.#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep\itemsep\z@ plus 1pt\parsep\z@
+ \usecounter{enumi}}
+ \else
+ \chapter*{\bibname}\relax
+ \addcontentsline{toc}{chapter}{\bibname}\relax
+ \list{[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}%
+ \leftmargin\labelwidth
+ \advance\leftmargin\labelsep\itemsep\z@ plus 1pt\parsep\z@
+ \usecounter{enumi}}
+ \fi
+ \def\newblock{\hskip .11em plus .33em minus -.07em}
+ \sloppy
+ \sfcode`\.=1000\relax}
+
+\let\endthebibliography=\endlist
+% \end{macrocode}
+%
+% For what regards footnotes nothing is changed except
+% resetting the line spread to one, in case the current
+% value is different.
+% \begin {macrocode}
+\long\def\@footnotetext#1{\insert\footins{\linespread{1}\footnotesize
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\footnotesep
+ \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
+ \hsize\columnwidth \@parboxrestore
+ \edef\@currentlabel{\csname p@footnote\endcsname\@thefnmark}%
+ \@makefntext{\rule{\z@}{\footnotesep}\ignorespaces#1\strut}}}
+% \end{macrocode}
+%
+% The following last heterogeneous definitions are partly important
+% and partly residues of the good old times of MS-DOS~v.3
+% when a Ctrl-Z character would be placed at the end of files.
+% It's a long time that such DOS version is not being used,
+% but some old time files might still be around.
+%
+% The cryptic code that redefines the comma in math mode
+% establishes that this character is a normal math character,
+% instead of a math punctuation mark. Actually the code
+% that defines the mathematical active comma is a new
+% addition that lets the comma perform correctly in its
+% double function (decimal separator and punctuation mark).
+% The only point where this code fails is when a list of
+% numbers is typeset: when a numeric list must be typeset,
+% such as, for example, $\forall i=0,\,1,\,2,\,3, n$, in the
+% source code a space \emph{must} be inserted after every
+% punctuating comma while no space follows a decimal comma:
+% for example \verb*+$\forall i=0, 1, 2, 3,n$+. The space
+% before the |n| is not necessary (but it wouldn't hurt)
+% because |n| is not recognised as a digit, therefore the
+% “intelligent” comma inserts the necessary space by itself.
+%
+% \begin{macrocode}
+ \DeclareMathSymbol{\virgola}{\mathpunct}{letters}{"3B}
+ \DeclareMathSymbol{\virgoladecimale}{\mathord}{letters}{"3B}
+ \AtBeginDocument{\mathcode`\,=\string"8000}
+ {\catcode `,=\active \gdef,{\futurelet\let@token\m@thcomma}}
+\def\m@thcomma{\let\@tempB\virgola
+\@tfor\@tempA:=0123456789\do{%
+\expandafter\ifx\@tempA\let@token\let\@tempB\virgoladecimale
+\@break@tfor\fi}\@tempB}
+%
+\catcode`\^^Z=10
+\topmargin 0pt
+% \end{macrocode}
+%
+% {\tolerance=3000\relax
+% The TOPtesi bundle contains two new chapter like sections
+% activated with the commands |\sommario| (alias |\summary|)
+% and |\ringraziamenti| (alias |\acknowledgements|) respectively.
+% The infix strings that start these sections depend on the
+% used language.\par}
+%
+% Because of this, it is necessary to extend the list of infix
+% string definitions provided by the |\captions|\meta{language}
+% macros defined by the \texttt{babel} or \texttt{polyglossia}
+% language description files; for this purpose we define
+% a macro for adding new items for these two new sectioning
+% commands. This macro receives three arguments: the first
+% is the babel language name, the second is the string for
+% the summary name, and finally the third is the string for
+% the acknowledgements name; everything is contained within
+% a group and only the relevant sectioning macro is globally
+% redefined. The token register `0' is normally for scratch
+% usage, but the fact that its value is restored upon exiting
+% the group provides the necessary protection against an
+% involuntary reassignment to this register. At the same
+% time if a specific language option was not specified, a
+% warning message is issued, but compilation goes on any way
+% without the sectioning string names. For being sure no
+% other `undefined' error messages are issued, the |\summaryname|
+% and |\acknowledgename| are let to |\empty|.
+% \begin{macrocode}
+\providecommand*\summaryname{}
+\providecommand*\acknowledgename{}
+\newcommand*\ExtendCaptions[3]{{%
+\@ifundefined{captions#1}{%
+\PackageWarning{toptesi}{%
+Language option #1 not specified\MessageBreak
+Skipping any redefinition\MessageBreak}%
+}{%
+\expandafter\let\expandafter\@tempA\csname captions#1\endcsname
+ \toks0=\expandafter{\@tempA%
+ \def\summaryname{#2}%
+ \def\acknowledgename{#3}}%
+ \expandafter\xdef\csname captions#1\endcsname{\the\toks0}%
+ }}}%
+% \end{macrocode}
+% For Italian and English there are no problems; we provide
+% immediately these extensions by means of the newly available macro:
+% \begin{macrocode}
+\ExtendCaptions{italian}{Sommario}{Ringraziamenti}
+\ExtendCaptions{english}{Summary}{Acknowledgements}
+% \end{macrocode}
+% In facts the \texttt{babel} and \texttt{polyglossia}
+% options for Italian and English have already been loaded
+% by default; therefore both caption macros |\captionsitalian|
+% and |\captionsenglish| are already defined and can be
+% freely extended. For any other language the corresponding
+% language option must be entered in the class opening
+% statement, otherwise a warning is issued but compilation
+% is not stopped. Therefore if, for example, the user wants
+% to write the thesis in Spanish, the thesis main file shall
+% start like this:
+% \begin{verbatim}
+% \documentclass[...,spanish]{toptesi}
+% \ExtendCaptions{spanish}{Resumen}{Agradecimientos}
+% ...
+% \begin{document}
+% \selectlanguahe{spanish}
+% ...
+% \end{verbatim}
+% and the rest of the thesis will be typeset correctly in
+% Spanish. Remember that Italian is the main language and
+% nothing is necessary to set up the Italian defaults.
+% If English is desired, then after |\begin{document}| it
+% is necessary to specify the default language; for ease
+% of use the following macros are defined so they can be
+% used instead of the lengthy \texttt{babel} or
+% \texttt{polyglossia} command; after the beginning of the
+% document it is then possible to specify |\inglese| or
+% |\english|, and the default language is changed to English.
+% These shorthand commands can be alternated so as to switch
+% from one language to the other; nevertheless remember that
+% there are more correct ways to switch languages with the
+% \texttt{babel} and \texttt{polyglossia} commands without
+% changing the infix strings.
+% \begin{macrocode}
+\def\italiano{\selectlanguage{italian}}%
+\def\english{\selectlanguage{english}}%
+\let\inglese\english
+% \end{macrocode}
+% At the beginning of the document the following commands are
+% executed; the general macro |\italiano| sets the summary
+% and the acknowledgements names in Italian, as the main
+% language; and the |\@chapapp| macro is redefined so as to
+% agree with the default language. If a different default
+% language is desired, we recall it again, it is necessary to
+% do the following:
+% \begin{itemize}[noitemsep]
+% \item
+% specify |\english| \emph{after} the |\begin{document}|
+% statement, if English is supposed to be the main language, or
+% \item
+% specify the language name, other than Italian or English,
+% among the class options; use the |\ExtendCaptions| macro
+% for extending the list of sectioning commands infix strings
+% as explained above; specify with |\selectlanguage| the new
+% language as the default one \emph{after} the |\begin{document}|
+% statement;
+% \item
+% if XeLaTeX\ or LuaLaTeX\ is being used for typesetting, it
+% suffices to specify in the preamble the name of the other
+% language to be used, by means of the |setotherlanguage|
+% command, and to define the summary and acknowledgments names
+% in the same way as with pdf\/\LaTeX; the same must be done
+% at the beginning of the document to declare the new language
+% as the default one.
+% \end{itemize}
+% \begin{macrocode}
+\AtBeginDocument{%
+ \italiano
+ \renewcommand\@chapapp{\chaptername}%
+}
+% \end{macrocode}
+%
+% At last the subsidiary and independent packages
+% \texttt{topcoman} and \texttt{topfront} are requested
+% for input; the latter is loaded only when the
+% |documentclass| option |noTOPfront| has NOT been declared.
+% This action, therefore has to be delayed till the “begin
+% document” step, in order to be sure that other packages
+% have possibly been loaded to typeset the title page, and/or
+% other packages have been loaded to properly use the units
+% of measure. This delayed loading implies that the
+% commands defined in |topfront| and in |topcomand| cannot
+% be used in the preamble. Notice that also the \textsl{scudo}
+% option implies that the title page is typeset with its
+% special commands and environments, therefore it sets the
+% suitable switches so as to avoid loading the |topfront|
+% extension file. This applies also to the other modules particular to special thesis types.
+% \begin{macrocode}
+\AtBeginDocument{%
+ \unless\ifT@Pfrontespizio\ifTOPfront
+ \RequirePackage{topfront}
+ \fi\fi
+ \RequirePackage{topcoman}%
+}
+% \end{macrocode}
+%
+% Last but not least, here comes the specification set for the
+% \sigla{PDF/A}-1b format.
+%
+% First of all the patches to the macros |\not| and
+% |\mapstochar| that produce problems with that format,
+% because they have a declared width of 0\,pt; this
+% is no problem for \texttt{pdflatex}, but it is a problem
+% for the \sigla{PDF/A} format. Therefore these commands must be
+% replaced by equivalent ones that do not use zero-width
+% glyphs. For |\not|, another slash can be used, but in
+% order to have it the right size in all math typesetting
+% modes it is necessary to have a different command for
+% every mode; this is achieved with the |\mathchoice|
+% primitive as such:
+% \begin{macrocode}
+\ifPDFTeX
+\renewcommand*\not{\mathrel{\mathchoice%
+ {\rlap{$\displaystyle\mkern2.5mu\mathnormal{/}$}}%
+ {\rlap{$\textstyle\mkern2.5mu\mathnormal{/}$}}%
+ {\rlap{$\scriptstyle\mkern2.5mu\mathnormal{/}$}}%
+ {\rlap{$\scriptscriptstyle\mkern2.5mu\mathnormal{/}$}}%
+}}
+% \end{macrocode}
+% Actually the zero-width property of the slash must be
+% simulated with a zero-width box but within this box it
+% is necessary to specify the typesetting style of the math
+% mode material.
+%
+% A similar trick is used to patch the |\mapstochar| command
+% but no other glyph was found suitable for substituting
+% the original one; therefore we had to make it up with the
+% |picture| environment:
+% \begin{macrocode}
+\renewcommand\mapstochar{\mathrel{\mathchoice
+{\displaystyle\unitlength=0.0555\fontdimen6\font
+ \picture(0,0)\put(1,1.5){\linethickness{0.72\unitlength}%
+ \line(0,1){6}}\endpicture}
+{\textstyle\unitlength=0.0555\fontdimen6\font
+ \picture(0,0)\put(1,1.5){\linethickness{0.72\unitlength}%
+ \line(0,1){6}}\endpicture}
+{\scriptstyle\unitlength=0.0555\fontdimen6\font
+ \picture(0,0)\put(1,0.55){\linethickness{0.61\unitlength}%
+ \line(0,1){5}}\endpicture}
+{\scriptscriptstyle\unitlength=0.0555\fontdimen6\font
+ \picture(0,0)\put(1,0.2){\linethickness{0.56\unitlength}%
+ \line(0,1){4}}\endpicture}
+}}\fi
+% \end{macrocode}
+% The above patches are introduced irrespective of using
+% \texttt{pdflatex} for producing a \sigla{PDF/A} compliant file;
+% one might need to produce a traditional \sigla{PDF} file, or even
+% a DVI file, to be converted to the \sigla{PDF} format, in order to
+% possibly further transform it into a \sigla{PDF/A} one by means
+% of other useful packages, such as \pack{pdfpages}.
+%
+% \subsection{The \opz{classica} option}
+% As mentioned above, the \opz{classica} option was
+% devised in order to cope with theses in humanities and
+% the specifications came from Paolo Ciacchi, a student
+% of the University of Trieste, who was preparing a master
+% thesis in classical Greek philology. The necessity
+% of the large normal size derived from the necessity of
+% having clear mark-up signs among the myriad signs
+% philologists use, that sometimes I believe that the
+% philological mark-up requires typesetting environments
+% similar to the mathematical ones: in facts the material
+% to be typeset does not form linear sequences, as in plain
+% text, but bi-dimensional structures as in mathematics.
+%
+% The other requirements involve the title page and I agreed
+% to implement them, since they are likely to be useful
+% for other universities as well; the effort for localising
+% this bundle makes this point less stringent compared to
+% previous versions, but there are other layout fine points
+% that cannot be solved with a simple substitution of infix
+% strings.
+%
+% The singular and plural masculine and feminine strings
+% for “candidate” are redefined in the |topfront| module.
+% For other languages the configuration file is very handy.
+%
+% Since theses in humanities may end up to occupy several
+% volumes\footnote{Classically “tomo” in Italian means “volume”,
+% although the latter word is valid also in Italian with
+% the same meaning but appears to be neglected by the
+% humanists; in English “tome” indicates a “large book”;
+% in Italian the meaning nuance of “tomo” is a little
+% different because it is used to indicate each of the volumes into
+% which a large printed work is divided; the humanists, as
+% usual, know well their words and use them properly!} a
+% mechanism is set up to create a different title page for
+% each volume; we need a volume counter and a command to
+% start each volume.
+%
+% The localisation allows to change the infix string that
+% is going to be printed in the title page. But when several
+% tomes are involved, instead of using the |\frontespizio|
+% macro or |frontespizio| environment, use the |\tomo| macro.
+% There is no equivalent to the |frontespizio| environment.
+% |\tomo| provides to stepping up the volume counter before
+% actually printing the new tome title page.
+% \begin{macrocode}
+\newcounter{tomo}
+\newcommand*{\tomo}{\clearpage\stepcounter{tomo}\boolfalse{topTPTlogos}%
+ \fr@ntespizio}
+% \end{macrocode}
+% Folios as well are to be redefined and also the page styles
+% require a redefinition so as to being able to use old style
+% numbers. The macro |\lapagina| (it's not a case that this
+% macro name is the direct translation of “thepage”)
+% contains the folio number; if it is in roman numerals
+% nothing happens, but if the old style numbers are required
+% the folio is surrounded by the proper macros so as to expand
+% the folio macro before typesetting it in old style. The page
+% style does not need an actual redefinition, because the
+% original definition in file \texttt{toptesi.sty}
+% already uses |\lapagina| as the typeset folio indicator.
+% \begin{macrocode}
+\renewcommand*{\lapagina}{%
+ \ifnumeriromani
+ \thepage
+ \else
+ \if@ldstyle
+ \expandafter\oldstylenums\expandafter{\thepage}%
+ \else
+ \thepage
+ \fi
+ \fi
+}
+% \end{macrocode}
+% But we actually have to redefine the page style for the new
+% headings because the \texttt{classica} option changes
+% completely the left and the right headers depending on the
+% option \opz{autoretitolo}; in this case the left header
+% contains the candidate's name and a short version of the
+% thesis title, while the right heading contains the chapter
+% (short) title; if this option is not in force, headings
+% appear as usual. The redefinition of the \texttt{headings}
+% page style is made only if this option is in force. In case
+% of two-sided printing where the left head and the right
+% heads are different, the left heading contains the author
+% name and the short title name; if there are other authors
+% the first author name is printed followed by “et al.”;
+% if the overall header string exceeds the text width, a
+% message is printed so as to suggest the user to
+% use the optional |\titolo| argument, the one that is
+% supposed to contain the short title. In the right heading
+% there is the chapter title; again if the header turns out
+% to be too wide, a message is issued to the user.
+%
+% More complicated things are done when typesetting on one
+% side; in facts the author name (possibly followed by
+% “et al.”) and the short thesis title are typeset on the
+% left of the only header while the chapter title is typeset
+% on the right; in the unlikely situation where these two
+% elements separated by at least 2em of white space do not
+% exceed the text width, they are printed, but if they do,
+% as it is likely to happen, then my suggestion would be not
+% to use the \opz{autoretitolo} option; but if the user
+% absolutely wants this layout, then the author's name,
+% possibly followed by “et al.”, and the short thesis title
+% are set in a vertical box; the same happens for the
+% chapter title in another box; these texts are set with
+% ragged margins, and eventually these boxes are set one
+% next to the other with an intermediate glob of infinitely
+% stretchable glue, and finally set in the header box with
+% a rule underneath the two of them. The result might be
+% barely acceptable if both vertical boxes do not exceed
+% two lines and no words have to be hyphenated, but in
+% general I believe it is an ugly layout; the user is warned!
+% Remember also that |\@@author| contains the author's name
+% without the ID number if any.
+% \begin{macrocode}
+\if@utoretitolo
+ \if@twoside
+%
+ \renewcommand*{\ps@headings}{\let\@mkboth\markboth%
+ \def\@oddfoot{\null \hfill \textbf{\lapagina} \hfill \null}%
+ \let\@evenfoot\@oddfoot
+ \def\@evenhead{%
+ \setbox\@intesta\hbox{\ifPDFTeX\latintext\fi
+ \footnotesize\strut\textsc{%
+ \@@author\ifcsvoid{@secondauthor}{\ et al.}: \@stitle}%
+ }%
+ \ifdim\wd\@intesta>\textwidth\headwrn{\titolo}\fi
+ \underline{\makebox[\textwidth]{\box\@intesta}}}%
+ \def\@oddhead{\ifPDFTeX\latintext\fi
+ \setbox\@intesta\hbox{%
+ \footnotesize\strut\textsl{\rightmark}}%
+ \ifdim\wd\@intesta>\textwidth \headWarn{\section}\fi%
+ \underline{\makebox[\textwidth]{\box\@intesta}}}%
+ \def\chaptermark##1{\markright{\thechapter\ -- ##1}}%
+ \def\sectionmark##1{}}%
+ \else
+ \renewcommand*{\ps@headings}{\let\@mkboth\markboth
+ \def\@oddfoot{\null \hfill \textbf{\lapagina}\hfill \null}%
+ \let\@evenfoot\empty\let\@evenhead\empty
+ \def\@oddhead{{\setbox\z@\hbox{\ifPDFTeX\latintext\fi
+ \footnotesize\textsc{%
+ \@@author\ifcsvoid{@secondauthor}{}{\ et al.}: \@stitle}}%
+ \setbox\tw@\hbox{\ifPDFTeX\latintext\fi
+ \footnotesize\textsl{\rightmark}}%
+ \dimen@=\dimexpr2em + \wd\z@ + \wd\tw@\relax
+ \ifdim\dimen@<\textwidth \relax
+ \else
+ \setbox\z@\vbox{\hsize.48\textwidth\parindent\z@
+ \raggedright
+ \ifPDFTeX\latintext\fi\footnotesize\textsc{%
+ \@@author\ifcsvoid{@secondauthor}{}{\ et al.}: \@stitle
+ }}%
+ \setbox\tw@\vbox{\hsize.48\textwidth\parindent\z@
+ \raggedleft
+ \ifPDFTeX\latintext\fi\footnotesize
+ \textsl{\rightmark}}%
+ \fi
+ \setbox\@intesta\vbox to\z@{%
+ \vss\hbox to\textwidth{\strut\box\z@\hfill\box\tw@}}%
+ \underline{\box\@intesta}}}%
+ \def\chaptermark##1{\markright{\thechapter\ -- ##1}}}
+ \fi
+\fi
+% \end{macrocode}
+%
+% The footnote rule separator is also longer than the default
+% one. Dealing with notes the footnote separator is also
+% changed as well as the footnote skip. But the humanists
+% like to have also unnumbered notes within numbered
+% ones, as if they were two separate sets; of course
+% specialised extension modules, such as, for example,
+% the |eledmac| or |reledmac| packages, are available on
+% CTAN, but as a poor man solution the command |\nota| was
+% introduced that inserts a note with a symbol as a note
+% mark; the symbol \emph{must} be a mathematical one as
+% the dagger or the double dagger; by default it is the
+% asterisk. At the same time the default definition of
+% the mathematical asterisk is that of a binary operator;
+% I have experienced that the note symbol gets a
+% better positioning if it is used as an ordinary symbol
+% through |\mathord|.
+% This is why its math code is redefined.
+%
+% A final unusual request was to be able to put a blank
+% unnumbered note, as a (rather wide) note separator.
+% The command |\NoteWhiteLine| has to be used at the end
+% of the text of the preceding note.
+% \begin{macrocode}
+\renewcommand\footnoterule{%
+ \kern-6\p@
+ \hrule\@width.4\columnwidth
+ \kern5.6\p@}
+\setlength\footnotesep{12\p@}
+\setlength{\skip\footins}{24\p@ \@plus 4\p@ \@minus 2\p@}
+\newcommand*\nota[1][\mathord{*}]{%
+ \xdef\@thefnmark{\ensuremath{\m@th#1}}\@footnotemark\@footnotetext
+}
+\newcommand*{\NoteWhiteLine}{\par\vspace*{-.3\baselineskip}}
+% \end{macrocode}
+%
+% The humanists asked me to create some other simple macros:
+% one for skipping a whole page, without header and footer;
+% another to compose a dedication page; a third one for
+% typesetting a page with one or more witty sentences.
+% The first request has a trivial solution, but at least
+% |\paginavuota| (alias |\emptypage|) is much shorter to
+% type in than its expansion.
+%
+% The environments \texttt{dedica} (alias \texttt{dedication})
+% for the dedication, and \texttt{citazioni} (alias
+% \texttt{wittysentences}) for the witty sentences are almost
+% identical; both typeset their content with a reduced text
+% width, half of the normal one; this column is typeset
+% on the right of the page. The \texttt{dedica}/\texttt{dedication}
+% environment is supposed to be used in the front matter,
+% while the witty sentence environment may be used anywhere.
+%
+% The dedication is typeset in |\Large| font size and in
+% italics; if the author wants a different size and/or a
+% different shape s/he must specify it at the beginning
+% of the dedication text.
+% The \texttt{citazioni}/\texttt{wittysentences}
+% environment typesets its material with the default font
+% shape series and size, so the author has to specify any
+% change s/he desires. These three commands, though, are
+% available irrespective of the \texttt{classica} option,
+% so that they can be used also for theses outside the
+% field of humanities.
+%
+% \begin{macrocode}
+\newcommand*\paginavuota{\clearpage\thispagestyle{empty}\null\clearpage}
+\let\emptypage\paginavuota
+%
+\newenvironment{dedica}{\clearpage
+ \if@twoside
+ \ifodd\c@page\else\thispagestyle{empty}\null\clearpage\fi
+ \fi
+ \thispagestyle{empty}%
+ \list{}{\labelwidth\z@
+ \leftmargin.5\textwidth
+ \parindent\z@
+ \raggedright\LARGE\itshape}\item[]
+}{%
+ \endlist\clearpage
+}
+\let\dedication\dedica \let\enddedication\enddedica
+%
+\newenvironment{citazioni}{%
+ \clearpage\thispagestyle{empty}
+ \list{}{\labelwidth\z@
+ \leftmargin.5\textwidth
+ \parindent\z@
+ \raggedright}\item[]
+}{%
+ \endlist\clearpage
+}
+\let\wittysentences\citazioni \let\endwittysentences\endcitazioni
+% \end{macrocode}
+% \iffalse
+%</topsty>
+% \fi
+%
+% \subsection{The \texttt{topfront.sty} code}\label{sec:topfront}
+% This file is input by \texttt{toptesi}, version 6 and higher
+% provided that no title page or thesis type options have been
+% specified by the user; it can also be used as an independent
+% extension module with (hopefully) any document class.
+%
+% It contains all the definition for the composition of just
+% the title page of “standard” theses along the style
+% requirements of \texttt{toptesi}, version 5.x or higher. It is not
+% loaded by |toptesi| even when typesetting the title page
+% for theses made according the requirements of the ScuDo
+% doctoral school; with the \textsf{scudo} option to
+% |toptesi| loading of |topfront| is inhibited and in its
+% place another extension module, |toptesi-scudo|, is loaded.
+% The same holds true with the other special thesis modules.
+% This latter files are described in a subsequent sections.
+%
+% It |topfront| makes use of an optional configuration file
+% where the user can define a lot of default information and
+% all the infix language dependent strings that are peculiar
+% to the title page. Among other things it can typeset
+% also the copyright page on the verso of the title page if the
+% |\retrofrontespizio| macro argument is not empty.
+%
+% This file specifies that it requires the \LaTeXe\ format
+% and identifies itself. Since this module might be
+% used to extend the performances of other classes, this
+% file does not specify any input encoding, on the assumption
+% that the calling class already provided this information.
+% \iffalse
+%<*topfrn>
+% \fi
+%
+% In oder to use |topfront| as a stand-alone extension package
+% with other classes it is necessary to verify if the \opz{classica}
+% option corresponds to a valid setting of |\ifclassica|;
+% since this test is defined in the |toptesi| class,
+% here we need to verify its existence and, in case, to set
+% its value to |false|. This implies two points: we need a
+% powerful macro package to test a “switch”, and, when this
+% |topfront| module is used as a stand-alone one, the settings
+% of the \opz{classica} options are not available. This requires
+% to define switches and counters, besides options for this
+% package, even if they may be specified to the |toptesi|
+% class; of course when |topfront| is used as a standalone
+% package, the class might not be |toptesi| therefore a complete
+% set up even with the \opz{classica} option must be set again.
+% \begin{macrocode}
+\@ifpackageloaded{etoolbox}{}{\RequirePackage{etoolbox}}
+\@ifpackageloaded{xspace}{}{\RequirePackage{xspace}}
+\@ifpackageloaded{xparse}{}{\RequirePackage{xparse}}
+
+\ifcsundef{ifclassica}{\newif\ifclassica \classicafalse}{}
+\ifcsundef{if@utoretitolo}{\newif\if@utoretitolo\@utoretitolofalse}{}
+\ifcsundef{if@ldstyle}{\newif\if@ldstyle\@ldstylefalse}{}
+\ifcsundef{if@xivpt}{\newif\if@xivpt \@xivptfalse}{}
+\ifcsundef{if@binding}{\newif\if@binding\@bindingfalse}{}
+\ifcsundef{ifScuDo}{\newif\ifScuDo \ScuDofalse}{}
+\ifcsundef{ifmonografia}{\newif\ifmonografia\monografiafalse}{}
+\ifcsundef{iftriennale}{\newif\iftriennale\triennalefalse}{}
+\ifcsundef{ifmagistrale}{\newif\ifmagistrale\magistralefalse}{}
+\ifcsundef{ifdottorale}{\newif\ifdottorale\dottoralefalse}{}
+\ifcsundef{ifsecondaria}{\newif\ifsecondaria\secondariafalse}{}
+\ifcsundef{ifplurale}{\newif\ifplurale\pluralefalse}{}
+
+\ifcsundef{ifTOPfront}{\newif\ifTOPfront \TOPfronttrue
+\newif\ifevenboxes \evenboxesfalse}{}
+
+\ifcsundef{c@tomo}{\newcounter{tomo}}{}
+
+\DeclareOption{evenboxes}{\evenboxestrue}
+\DeclareOption{cucitura}{\@bindingtrue}
+\DeclareOption{14pt}{\@xivpttrue}
+\DeclareOption{classica}{\classicatrue}
+\DeclareOption{autoretitolo}{\ifclassica\@utoretitolotrue\fi}
+\DeclareOption{oldstyle}{\ifclassica\@ldstyletrue\fi}
+\ProcessOptions*\relax
+
+% \end{macrocode}
+%
+% For the title page we need a special style, in order to
+% put some information in the header and some other in the
+% footer, without actually changing the page layout, except
+% for horizontally centring the grid in the page.
+% The headers, due to a specific request of Politecnico di
+% Torino, is to have the university logo(s) in the header;
+% other universities maintain their logo(s) in the lower part
+% of the page as it was done all the time in the past.
+% We need some device to switch position to the logos,
+% without actually changing the page layout. Since the
+% logo(s) are sort of large, the header must smash the
+% header contents, so as to avoid any modification of the
+% position and size of the other parts of the page.
+% The |\TPT@logobox| box shall be defined later on and
+% the |\logosede| command takes care of filling it up.
+% Besides these devices, the |\frontespizio| command and
+% the |frontespizio| environments (with or without asterisk)
+% produce either layout depending on the state of the boolean
+% |topTPTlogos|.
+% \begin{macrocode}
+\def\headstrut{\vrule \@depth4\p@ \@height\z@ \@width\z@}
+\def\ps@titlepage{\let\@mkboth\@gobbletwo
+ \def\@oddfoot{\vbox to 0.05\paperheight{\vss
+ \hbox to\hsize{\hfil{\Large{\@submitdate}}\hfil}}}%
+ \let\@evenfoot\@oddfoot
+ \def\@oddhead{%
+ \vbox to\headheight{\vss
+ \iftopTPTlogos
+ \hbox to\textwidth{%
+ \headstrut\hfil
+ \raisebox{3\baselineskip}{\usebox\TPT@logobox}\hfil\null%
+ }
+ \fi\par
+ \ifcsvoid{@ateneo}{}{%
+ \hbox to\textwidth{\hss\LARGE\rule[-1ex]{0pt}{3.3ex}%
+ \MakeUppercase{\@ateneo}\hss}}
+ \vss
+ }%
+ }%
+ \let\@evenhead\@oddhead
+ \def\chaptermark##1{}\def\sectionmark##1{}%
+}
+% \end{macrocode}
+%
+% Similarly a different title page style for typesetting
+% the logos in the lower half of the page is defined; since
+% it is the only style usable with the \opz{classica} option, we
+% call it the |classica| page style:
+% \begin{macrocode}
+ \def\ps@classica{\let\@mkboth\markboth
+ \def\@oddhead{\vbox{%
+ \setbox256=\hbox{\LARGE\MakeUppercase{\@ateneo}}
+ \unless\ifdim\wd256<\textwidth
+ \setbox256=\hbox{\resizebox{\textwidth}{!}{\box256}}%
+ \fi
+ \hbox to \hsize{\hss\box256\hss}%
+ \ifclassica
+ \hbox to \hsize{\hfil\vrule\@width\z@
+ \@height2ex\vrule\@height1.4\p@\@depth-\p@\@width50mm\hfil}%
+ \fi
+ }}%
+ \def\@oddfoot{\vbox to \dimexpr\paperheight/20\relax{\vss
+ \ifclassica
+ \hbox to \hsize{\hfil\raisebox{-.3ex}[\z@][\z@]{%
+ \vrule\@height-2.6\p@\@depth3\p@\@width
+ \dimexpr\textwidth/3}\hfil}%
+ \fi
+ \hbox to\hsize{\hfill{\Large{\@submitdate}}\hfill}}%
+ }%
+ \let\@evenhead\@oddhead
+ \let\@evenfoot\@oddfoot
+ }%
+% \end{macrocode}
+%
+% The title page information depends on the type of “thesis”
+% that is being typeset. The following commands specify the
+% kind of information that is going to be typeset. Some boolean
+% variables are automatically set by the commands in order
+% to change some formatting depending on the kind of thesis.
+% For languages that distinguish feminine from masculine
+% adjectives or qualifications, some automatic machinery is
+% set up in order to format some infix strings in a way
+% that copes with the singular or plural forms; in
+% particular when there is a multitude of authors (maximum
+% three) of different gender, the adjectives or qualifications
+% are set as masculine plural names, while when there is just
+% one author or the authors are of the same gender the
+% adjectives or qualifications are set according to number
+% and gender. All this is done by setting or resetting the
+% truth value associated to the boolean variable
+% \texttt{femminile}. The boolean variable \texttt{dottorato}
+% controls the Ph.D thesis format (except for the ScuDo
+% school), while the other variable \texttt{triennale}
+% controls the formatting of the bachelor's degree report.
+% All other theses are treated as master theses,
+% and in all cases the appropriate infix string is typeset
+% in the title page:
+% \begin{macrocode}
+\newif\iffemminile
+\newif\ifdottorato \dottoratofalse
+\newif\iftriennale \triennalefalse
+% \end{macrocode}
+%
+% The infix words for the |classica| option are redefined.
+% \begin{macrocode}
+\ifTOPfront
+\ifclassica
+\def\Candidato{Laureando}
+\def\Candidata{Laureanda}
+\def\Candidati{Laureandi}
+\def\Candidate{Laureande}
+\fi\fi
+% \end{macrocode}
+%
+% The thesis title is specified by means of the following
+% commands; |\monografia|, the name of the bachelors degree
+% final report, sets also the corresponding boolean variables
+% and redefines the command |\titolo| so as to avoid
+% duplications and inconsistencies; of course something might
+% still be inconsistent if the commands are given in the
+% wrong order.
+%
+% |\titolo| accepts an optional argument, the “short title”,
+% more or less as the standard sectioning commands; this is
+% due to the fact that with the class option \opz{autoretitolo}
+% the thesis title is written together with the author's
+% name in the even page headings; if the thesis full title
+% is too long it produces overfull headlines with ugly
+% results; a short title may solve the inconvenience.
+% The |\sottotitolo| command is another way to maintain
+% a short title; all the supplementary title information may be
+% typeset in the subtitle.
+% \begin{macrocode}
+\def\monografia#1{\global\triennaletrue
+ \global\dottoratofalse
+ \global\def\titolo##1{\PackageWarning{topfront}%
+ {Il titolo e' gia' stato impostato con
+ il comando \string\monografia}}%
+ \gdef\@titolo{#1}}
+
+\let\@stitle\empty
+
+\newcommand*{\titolo}[2][]{%
+\ifbool{triennale}{%
+\PackageWarning{topfront}{Il titolo deve essere impostato con
+ il comando \string\monografia}
+}{%
+\def\@tempA{#1}\ifdefempty{\@tempA}%
+ {\gdef\@stitle{#2}}{\gdef\@stitle{#1}}%
+ \gdef\@titolo{#2}%
+ }%
+}
+\def\sottotitolo#1{\gdef\@subtitle{#1}}
+% \end{macrocode}
+%
+% The |\materia| or its alias |\Materia| are used to
+% specify the subject of the thesis; as a silly example
+% a set of commands that reflects this subtle difference
+% might be the following:
+% \begin{verbatim}
+% \materia{Applied Tetratricotomy}
+% \titolo{Tetratricotomy of blond hair}
+% \sottotitolo{Accurate measurements of the four fourths
+% of tetratricotomised blond hair}
+%\end{verbatim}
+% and the title page, for example, will contain something like this:\\[\bigskipamount]
+% \begin{minipage}{\textwidth}\centering
+% {\Large Master Thesis\\ in\\ Applied Tetratricotomy\par}\bigskip
+% {\huge Tetratricotomy of blond hair\par}\bigskip
+% {\large Accurate measurements of the four fourths\\
+% of tetratricotomised blond hair}
+% \end{minipage}\bigskip
+% \begin{macrocode}
+\let\@materia\empty
+\def\Materia#1{\def\@materia{#1}}\let\materia\Materia
+% \end{macrocode}
+%
+% Things get more complicated for doctoral theses; in general
+% there is no supervisor; at most if a professor is assigned to supervise or control the PhD student's work this may be called
+% in whatever mode but here we assume his name is input
+% with the command |\tutore| even if “tutor” does not appear
+% as the best choice; in any case in Italian “tutore” does
+% not have the same meaning as the English word “tutor”.
+%
+% Most Doctoral Schools require to name the School's director
+% or coordinator instead of the tutor. This is why this
+% person's name can be introduced with |\direttore| or
+% |\coordinatore|; the actual label printed over this person
+% name is “Direttore” or “Coordinatore” but it can be
+% changed with |\QualificaDirettore|.
+% \begin{macrocode}
+\newif\ifDirettore \Direttorefalse
+\def\tutore#1{\gdef\@tutore{#1}}
+\def\direttore{\Direttoretrue\relatore}%
+\def\coordinatore{\Direttorefalse\relatore}%
+\def\QualificaDirettore#1{\gdef\@PhDdirector{#1}}%
+% \end{macrocode}
+%
+% For “normal” theses we may have from one to three
+% supervisors and from one to three authors; not all
+% universities accept a multitude of supervisors and/or
+% authors of the same thesis, but some do; this is why
+% this bundle accepts up to three names for each category.
+% The |\second...| commands set the plural forms of the
+% labels printed above the name lists. For the candidates
+% there are different commands to input ladies or gentlemen
+% names; according to the masculine (ending in `o')
+% or feminine (ending in `a') commands, the appropriate
+% true or false values are assigned to the boolean variable
+% \texttt{femminile} and the labels are set accordingly.
+%
+% Notice that in the case of bachelor degree final report
+% no supervisor name is printed even if one or more supervisor
+% names are specified. This must be kept in mind in order
+% to avoid surprises in finding missing information in the
+% title page. Further on, there are suggestions for
+% getting around this feature.
+% \begin{macrocode}
+\def\relatore#1{\gdef\@principaladviser{#1}}
+\def\secondorelatore#1{\gdef\@secondadviser{#1}}
+\def\terzorelatore#1{\gdef\@thirdadviser{#1}}
+% \end{macrocode}
+%
+% The next set of macros is used to typeset the “date” of
+% the thesis defence or presentation or whatever is done
+% for the final exam. The macro is sort of complicated
+% because the input format for this “date” may vary from
+% a single year, to a year range, to a month and year
+% specification so that different actions must be taken;
+% if the option \texttt{classica} is in force, then the
+% formatting of the “date” may be still different.
+% This command is aliased with |\esamendidottorato|
+% which literally means “defence of the doctoral dissertation”;
+% nevertheless both commands refer to a simple date
+% in one of those formats.
+%
+% |\getseduta| splits the date into its two components,
+% month and year; if the argument is a single string without
+% intervening spaces, the first one is the string itself
+% and the second is empty; this emptiness may be tested and,
+% in case, the date formatting is modified accordingly.
+% In particular if the string is a single spaceless one,
+% this string is assigned to |\@submitdate|; otherwise a
+% different treatment is made according to the fact that
+% \texttt{classica} is in force; if \texttt{classica} is not
+% in force the total string, including spaces, is assigned
+% to |\@submitade|. If \texttt{classica} is in force,
+% |\s@dutaclassica| is called with the whole string.
+% On turn |\s@dutaclassica| verifies if the date should be
+% typeset with old style numbers or with the usual lining
+% figures; in the latter case the whole string is assigned
+% to |\@submitdate|; in the former one the year part may
+% be either a single year or a year range; this separation
+% is tested by splitting the year part across one dash;
+% if the dash is present the extremes of the year range are
+% assigned to |\1| and |\2|, otherwise the year part is a
+% single year.
+% If a single year is given, this is simply typeset with
+% old style numbers and the appropriate commands are assigned
+% to the |\@submitdate| control sequence. If a year range is
+% given, this year range is also typeset with old style numbers,
+% and the dash is executed with a special en-dash surrounded
+% with white space.
+%
+% \begin{macrocode}
+\def\sedutadilaurea#1{\getseduta#1 !}
+\def\getseduta#1 #2!{%
+ \def\@tempA{#2}%
+ \ifx\@tempA\empty
+ \def\@submitdate{#1}%
+ \else
+ \unless\ifclassica
+ \def\@submitdate{#1 #2}%
+ \else
+ \s@dutaclassica#1 #2!%
+ \fi
+ \fi
+}%
+\def\s@dutaclassica#1 #2!{%
+ \if@ldstyle
+ \s@paranumeri#2-!%
+ \ifx\2\empty
+ \edef\@submitdate{\noexpand#1 \noexpand\oldstylenums{#2}}%
+ \else
+ \s@paranumeri#2!%
+ \edef\@submitdate{\noexpand#1
+ \noexpand\oldstylenums{\1} -- \noexpand\oldstylenums{\2}}%
+ \fi
+ \let\1\undefined
+ \let\2\undefined
+ \else
+ \def\@submitdate{#1 #2}%
+ \fi
+}
+\def\s@paranumeri#1-#2!{\def\1{#1}\def\2{#2}}%
+\let\esamedidottorato\sedutadilaurea
+% \end{macrocode}
+% Here |\annoaccademico| is defined to typeset the infix
+% string corresponding to “Anno accademico” followed by
+% the year range in old style numbers (irrespective of the
+% \texttt{oldstyle} option); localisation commands are
+% provided so as to set a different string, possibly
+% through the configuration file. In order to set an
+% adequate en-dash between the old style numbers a new
+% definition is given that takes care to set the dash
+% at a height above the base line that copes with the
+% specific shape of the old style numbers.
+% Notice that |\annoaccademico| and |\sedutadilaurea| do
+% not do the same things, besides the fact that |\annoaccademico|
+% works only with the |classica| option in force and a
+% special format is chosen. Therefore the user has to use
+% only one of these two commands, and if s/he uses
+% |\annoaccademico| while the |classica| option is not
+% in force, s/he gets an warning and the “date” gets
+% formatted in a special way so as to remember the user
+% that |\annoaccademico| requires the |classica| option.
+% \begin{macrocode}
+\newcommand*\NomeAnnoAccademico[1]{\gdef\AnnoAccademico{#1}}
+\@ifundefined{AnnoAccademico}{\gdef\AnnoAccademico{Anno accademico}}{}
+%
+\def\annoaccademico#1{\ifclassica
+ \def\@submitdate{{\large\textsc{\AnnoAccademico}} {\Large\s@tanno#1!}}
+ \else
+ \PackageWarning{toptesi}{\string\annoaccademico\space
+ is usable only when the\MessageBreak
+ `classica' option is in force}%
+ \def\@submitdate{\AnnoAccademico\ #1 --- Needs the `classica' option}
+ \fi}
+\def\s@tanno#1-#2!{\oldstylenums{#1}\EnDash\oldstylenums{#2}}
+
+\def\EnDash{{\settowidth{\dimen@}{\large\scshape I}%
+\setbox\tw@\hbox{2}\dimen\tw@.5\ht\tw@\advance\dimen\tw@-.5\dp\tw@
+\dimen4\dimen\tw@\advance\dimen4by.0385ex\relax
+\advance\dimen\tw@-.0385ex\relax
+\makebox[1.5\dimen@]{%
+ \vrule\@width\dimen@\@height\dimen4\@depth-\dimen\tw@}}}
+% \end{macrocode}
+%
+% The next macros are used to assign strings to some
+% literal information to be typeset in the title page.
+% |\ciclodidottorato| requires an uppercase roman numeral
+% (in Italy), but it can accept anything that can precede
+% the infix word “cycle”.
+% Macros |\corsodilaurea| and |\corsodidottorato| specify
+% the degree course qualification; you would specify just
+% “Elettronica”, for example, and the module will write
+% in the title page “Corso di Laurea in Elettronica”.
+% The infix part may be changed depending on the default
+% language and the configuration file.
+%
+% |\scuoladidottorato| gets the name of the PhD School;
+% |\ateneo| gets the generic name of the university;
+% |\nomeateneo| gets the proper name of the university.
+% In Italy Universities are generally named after the city they
+% are in; in large cities where there are several
+% universities, each one of them has a proper name.
+% For example the generic name might be “Universit\`a di
+% Roma” and the proper name might be “La Sapienza”.
+%
+% |\facolta| may receive an optional argument that is the
+% uppercase roman numeral specific of the faculty and
+% a compulsory argument that corresponds to the type of
+% faculty; for example, with |\facolta[II]{Ingegneria}|
+% the package typesets in the title page “II Facolt\`a di
+% Ingegneria”; if the optional argument is not specified,
+% no roman numeral is typeset; the infix string
+% \verb*+Facolt\`a di + may be changed with the configuration
+% file depending on the default language.
+% It might be necessary to define another name in place of
+% “Facolt\`a di\textvisiblespace”, since with recent bills,
+% the administrative structure of all Italian universities
+% has been changed and the activities formally assigned
+% to the Faculties may be now the responsibility of other
+% structures that may have different names in different
+% universities. If the internal command defined by
+% |\FacoltaDi| is empty, no name is printed at all and the
+% title page will not have any indication of a particular
+% faculty or other educational structure.
+% Therefore the Degree Course name, specified with
+% |\corsodilaurea| should always be specified.
+% The alias commands |\StrutturaDidattica| and |\struttura|
+% are defined as equivalent commands to |\FacoltaDi| and
+% |\facolta| respectively.
+%
+% Finally |\logosede| gets the name of the graphic file that
+% contains the information relative to the university logo;
+% it may receive also a comma separated list of logo file
+% names, as it might be necessary when a thesis
+% is developed in a multiple university environment.
+% If such logo file is not available, the user should not
+% specify this command; if the thesis is
+% typeset on smaller paper size than A4 or letter,
+% it would be much better to avoid inserting one or more logos
+% in the title page; this is particularly important when using
+% A5 paper size. Nevertheless this decision is left to
+% the user and this package neither controls this fact
+% nor outputs any warning.
+% If the user uses this command to insert one or more
+% university logo files but some file is not available,
+% the usual \texttt{graphicx} package warning is issued but
+% compilation may go on without the missing logo.
+%
+% The treatment of one or more logo files requires some extra
+% commands and control sequences suitable to store temporary
+% data or to specify style parameters: one is the name of
+% a save box; another is the default spacing between the
+% logos in the typeset page; the third is the height of the logos.
+% The default spacing may be set with the help of the
+% macro |\setlogodistance| -- notice that the default value
+% is |3em|, and if a different distance is desired, it should
+% not be much larger or much smaller than the default one;
+% the default logo height is specified as an option
+% command to the |\logosede| command, while the default
+% size is given by the |\T@Tlogoheight| length. This length
+% is specified in the main |toptesi| package in order
+% to compute the typesetting grid, so that if the |topfront|
+% module is used by itself with other classes, the existence
+% of the |\T@Tlogoheight| control sequence is tested and if it is
+% undefined, then and only then it is defined in this
+% module and assigned a default value.
+%
+% The save box name is just for internal workings and does
+% not require any customisation.
+%
+% The analysis and processing to the possible list of logo
+% file names is done through the usual means of the delimited
+% argument extraction of the single names from the list;
+% the “string” of logos is then composed in a save box;
+% as the list has been completely processed, the box is
+% measured; if its width is shorter than the |\textwidth|
+% it is typeset without further processing; if it is larger,
+% on the opposite, the box gets scaled down so that its width
+% equals the |\textwidth|.
+%
+% The |\tutoreaziendale| macro is the last title page
+% addition; several students, who work on their thesis
+% or final project in a company, want to have the company
+% supervisor name printed in the title page; this does not
+% preclude expressing the student's deepest thanks in the
+% acknowledgements section, but it does not harm to name
+% this person also in the title page.
+%
+% Eventually the |\retrofrontespizio| command, that by
+% default is empty, allows to typeset a copyright page;
+% the argument of this command is in total responsibility
+% to the user who must write it in the thesis main language;
+% the user can specify from zero to several paragraphs,
+% separated by the vertical spaces s/he thinks best; the
+% argument by default is typeset at the bottom of the text
+% block of the copyright page. The user can specify any
+% pertinent space at the bottom of his/her argument, so as
+% to set the text in the position s/he likes best.
+% In order to handle the copyright page in the proper way
+% we need to test if its definition is empty or blank so
+% we need the powerful advanced macros of the package
+% |etoolbox| that has already been loaded by this module or
+% by the main |toptesi| one.
+% \begin{macrocode}
+\def\ciclodidottorato#1{\gdef\@ciclo{#1 \@cyclename}}%
+\def\corsodilaurea#1{\global\dottoratofalse\gdef\@corso{#1}}
+\def\corsodidottorato#1{\global\dottoratotrue\global\triennalefalse
+ \gdef\@corso{#1}}
+\def\scuoladidottorato#1{\global\dottoratotrue\global\triennalefalse
+ \gdef\@phdschool{#1}}
+\def\ateneo#1{\gdef\@ateneo{#1}}
+\def\nomeateneo#1{\gdef\@nomeat{\expandafter\uppercase{\expandafter #1}}}
+\newcommand\facolta[2][]{\gdef\@facname{#2}\gdef\@facnumber{#1}}
+\let\struttura\facolta
+
+\newlength{\TPT@logospace}\TPT@logospace=3em\relax
+\newsavebox{\TPT@logobox}
+\newdimen\TPT@logoheight
+\newcommand*\setlogodistance[1]{\TPT@logospace=#1}
+\providecommand*{\@logosede}{}
+
+\ifcsundef{T@Tlogoheight}{%\
+ \newlength\T@Tlogoheight
+ \setlength\T@Tlogoheight{0.8\dimexpr(\paperwidth-\textwidth)/2}}{}
+
+\newcommand\logosede[2][\T@Tlogoheight]%
+ {\def\@logosede{#2}\TPT@logoheight=#1\relax
+ \ifcsvoid{@logosede}{\sbox{\TPT@logobox}{}}{%
+ \begin{lrbox}{\TPT@logobox}%
+ \expandafter\fillup@TCP@logobox\@logosede,!}}
+
+\def\fillup@TCP@logobox#1,#2!{%
+ \ifblank{#1}{\end{lrbox}\ifdim\wd\TPT@logobox>\textwidth
+ \sbox\TPT@logobox{\resizebox{\textwidth}{!}{\box\TPT@logobox}}\fi}%
+ {\def\@logosede{#2}%
+ \includegraphics[height=\TPT@logoheight]{#1}\hskip\TPT@logospace
+ \expandafter\fillup@TCP@logobox\@logosede,!}}
+
+\newcommand\printloghi{\unless\ifvoid\TPT@logobox\usebox{\TPT@logobox}\fi}
+
+\def\tutoreaziendale#1{\gdef\@tutoreaziendale{#1}}
+\newcommand\retrofrontespizio[1]{\long\gdef\@retrofrontespizio{#1}}
+% \end{macrocode}
+%
+% The following commands are user commands that modify the
+% infix strings according to the language used and to the
+% specifications of the actual university. All these
+% commands can be put in the configuration file so as
+% to specify what is desired as a default.
+% If these commands are specifically used to redefine
+% something before issuing the |\frontespizio| command
+% or one of the title page environments, the new definitions
+% override the configuration ones.
+%
+% \begin{description}[noitemsep]
+% \def\Item[#1]{\item[\normalfont\texttt{\char92#1}]
+% sets or changes the string}
+% \Item[FacoltaDi] “Facolt\`a di” in, say, “Faculty of”
+% \Item[DottoratoIn] “Dottorato in” in, say, “PhD in”
+% \Item[CorsoDiLaureaIn] “Corso di Laurea in” in, say,
+% “Master of Science in”
+% \Item[TesiDiLaurea] “Tesi di Laurea” in, say,
+% “Tesi di Laurea Magistrale”
+% \Item[NomeMonografia] “Monografia di Laurea” in, say,
+% “Tesi di Laurea”
+% \Item[NomeDissertazione] “Dissertazione” in, say,
+% “PhD dissertation”
+% \Item[InName] “in” in, say, “auf”
+% \Item[CandidateName] “Candidato” in, say, “Laureando”
+% \Item[AdvisorName] “Relatore” in, say, “Supervisors”
+% \Item[CoAdvisorName] “Correlatore” in, say, “Corapporteur”
+% \Item[NomeTutoreAziendale] “Supervisore aziendale” in, say,
+% “XYZ Company Supervisor”
+% \Item[TutorName] “Tutore” in, say, “Supervisor”
+% \Item[CycleName] “ciclo” in, say, “cycle”
+% \Item[NomePrimoTomo] “Tomo primo” in, say, “First volume”
+% \Item[NomeSecondoTomo] “Tomo secondo” in, say, “Second volume”
+% \Item[NomeTerzoTomo] “Tomo terzo” in, say, “Third volume”
+% \Item[NomeQuartoTomo] “Tomo quarto” in, say, “Fourth volume”
+% \end{description}
+% In the above description the first string is generally
+% the default one, while the second string is just an example
+% of the corresponding string to be set in another language
+% or to be changed in Italian. The last four commands clearly
+% show the difficulty of localising language strings: it
+% is necessary to localise the whole phrase, because of
+% the position of the adjectives.
+% \begin{macrocode}
+\newcommand\FacoltaDi[1]{\gdef\@faculty{#1}}
+\let\StrutturaDidattica\FacoltaDi
+\newcommand\DottoratoIn[1]{\gdef\@PhDname{#1}}
+\newcommand\CorsoDiLaureaIn[1]{\gdef\@laureaname{#1}}
+\newcommand\TesiDiLaurea[1]{\gdef\@TesiDiLaurea{#1}}
+\newcommand\NomeMonografia[1]{\gdef\@monografia{#1}}
+\newcommand\NomeDissertazione[1]{\gdef\@dissertazione{#1}}
+\newcommand\InName[1]{\gdef\@InName{#1}}
+\newcommand\CandidateName[1]{\gdef\@nomecandidato{#1}}
+\newcommand\AdvisorName[1]{\gdef\Relatore{#1}\gdef\Relatori{#1}}
+\newcommand\CoAdvisorName[1]{\gdef\Correlatore{#1}\gdef\Correlatori{#1}}
+\newcommand\TutorName[1]{\gdef\Tutore{#1}}
+\newcommand\NomeTutoreAziendale[1]{\gdef\@tutoreaziendalename{#1}}
+\newcommand\CycleName[1]{\gdef\@cyclename{#1}}
+\newcommand\NomePrimoTomo[1]{\gdef\PrimoTomo{#1}}
+\newcommand\NomeSecondoTomo[1]{\gdef\SecondoTomo{#1}}
+\newcommand\NomeTerzoTomo[1]{\gdef\TerzoTomo{#1}}
+\newcommand\NomeQuartoTomo[1]{\gdef\QuartoTomo{#1}}
+\providecommand\IDlabel{\\\quad matricola\ }
+% \end{macrocode}
+%
+% Now we can read the configuration file if it exists;
+% in any case what is possibly defined or redefined in the
+% configuration file must not be redefined in the following
+% Lines and this is why everything is subject to the test
+% |\@ifundefined|. Most default definitions are simply
+% “blank”; the others are in Italian. All of them, except
+% the supervisor and candidate strings may be individually
+% redefined in the configuration file or in the preamble.
+% Those that cannot be redefined such as the four
+% “candidate” strings may be actually redefined through
+% the single |\CandidateName| that should be used in a
+% language depended way and with the correct number and
+% gender once for all.
+% The four endings in the Italian strings allow to
+% exercise the correct selection only for Italian;
+% a specific test is made inside the |\frontespizio|
+% command; because of this, the same machinery cannot
+% be used, say, for French but maybe in the future this
+% feature is resolved in a proper way. The same is true
+% for the supervisor and the co-supervisor strings that
+% may be changed once for all with |\AdvisorName| and
+% |\CoAdvisorName|.
+% \begin{macrocode}
+\IfFileExists{\jobname.cfg}{\input{\jobname.cfg}}%
+ {\IfFileExists{toptesi.cfg}{\input{toptesi.cfg}}{}}
+%
+\@ifundefined{@cyclename}{\def\@cyclename{ciclo}}{}
+\@ifundefined{@titolo}{\def\@titolo{}}{}
+
+\providecommand\@author{}\providecommand\@@author{}
+\NewDocumentCommand\candidato{m o}{\gdef\@@author{#1}%
+\IfNoValueTF{#2}{\gdef\@author{#1}}%
+ {\gdef\@author{#1\IDlabel#2}}
+\femminilefalse\pluralefalse}
+\NewDocumentCommand\candidata{m o}{\gdef\@@author{#1}%
+\IfNoValueTF{#2}{\gdef\@author{#1}}%
+ {\gdef\@author{#1\IDlabel#2}}
+\femminiletrue\pluralefalse}
+\providecommand\@secondauthor{}
+\NewDocumentCommand\secondocandidato{m o}{%
+\IfNoValueTF{#2}{\gdef\@secondauthor{#1}}%
+ {\gdef\@secondauthor{#1\IDlabel#2}}%
+\femminilefalse\pluraletrue}
+\NewDocumentCommand\secondacandidata{m o}{%
+\IfNoValueTF{#2}{\gdef\@secondauthor{#1}}%
+ {\gdef\@secondauthor{#1\IDlabel#2}}%
+\pluraletrue}
+\providecommand\@thirdauthor{}
+\NewDocumentCommand\terzocandidato{m o}{%
+\IfNoValueTF{#2}{\gdef\@thirdauthor{#1}}%
+ {\gdef\@thirdauthor{#1\IDlabel#2}}%
+\femminilefalse\pluraletrue}
+\NewDocumentCommand\terzacandidata{m o}{%
+\IfNoValueTF{#2}{\gdef\@thirdauthor{#1}}%
+ {\gdef\@thirdauthor{#1\IDlabel#2}}%
+\pluraletrue}
+\providecommand\IDlabel{matricola\ }
+
+\@ifundefined{@principaladviser}{\def\@principaladviser{}}{}
+\@ifundefined{@secondadviser}{\def\@secondadviser{}}{}
+\@ifundefined{@thirdadviser}{\def\@thirdadviser{}}{}
+\ifcsundef{@PhDdirector}{%
+ \ifDirettore\def\@PhDdirector{Direttore del corso di dottorato}\else
+ \def\@PhDdirector{Coordinatore del corso di dottorato}\fi}{}
+\@ifundefined{@tutore}{\def\@tutore{}}{}
+%
+\@ifundefined{@nomerelatore}{\def\@nomerelatore{}}{}
+\@ifundefined{@nomecandidato}{\def\@nomecandidato{}}{}
+\@ifundefined{Candidato}{\def\Candidato{Candidato}}{}
+\@ifundefined{Candidata}{\def\Candidata{Candidata}}{}
+\@ifundefined{Candidati}{\def\Candidati{Candidati}}{}
+\@ifundefined{Candidate}{\def\Candidate{Candidate}}{}
+\@ifundefined{Relatore}{\def\Relatore{Relatore}}{}
+\@ifundefined{Relatori}{\def\Relatori{Relatori}}{}
+\@ifundefined{Correlatore}{\def\Correlatore{Correlatore}}{}
+\@ifundefined{Correlatori}{\def\Correlatori{Correlatori}}{}
+\@ifundefined{Tutore}{\def\Tutore{Tutore}}{}
+\@ifundefined{@tutoreaziendale}{\def\@tutoreaziendale{}}{}
+\@ifundefined{@tutoreaziendalename}%
+ {\def\@tutoreaziendalename{Supervisore Aziendale}}{}
+\@ifundefined{@retrofrontespizio}{\def\@retrofrontespizio{}}{}
+\@ifundefined{@subtitle}{\def\@subtitle{}}{}
+%
+\@ifundefined{@corso}{\def\@corso{}}{}
+\@ifundefined{@ciclo}{\def\@ciclo{}}{}
+\@ifundefined{@ateneo}{\def\@ateneo{POLITECNICO DI TORINO}}{}
+\@ifundefined{@nomeat}{\def\@nomeat{}}{}% Nome proprio dell'ateneo
+\@ifundefined{@facolta}{\def\@facname{}}{}
+\@ifundefined{@facnumber}{\def\@facnumber{}}{}
+\@ifundefined{@faculty}{\def\@faculty{}}{}
+%
+\@ifundefined{PrimoTomo}{\def\PrimoTomo{Tomo primo}}{}
+\@ifundefined{SecondoTomo}{\def\SecondoTomo{Tomo secondo}}{}
+\@ifundefined{TerzoTomo}{\def\TerzoTomo{Tomo terzo}}{}
+\@ifundefined{QuartoTomo}{\def\QuartoTomo{Tomo quarto}}{}
+% \end{macrocode}
+%
+% The infix word for the |classica| option are redefined.
+% \begin{macrocode}
+\ifTOPfront
+ \ifclassica
+ \def\Candidato{Laureando}
+ \def\Candidata{Laureanda}
+ \def\Candidati{Laureandi}
+ \def\Candidate{Laureande}
+ \fi
+\fi
+% \end{macrocode}
+% If the final exam date is not given, the default value is
+% the current month and the current year typeset in Italian;
+% therefore the user is strongly requested to enter a date
+% either with the |\sedutadilaurea| or the |\esamedidottorato|
+% commands. The default value of the university logo command has
+% already been defined “empty”.
+% \begin{macrocode}
+\@ifundefined{@submitdate}{\def\@submitdate{\ifcase\the\month\or%
+ Gennaio\or Febbraio\or Marzo\or Aprile\or Maggio\or Giugno\or
+ Luglio\or Agosto\or Settembre\or Ottobre\or Novembre\or Dicembre\fi
+ \space \the\year}}{}
+%
+\@ifundefined{@TesiDiLaurea}{\def\@TesiDiLaurea{Tesi di Laurea}}{}
+\@ifundefined{@phdschool}{\def\@phdschool{SCUOLA DI DOTTORATO}}{}
+\@ifundefined{@PhDname}{\def\@PhDname{Dottorato in }}{}
+\@ifundefined{@laureaname}{\def\@laureaname{Corso di Laurea in }}{}
+\@ifundefined{@dissertazione}{\def\@dissertazione{Tesi di Dottorato}}{}
+\@ifundefined{@monografia}{\def\@monografia{Monografia di Laurea}}{}
+\@ifundefined{@InName}{\def\@InName{in}}{}
+% \end{macrocode}
+%
+% Finally we have the real macro |\frontespizio| and the
+% corresponding environments, the real macros or environments
+% that actually typeset the title page.
+%
+% I recommend to use the environments, a new feature of
+% version 5.85. But the legacy command |\frontespizio| is
+% still usable. The principle on which these environments
+% work is that the |frontespizio| environment typesets the
+% title page with logo(s) set in the page header, while the
+% |frontespizio*| environment typesets the logos after the
+% information on the title, the possible sub title and tome
+% information, i.e.\ in the lower half of the title page.
+% In order to achieve this result each environment sets the
+% boolean variable |topTPTlogos| to either value |true|
+% (for header logos) or |false| (otherwise).
+% The key of the different typesetting style is this
+% boolean-variable state.
+%
+% Now, since the internal |frontespizio| environment opening
+% command is |\frontespizio| how is it possible to distinguish
+% this opening statement from the homonymous user command?
+% The solution is a little tricky, but, after all, very simple.
+% The |\begin| command, with which an environment is started,
+% before calling the opening statement defines the internal
+% service macro |\@currenvir| to contain the environment name;
+% this is used by the |\end| statement to control that it is
+% closing the last opened environment.
+%
+% If the |\frontespizio| command is directly used, the
+% |\@currenvir| macro does not contain the name “frontespizio”;
+% therefore if in the opening environment definition we check
+% the contents of |\@currenvir| against the string
+% |frontespizio| we can decide if the user resorted to
+% the legacy command, or the environment was correctly
+% opened by means of |\begin|.
+% If the user resorted to the legacy command, the
+% service macro |\fr@ntespizio| is called that typesets
+% the title page according to the current status of the
+% boolean |topTPTlogos|, a boolean that has a default
+% value but the user can set at its will. Otherwise the
+% |frontespizio| environment is regularly executed.
+% Notice that the service macro |\fr@ntespizio| tests
+% the state of the boolean |classica| and accordingly
+% uses a different page style.
+% \begin{macrocode}
+\newbool{topTPTlogos} \booltrue{topTPTlogos}
+
+\newenvironment{frontespizio*}{\boolfalse{topTPTlogos}}{\fr@ntespizio}
+
+\newenvironment{frontespizio}{%
+ \ifdefstring{\@currenvir}{frontespizio}
+ {\booltrue{topTPTlogos}}{\TPTmaybestar}
+ }{%
+ \fr@ntespizio
+ }
+
+% \end{macrocode}
+%
+% With the new boolean |AteneoInHead| we can mark these
+% situations where the university common name goes into the
+% header; with the |classica| option the title page
+% \emph{must} have this name in the header and if the user
+% forgets to specify one, this module fakes it with a clear
+% message that the university name has been forgotten, but
+% at the same time this fake message fills up the header
+% position. On the other hand, when the |classica| option
+% has not been specified, the user can use either an empty
+% university name or a specific name. So only when the
+% |\@ateneo| macro remains empty the university name
+% in the header remains really blank; this is good when the
+% university name is part of the university logo (this is
+% the case for Politecnico di Torino, and for many other
+% universities). When no university name is set in the header
+% some little attention in formatting the title page is necessary.
+%
+% \begin{macrocode}
+\newbool{AteneoInHead}\boolfalse{AteneoInHead}
+% \end{macrocode}
+%
+% In order to use the command |\frontespizio*| as an isolated
+% command instead of the starting command of the |frontespizio*|
+% environment, we have to behave as with the |\frontespizio|
+% command, but we must test for a possible asterisk following
+% the command; for this reason we defined the |\TPTmaybestar|
+% that% absorbs one following token: if the token is an
+% asterisk, we set the appropriate settings for the previous
+% behaviour of the isolated command, but if it is
+% not an asterisk we must set it back into the list after
+% finishing the execution of the |\fr@ntespizio| service macro,
+% whose function is to set the title page information at the
+% proper position, but must not contain any spurious material.
+% \begin{macrocode}
+\newcommand\TPTmaybestar[1]{\def\@tempA{#1}%
+\ifdefstring{\@tempA}{*}%
+ {\boolfalse{topTPTlogos}\booltrue{AteneoInHead}\fr@ntespizio}
+ {\booltrue{topTPTlogos}\fr@ntespizio\@tempA}
+}
+% \end{macrocode}
+%
+% We start defining the complex macro |\fr@ntespizio|. We start
+% with a group so that any settings performed by this command
+% remain local; if the title page environments had been
+% used, this group would be useless, but if the isolated
+% commands are used, then this group protects the rest of the
+% document from unusual local settings valid only for the
+% title page.
+% \begin{macrocode}
+\def\fr@ntespizio{%
+\begingroup\par
+% \end{macrocode}
+%
+% We want also the title page to be set in the middle of the
+% page irrespective of the binding correction; so we assign
+% the average of the two side margins to both
+% of them.
+% \begin{macrocode}
+ \oddsidemargin=\dimexpr(\oddsidemargin+\evensidemargin)/2\relax
+ \evensidemargin \oddsidemargin
+% \end{macrocode}
+% The |\null| command inserts a void horizontal box into
+% the vertical list; it is useful to act as a block against
+% which the vertical glue pushes for setting the subsequent
+% material. The normal font is chosen in case preceding
+% commands did change the font characteristics.
+% \begin{macrocode}
+\null
+\setcounter{page}{1}%
+\normalfont
+% \end{macrocode}
+% Depending on the style of the title page a different
+% |\pagestyle| is set with appropriate switches and settings.
+% If with the classica style a university name is blank,
+% it is set to an explicit string equivalent to “The
+% university name is missing”.
+% \begin{macrocode}
+\ifclassica
+ \boolfalse{topTPTlogos}
+ \thispagestyle{classica}
+ \ifcsvoid{@ateneo}{\def\@ateneo{Manca il nome dell'ateneo}
+ }{}
+\else
+ \thispagestyle{titlepage}
+\fi
+\ifcsvoid{@ateneo}{}{\booltrue{AteneoInHead}}
+% \end{macrocode}
+%
+% The generic university name should already be in the header
+% either in the logo or in the header text; but in spite of
+% this we test if the university generic name macro is void,
+% if it contains something, then we typeset also the generic
+% name; some candidates might obey to university regulations
+% that require the name of the university be at the top, just
+% under the logo. The switch |\ifcsvoid| is true if |@ateneo|
+% is empty or blank, false otherwise; but even with page top
+% logos, no test is made in order to give the possibility to
+% repeat the university name. It is the user responsibility to
+% set an empty value to the |\ateneo| macro so as to avoid
+% repeating the university name possibly already present in
+% the logo itself.
+% \begin{macrocode}
+\ifcsvoid{@ateneo}{%
+ \ifbool{topTPTlogos}
+ {}{\booltrue{AteneoInHead}\def\@ateneo{Manca il nome dell'ateneo}}%
+}{%
+ \booltrue{AteneoInHead}%
+}
+
+ \ifbool{AteneoInHead}{}{%
+ {{\centering\LARGE \@ateneo\par}}
+ }
+% \end{macrocode}
+%
+% If it is non blank the first thing we set on the page is
+% the university proper name and some vertical glue.
+% \begin{macrocode}
+ \ifcsvoid{@nomeat}{}
+ {\ifbool{topTPTlogos}{\vspace*{\dimexpr \headsep+2.5ex}}{\vspace*{-3ex}}%
+ {\centering\@nomeat\par}\vfill}
+
+% \end{macrocode}
+% Then the faculty name comes next; but for the doctoral
+% school it uses the doctoral school name entered with
+% |\scuoladidottorato|, otherwise it inserts the faculty
+% ordinal number or prefix and name already entered with
+% the optional and required arguments of |\facolta|.
+% \begin{macrocode}
+ \begin{center}
+ {\rmfamily\mdseries
+ \ifdottorato
+ \large \@phdschool\par\medskip
+ \else
+ \ifcsvoid{@faculty}{}{%
+ \LARGE\ifx\@facnumber\empty\else\@facnumber\space\fi
+ \@faculty\unskip\xspace\@facname\par\medskip
+ }
+ \fi
+ }%
+% \end{macrocode}
+% Further specification: it inserts the field of the PhD
+% research or the degree course name; it inserts a line
+% such as, for example, “Philosophy Degree in Applied
+% Tetratricotomy~--~XVI~cycle” or “Master of Science
+% in Applied Tetratricotomy”.
+% \begin{macrocode}
+ \ifcsvoid{@corso}{}{{\large
+ \ifdottorato
+ \@PhDname\unskip\xspace
+ \@corso\ifx\@ciclo\empty\else~--~\@ciclo\fi
+ \else
+ \@laureaname\unskip\xspace\@corso
+ \fi
+ \par}}
+ \end{center}
+% \end{macrocode}
+% It now centres the name of the report, be it “Doctoral
+% Dissertation” or “Master Thesis” or whatever; in case
+% the command |\materia| was used, it then centres the
+% discipline which the thesis deals with.
+% \begin{macrocode}
+ \vspace{\stretch{0.2}}
+ \begin{center}
+ \LARGE
+ \ifdottorato
+ \@dissertazione%
+ \else
+ \iftriennale
+ \@monografia%
+ \else
+ \@TesiDiLaurea%
+ \fi
+ \fi
+ \unless\ifx\empty\@materia
+ \\\@InName\\\@materia
+ \fi
+ \end{center}
+% \end{macrocode}
+%
+% Next comes the real title entered with |\titolo| or
+% |\monografia| and the possible subtitle.
+% \begin{macrocode}
+ \vspace{\stretch{0.2}}
+ \begin{center}
+ {\huge\bfseries \baselineskip=0.95em plus 1pt
+ \@titolo \par}
+ \end{center}
+% \end{macrocode}
+% with the possible subtitle:
+% \begin{macrocode}
+ \unless\ifx\@subtitle\empty
+ \begin{center}%
+ \large\textrm{\@subtitle}\par
+ \end{center}%
+ \fi
+% \end{macrocode}
+% If the option \texttt{classica} is in force the thesis
+% might be divided in several volumes; theses in humanities
+% apparently are often oversized. In this case the |\tomo|
+% command may be given at the beginning of every volume and the
+% counter \texttt{tomo} is stepped up; the volume number
+% is therefore printed in each title page; the infix string
+% may be redefined as it was shown above.
+% \begin{macrocode}
+ \ifclassica
+ \ifnum\value{tomo}>\z@
+ \par\bigskip
+ \noindent\makebox[\textwidth]{%
+ \large\textbf{%
+ \ifcase\c@tomo%
+ \or \PrimoTomo%
+ \or \SecondoTomo%
+ \or \TerzoTomo%
+ \or \QuartoTomo%
+ \else
+ \PackageWarning{toptesi}{%
+ Counter tomo equals
+ \the\c@tomo\MessageBreak
+ We never considered a thesis might get
+ divided in more than four volumes}%
+ \fi}}%
+ \fi
+ \vspace{1em}
+ \fi
+ \par
+% \end{macrocode}
+% Going down in the title page, now comes the optional
+% insertion of the university logo(s); “optional” in both
+% meanings: one or more university logos are not generally
+% required in a thesis, and in case it depends if the
+% logo(s) have to be put in the header or here.
+% This is a simple task since the |\logosede| already
+% defined the contents to the box |\TPT@logobox|, and this
+% was done either with the explicit command |\logosede|
+% with its argument in a specific line of the configuration
+% file or within the |frontespizio| environment.
+% If such box |\TPT@logobox| is void, the already defined
+% |\printloghi| macro does not do anything.
+% \begin{macrocode}
+ \unless\iftopTPTlogos
+ {\vfill\centering \printloghi\par}\fi
+% \end{macrocode}
+%
+% The final task is to typeset the possible supervisors'
+% names, the candidates' names and all the rest of the
+% bureaucratical terms. We have to distinguish between
+% a bachelor degree report that is not supposed to have
+% a supervisor, from the doctoral dissertation where we
+% do not indicate the supervisor, but the School Director,
+% and the master thesis where there might be one or more
+% supervisors; with the \texttt{classica} option in force
+% no label is printed over the supervisor's name, unless
+% there is a plurality of supervisors.
+% \begin{macrocode}
+ \vfill
+ \iftriennale
+ \let\@nomerelatore\empty
+ \else
+ \ifdottorato
+ \edef\@nomerelatore{\@PhDdirector}%
+ \else
+ \ifcsvoid{@principaladviser}{}{%
+ \def\@nomerelatore{\Relatore}}
+ \unless\ifclassica
+ \ifcsvoid{@secondadviser}{}{%
+ \def\@nomerelatore{\Relatori}}%
+ \fi
+ \fi
+ \fi
+% \end{macrocode}
+% Similarly the label names for the exam candidates are
+% chosen; in Italian such names are infix strings that are
+% selected according to the gender and the number; if these
+% labels have to be set in a different language it is
+% necessary to define one string that has to be selected
+% by the user according to number and gender.
+% The label for the PhD candidate is left empty.
+% \begin{macrocode}
+ \ifdottorato
+ \let\@nomecandidato\empty
+ \else
+ \iflanguage{italian}{%
+ \iffemminile
+ \def\@nomecandidato{\Candidata}%
+ \else
+ \def\@nomecandidato{\Candidato}%
+ \fi
+ \ifcsvoid{@secondauthor}{}{%
+ \iffemminile
+ \def\@nomecandidato{\Candidate}%
+ \else
+ \def\@nomecandidato{\Candidati}%
+ \fi}
+ }{}%
+ \fi
+% \end{macrocode}
+%
+% For the supervisor(s) and the candidate(s) name(s)
+% a different approach is used for each one of the three
+% categories of theses. If a bachelor degree
+% report is dealt with, the name of the \emph{single}
+% candidate is centred and written in caps-and-small-caps.
+% \begin{macrocode}
+ \iftriennale
+ \begin{center}%
+ \large\mdseries\textsc{\@author}
+ \end{center}%
+% \end{macrocode}
+% For doctoral and master theses two virtual boxes
+% (actually macros) are filled up so as to align the
+% supervisor name(s) and, respectively,
+% the candidate name(s). The label is set in the first
+% line with proper number and gender; in the second line
+% the first name, and in the subsequent lines,
+% if there are any, the other names. These virtual boxes
+% actually contain a tabular environment each; these
+% environments shall be actually typeset when these virtual
+% box macros are executed. If the \texttt{classica} option
+% is in force no label is set over the principal advisor
+% name, but a label is set over the co-advisor name(s).
+% The type size is also a little different for the
+% \texttt{classica} option. The |\protect| command is used
+% to protect the names in case they contain accent macros
+% that might be expanded at the wrong moment.
+%
+% The candidate name(s) are typeset in another nested
+% tabular environment of two lines when the user typesets
+% the entry in such a way:
+%\begin{flushleft}
+%\cs{candidato}\Marg{Mario Rossi}\Oarg{123456}\\[1ex]
+%\end{flushleft}
+% The optional argument contains the ID number of the candidate;
+% if it is specified, it is typeset below the candidate name,
+% with an indentation, and prefixed with the \verb*|matricola |
+% label; of course if the optional ID number (and the enclosing
+% brackets) is not specified, nothing is printed after or
+% below the candidate's name.
+% If the user wants it typeset on the same line and or with a
+% different label s/he has to redefine the macro |\IDlabel| by
+% means of the \cs{ID} macro described in previous sections;
+%
+% Example redefinitions are shown in the sample files.
+% Notice that with the new definition of the candidates' setting
+% macros it is guaranteed that the ID number, if specified, is
+% typeset in the title page, but not in the headers if the
+% |autoretitolo| option is in force.
+%
+% It is useful to recall that the ID number must be entered
+% only if required by the University regulations; it must
+% not be typeset in the title page just because it is possible
+% to do it.
+%
+% \begin{macrocode}
+ \else
+% For theses of any kind that expect the supervisor and co-supervisor
+% names:
+ \def\BoxRelatori{%
+ \begin{tabular}[t]{l}%
+ \hbox{\ifclassica\else\large\fi
+ \textbf{\protect\@nomerelatore}}\\[.6ex]
+ \hbox{\large\textrm{\protect\@principaladviser}}%
+ \ifx\@secondadviser\empty \else
+ \ifclassica
+ \ifx\@thirdadviser\empty
+ \ifx\@secondadviser\empty\else
+ \\[1.5ex]\textbf{\Correlatore:}%
+ \fi
+ \else
+ \\[1.5ex]\textbf{\Correlatori:}%
+ \fi
+ \fi
+ \\[.6ex]\hbox{{\large\textrm{\protect\@secondadviser}}}%
+ \fi
+ \ifx\@thirdadviser\empty \else
+ \\[.6ex] \hbox{{\large\textrm{\protect\@thirdadviser}}}%
+ \fi
+ \end{tabular}%
+ }%
+% \end{macrocode}
+% A similar approach is taken for the candidate name(s),
+% although for code clarity I prefer to define two secondary
+% macros in order to format the other candidates names
+% and ID in a clearer way.
+% \begin{macrocode}
+ \def\print@secondocandidato{\\\relax
+ \hbox{\large\tabular{@{}l@{}}\@secondauthor\endtabular}}
+ \def\print@terzocandidato{\\\relax
+ \hbox{\large\tabular{@{}l@{}}\@thirdauthor\endtabular}}
+ \def\BoxCandidati{%
+ \begin{tabular}[t]{l}%
+ \hbox{\unless\ifclassica\large\fi
+ \textbf{\protect\@nomecandidato}}\\[.6ex]
+ \hbox{\large\tabular{@{}l@{}}\@author\endtabular}%
+ \ifcsvoid{@secondauthor}{}{\print@secondocandidato}%
+ \ifcsvoid{@thirdauthor}{}{\print@terzocandidato}%
+ \end{tabular}%
+ }%
+% \end{macrocode}
+% The real typesetting of these name lists takes place now;
+% if the thesis is referred to the PhD school, one type of
+% layout is used, otherwise the default master thesis layout
+% is used; remember that the bachelor degree case has
+% already taken place. For the doctoral dissertation the
+% doctoral candidate name is typeset centred in one line
+% by itself and everything else is set 3em below into a three
+% column table extended to the |\hsize|, the first line
+% containing the applicable labels and the second line
+% containing the true names. The central column is used just
+% for spacing, but it does not contain anything.
+% \begin{macrocode}
+ \ifdottorato
+ \begin{center}\large
+ \textbf{\@author}\\[3em]
+ {\normalsize
+ \begin {tabular*}{\hsize}{@{\extracolsep{\fill}}ccc}
+ \ifcsvoid{@tutore}{}{\textbf{\Tutore}}
+ &\relax&
+ \ifcsvoid{@principaladviser}{}{\textbf{\@nomerelatore}}
+ \\
+ \ifcsvoid{@tutore}{}{\@tutore}
+ &\relax&
+ \ifcsvoid{@principaladviser}{}{\@principaladviser}
+ \end{tabular*}
+ }%
+ \end{center}
+ \else
+% \end{macrocode}
+% For the master thesis the two virtual boxes are set one
+% besides the other but skewed to the right or, respectively,
+% to the left of every name so that there is enough space
+% for the signature. With the \texttt{classica} option in force
+% the two boxes are simply aligned.
+% \begin{macrocode}
+ \unless\ifclassica
+ \unless\ifevenboxes
+ \begin{flushleft}%
+ \BoxRelatori
+ \end{flushleft}\par\vspace*{-1.5\baselineskip}
+ \begin{flushright}%
+ \BoxCandidati
+ \end{flushright}%
+ \else
+ \makebox[\textwidth]{\BoxRelatori\hfill\BoxCandidati}
+ \fi
+ \else
+ \noindent
+ \makebox[\textwidth]{%
+ \BoxRelatori\hfill\BoxCandidati}\par
+ \fi
+ \fi
+ \fi
+% \end{macrocode}
+% The final item is the optional name of the company supervisor.
+% \begin{macrocode}
+\ifcsvoid{@tutoreaziendale}{}{%
+ \vfill\vfill
+ {\centering \textbf{\@tutoreaziendalename}\\[.6ex]
+ \@tutoreaziendale\par}}
+% \end{macrocode}
+% All the material now is on the page; we put some more
+% vertical glue and handle the copyright page; then we
+% close the page sending it to the output file; the final
+% |\endgroup| closes the |\begingroup| that was set at
+% the beginning of this long macro.
+% In order to handle the copyright page, we test if the
+% internal definition of the copyright page text is empty;
+% in this case no copyright page should be output, and
+% a |\cleardoublepage| works fine in both one and two side
+% printing; if the copyright page text is not empty, after
+% shipping out the title page, we set the copyright page
+% text flush bottom with the text block, and then we ship
+% out also this copyright page.
+% \begin{macrocode}
+ \par\clearpage
+ \ifcsvoid{@retrofrontespizio}{}%
+ {\null\vfill\thispagestyle{empty}\@retrofrontespizio\par\clearpage}%
+\endgroup}
+% \end{macrocode}
+% \iffalse
+%</topfrn>
+% \fi
+%
+% \subsection{Further settings for the ScuDo doctoral school}
+%
+% Doctoral theses to be developed at the \emph{Scuola di
+% Dottorato} (ScuDo) doctoral school of Politecnico di
+% Torino require a particular set of other packages and
+% commands to be available by default to the student
+% writing his/her doctoral thesis. It requires also
+% a title page with a layout completely different from
+% those that can be typeset with the |topfront| extension
+% file and, as far as I can tell, different from what
+% is possible to create with the excellent |frontespizio|
+% package.
+%
+% This task is reached by selecting the thesis type
+% by means of the |tipotesi=scudo| option to the |toptesi|
+% class; this option sets on or off the necessary switches
+% and loads the |toptesi-scudo.sty| module in place of the
+% |topfront| one. This specific module loads the extra
+% packages, defines some special commands, provides the
+% customising commands to modify the title page infix
+% words and labels, and the commands to introduce the
+% specific thesis data; eventually it specifies the title
+% page layout and provides for its generation and to a
+% copyright and disclaimer sentence on its verso page.
+%
+% It produces also a colophon where some data concerning
+% the thesis typesetting details are given. This colophon
+% is saved and used on the last even page of the complete thesis.
+%
+% Some if not all the data required for the title page may
+% be entered by means of a configuration file |\jobname.cfg|
+% that can be modelled on the |toptesi.cfg| file that is part of
+% this bundle. The user should remember to copy the sample file in
+% his/her thesis directory, change its name (not the extension)
+% to match that of the thesis, modify the data according
+% to his/her needs, and this extension file will read the
+% configuration file at the proper moment and acquire its data.
+%
+% This |toptesi-scudo.sty| module is meant to load a certain
+% number of packages in order to ease the user work when
+% typesetting a dissertation in an engineering doctorate
+% school such as ScuDo.
+%
+% The chosen packages are supposed to be sufficient to
+% typeset any technical thesis or dissertation; but this
+% does not limit its use to the fields of engineering;
+% anybody can load the packages
+% s/he needs for the particular discipline s/he is
+% working on. At the same time nobody forbids to load
+% other packages, in addition, not in substitution, of
+% the packages loaded by this extension file of the
+% |toptesi| class.
+%
+%\iffalse
+%<*topscu>
+%\fi
+% We start by loading the math packages produced by the
+% American Mathematical Society, differentiating what is
+% necessary to load when using \pdfLaTeX\ or the
+% OpenType-aware programs \XeLaTeX\ or \LuaLaTeX.
+% The extension file |iftex| that defines the switches
+% \cs{ifPDFTeX},, \cs{ifXeTeX}, and \cs{ifLuaTeX},
+% has already been loaded. The AMS fonts should
+% not be used when typesetting with \XeLaTeX\ or \LuaLaTeX,
+% because these programs get them directly from the
+% \sigla{UNICODE} math fonts, so that package |amssymb| has
+% to be loaded only when \pdfLaTeX\ is used.
+% \begin{macrocode}
+\ScuDotrue
+\ifPDFTeX
+ \RequirePackage{amsmath,amssymb,amsthm}
+\else
+ \RequirePackage{amsmath,amsthm}
+ \RequirePackage{unicode-math}
+\fi
+% \end{macrocode}
+% The suitable macro for using the differential sign in the
+% proper \sigla{ISO} compliant way (upright font) with the suitable
+% spacing before and no space after, is the following:
+% \begin{macrocode}
+\AtBeginDocument{%
+\providecommand\diff{}\renewcommand{\diff}{\mathop{}\!\mathrm{d}}
+\providecommand{\gei}{\ensuremath{\mathop{\mathrm{\mathstrut j}}\nolimits}}
+\providecommand{\eu}{\ensuremath{\mathop{\mathrm{e}}\nolimits}}
+\let\iu\gei}
+% \end{macrocode}
+% Such a definition allows to typeset math expression containing
+% integrals with a small space between the integrand and the
+% integrating differential; on the contrary the leading space does
+% not disturb typesetting differential equations. The above
+% definitions include also the \sigla{ISO} compliant ways of writing
+% the Napier number `e', and the imaginary unit |\iu| that
+% sets an operator-like roman `j' as it is customary in
+% most engineering disciplines. The alias |\iu| to the |\gei|
+% command may be redefined if the PhD student wants to use for
+% example ‘i’; the example file \texttt{toptesi-scudo-example.tex}
+% uses the Greek ‘iota’ and specifies that this use is \emph{wrong}!
+%
+% Next an option is defined, |mybibliostyle| which allows the user to
+% establish his own style for the bibliography. By default the
+% |toptesi-scudo| module loads |biblatex| with a set of options that
+% allow numerical listing and numerical citation according to the IEEE
+% standards for its Transaction. PhD students doing their theses in
+% other scientific domains may use different styles for bibliographics
+% listings and citation methods. By setting this option |mybibliostyle|
+% among the class ones, it is automatically treated as a global option
+% so that it is passed on to the called packages; in particular this
+% option reaches this |toptesi-scudo| module, that has the following
+% definition and handling lines:
+% \begin{macrocode}
+
+\ifcsundef{ifmybibstyle}{\newif\ifmybibstyle\mybibstylefalse}{}
+\DeclareOption{mybibliostyle}{\mybibstyletrue}
+\ProcessOptions*\relax
+
+% \end{macrocode}
+% The switch |mybibstyle| is used below when the |biblatex|
+% package is possibly loaded. Actually when this option is active
+% (i.e. when this switch is `true') nothing is loaded, and the user
+% is free to load the packages s/he likes best in order to handle the
+% bibliographic databases and to typeset one or more bibliographies
+% with different styles. Since in the other thesis types nothing
+% is preloaded for customising the user's bibliography, the user
+% does not need to specify the above |mybibliostyle| option, and
+% can proceed loading his/her preferred packages for bibliographic
+% styles. With the other thesis types if the user specifies this option,
+% nothing is done and it remains in the list of ‘unused options’.
+%
+% Some other packages are loaded next. Please take notice that
+% |xparse| is very useful to define advanced commands and
+% environments containing different kind of delimited
+% arguments; parameters entered as arguments to the
+% opening statement of an environment are available also
+% for the closing commands; read the documentation if you
+% want to use this package facilities. Since this package is
+% already loaded by the |toptesi| class, a test is performed
+% as to avoid reloading; but if this module is used independently
+% from the |toptesi| class, the package is actually loaded.
+%
+% Using the facilities of |setspace| may be tolerated only
+% while typesetting a thesis draft. It is bad typography
+% to use its facilities when doing the thesis final printing.
+%
+% Packages |ifthen| and |calc|, in spite of being the
+% standard traditional ones for accomplishing their tasks,
+% are preferred by many users who are not aware that
+% computations are now native of modern typesetting
+% programs\footnote{All the three typesetting programs we are dealing
+% with here. \LuaLaTeX\ can do also floating point computations
+% thanks to the language Lua; all programs may benefit from the
+% advances of the \LaTeX3 language, that has a special facilities
+% to perform floating point calculations.}; also advanced
+% tests are natively available with such programs, but
+% since this class loads the |etooolbox|, its powerful
+% and robust commands are already available; therefore
+% these packages are loaded only for the user comfort,
+% although they are not really required.
+%
+% Packages |caption| and |subcaption| have been optional
+% for several TOPtesi versions before version 6.x; here they
+% are pre-loaded only with the \textsf{tipotesi=scudo} option.
+%
+% Package |tabularx| provides an alternative way to produce
+% tables of specified width by means of a new column type
+% |X|; this column type behaves as |p|\marg{width}, where
+% \meta{width} is computed by the package in order to expand
+% the column(s) so as to fill the specified table
+% width. It is very handy in a number of situations.
+%
+% For professional typesetting tables, package |booktabs|
+% is highly recommended; we load also package |multirow|,
+% although its use is deprecated by many professionals.
+%
+% The sample template file |toptesi-scudo-example.tex| shows a
+% couple of tables typeset with and without using
+% |multirow|; the results without using this package are
+% marginally more elegant, but the user is more free to specify
+% every detail, without the support of automatic (and
+% limited) typesetting macros.
+%
+% Package |siunitx| is highly recommended; its management
+% of fractional measures, of units of measure, and of table
+% columns that contain numerical values aligned on the decimal
+% separator is very useful.
+%
+% Package |float| is very handy to define new floating
+% environments; unfortunately many users load it in
+% order to have available the float positioning
+% option \textsf{H}, which should never be used,
+% especially while using this TOPtesi class, where
+% provisions for large floats are already taken care of.
+% \begin{macrocode}
+\@ifpackageloaded{xparse}{}{%
+ \RequirePackage{xparse}}% Command and environment advanced definitions
+\RequirePackage{lscape} % Supports landscape Layout
+\RequirePackage{setspace} % Define line spacing in paragraph. Don't use!
+\RequirePackage{calc} % Calculation macros
+\RequirePackage{ifthen} % Conditional statements
+\RequirePackage{caption} % Configure captions
+\RequirePackage{subcaption}% Defines env. subfigure and its caption
+\RequirePackage{tabularx} % Tables with expandable columns
+\RequirePackage{booktabs} % professional rules in tables
+\RequirePackage{multirow} % Multirow cells are not professional
+\RequirePackage{siunitx} % advanced management of units of measure
+\RequirePackage{float} % Use only to define new floating objects!
+% \end{macrocode}
+%
+% Package |nomencl| is loaded and a sample of nomenclature
+% groups is defined; they are mostly examples of “how to”;
+% and in particular they are models to define other
+% nomenclature groups. Notice that the string comparison
+% tests are made through the testing robust commands
+% provided by the |etoolbox| package.
+% \begin{macrocode}
+\usepackage[intoc]{nomencl}% Generate nomenclatures or glossaries
+\makenomenclature
+\renewcommand{\nomgroup}[1]{%
+\ifstrequal{#1}{A}{\item[\textbf{Roman Symbols}]}{%
+\ifstrequal{#1}{G}{\item[\textbf{Greek Symbols}]}{%
+\ifstrequal{#1}{Z}{\item[\textbf{Acronyms / Abbreviations}]}{%
+\ifstrequal{#1}{R}{\item[\textbf{Superscripts}]}{%
+\ifstrequal{#1}{S}{\item[\textbf{Subscripts}]}{%
+\ifstrequal{#1}{X}{\item[\textbf{Other Symbols}]}{}}}}}}}
+
+\renewcommand{\nompreamble}{\markboth{\nomname}{\nomname}}
+% \end{macrocode}
+%
+% It is important to note that the nomenclature
+% raw file must be processed by means of program
+% \prog{makeindex} with special options. Assuming
+% that your thesis main file is named |MyPhDthesis.tex|,
+% after compiling with pdfLaTeX, you have to open a
+% terminal, change the working directory into that
+% where your main file is stored, and
+% issue and execute the line command
+%{\small
+%\begin{verbatim}
+%makeindex -s nomencl.ist -t MyPhDthesis.nlg -o MyPhDthesis.nls MyPhDthesis.nlo
+%\end{verbatim}
+%\par}
+% Afterwards you should have your processed nomenclature
+% ready and up to date, so that by running again the
+% typesetting program your nomenclature appears in the
+% back matter; a second typesetting run, as usual, updates
+% the table of contents with the entry and page number of
+% the Nomenclature section. It is important to do this
+% action before printing the final version of the thesis;
+% you do not need to update the nomenclature every time
+% you edit one of your thesis source files.
+%
+% All this fuzz is bypassed in the sense that all typesetting
+% programs can run safe OS commands, among which \prog{makeindex},
+% in order to do all these actions by themselves if we
+% procede by closing the auxiliary file that collect
+% nomenclature entries, and run \prog{makeindex} with
+% the proper options and file names directly through the
+% “magic command” |\write18|.
+%
+% We then define a new command
+% to process the nomenclature files and print them out.
+%
+% Again the test for an empty optional argument is made by
+% means of a macro defined in |etoolbox|. When using LuaLaTeX
+% it is necessary a special treatment, because the typesetting
+% engine does not use the |\write18| functionality, but
+% accesses the operating system commands by means
+% of its own Lua facilities. The user is not obliged to
+% know these details, but this extension file must be
+% programmed accordingly.
+% \begin{macrocode}
+\newcommand{\printnomencl}[1][]{%
+\immediate\closeout\@nomenclaturefile
+\ifLuaTeX
+ \chardef\T@T@shellescape\directlua{tex.write(os.execute())}
+ \def\exec@makeindex{%
+ \directlua{os.execute("\luaescapestring
+ {makeindex -s nomencl.ist -t \jobname.nlg -o \jobname.nls \jobname.nlo}")}}
+\else
+ \def\exec@makeindex{\immediate\write18{%
+ makeindex -s nomencl.ist -t \jobname.nlg -o \jobname.nls \jobname.nlo}}
+\fi
+\exec@makeindex
+\ifblank{#1}{\printnomenclature}{\printnomenclature[#1]}%
+}
+% \end{macrocode}
+% The result is a synchronous typesetting of the nomenclature
+% in the same way as for the index.
+%
+% The bibliography by default is typeset through the facilities of
+% package |biblatex| with suitable options;
+% according to the tradition in scientific works, in particular
+% of the IEEE standards for its Transactions, the
+% references are labelled with bracketed numbers as well
+% as citations. Nevertheless some PhD students working in other
+% scientific domains ask for different styles for using |BiBTeX|
+% compatible bibliographies to be run also with |pdflatex|, or
+% bibliographies styled in a more humanistic way.
+%
+% In this case they should specify the specific option |mybibliostyle|
+% to the |toptesi| class, and the following code will not be loaded,
+% since the switch |mybibstyle| is set to `true' only when using
+% such an option. Therefore if the user uses the above option, the code
+% loads neither |biblatex| with its options, nor |csquotes|; furthermore
+% the bibliographic database remains unspecified. It is the user
+% responsibility to insert in his/her thesis preamble whatever necessary
+% to typeset his/her bibliography or bibliographies the way s/he prefers.
+% In the following code the module preloads the bibliographic database
+% |resources.bib|, if it exists; since a generic name is not recommended,
+% we suggest to name at least one of your databases with the same name
+% as the user's thesis master file with extension |.bib|; the |\jobname|
+% macro, actually contains the thesis master file. If neither
+% |resources.bib| nor |\jobname.bib| exist or the typesetting engine
+% cannot find them, it is the user's responsibility to create a |.bib|
+% file and include it in his/her master file preamble as an argument to
+% |\addbibresource| or to move an his/her existing |.bib| file(s) to the
+% main file folder.
+%
+% \begin{macrocode}
+\unless\ifmybibstyle
+ \usepackage[autostyle]{csquotes} % necessary for biblatex
+ \usepackage[backend=biber,
+ style=numeric-comp,
+ citestyle=numeric,
+ sorting=nty,
+ natbib]{biblatex} % LaTeX specific bibliography handler
+ \IfFileExists{references.bib}% bibliographic data base(s}
+ {\addbibresource{references.bib}}%
+ {\IfFileExists{\jobname.bib}%
+ {\addbibresource{\jobname.bib}}%
+ {\relax}}
+\fi
+% \end{macrocode}
+%
+% Package |imakeidx| is loaded, but it is up to the user
+% to specify command \texttt{\string\makeindex} with its
+% options; in the sample template file |toptesi-scudo-example.tex|
+% the index is made by configuring \cs{makeindex}
+% by specifying only the \textsf{intoc} option, so as to
+% have an entry for the index in the table of contents.
+% The user who wants to prepare an index for his/her thesis
+% is urged to read the |imakeidx| package documentation.
+% \begin{macrocode}
+\usepackage{imakeidx}% to generate automatic indices
+% \end{macrocode}
+%
+% Eventually while using \pdfLaTeX we require the |indentfirst|
+% package so as to indent the first paragraph after a
+% sectioning command, according to a common usage in Europe
+% and in Italy in particular.
+%
+% \begin{macrocode}
+\ifPDFTeX \usepackage{indentfirst}\fi
+\raggedbottom
+
+\AfterEndPreamble{\english}% Set English as default language
+
+% \end{macrocode}
+%
+% The |toptesi-scudo.sty| module contains also everything is
+% needed to typeset the Ph.D. title page and the disclaimer
+% page; remember that the \textsf{tipotesi=scudo} option to the
+% class sets the default language to English, and inhibits
+% loading the |topfront| extension file; therefore a
+% complete new set of commands and a complete new title
+% page environment are required to fill up the necessary
+% information.
+%
+% We start with the default values for all
+% pieces of information. Those macros that contain an empty
+% expansion are obviously for mandatory data. Those that
+% contain a text string insert default data, that can be
+% possibly modified by suitable commands. Those that
+% contain just macros insert into the title page the
+% expansions of these macros.
+% \begin{macrocode}
+\TOPfrontfalse
+
+\providecommand*\@Ndissertation{Doctoral Dissertation}
+\providecommand*\@Ndoctoralprogram{Doctoral Program in\xspace}
+\providecommand*\@programname{}
+\providecommand\@Cyclenumber{}
+\providecommand*\@title{}
+\providecommand*\@subtitle{\vspace{\stretch{1}}}
+\providecommand*\@author{}
+\providecommand*\@Nsupervisor{Supervisor}
+\providecommand*\@Nsupervisors{Supervisors}
+\newcount\@supervisornumber
+\providecommand*\@supervisorlist{}
+\providecommand\@Nexaminationcommittee{Doctoral Examination Committee:}
+\providecommand*\@Examinerlist{}
+\providecommand*\@examlocation{Politecnico di Torino}
+\providecommand*\@examinationdate{}
+\providecommand*\@creativecommons{This thesis is licensed
+under a Creative Commons License, Attribution - Noncommercial-
+NoDerivative Works 4.0 International: see \url{www.creativecommons.org}.
+The text may be reproduced for non-commercial purposes, provided that
+credit is given to the original author.}
+\providecommand\@disclaimer{\noindent I hereby declare that
+the contents and organisation of this dissertation constitute
+my own original work and does not compromise in any way the
+rights of third parties, including those relating to the
+security of personal data.}
+
+% \end{macrocode}
+% There are the user macros to change or define the
+% required data; of course the mandatory data must be
+% present in the student's thesis source file; the other
+% data may be changed, but don't need to be changed: it
+% depends on the university specifications, if any are given.
+%
+% In any case if the “examiner list” is not specified, so
+% that the default list remains empty, no label and no list
+% is typeset; therefore leaving this list empty is an easy
+% and logical method for completely omitting such a list.
+%
+% \begin{macrocode}
+\newcommand*\Ndissertation[1]{\gdef\@Ndissertation{#1}}
+\newcommand*\Ndoctoralprogram[1]{\gdef\@Ndoctoralprogram{#1\xspace}}
+\newcommand*\ProgramName[1]{\gdef\@programname{#1\xspace}}
+\newcommand*\CycleNumber[1]{\gdef\@Cyclenumber{\ifblank{#1}{}{(#1 cycle)}}}
+\renewcommand*\title[1]{\gdef\@title{#1}}
+\newcommand*\subtitle[1]{\gdef\@subtitle{\ifblank{#1}{}{\medskip\par
+ {\Large #1\par}}\vspace{\stretch{1}}}}
+\renewcommand*\author[1]{\gdef\@author{#1}}
+\newcommand*\NSupervisor[2]
+ {\gdef\@Nsupervisor{#1}\gdef\@Nsupervisors{#2}}
+\newcommand*\SupervisorList[1]{\gdef\@supervisorlist{#1}}
+\newcommand\SupervisorNumber[1]{%
+ \ifblank{#1}{\@supervisornumber=0}{\@supervisornumber=#1}}
+\newcommand\Nexaminationcommittee[1]{\gdef\@Nexaminationcommittee{#1}}
+\newcommand*\ExaminerList[1]{\gdef\@Examinerlist{#1}}
+\newcommand*\Nlocation[1]{\gdef\@examlocation{#1}}
+\newcommand*\ExaminationDate[1]{\gdef\@examinationdate{#1}}
+
+\newlength{\TPT@logospace}\TPT@logospace=3em\relax
+\newsavebox{\TPT@logobox} \setbox\TPT@logobox\hbox{}
+\newdimen\TPT@logoheight
+\newcommand*\setlogodistance[1]{\TPT@logospace=#1}
+\providecommand*{\@logosede}{}
+
+\ifcsundef{T@Tlogoheight}{%\
+ \newlength\T@Tlogoheight
+ \setlength\T@Tlogoheight{0.8\dimexpr(\paperwidth-\textwidth)/2}}{}
+
+\newcommand\PhDschoolLogo[2][\T@Tlogoheight]%
+{\def\@logosede{#2}\TPT@logoheight=#1\relax
+\ifcsvoid{@logosede}{\sbox{\TPT@logobox}{}}{\begin{lrbox}{\TPT@logobox}%
+\expandafter\fillup@TCP@logobox\@logosede,!}}
+
+\def\fillup@TCP@logobox#1,#2!{%
+ \ifblank{#1}{\end{lrbox}\ifdim\wd\TPT@logobox>\textwidth
+ \sbox\TPT@logobox{\resizebox{\textwidth}{!}{\box\TPT@logobox}}\fi}%
+ {\def\@logosede{#2}%
+ \includegraphics[height=\TPT@logoheight]{#1}\hskip\TPT@logospace
+ \expandafter\fillup@TCP@logobox\@logosede,!}}
+
+\newcommand\printloghi{\unless\ifvoid\TPT@logobox\usebox{\TPT@logobox}\fi}
+% \end{macrocode}
+% Next the disclaimer and the signature macros are defined;
+% the disclaimer text and the signature layout may be changed
+% by these commands; but if the user does not use these
+% macros, the name of the person who undersigns the disclaimer
+% text is assumed to be the thesis author and the signature
+% date is assumed to equal the examination date.
+% The \cs{Signature} macro is intended to modify the signature layout
+% contained in the internal macro \cs{@signature}; the PhD student
+% can layout the signature part of the copyright page the way s/he
+% likes best; the default definition of \cs{@signature} is an example
+% from which the student can get a general idea of what is compulsory
+% in this field. The sample file \texttt{toptesi-scudo-example.tex}
+% contains also an example of modified signature.
+%
+% Remember: the disclaimer text is very important, in the
+% sense that the student writing his/her Ph.D.\ thesis must
+% be completely aware that by undersigning that statement
+% s/he assumes any legal liability for any event that
+% might betray other people rights. A kind of
+% infringement, of course, is plagiarism. Therefore the
+% under signer must be completely aware that his/her signature
+% is not just a simple bureaucratical action.
+% \begin{macrocode}
+\newcommand\Disclaimer[1]{\gdef\@disclaimer{#1}}
+\newcommand\CClicence[1]{\gdef\@creativecommons{#1}}
+\providecommand\@signature{%
+\begin{flushright}
+\parbox{0.5\textwidth}{\centering
+\dotfill\\
+\@author\\
+Turin, \@examinationdate
+}%
+\end{flushright}}
+\newcommand\Signature[1]{\gdef\@signature{#1}}
+% \end{macrocode}
+% The |ThesisTitlePage| environment is defined; in the
+% opening commands the configuration file is read;
+% this file may contain any kind of definition or
+% redefinition by using the above commands with suitable
+% arguments.
+%
+% The data possibly read from the configuration file now
+% are available, or they may be entered in the body of the
+% title page environment |ThesisTitlePage|. If some commands
+% are repeated, the last ones, i.e.~those entered in the
+% body of the environment, prevail.
+% \begin{macrocode}
+\newenvironment{ThesisTitlePage}{% Apertura
+\InputIfFileExists{\jobname.cfg}{\relax}{\relax}%
+}{%Chiusura
+\begin{titlepage}\parindent=0pt
+{\centering
+\raisebox{-1ex}[0pt][0pt]{\makebox[\textwidth]{\printloghi}}\par
+\vspace{\baselineskip}
+\@Ndissertation\\
+\@Ndoctoralprogram \@programname\@Cyclenumber
+\bigskip
+
+{\Huge\bfseries \@title\par}
+\@subtitle
+{\Large\bfseries \@author\par}
+\smallskip
+\mbox{* * * * * *}
+\vspace{\stretch{1}}
+
+{\large\bfseries \ifcase\@supervisornumber
+\relax\or \@Nsupervisor\else\@Nsupervisors\fi\par}
+\@supervisorlist
+\par}
+
+\vspace{\stretch{1}}
+
+\ifcsvoid{@Examinerlist}{\relax}{%
+\noindent\begin{tabular}{@{}l}
+\bfseries \@Nexaminationcommittee\\
+\@Examinerlist
+\end{tabular}}
+
+\begin{center}
+\raisebox{-3\baselineskip}[0pt][0pt]{%
+\parbox{0.5\textwidth}{\centering
+\@examlocation\\
+\@examinationdate}}
+\end{center}
+\end{titlepage}
+%
+\newpage\thispagestyle{empty}
+\vspace*{\stretch{1}}
+\@creativecommons
+\vspace{3\baselineskip}
+
+\ifempty{\@keywords}{\relax}{Keywords: \@keywords\par
+\vspace{2\baselineskip}}
+
+\@disclaimer
+\vspace{3\baselineskip}
+
+\@signature}
+
+% \end{macrocode}
+% The above code is almost everything is needed to enter
+% the relevant data and to typeset the doctoral thesis
+% and the signed disclaimer. But it is wise to enter
+% some basic metadata for a reasonably well typeset \sigla{PDF}
+% file. Notice that these metadata have nothing to do
+% with the metadata required for \sigla{PDF/A} compliance; for
+% the latter metadata it is necessary to load the |pdfx|
+% package and enter the required metadata in a special
+% way that is taken care of by |pdfx|. Read the details in
+% the Italian\discretionary{-}{}{-}English documentation
+% |toptesi-it.pdf| that is part of the TOPtesi bundle.
+% \begin{macrocode}
+\providecommand*\subject{}\providecommand*\@subject{}
+\renewcommand\subject[1]{\gdef\@subject{#1}}
+\providecommand*\keywords{}\providecommand*\@keywords{}
+\renewcommand\keywords[1]{\gdef\@keywords{#1}}
+\AtBeginDocument{% Set some metadata
+ \hypersetup{%
+ pdftitle = {\@title},
+ pdfauthor = {\@author},
+ pdfsubject = {\@subject},
+ pdfkeywords= {\@keywords}
+ }
+}
+% \end{macrocode}
+%
+% The School required also a colophon where it is explained
+% how the thesis has been typeset and who are the authors
+% of the \LaTeX\ code; my name appears there because the School
+% requested it in a formal way; mentioning the TOPtesi bundle
+% might have been sufficient for this colophon.
+%
+% Of course this colophon must be typeset in the last page,
+% possibly an even one if the thesis is typeset with the
+% |twoside| option in force.
+% \begin{macrocode}
+\AtEndDocument{%
+\clearpage
+\ifbool{@twoside}%
+{\ifodd\value{page}\thispagestyle{empty}\newpage\fi}{\relax}%
+\vspace*{\stretch{1}}%
+\noindent
+\begin{tabularx}{\textwidth}{Xp{0.45\textwidth}X}
+&
+This Ph.D.\ thesis has been typeset by means of the \TeX-system
+facilities. The typesetting engine was
+\ifPDFTeX
+ \ifcsdef{pdfLaTeX}{\pdfLaTeX}{pdf\/\LaTeX}%
+\else
+ \ifLuaTeX
+ \ifcsdef{LuaLaTeX}{\LuaLaTeX}{Lua\/\LaTeX}%
+ \else
+ \ifcsdef{Xe}{\Xe\LaTeX}{Xe\/\LaTeX}
+ \fi
+\fi.
+The document class was \texttt{toptesi}, by Claudio Beccari,
+with option \texttt{tipotesi\discretionary{}{=}{=}scudo}.
+This class is available in every up-to-date and complete
+\TeX-system installation.
+&
+\end{tabularx}
+\vspace*{\stretch{2}}%
+}
+% \end{macrocode}
+
+%\iffalse
+%</topscu>
+%\fi
+%
+% \subsection{A configuration file}
+% The following code generates a sample configuration file
+% that the user can change at will after changing also its
+% name; it can be used as a template for generating a really
+% personal configuration file. Remember: this template file
+% is named |toptesi.cfg|, but in order to use it for a
+% specific thesis, whose main file is named
+% |JohnSmithMSthesis.tex|, the configuration file must be
+% named |JohnSmithMSthesis.cfg|.
+% \iffalse
+%<*topcfg>
+% \fi
+% \begin{macrocode}
+%%
+%%================================================================
+%% This file is the only file of the TOPtesi bundle that the user
+%% can modify without restrictions in order to customise the
+%% contents of this configuration file to his/her needs. The user
+%% can add or remove lines, comment or uncomment lines, change the
+%% arguments to macros, add definitions and so on.
+%% Use this file by copying the relevant section to another file
+%% to be named as the thesis main file and with extension .cfg.
+%% This bundle will try to read "\jobname.cfg"; if this file does
+%% not exist, the bundle files don't do anything. This implies that
+%% the provided file toptesi.cfg is to be used as a model, not to
+%% be used directly.
+%%================================================================
+%%
+\ifmagistrale
+ \ateneo{}%% The PoliTO name is contained in its logo
+ \facolta{}%% nessun nome di default/ no default name for PoliTO
+ \FacoltaDi{}%% nessun prefisso per la facolta'/no default faculty
+ %% label for PoliTO
+ \CorsoDiLaureaIn{Corso di Laurea in\xspace}%%
+ \TesiDiLaurea{Tesi di Laurea Magistrale}
+ \InName{in}
+ %%\retrofrontespizio{Questo testo e' soggetto alla
+ %% Creative Commons Licence}
+\fi
+\ifsecondaria
+ \relax
+\fi
+\ifScuDo
+ \PhDschoolLogo{Logo-Scudo}
+ \Ndissertation{Docoral Dissertation}
+ \Ndoctoralprogram{Doctoral Program in\xspace}
+ \NSupervisor{Supervisor}{Supervisors}
+ \SupervisorNumber{1}
+ \Nexaminationcommittee{Doctoral Examination Committee:}
+ \Nlocation{Politecnico di Torino, Turin, Italy}
+ \Disclaimer{\noindent I hereby declare that the
+ contents and organisation of this dissertation
+ constitute my own original work and does not
+ compromise in any way the rights of third parties,
+ including those relating to the security of personal
+ data.}
+ \CClicence{This thesis is licensed under a Creative Commons
+ License, Attribution - Noncommercial- NoDerivative Works 4.0
+ International: see \url{www.creativecommons.org}.
+ The text may be reproduced for non-commercial purposes,
+ provided that credit is given to the original author.}
+\fi
+% \end{macrocode}
+% \iffalse
+%</topcfg>
+% \fi
+%
+% \subsection{The \texttt{topcoman.sty} code}
+% This file may be used as an independent extension package
+% for the \texttt{report} document class, and possibly for
+% other classes.
+% \iffalse
+%<*topcmn>
+% \fi
+%
+% The new command |\DeclareSlantedCapitalGreekLetters|
+% optionally sets the capital Greek letters in math mode
+% with the glyphs taken from the math italic fonts, not
+% from the math roman fonts, as it is by default; some
+% authors prefer to use both symbols with different
+% meanings, so this command lets them do so. This may be
+% useful unless the \XeTeX\ or \LuaTeX\ typesetting engine
+% is used; in facts the Unicode math defines specific
+% commands for setting any Latin or Greek mathematical
+% letter in any possible font shape and series.
+% Actually with \XeLaTeX\ and \LuaLaTeX\ it is possible to
+% invoke the |unicode-math| package with the |style=\sigla{ISO}|
+% option; in this way the \sigla{ISO} math typesetting becomes
+% available; this includes the slanted Greek letters and
+% many other facilities necessary to fulfil the \sigla{ISO}
+% regulations for “physical sciences and technology”.
+%
+% With \pdfLaTeX\ there are available several packages
+% and fonts suitable for typesetting math according to
+% the \sigla{ISO} regulations. The fonts Libertinus together
+% with the math fonts LibertinusT1math are the best
+% choice for this task; the |isomath| package can do
+% an excellent work with other fonts; a “poor man”
+% solution with the \pdfLaTeX\ typesetting program is
+% given by the |pm-isomath| package; this latter package
+% is, in facts, a poor man approach to the problem, so
+% it has several limitations, but it completely avoids
+% the problem of loading several other math alphabets,
+% therefore avoiding to exhaust the limited number of
+% math alphabets \pdfLaTeX\ can handle.
+%
+% This |topcoman| module offers another “poor man”
+% solution only for using by default slanted capital
+% Greek letters taken from the math italic font; the
+% upright ones are still available within the |\mathrm|
+% command argument.
+% Attention: \cs{DeclareSlantedCapitalGreekLetters} is defined
+% only when using \prog{pdflatex}; with the other two engines
+% it is disabled and produces a warning.
+% \begin{macrocode}
+\RequirePackage{iftex}
+\ifPDFTeX
+\newcommand*\DeclareSlantedCapitalGreekLetters{%
+ \mathchardef\Gamma="7100
+ \mathchardef\Delta="7101
+ \mathchardef\Theta="7102
+ \mathchardef\Lambda="7103
+ \mathchardef\Xi="7104
+ \mathchardef\Pi="7105
+ \mathchardef\Sigma="7106
+ \mathchardef\Upsilon="7107
+ \mathchardef\Phi="7108
+ \mathchardef\Psi="7109
+ \mathchardef\Omega="710A
+}\else
+\newcommand*\DeclareSlantedCapitalGreekLetters{%
+\PackageWarning{toptesi}{%
+ When using LuaLaTeX or XeLaTeX specify\MessageBreak
+ option math-style=ISO to package unicode-math\MessageBreak}
+}
+\fi
+% \end{macrocode}
+% The |\ensuremath| command is defined in the \LaTeXe\
+% kernel from a certain version on; should the user employ
+% a really old \LaTeXe\ implementation, this definition
+% supplies the missing one. Should the |babel| package
+% not be loaded, then we provide the useful command
+% |\textormath| provided by |babel|. We define the text
+% version of the subscript and ensure also that the
+% |textcomp| package is loaded; of course if it is already
+% loaded the |\RequirePackage| command performs the
+% necessary tests and possibly does not load anything.
+% \begin{macrocode}
+\providecommand*\ensuremath[1]{\ifmmode#1\else$#1$\fi}%
+\providecommand*\textormath{}
+\renewcommand*\textormath{\ifmmode\expandafter\@secondoftwo\else
+ \expandafter\@firstoftwo\fi}
+\providecommand*\textsubscript{\raisebox{-0.5ex}}
+
+\ifPDFTeX
+\@ifpackageloaded{textcomp}{}{\RequirePackage{textcomp}}
+\fi
+% \end{macrocode}
+% The following commands may be already defined; should
+% they be missing they are supplied here. Most of them
+% are already defined in the Italian option to the
+% \texttt{babel} language if the thesis is typeset with
+% \textsf{pdflatex} that loads that package; these commands
+% are not predefined if the thesis is typeset with \XeLaTeX\
+% or \LuaLaTeX\ that do not load the \texttt{babel} package;
+% but remember; this package may be used as a stand alone
+% one, without the initial call by the \texttt{toptesi}
+% document class, so that the language Italian might be
+% undefined. These commands are also defined by the various
+% \sigla{ISO} math compliant packages, in particular by |pm-isomath|;
+% no problem: if they already defined they don't get redefined.
+% \begin{macrocode}
+\providecommand{\ohm}{\textormath{\textohm}{\mathrm{\Omega}}}
+\@ifpackageloaded{toptesi}{%
+\providecommand\ped{}\providecommand\ap{}%
+\renewcommand*{\ped}[1]{\textormath{\textsubscript{#1}}{_{\mathrm{#1}}}}%
+\renewcommand*{\ap}[1]{\textormath{\textsuperscript{#1}}{^{\mathrm{#1}}}}}%
+{\providecommand*{\ped}[1]{\textormath{\textsubscript{#1}}%
+ {_{\mathrm{#1}}}}%
+\providecommand*{\ap}[1]{\textormath{\textsuperscript{#1}}%
+ {^{\mathrm{#1}}}}}
+%
+\@ifpackageloaded{siunitx}{\def\unit#1{\si{\,#1}}}%
+ {\providecommand\unit{}%
+ \renewcommand\unit[1]{\ensuremath{{\mathrm{\,#1}}}}%
+ }
+\providecommand{\gei}{\ensuremath{\mathop{\mathrm{\mathstrut j}\nolimits}}}
+\providecommand{\eu}{\ensuremath{\mathop{\mathrm{e}}\nolimits}}
+\providecommand{\micro}{\textormath{\textmu}{%
+ \ifPDFTeX
+ \ifdefined\muup\muup\else\mbox{\textmu}\fi
+ \else
+ \mathup{\mu}%
+ \fi
+}}
+\providecommand{\gradi}{\textormath{\textdegree}{^\circ}}
+% \end{macrocode}
+%
+% Before this version 6.xx.yy this package used to define
+% the command |\listing| for listing program sources; those
+% definitions got very obsolete in front of several packages
+% already available for this task. For example the package
+% |listings|, very elegant also for the various configurations
+% it can use; un fortunately it works fine only for verbatim
+% sources that contain only \textsc{ascii} characters; yes,
+% it is possible the definition of special commands to typeset
+% isolated characters not belonging to the \textsc{ascii}
+% table, but it is an error prone process. Giving up the
+% niceties of |listings|, the |fancyvrb| works very fine
+% with \sigla{UNICODE} and UTF-8 encoded characters.
+%
+% For backwards compatibility we maintain the command
+% |\listing| as a user interface to the |VerbatimInput|
+% of package |fancyvrb| with an initial setting of a
+%|\small| font size.
+% \begin{macrocode}
+\RequirePackage{fancyvrb}
+\fvset{fontsize=\small}
+\let\listing\VerbatimInput
+% \end{macrocode}
+% Of course before using |\listing| the user can set any other
+% special configuration s/he desires among those usable with
+% package |fancyvrb|; the default set up shown above is good
+% for \LaTeX\ code input, as well as for any programming language, whose
+% source lines are shorter than 75--80 characters, depending
+% on the normal font size and the document text width; the user
+% can edit the source file as well as setting a smaller font
+% size than |\small|. In certain circumstances the user
+% should accept protruding lines as well as a compromise
+% between editing the source file and selecting a smaller
+% font size. This is not a bug of the package, nor a fault
+% of the algorithm; verbatim typesetting is always problematic.
+%
+% Let us come to another specific typesetting problem: the
+% double role the comma character plays in math mode: a
+% decimal separator and a punctuation mark.
+%
+% Remember that the comma as a decimal separator is
+% required for all languages except English. If you
+% use this module outside TOPtesi, but as an extension
+% of other classes or modules, it's up to you to define
+% an “intelligent comma” macro or to load either the
+% |icomma.sty| or the |ncccomma.sty| modules that define
+% such a macro: the |icomma| package defines the comma
+% as a mathematical active character that recognises if the
+% subsequent token is a space token so as to insert a
+% punctuation comma; |ncccomma| behaves more or less as
+% the macro defined in TOPtesi and recognises if the
+% following token is a digit so as to use a decimal comma.
+%
+% This particular package |topcoman| does not define any
+% intelligent comma command; therefore it does not do
+% anything for other packages; the main |toptesi.sty|
+% packages already define a form of intelligent comma,
+% therefore |topcomand| does not have to add anything to
+% |toptesi|. But if this package is used independently
+% from |toptesi|, the user has two choices: either loads
+% one of the two packages mentioned above, or, if s/he
+% is typesetting in Italian, the |italian| module for
+% |babel| already defines the intelligent comma, but its
+% definition is disabled by default; the user can turn it
+% on and off by using the commands |\IntelligentComma|
+% and |\NoIntelligentComma|.
+%
+% The solution of the solutions would be using the |siunitx|
+% package, whose command |\num| handles any fractional
+% decimal number in the proper way adding also the digit
+% triplets separation of digits when they exceed the number
+% of four before and/or after the decimal separator. In
+% many cases this might be a heavy burden to load a whole
+% complex package just for this task, but |siunitx|
+% offers many other functionalities, so that it would be
+% a good idea if the user loads that excellent package.
+%
+% The following commands are used to write the
+% “lower case” roman numerals with the small-caps font;
+% in order to avoid complications with missing fonts
+% or with math environments, we make sure to typeset these
+% numerals with script size capitals; this solution is
+% not probably the best one but it works; it typesets
+% these roman numerals with the current font; in TOPtesi
+% roman numerals are used only for folios, but in order
+% to comply with the |hyperref| module, I avoided using
+% this new macro for folios; in other situations there
+% are no problems with the choice of font shapes and
+% series. We need a robust command in order to set the
+% script math size and some attention to turn the operand
+% into uppercase letters to be typeset in script size.
+% \begin{macrocode}
+\DeclareRobustCommand*{\fakeSC}[1]{%
+{\dimen@=\f@size\p@\dimen@=0.75\dimen@
+\fontsize{\dimen@}{\f@baselineskip}\selectfont
+\expandafter{\uppercase{#1}}}}%
+\ifPDFTeX\let\simulatedSC\fakeSC\else\let\simulatedSC\textsc\fi
+% \end{macrocode}
+% For example, the \textsc{Bib\TeX} contains the string ‘ib’
+% in lowercase serifed small caps; if one wants to typeset it
+% with sans serif fonts, that lack the small caps shape,
+% the user could use the code
+%\begin{verbatim}
+%\textsf{B\simulatedSC{ib}\TeX}
+%\end{verbatim}
+% in order to get a decent approximation of small caps; this
+% poor man solution should not be necessary when using OpenType
+% fonts that have their facilities to use fake small caps in case
+% this shape was missing from the collection. This is why the
+% \cs{simulatedSC} macro is defined only if |pdfLaTeX| is being
+% used for typesetting.
+%
+% A user, Antonio Mele, suggested and requested the
+% possibility of having the figure and table names
+% inserted automatically when the |\ref| command is
+% issued. Actually this functionality is provided by
+% package |hyperref|, but, in my opinion, it works fine
+% in English, not in other languages. I do not think
+% the solution reported here solves the problems that
+% arise when a document is typeset in Italian. In any
+% case the definitions are here; they can be enabled and
+% disabled; by default they are disabled.
+%
+% For single citations the solution works fine,
+% but for range references it does not work. In Italian
+% the name must be lower case while in other languages,
+% specifically in English, the name has a capital initial.
+% Since this feature might be handy in certain
+% circumstances and annoying in other ones, this feature
+% can be turned on and off at will with the enabling
+% and disabling commands. As already said, by default the
+% feature is disabled.
+% \begin{macrocode}
+\def\ft@figure{\iflanguage{italian}{\MakeLowercase{\figurename}}%
+ {\figurename}~}
+\def\ft@table{\iflanguage{italian}{\MakeLowercase{\tablename}}%
+ {\tablename}~}
+%
+\newcommand*\EnableFigTabNames{%
+ \let\p@figure\ft@figure\let\p@table\ft@table}
+\newcommand*\DisableFigTabNames{%
+ \let\p@figure\empty\let\p@table\empty}
+%
+\DisableFigTabNames
+% \end{macrocode}
+% \iffalse
+%</topcmn>
+% \fi
+%
+%\iffalse
+%<*topmon>^^A MONOGRAFIA -- TRIENNALE
+%\fi
+%\subsection{The \texttt{monografia} module code}
+% We start by checking if certain files have ben loaded and in
+% case we load then. We check if certain switches are defined,
+% and in case we define such switches.
+% \begin{macrocode}
+\monografiatrue
+\@ifpackageloaded{etoolbox}{}{\RequirePackage{etoolbox}}
+\@ifpackageloaded{xparse}{}{\RequirePackage{xparse}}
+\@ifpackageloaded{xspace}{}{\RequirePackage{xspace}}
+
+\ifcsundef{ifclassica}{\newif\ifclassica \classicafalse}{}
+\ifcsundef{if@autoretitolo}{\newif\if@utoretitolo \@utoretitolofalse}{}
+\ifcsundef{if@ldstyle}{\newif\if@ldstyle \@ldstylefalse}{}
+\ifcsundef{if@xivpt}{\newif\if@xivpt \@xivptfalse}{}
+\ifcsundef{if@binding}{\newif\if@binding \@bindingfalse}{}
+
+\ifcsundef{ifTOPfront}{\newif\ifTOPfront \TOPfronttrue}{}
+\ifcsundef{ifevenboxes}{\newif\ifevenboxes \evenboxesfalse}{}
+% \end{macrocode}
+% We define the applicable options.
+% \begin{macrocode}
+\DeclareOption{evenboxes}{\evenboxestrue}
+\DeclareOption{cucitura}{\@bindingtrue}
+\DeclareOption{classica}{\classicatrue}
+\DeclareOption{autoretitolo}{\ifclassica\@utoretitolotrue\fi}
+\DeclareOption{oldstyle}{\ifclassica\@ldstyletrue\fi}
+\ProcessOptions\relax
+
+% \end{macrocode}
+% We define the titling commands\dots
+% \begin{macrocode}
+\def\monografia#1{\gdef\@titolo{#1}}
+\let\titolo\monografia
+\let\@stitle\empty
+\let\@subtitle\empty
+\def\sottotitolo#1{\gdef\@subtitle{#1}}
+% \end{macrocode}
+% \dots and the other setting or resetting commands to be used
+% within the |ThesisTitlePage| environment. Remember that all
+% these commands may be used within the configuration file,
+% if the user wants to use such file.
+% \begin{macrocode}
+\providecommand\@materia{}
+\def\Materia#1{\gdef\@materia{#1}}
+\let\materia\Materia
+\providecommand\@nomerelatoresingolare{}
+\providecommand\@nomerelatoreplurale{}
+\newcommand\NomeRelatore[2]{%
+ \gdef\@nomerelatoresingolare{#1}\gdef\@nomerelatoreplurale{#2}}
+\NomeRelatore{Relatore}{Relatori}
+\providecommand\@principaladviser{}
+\def\relatore#1{\gdef\@principaladviser{#1}}
+\providecommand\@secondadviser{}
+\def\secondorelatore#1{\gdef\@secondadviser{#1}}
+\providecommand\@thirdadviser{}
+\def\terzorelatore#1{\gdef\@thirdadviser{#1}}
+
+\unless\ifcsname iffemminile\endcsname
+ \newif\iffemminile\femminilefalse
+\fi
+\unless\ifcsname ifplurale\endcsname
+ \newif\ifplurale\pluralefalse
+\fi
+\providecommand\@author{}\providecommand\@@author{}
+\NewDocumentCommand\candidato{m o}{\gdef\@@author{#1}%
+\IfNoValueTF{#2}{\gdef\@author{#1}}%
+ {\gdef\@author{#1\IDlabel#2}}
+\femminilefalse\pluralefalse}
+\NewDocumentCommand\candidata{m o}{\gdef\@@author{#1}%
+\IfNoValueTF{#2}{\gdef\@author{#1}}%
+ {\gdef\@author{#1\IDlabel#2}}
+\femminiletrue\pluralefalse}
+\providecommand\@secondauthor{}
+\NewDocumentCommand\secondocandidato{m o}{%
+\IfNoValueTF{#2}{\gdef\@secondauthor{#1}}%
+ {\gdef\@secondauthor{#1\IDlabel#2}}%
+\femminilefalse\pluraletrue}
+\NewDocumentCommand\secondacandidata{m o}{%
+\IfNoValueTF{#2}{\gdef\@secondauthor{#1}}%
+ {\gdef\@secondauthor{#1\IDlabel#2}}%
+\pluraletrue}
+\providecommand\@thirdauthor{}
+\NewDocumentCommand\terzocandidato{m o}{%
+\IfNoValueTF{#2}{\gdef\@thirdauthor{#1}}%
+ {\gdef\@thirdauthor{#1\IDlabel#2}}%
+\femminilefalse\pluraletrue}
+\NewDocumentCommand\terzacandidata{m o}{%
+\IfNoValueTF{#2}{\gdef\@thirdauthor{#1}}%
+ {\gdef\@thirdauthor{#1\IDlabel#2}}%
+\pluraletrue}
+
+\providecommand\IDlabel{\\\quad matricola\ }
+
+\edef\@submitdate{{\let\today\relax\unskip\today}}
+
+
+\def\sedutadilaurea#1{\getseduta#1 !}
+\def\getseduta#1 #2!{%
+ \def\@tempA{#2}%
+ \ifx\@tempA\empty
+ \def\@submitdate{#1}%
+ \else
+ \unless\ifclassica
+ \def\@submitdate{#1 #2}%
+ \else
+ \s@dutaclassica#1 #2!%
+ \fi
+ \fi
+}%
+\def\s@dutaclassica#1 #2!{%
+ \if@ldstyle
+ \s@paranumeri#2-!%
+ \ifx\2\empty
+ \edef\@submitdate{\noexpand#1 \noexpand\oldstylenums{#2}}%
+ \else
+ \s@paranumeri#2!%
+ \edef\@submitdate{\noexpand#1
+ \noexpand\oldstylenums{\1} -- \noexpand\oldstylenums{\2}}%
+ \fi
+ \let\1\undefined
+ \let\2\undefined
+ \else
+ \def\@submitdate{#1 #2}%
+ \fi
+}
+\def\s@paranumeri#1-#2!{\def\1{#1}\def\2{#2}}%
+
+\newcommand*\NomeAnnoAccademico[1]{\gdef\AnnoAccademico{#1}}
+\@ifundefined{AnnoAccademico}{\gdef\AnnoAccademico{Anno accademico}}{}
+
+\newcommand\NomeCorsoDiStudi{Corso di laurea in\xspace}
+\providecommand\@ateneo{}
+\newcommand\ateneo[1]{\gdef\@ateneo{#1}}
+\providecommand\@NomeAteneo{}
+\newcommand\NomeAteneo[1]{\gdef\@NomeAteneo{#1}}
+\let\nomeateneo\NomeAteneo
+% \end{macrocode}
+% The following command accepts a first optional argument that
+% should contain an ordinal number, in general an uppercase
+% roman numeral, that optionally qualifies the “academic
+% structure” in charge of the degree course. The user might,
+% for example specify something as
+% |\struttura[III]{Faculty of Engineering}|, if such kind of
+% information is required.
+% \begin{macrocode}
+\providecommand\@strutturadi{}
+\newcommand\StrutturaDi[1]{\gdef\@strutturadi{#1\unskip\xspace}}
+\newcommand\struttura[2][]{\gdef\@struttura{\ifempty{#1}{}{#1 }%
+ \@strutturadi #2}}
+% \end{macrocode}
+% Generally bachelor degree courses are not developed within
+% international agreements such as Erasmus, but it may not be
+% excluded; therefore several University names and several
+% university logos might be necessary. The following is the
+% general machinery for lining several logos within a horizontal
+% box to be output at the proper moment. Remember, though, that
+% if the logos are output in the lower half of the page, the
+% top of the title page should contain the university name
+% list (if this list does not fit in one line, it is necessary
+% to use some tricks described in the Italian documentation
+% |toptesi-it.pdf|); but if the logos contain also the name
+% of the university, and are printed at the top of the page,
+% the university name list becomes unnecessary.
+% \begin{macrocode}
+\ifcsundef{TPT@logospace}{\newlength{\TPT@logospace}\TPT@logospace=3em}{}
+\ifcsundef{TPT@logobox}{\newsavebox{\TPT@logobox}}{}
+\ifcsundef{TPT@logoheight}{\newdimen\TPT@logoheight}{}
+\providecommand*\setlogodistance[1]{\TPT@logospace=#1}
+\providecommand*{\@logosede}{}
+
+\ifcsundef{T@Tlogoheight}{%\
+ \newlength\T@Tlogoheight
+ \setlength\T@Tlogoheight{0.8\dimexpr(\paperwidth-\textwidth)/2}}{}
+
+\newcommand\logosede[2][\T@Tlogoheight]%
+{\def\@logosede{#2}\TPT@logoheight=#1\relax
+\ifcsvoid{@logosede}{\sbox{\TPT@logobox}{}}{\begin{lrbox}{\TPT@logobox}%
+\expandafter\fillup@TCP@logobox\@logosede,!}}
+
+\def\fillup@TCP@logobox#1,#2!{%
+ \ifblank{#1}{\end{lrbox}\ifdim\wd\TPT@logobox>\textwidth
+ \sbox\TPT@logobox{\resizebox{\textwidth}{!}{\box\TPT@logobox}}\fi}%
+ {\def\@logosede{#2}%
+ \includegraphics[height=\TPT@logoheight]{#1}\hskip\TPT@logospace
+ \expandafter\fillup@TCP@logobox\@logosede,!}}
+
+\providecommand\printloghi{}
+\renewcommand\printloghi{%
+\unless\ifvoid\TPT@logobox\usebox{\TPT@logobox}\fi}
+% \end{macrocode}
+% The name of a company tutor may be required if the bachelor
+% degree final work is developed within an institution or
+% a company external to the university.
+% \begin{macrocode}
+\providecommand\@tutoreaziendale{}
+\def\tutoreaziendale#1{\gdef\@tutoreaziendale{#1}}
+\providecommand\@tutoreaziendalename{Supervisore Aziendale}
+\def\NomeTutoreAziendale#1{\gdef\@tutoreaziendalename{#1}}
+% \end{macrocode}
+% The following command sets up the information for a legal or
+% copyright page; this information might contain just a simple
+% statement that indicates a copyright notice or a licence that
+% specifies the clauses for the intellectual property of the
+% work. But it might also contain a disclaimer where the only
+% author takes his/her responsibility and liability for not
+% infringing any applicable law on intellectual property;
+% such disclaimer should be dated and undersigned by the (single)
+% author. Therefore within this |\retrofrontespizio| command
+% two more commands are optionally used: |\luogo| to establish
+% the location of the signature, and |\giorno| to establish a
+% signature date different from the current date. If the |\giorno|
+% is not specified, its value maintains a meaningless default
+% string, and upon testing for such a string, no location,
+% date and signature is typeset in the legal page; if the
+% current date should be used, the user should specify
+% |\giorno{}|, with a really empty argument.
+% \begin{macrocode}
+\let\@luogo\empty\def\@giorno{*}
+\def\luogo#1{\def\@luogo{#1}}%
+\def\giorno#1{\def\@giorno{#1}}
+\let\@retrofrontespizio\empty
+\newcommand\retrofrontespizio[1]{%
+\long\gdef\@retrofrontespizio{#1}}
+% \end{macrocode}
+% We restart with the definition of other data setting commands.
+% \begin{macrocode}
+\providecommand\@corsodistudi{}
+\newcommand\corsodistudi[1]{\gdef\@corsodistudi{#1}}
+\let\corsodilaurea\corsodistudi
+\providecommand\@monografia{Monografia}
+\newcommand\NomeElaborato[1]{\gdef\@monografia{#1}}
+\let\NomeMonografia\NomeElaborato
+\def\@nomecandidato{\ifclassica Laureando\else Candidato\fi}
+\def\@nomecandidata{\ifclassica Laureanda\else Candidata\fi}
+\def\@nomecandidati{\ifclassica Laureandi\else Candidati\fi}
+\def\@nomecandidate{\ifclassica Laureande\else Candidate\fi}
+% \end{macrocode}
+% The label for the candidate list requires a list of comma
+% separated names, to a maximum of four names; in order they
+% should be the singular masculine, the plural masculine, the
+% singular feminine, and the plural feminine names. No one is
+% mandatory, and the list may be completely empty if the label
+% should remain blank. The list is scanned and the names are
+% assigned to some internal variables that will be used according
+% the the gender and the number of candidates. If the list is void,
+% no name is going to be used at all, and the candidates list is
+% typeset as a centred one without any label.
+%
+% In this way, these settings are all valid:
+%\begin{ttsintassi}
+%\cs{TitoloListaCandidati}\Marg{}
+%\cs{TitoloListaCandidati}\Marg{Estudiante,Estudiantes}
+%\cs{TitoloListaCandidati}\Marg{ExamenKandidat,ExamenKandidaten,\%
+%\qquad ExamenKandidatin,ExamenKandidatinen}
+%\end{ttsintassi}
+% This command, as it may be seen, may be used also to set the
+% name list in languages different from Italian.
+% It goes by itself that if the user typesets the thesis in a
+% language where names are gender indifferent (as English,
+% Spanish, and other ones) s/he has two choices: ether s/he
+% uses the command with just two arguments, as shown above,
+% and uses only the masculine commands |\candidato|,
+% |\secondocandidato|, and |\terzocoandidato| even with names
+% of female students, or s/he specifies the same names in the
+% arguments~3 and~4, as in arguments ~1 and~2. Lacking this
+% action, the corresponding titling names are blank.
+% \begin{macrocode}
+\newcommand\TitoloListaCandidati[1]{\CandidateNames#1,,,,!}
+\def\CandidateNames#1,#2,#3,#4,!{%
+ \gdef\@nomecandidato{#1}% Masc/neutr-sing
+ \gdef\@nomecandidati{#2}% Masc/neutr-plur
+ \gdef\@nomecandidata{#3}% Fem-sing
+ \gdef\@nomecandidate{#4}% Fem-plur
+}
+\providecommand\Relatore{Relatore}
+\newcommand\AdvisorName[1]{\gdef\Relatore{#1}}
+\providecommand\Correlatore{Correlatore}
+\providecommand\Correlatori{Correlatori}
+\newcommand\CoAdvisorName[2]{\gdef\Correlatore{#1}%
+ \gdef\Correlatori{#2}}
+% \end{macrocode}
+% A new boolean is defined in order to have a suitable switch to set
+% the logo(s) “string” at the top or in the second half of the page.
+% \begin{macrocode}
+\ifcsundef{iftopTPTlogos}{\newbool{topTPTlogos}%
+ \booltrue{topTPTlogos}}{}
+% \end{macrodoe}
+% We eventually define the whole construction of the title
+% page with this new command defined by means of the |xparse|
+% package facilities. This environment accepts an optional
+% asterisk; its presence means that the logo(s) string should
+% be typeset in the lower half of the title page; differently
+% from the \LaTeX\ kernel environments that accepts an optional
+% asterisk that becomes part of the environment name, and must
+% be repeated in the closing environment statement, with the
+% |xparse| facilities the asterisk is just an argument to the
+% argument list of the opening command: therefore the source
+% file contains an opening statement of the form
+% |\begin{environment}*|, not |\begin{environment*}|. The user
+% should remember this peculiar way of specifying certain optional
+% arguments, in particular the optional “star” one.
+%
+% Another important difference is that environments defined
+% with the |xparse| facilities may receive optional and
+% mandatory arguments of many kinds in the opening command,
+% but differently form the standard \LaTeX\ kernel environments
+% such arguments are available not only in the opening commands,
+% but also in the closing ones. We actually don't use this
+% property during the definition of the |ThesisTitlePage|
+% environment, but we preferred to use the previously defined
+% switch.
+% \begin{macrocode}
+\NewDocumentEnvironment{ThesisTitlePage}{s}
+{% OPENING
+\IfBooleanTF{#1}{\boolfalse{topTPTlogos}}{\booltrue{topTPTlogos}}%
+ \begin{titlepage}
+ \oddsidemargin=\dimexpr(\oddsidemargin+\evensidemargin)/2\relax
+ \evensidemargin \oddsidemargin
+ \IfFileExists{\jobname.cfg}{\input{\jobname.cfg}%
+ }{%C
+ \PackageWarning{monografia}{No configuration file found}%
+ }%C
+}{% CLOSING
+ \ifbool{topTPTlogos}{\noindent\raisebox{-0.5em}[\z@][\z@]%
+ {\makebox[\textwidth]{\printloghi}}\par\bigskip}{}
+ \ifdefempty{\ateneo}{}{{\centering\huge \@ateneo\par}}
+ \ifdefempty{\@NomeAteneo}{}{\medskip{\centering\large
+ \expandafter\MakeUppercase\expandafter{\@NomeAteneo}\par}}
+ \ifdefempty{\@strutturadi}{}{\vspace{\stretch{0.1}}\par{\centering
+ \Large\@struttura\par}}
+ \ifdefempty{\@corsodistudi}{}{\bigskip{\centering\large
+ \NomeCorsoDiStudi\ \@corsodistudi\par}}
+ \ifdefempty{\@materia}{}{\medskip{\centering\large\@materia\par}}
+ \vspace{\stretch{0.25}}
+ {\centering\large \@monografia\par}
+ \vspace{\stretch{0.1}}
+ {\centering\LARGE\bfseries \@titolo\par}
+ \ifdefempty{\@subtitle}{\vspace{\stretch{0.3}}}{\bigskip
+ {\centering\large\@subtitle\par}}
+ \ifbool{topTPTlogos}{}{\vspace{3em}\par\centering\printloghi\par}
+ \vspace{\stretch{0.25}}
+
+\ifdefempty{\@principaladviser}{\def\BoxRelatori{}}{%
+ \def\BoxRelatori{%
+ \begin{tabular}[t]{l}%
+ \hbox{\unless\ifclassica\large\fi
+ \ifdefempty{\@secondadviser}%
+ {\let\@nomerelatore\@nomerelatoresingolare}%
+ {\let\@nomerelatore\@nomerelatoreplurale}%
+ \textbf{\@nomerelatore}}\\[.6ex]
+ \hbox{\large\textrm{\protect\@principaladviser}}%
+ \ifdefempty{\@secondadviser}{}{%
+ \ifclassica
+ \ifdefempty{\@thirdadviser}{%
+ \ifdefempty{\@secondadviser}{}{%
+ \\[1.5ex]\textbf{\Correlatore:}%
+ }
+ }{%
+ \\[1.5ex]\textbf{\Correlatori:}%
+ }
+ \fi
+ \\[.6ex]
+ \hbox{{\large\textrm{\protect\@secondadviser}}}%
+ }
+ \ifdefempty{\@thirdadviser}{}{%
+ \\[.6ex]
+ \hbox{{\large\textrm{\protect\@thirdadviser}}}%
+ }
+ \end{tabular}%
+ }%
+}
+%
+\def\print@secondocandidato{\\\relax
+ \hbox{\large\tabular{@{}l@{}}\@secondauthor\endtabular}}%
+\def\print@terzocandidato{\\\relax
+ \hbox{\large\tabular{@{}l@{}}\@thirdauthor\endtabular}}%
+
+\def\BoxCandidati{%
+ \begin{tabular}[t]{l}
+ \hbox{\unless\ifclassica\large\fi
+ \textbf{\ifplurale
+ \iffemminile\@nomecandidate\else\@nomecandidati\fi
+ \else
+ \iffemminile\@nomecandidata\else\@nomecandidato\fi
+ \fi}}\\[.6ex]
+ \hbox{\large\tabular{@{}l@{}}\@author\endtabular}%
+ \ifcsvoid{@secondauthor}{}{\print@secondocandidato}%
+ \ifcsvoid{@thirdauthor}{}{\print@terzocandidato}%
+ \end{tabular}%
+}%
+\unless\ifclassica
+ \ifdefempty{\BoxRelatori}{%Bachelor degree without supervisors
+ \noindent\makebox[\textwidth]{\tabular[t]{@{}c@{}}
+ \unless\ifclassica\large\fi
+ \textbf{\ifplurale
+ \iffemminile\@nomecandidate\else\@nomecandidati\fi
+ \else
+ \iffemminile\@nomecandidata\else\@nomecandidato\fi
+ \fi}\\[.6ex]
+ \@author
+ \ifcsvoid{@secondauthor}{}{\\ \@secondauthor}
+ \ifcsvoid{@thirdauthor}{}{\\ \@thirdauthor}
+ \endtabular}%
+ }{%
+ \unless\ifevenboxes
+ \begin{flushleft}%
+ \BoxRelatori
+ \end{flushleft}\par
+ \vspace*{-1.5\baselineskip}
+ \begin{flushright}%
+ \BoxCandidati
+ \end{flushright}%
+ \else
+ \noindent
+ \makebox[\textwidth]{\BoxRelatori\hfill\BoxCandidati}%
+ \fi}
+\else
+ \noindent
+ \makebox[\textwidth]{\BoxRelatori\hfill\BoxCandidati}%
+\fi
+\par\vspace*{\stretch{0.5}}
+\ifdefempty{\@tutoreaziendale}{\relax}{\begin{center}
+\textbf{\@tutoreaziendalename}\\[0.6ex]
+\@tutoreaziendale
+\end{center}}
+\noindent\raisebox{-\baselineskip}[0pt][0pt]{%
+ \makebox[\textwidth]{\@submitdate}}%
+\end{titlepage}\newpage
+% Legal/Copyright page
+ \ifdefempty{\@retrofrontespizio}{}{\thispagestyle{empty}%
+ \vspace*{\stretch{1}}\par
+ \@retrofrontespizio\par
+ \ifdefstring{\@giorno}{*}{}{\medskip
+ \noindent
+ \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}}lc@{}}
+ \ifdefempty{\@luogo}{}{\@luogo, }%
+ \ifdefempty{\@giorno}{\today}{\@giorno}
+ & \@@author\\[3ex]
+ & \makebox[0.5\textwidth]{\dotfill}
+ \end{tabular*}\par}
+ \newpage}
+}
+% \end{macrocode}
+% This is the end of this module code.
+%\iffalse
+%</topmon>
+%\fi
+%
+%\iffalse
+%<*topmag>^^A MAGISTRALE
+%\fi
+% \subsection{Code for \texttt{master} thesis}
+% Here we document the code for the \opz{magistrale} option.
+% It is a little more complicated than the code for other
+% thesis types, because the title page may be typeset in different
+% modes, especially for theses in the humanities domain where
+% they might be typeset in more than one volume (tome).
+%
+% We start by providing the necessary commands, without
+% duplicating those provided by the calling package |toptesi|.
+% Nevertheless this module may be used as a standalone one,
+% i.e.\ a package loaded by a different class; may be not
+% always and not with any class, but the idea is this one.
+% In facts if this module does not receive the suitable
+% settings from package |toptesi|,it is possible to call it
+% with the suitable options as explained below.
+% \begin{macrocode}
+\@ifpackageloaded{etoolbox}{}{\RequirePackage{etoolbox}}
+\@ifpackageloaded{xspace}{}{\RequirePackage{xspace}}
+\@ifpackageloaded{xparse}{}{\RequirePackage{xparse}}
+\ifcsundef{ifclassica}{\newif\ifclassica \classicafalse}{}
+\ifcsundef{if@utoretitolo}{\newif\if@utoretitolo\@utoretitolofalse}{}
+\ifcsundef{if@ldstyle}{\newif\if@ldstyle\@ldstylefalse}{}
+\ifcsundef{if@xivpt}{\newif\if@xivpt \@xivptfalse}{}
+\ifcsundef{if@binding}{\newif\if@binding\@bindingfalse}{}
+\ifcsundef{ifScuDo}{\newif\ifScuDo \ScuDofalse}{}
+\ifcsundef{ifmonografia}{\newif\ifmonografia\monografiafalse}{}
+\ifcsundef{iftriennale}{\newif\iftriennale\triennalefalse}{}
+\ifcsundef{ifmagistrale}{\newif\ifmagistrale\magistralefalse}{}
+\ifcsundef{ifdottorale}{\newif\ifdottorale\dottoralefalse}{}
+\ifcsundef{ifsecondaria}{\newif\ifsecondaria\secondariafalse}{}
+\ifcsundef{ifplurale}{\newif\ifplurale\pluralefalse}{}
+\ifcsundef{iffemminile}{\newif\iffemminile\femminilefalse}{}
+
+\magistraletrue
+
+\ifcsundef{ifTOPfront}{\newif\ifTOPfront \TOPfrontfalse
+\newif\ifevenboxes \evenboxesfalse}{}
+
+% \end{macrocode}
+% We provide for the counter |tomo| and for a new definition of
+% the command |\tomo|; this new definition does not trigger
+% the production of a title page as it does with the definition
+% of package |topfront.sty|; it accepts an optional argument,
+% the tome (arabic) number (that shall be transformed into a
+% capital roman one while typesetting the title page); if this
+% number is not specified the counter value is stepped up
+% with the |\refstepconter| macro that renders it accessible
+% to the |\label| command; otherwise a value equal to the
+% given number minus one is loaded and afterwards “refstepped”
+% up in the same way.
+%
+% Since \LaTeX\ counter settings are global, the value kept
+% in the counter remains available anyhow; therefore it is
+% not excluded that multiple tomes might be typeset in one
+% output \sigla{PDF} file to be split in separate files as described
+% in section~\ref{sec:topmagistrale}; I did not test this
+% functionality but I do not exclude it.^^A CONTROLLARE
+% \begin{macrocode}
+\ifcsundef{c@tomo}{\newcounter{tomo}{\setcounter{tomo}{0}}}{}
+\providecommand\tomo{}
+\ifcsundef{tomo}{\renewcommand\tomo[1][]{%
+ \ifstrequal{#1}{}{}{\setcounter{tomo}{\numexpr#1-1}}%
+ \refstepcounter{tomo}}}{}
+% \end{macrocode}
+%
+% We define the options that set the same switches as those set
+% by the class. If another class different from |toptesi| is used,
+% it is possible that \opz{14pt} produces errors or does not
+% produce the desired setting of the normal size to 14pt.
+% \begin{macrocode}
+\DeclareOption{evenboxes}{\evenboxestrue}
+\DeclareOption{cucitura}{\@bindingtrue}
+\DeclareOption{14pt}{\@xivpttrue}
+\DeclareOption{classica}{\classicatrue}
+\DeclareOption{autoretitolo}{\ifclassica\@utoretitolotrue\fi}
+\DeclareOption{oldstyle}{\ifclassica\@ldstyletrue\fi}
+\ProcessOptions*\relax
+% \end{macrocode}
+%
+% We define two different page styles to be used normally
+% or when the |classica| option is in force. Both redefine
+% the text grid to be more or less centred on the physical
+% page; since it is the first page, no binding correction
+% is taken care of, because the first page does
+% not suffer from the curvature and thickness of the bound
+% thesis. The headings and footers in both cases are already
+% filled up with suitable title page data, therefore their
+% space is used instead of being “wasted”.
+% \begin{macrocode}
+\def\headstrut{\vrule \@depth4\p@ \@height\z@ \@width\z@}
+\def\ps@titlepage{\let\@mkboth\@gobbletwo
+ \def\@oddfoot{\vbox to 0.05\paperheight{\vss
+ \hbox to\hsize{\hfil{\Large{\@submitdate}}\hfil}}}%
+ \let\@evenfoot\@oddfoot
+ \def\@oddhead{%
+ \vbox to\headheight{\vss\iftopTPTlogos
+ \hbox to\textwidth{%
+ \headstrut\hfil
+ \raisebox{3\baselineskip}{\usebox\TPT@logobox}\hfil\null%
+ }\fi
+ \ifcsvoid{@ateneo}{}{\vskip\smallskipamount
+ \hbox to\textwidth{\hss\LARGE\MakeUppercase{\@ateneo}\hss}}
+ \vss
+ }%
+ }%
+ \let\@evenhead\@oddhead
+ \def\chaptermark##1{}\def\sectionmark##1{}%
+}
+
+\def\ps@classica{\let\@mkboth\markboth
+ \def\@oddhead{\vbox{%
+ \setbox256=\hbox{\LARGE\MakeUppercase{\@ateneo}}
+ \unless\ifdim\wd256<\textwidth
+ \setbox256=\hbox{\resizebox{\textwidth}{!}{\box256}}%
+ \fi
+ \hbox to \hsize{\hss\box256\hss}%
+ \ifclassica
+ \hbox to \hsize{\hfil\vrule\@width\z@
+ \@height2ex\vrule\@height1.4\p@\@depth-\p@\@width50mm\hfil}%
+ \fi
+ }}%
+ \def\@oddfoot{\vbox to \dimexpr\paperheight/20\relax{\vss
+ \ifclassica
+ \hbox to \hsize{\hfil\raisebox{-.3ex}[\z@][\z@]{%
+ \vrule\@height-2.6\p@\@depth3\p@\@width
+ \dimexpr\textwidth/3}\hfil}%
+ \fi
+ \hbox to\hsize{\hfill{\Large{\@submitdate}}\hfill}}%
+ }%
+ \let\@evenhead\@oddhead
+ \let\@evenfoot\@oddfoot
+}%
+% \end{macrocode}
+%
+% Some redefinitions to handle both the heading label of
+% the authors block and the proper gender of such names.
+% \begin{macrocode}
+\newif\iffemminile
+
+\def\Candidato{\ifclassica Laureando\else Candidato\fi}
+\def\Candidata{\ifclassica Laureanda\else Candidata\fi}
+\def\Candidati{\ifclassica Laureandi\else Candidati\fi}
+\def\Candidate{\ifclassica Laureande\else Candidate\fi}
+\newcommand\TitoloListaCandidati[1]{\CandidateNames#1,,,,!}
+\def\CandidateNames#1,#2,#3,#4,!{%
+ \gdef\Candidato{#1}% Masc/neutr-sing
+ \gdef\Candidati{#2}% Masc/neutr-plur
+ \gdef\Candidata{#3}% Fem-sing
+ \gdef\Candidate{#4}% Fem-plur
+}
+
+% \end{macrocode}
+%
+% We prepare the |titolo| command. Such command accepts
+% a \emph{short title} string, no more, no less than the \LaTeX\
+% sectioning commands. It is always advisable to use short
+% titles; nevertheless when the |classica| |autoretitolo|
+% option is in force, long titles don't fit into the page
+% headings, therefore an alternative short title is desirable.
+% Long titles may be also shortened by transferring part of
+% their information to a subtitle; but this must be an
+% author's decision, it cannot be automated. Therefore
+% a |\sottotitolo| command is also provided.
+% \begin{macrocode}
+\let\@stitle\empty % default short title string
+
+\newcommand*{\titolo}[2][]{%
+\ifstrequal{#1}{}%
+ {\gdef\@stitle{#2}}{\gdef\@stitle{#1}}%
+ \gdef\@titolo{#2}%
+}%
+\def\sottotitolo#1{\gdef\@subtitle{#1}}
+
+% \end{macrocode}
+%
+% The defining commands for both the preset fixed strings
+% and the variable data strings are defined; somewhere
+% these strings receive also the preset values; some of the
+% following strings are used to modify such preset values,
+% very useful to localise these strings for a particular language.
+% \begin{macrocode}
+\let\@materia\empty
+\def\Materia#1{\def\@materia{#1}}\let\materia\Materia
+\def\relatore#1{\gdef\@principaladviser{#1}}
+\def\secondorelatore#1{\gdef\@secondadviser{#1}}
+\def\terzorelatore#1{\gdef\@thirdadviser{#1}}
+\def\sedutadilaurea#1{\getseduta#1 !}
+\def\getseduta#1 #2!{%
+ \ifstrequal{#2}{}%
+ {\def\@submitdate{#1}}%
+ {\unless\ifclassica
+ \def\@submitdate{#1 #2}%
+ \else
+ \s@dutaclassica#1 #2!%
+ \fi}
+}%
+\def\s@dutaclassica#1 #2!{%
+ \if@ldstyle
+ \s@paranumeri#2-!%
+ \ifx\2\empty
+ \edef\@submitdate{\noexpand#1 \noexpand\oldstylenums{#2}}%
+ \else
+ \s@paranumeri#2!%
+ \edef\@submitdate{\noexpand#1
+ \noexpand\oldstylenums{\1} -- \noexpand\oldstylenums{\2}}%
+ \fi
+ \let\1\undefined
+ \let\2\undefined
+ \else
+ \def\@submitdate{#1 #2}%
+ \fi
+}
+\def\s@paranumeri#1-#2!{\def\1{#1}\def\2{#2}}%
+
+\newcommand*\NomeAnnoAccademico[1]{\gdef\AnnoAccademico{#1}}
+\@ifundefined{AnnoAccademico}{\gdef\AnnoAccademico{Anno accademico}}{}
+\def\annoaccademico#1{%
+\ifclassica
+ \def\@submitdate{{\large\textsc{\AnnoAccademico}}%
+ {\Large\s@tanno#1!}}
+\else
+ \PackageWarning{toptesi}{\string\annoaccademico\space
+ is usable only when the\MessageBreak
+ `classica' option is in force}%
+ \def\@submitdate{\AnnoAccademico\ #1 ---
+ Needs the `classica' option}
+\fi}
+\def\s@tanno#1-#2!{\oldstylenums{#1}\EnDash\oldstylenums{#2}}
+
+\def\EnDash{{\settowidth{\dimen@}{\large\scshape I}%
+\setbox\tw@\hbox{2}\dimen\tw@.5\ht\tw@\advance\dimen\tw@-.5\dp\tw@
+\dimen4\dimen\tw@\advance\dimen4by.0385ex\relax
+\advance\dimen\tw@-.0385ex\relax
+\makebox[1.5\dimen@]{%
+ \vrule\@width\dimen@\@height\dimen4\@depth-\dimen\tw@}}}
+\def\corsodilaurea#1{\gdef\@corso{#1}}
+\def\ateneo#1{\gdef\@ateneo{#1}}
+\def\nomeateneo#1{\gdef\@nomeat{\expandafter\uppercase{\expandafter #1}}}
+\newcommand\facolta[2][]{\gdef\@facname{#2}\gdef\@facnumber{#1}}
+\let\struttura\facolta
+
+% \end{macrocode}
+%
+% Here we define the necessary commands to fill up a comma
+% separated list of logo graphic-file names; we define
+% everything up to the |\printlogos| command that provides
+% to printing a list of images, duly separated by adequate
+% space, all scaled to the same height, and, possibly, even
+% the whole logo string duly scaled to fit in the title page
+% width. The |\logosede| command, that can be used several
+% times with different logo file names, accepts an optional
+% argument consisting in a dimension; it is used to scale the
+% height of the logo image to the desired value, so that the
+% whole string of images does not have unusual different
+% logo heights. This dimension is preset to one seventh of
+% the |\textwidth| and on the average it is well suited. With
+% the standard |toptesi| class printed on A4 paper, such height
+% equals 25\,mm; of course on smaller paper it is proportionally
+% smaller; on American sized sheets it may be a little larger,
+% but in general it is adequate to the page size.
+% \begin{macrocode}
+\newlength{\TPT@logospace}\TPT@logospace=3em\relax
+\newsavebox{\TPT@logobox}
+\newdimen\TPT@logoheight
+\newcommand*\setlogodistance[1]{\TPT@logospace=#1}
+\providecommand*{\@logosede}{}
+
+\ifcsundef{T@Tlogoheight}{%\
+ \newlength\T@Tlogoheight
+ \setlength\T@Tlogoheight{0.8\dimexpr(\paperwidth-\textwidth)/2}}{}
+
+\newcommand\logosede[2][\T@Tlogoheight]{\def\@logosede{#2}\TPT@logoheight=#1\relax
+\ifcsvoid{@logosede}{\sbox{\TPT@logobox}{}}{\begin{lrbox}{\TPT@logobox}%
+\expandafter\fillup@TCP@logobox\@logosede,!}}
+
+\def\fillup@TCP@logobox#1,#2!{%
+\ifblank{#1}{\end{lrbox}\ifdim\wd\TPT@logobox>\textwidth
+\sbox\TPT@logobox{\resizebox{\textwidth}{!}{\box\TPT@logobox}}\fi}%
+{\def\@logosede{#2}%
+\includegraphics[height=\TPT@logoheight]{#1}\hskip\TPT@logospace
+ \expandafter\fillup@TCP@logobox\@logosede,!}}
+
+\newcommand\printloghi{\unless\ifvoid\TPT@logobox\usebox{\TPT@logobox}\fi}
+% \end{macrocode}
+%
+% Still more commands to define the necessary string data.
+% For the ID number label the same remarks made in
+% section~\ref{sec:topfront} hold true.
+% \begin{macrocode}
+\def\tutoreaziendale#1{\gdef\@tutoreaziendale{#1}}
+\newcommand\retrofrontespizio[1]{\long\gdef\@retrofrontespizio{#1}}
+\newcommand\FacoltaDi[1]{\gdef\@faculty{#1}}
+\let\StrutturaDidattica\FacoltaDi
+\newcommand\CorsoDiLaureaIn[1]{\gdef\@laureaname{#1}}
+\newcommand\TesiDiLaurea[1]{\gdef\@TesiDiLaurea{#1}}
+\newcommand\InName[1]{\gdef\@InName{#1}}
+\newcommand\CandidateName[1]{\gdef\@nomecandidato{#1}}
+\newcommand\AdvisorName[1]{\gdef\Relatore{#1}\gdef\Relatori{#1}}
+\newcommand\CoAdvisorName[1]{\gdef\Correlatore{#1}\gdef\Correlatori{#1}}
+\newcommand\TutorName[1]{\gdef\Tutore{#1}}
+\newcommand\NomeTutoreAziendale[1]{\gdef\@tutoreaziendalename{#1}}
+\newcommand\NomePrimoTomo[1]{\gdef\PrimoTomo{#1}}
+\newcommand\NomeSecondoTomo[1]{\gdef\SecondoTomo{#1}}
+\newcommand\NomeTerzoTomo[1]{\gdef\TerzoTomo{#1}}
+\newcommand\NomeQuartoTomo[1]{\gdef\QuartoTomo{#1}}
+\newcommand\IDlabel{\\\quad matricola:\xspace}
+\IfFileExists{\jobname.cfg}{\input{\jobname.cfg}}%
+ {\IfFileExists{toptesi.cfg}{\input{toptesi.cfg}}{}}
+% \end{macrocode}
+%
+% Here we define the preset strings; most of them are empty
+% strings, but some are real words; the setting commands
+% listed before can easily be used to localise such string
+% in different languages.
+% \begin{macrocode}
+\@ifundefined{@titolo}{\def\@titolo{}}{}
+
+\providecommand\@author{}\providecommand\@@author{}
+\NewDocumentCommand\candidato{m o}{\gdef\@@author{#1}%
+\IfNoValueTF{#2}{\gdef\@author{#1}}%
+ {\gdef\@author{#1\IDlabel#2}}
+\femminilefalse\pluralefalse}
+\NewDocumentCommand\candidata{m o}{\gdef\@@author{#1}%
+\IfNoValueTF{#2}{\gdef\@author{#1}}%
+ {\gdef\@author{#1\IDlabel#2}}
+\femminiletrue\pluralefalse}
+\providecommand\@secondauthor{}
+\NewDocumentCommand\secondocandidato{m o}{%
+\IfNoValueTF{#2}{\gdef\@secondauthor{#1}}%
+ {\gdef\@secondauthor{#1\IDlabel#2}}%
+\femminilefalse\pluraletrue}
+\NewDocumentCommand\secondacandidata{m o}{%
+\IfNoValueTF{#2}{\gdef\@secondauthor{#1}}%
+ {\gdef\@secondauthor{#1\IDlabel#2}}%
+\pluraletrue}
+\providecommand\@thirdauthor{}
+\NewDocumentCommand\terzocandidato{m o}{%
+\IfNoValueTF{#2}{\gdef\@thirdauthor{#1}}%
+ {\gdef\@thirdauthor{#1\IDlabel#2}}%
+\femminilefalse\pluraletrue}
+\NewDocumentCommand\terzacandidata{m o}{%
+\IfNoValueTF{#2}{\gdef\@thirdauthor{#1}}%
+ {\gdef\@thirdauthor{#1\IDlabel#2}}%
+\pluraletrue}
+\providecommand\IDlabel{\\\quad matricola\ }
+\@ifundefined{@principaladviser}{\def\@principaladviser{}}{}
+\@ifundefined{@secondadviser}{\def\@secondadviser{}}{}
+\@ifundefined{@thirdadviser}{\def\@thirdadviser{}}{}
+\@ifundefined{@tutore}{\def\@tutore{}}{}
+\@ifundefined{@nomerelatore}{\def\@nomerelatore{}}{}
+\@ifundefined{@nomecandidato}{\def\@nomecandidato{}}{}
+\@ifundefined{Candidato}{\def\Candidato{Candidato}}{}
+\@ifundefined{Candidata}{\def\Candidata{Candidata}}{}
+\@ifundefined{Candidati}{\def\Candidati{Candidati}}{}
+\@ifundefined{Candidate}{\def\Candidate{Candidate}}{}
+\@ifundefined{Relatore}{\def\Relatore{Relatore}}{}
+\@ifundefined{Relatori}{\def\Relatori{Relatori}}{}
+\@ifundefined{Correlatore}{\def\Correlatore{Correlatore}}{}
+\@ifundefined{Correlatori}{\def\Correlatori{Correlatori}}{}
+\@ifundefined{Tutore}{\def\Tutore{Tutore}}{}
+\@ifundefined{@tutoreaziendale}{\def\@tutoreaziendale{}}{}
+\@ifundefined{@tutoreaziendalename}%
+ {\def\@tutoreaziendalename{Supervisore Aziendale}}{}
+\@ifundefined{@retrofrontespizio}{\def\@retrofrontespizio{}}{}
+\@ifundefined{@subtitle}{\def\@subtitle{}}{}
+\@ifundefined{@corso}{\def\@corso{}}{}
+\@ifundefined{@ateneo}{\def\@ateneo{POLITECNICO DI TORINO}}{}
+\@ifundefined{@nomeat}{\def\@nomeat{}}{}% Nome proprio dell'ateneo
+\@ifundefined{@facolta}{\def\@facname{}}{}
+\@ifundefined{@facnumber}{\def\@facnumber{}}{}
+\@ifundefined{@faculty}{\def\@faculty{}}{}
+\@ifundefined{PrimoTomo}{\def\PrimoTomo{Tomo primo}}{}
+\@ifundefined{SecondoTomo}{\def\SecondoTomo{Tomo secondo}}{}
+\@ifundefined{TerzoTomo}{\def\TerzoTomo{Tomo terzo}}{}
+\@ifundefined{QuartoTomo}{\def\QuartoTomo{Tomo quarto}}{}
+\ifclassica
+\def\Candidato{Laureando}
+\def\Candidata{Laureanda}
+\def\Candidati{Laureandi}
+\def\Candidate{Laureande}
+\fi
+\@ifundefined{@submitdate}{\def\@submitdate{\ifcase\the\month\or%
+ Gennaio\or Febbraio\or Marzo\or Aprile\or Maggio\or Giugno\or
+ Luglio\or Agosto\or Settembre\or Ottobre\or Novembre\or Dicembre\fi
+ \space \the\year}}{}
+\@ifundefined{@TesiDiLaurea}{\def\@TesiDiLaurea{Tesi di Laurea}}{}
+\@ifundefined{@laureaname}{\def\@laureaname{Corso di Laurea in }}{}
+\@ifundefined{@InName}{\def\@InName{in}}{}
+\newbool{topTPTlogos} \booltrue{topTPTlogos}
+% \end{macrocode}
+%
+% Here the real differences take place; the environments
+% |frontespizio| and |frontespizio*| are still usable, but
+% we discourage them. Even the commands |\frontespizio| and
+% |\frontespizio*| are still usable but for even more reasons
+% we discourage their usage; they remain available for a sort
+% of backwards compatibility.
+%
+% A new environment |ThesisTitlePage| is defined that actually
+% resorts to the core command that stands behind the above
+% discouraged environments and commands. This new environment
+% uses the |xparse| commands to define it; therefore the
+% asterisk that differentiates the four old environments and
+% commands is not any more part of the environment name, but,
+% if used, must be the first token after the environment
+% opening statement, and should not be repeated with the
+% closing statement; therefore
+%\begin{verbatim}
+%% Correct usage
+%\begin{ThesisTitlePage}*
+%...
+%\end{ThesisTitlePage}
+%\end{verbatim}
+% is correct, while
+%\begin{verbatim}
+%% Wrong usage
+%\begin{ThesisTitlePage*}
+%...
+%\end{ThesisTitlePage*}
+%\end{verbatim}
+% is wrong.
+%
+% This choice was made because its programming is simpler,
+% but in view of the end user it is simpler to use: for
+% example, if the user does not use the asterisk for typesetting
+% the logos at the top of the page, and in a second time
+% s/he decides that the title page should be typeset with
+% the logos in the title page lower part, s/he has to add
+% just one asterisk to the opening statement avoiding the
+% possibility to forget its addition to the closing statement.
+% \begin{macrocode}
+\newenvironment{frontespizio*}{\boolfalse{topTPTlogos}}{\fr@ntespizio}
+
+\newenvironment{frontespizio}{%
+ \ifdefstring{\@currenvir}{frontespizio}
+ {\booltrue{topTPTlogos}}{\TPTmaybestar}
+ }{%
+ \fr@ntespizio
+ }
+
+\DeclareDocumentEnvironment{ThesisTitlePage}{s}{%
+\IfBooleanTF{#1}{\boolfalse{topTPTlogos}}{\booltrue{topTPTlogos}}%
+\InputIfFileExists{\jobname.cfg}{}{%
+ \PackageInfo{toptesi-magistrale}{No configuration file found}}
+}{\fr@ntespizio}
+% \end{macrocode}
+%
+% The following code is substantially identical to that of the
+% |topfront| package; just the statements concerning the
+% bachelor degree and the Ph.D.~degree theses have been deleted.
+% \begin{macrocode}
+\newbool{AteneoInHead}\boolfalse{AteneoInHead}
+\newcommand\TPTmaybestar[1]{\def\@tempA{#1}%
+\ifdefstring{\@tempA}{*}%
+ {\boolfalse{topTPTlogos}\booltrue{AteneoInHead}\fr@ntespizio}
+ {\booltrue{topTPTlogos}\fr@ntespizio\@tempA}
+}
+\def\fr@ntespizio{%
+\begingroup\par
+ \oddsidemargin=\dimexpr(\oddsidemargin+\evensidemargin)/2\relax
+ \evensidemargin \oddsidemargin
+\null
+\setcounter{page}{1}%
+\normalfont
+\ifclassica
+ \boolfalse{topTPTlogos}
+ \thispagestyle{classica}
+ \ifcsvoid{@ateneo}{\def\@ateneo{Manca il nome dell'ateneo}
+ }{}
+\else
+ \thispagestyle{titlepage}
+\fi
+\ifcsvoid{@ateneo}{}{\booltrue{AteneoInHead}}
+\ifcsvoid{@ateneo}{%
+ \ifbool{topTPTlogos}
+ {}{\booltrue{AteneoInHead}\def\@ateneo{Manca il nome dell'ateneo}}%
+}{%
+ \booltrue{AteneoInHead}%
+}
+
+ \ifbool{AteneoInHead}{}{%
+ {{\centering\LARGE \@ateneo\par}}
+ }
+ \ifcsvoid{@nomeat}{}
+ {\ifbool{topTPTlogos}{\vspace*{\dimexpr \headsep+2.5ex}}%
+ {\vspace*{-3ex}}%
+ {\centering\@nomeat\par}\vfill}
+
+ \begin{center}
+ {\rmfamily\mdseries
+ \ifdottorato
+ \large \@phdschool\par\medskip
+ \else
+ \ifcsvoid{@faculty}{}{%
+ \LARGE\ifx\@facnumber\empty\else\@facnumber\space\fi
+ \@faculty\unskip\xspace\@facname\par\medskip
+ }
+ \fi
+ }%
+ \ifcsvoid{@corso}{}{{\large
+ \ifdottorato
+ \@PhDname\unskip\xspace
+ \@corso\ifx\@ciclo\empty\else~--~\@ciclo\fi
+ \else
+ \@laureaname\unskip\xspace\@corso
+ \fi
+ \par}}
+ \end{center}
+ \vspace{\stretch{0.2}}
+ \begin{center}
+ \LARGE\@TesiDiLaurea%
+ \unless\ifx\empty\@materia
+ \\\@InName\\\@materia
+ \fi
+ \end{center}
+ \vspace{\stretch{0.2}}
+ \begin{center}
+ {\huge\bfseries \baselineskip=0.95em plus 1pt
+ \@titolo \par}
+ \end{center}
+ \unless\ifx\@subtitle\empty
+ \begin{center}%
+ \large\textrm{\@subtitle}\par
+ \end{center}%
+ \fi
+ \ifclassica
+ \ifnum\value{tomo}>\z@
+ \par\bigskip
+ \noindent\makebox[\textwidth]{%
+ \large\textbf{%
+ \ifcase\c@tomo%
+ \or \PrimoTomo%
+ \or \SecondoTomo%
+ \or \TerzoTomo%
+ \or \QuartoTomo%
+ \else
+ \PackageWarning{toptesi}{%
+ Counter tomo equals \the\c@tomo\MessageBreak
+ We never considered a thesis might get\MessageeBreak
+ divided in more than four volumes}%
+ \fi}}%
+ \fi
+ \vspace{1em}
+ \fi
+ \par
+ \unless\iftopTPTlogos
+ {\vfill\centering \printloghi\par}\fi
+ \vfill
+ \iffemminile
+ \def\@nomecandidato{\Candidata}%
+ \else
+ \def\@nomecandidato{\Candidato}%
+ \fi
+ \ifcsvoid{@secondauthor}{}{%
+ \iffemminile
+ \def\@nomecandidato{\Candidate}%
+ \else
+ \def\@nomecandidato{\Candidati}%
+ \fi}
+ \unless\iftriennale
+ \def\BoxRelatori{%
+
+ \begin{tabular}[t]{l}%
+ \ifclassica
+ \hbox{\textbf{\Relatore}}%
+ \else
+ \hbox{\large\bfseries
+ \ifcsvoid{@secondadviser}{\Relatore}{\Relatori}}
+ \fi\\[.6ex]
+ \hbox{\large\textrm{\protect\@principaladviser}}%
+ \ifx\@secondadviser\empty \else
+ \ifclassica
+ \ifx\@thirdadviser\empty
+ \ifx\@secondadviser\empty\else
+ \\[1.5ex]\textbf{\Correlatore:}%
+ \fi
+ \else
+ \\[1.5ex]\textbf{\Correlatori:}%
+ \fi
+ \fi
+ \\[.6ex]\hbox{{\large\textrm{\protect\@secondadviser}}}%
+ \fi
+ \ifx\@thirdadviser\empty \else
+ \\[.6ex]
+ \hbox{{\large\textrm{\protect\@thirdadviser}}}%
+ \fi
+ \end{tabular}%
+ }%
+ \def\print@secondocandidato{\\\relax
+ \hbox{\large\tabular{@{}l@{}}%
+ \@secondauthor\endtabular}}
+ \def\print@terzocandidato{\\\relax
+ \hbox{\large\tabular{@{}l@{}}%
+ \@thirdauthor\endtabular}}
+ \def\BoxCandidati{%
+ \begin{tabular}[t]{l}%
+ \hbox{\unless\ifclassica\large\fi
+ \textbf{\protect\@nomecandidato}}\\[.6ex]
+ \hbox{\large\tabular{@{}l@{}}\@author\endtabular}%
+ \ifcsvoid{@secondauthor}{}{\print@secondocandidato}%
+ \ifcsvoid{@thirdauthor}{}{\print@terzocandidato}%
+ \end{tabular}%
+ }%
+ \unless\ifdottorato
+ \unless\ifclassica
+ \unless\ifevenboxes
+ \begin{flushleft}%
+ \BoxRelatori
+ \end{flushleft}\par\vspace*{-1.5\baselineskip}
+ \begin{flushright}%
+ \BoxCandidati
+ \end{flushright}%
+ \else
+ \makebox[\textwidth]{\BoxRelatori\hfill\BoxCandidati}
+ \fi
+ \else
+ \noindent
+ \makebox[\textwidth]{%
+ \BoxRelatori\hfill\BoxCandidati}\par
+ \fi
+ \fi
+ \fi
+ \ifcsvoid{@tutoreaziendale}{}{%
+ \vfill\vfill
+ {\centering \textbf{\@tutoreaziendalename}\\[.6ex]
+ \@tutoreaziendale\par}%
+ }
+ \par\clearpage
+% \end{macrocode}
+%
+% It is useful to remind that the legal page in general is not
+% compulsory, but it is becoming frequently requested by more
+% and more universities. The user can fill up the
+% |\retrofrontespizio| argument with as many paragraphs as are
+% necessary by his/her university requirements.
+%
+% In general there is a statement claiming the intellectual
+% property of the thesis contents; very often it makes reference
+% to the Creative Commons licence that is internationally well
+% known; other international licences may me used. At the same
+% time very often a statement is needed where the thesis author
+% assumes the necessary liability for any violation of other
+% people intellectual property and/or copyright. Plagiarism and
+% lack od attribution of other people rights are the most common
+% illegal actions done by students writing their theses, and it
+% is very important that the student responsibility is underlined
+% by asking him/her to fulfil the legal obligations.
+% \begin{macrocode}
+\ifcsvoid{@retrofrontespizio}{}%
+ {\null\vfill\thispagestyle{empty}\@retrofrontespizio\par\clearpage}%
+\endgroup}
+% \end{macrocode}
+%\iffalse
+%</topmag>
+%\fi
+%
+%
+%\iffalse
+%<*topdoc>^^A DOTTORALE
+%\fi
+% \subsection{The \texttt{toptesi-dottorale} module}
+% What follows is mainly a replica of the |topfront| module
+% where useless commands have been eliminated; “useless”
+% in view of creating a title page for a Ph.D.~thesis.
+%
+% First we load the necessary packages.
+% \begin{macrocode}
+\@ifpackageloaded{etoolbox}{}{\RequirePackage{etoolbox}}
+\@ifpackageloaded{xspace}{}{\RequirePackage{xspace}}
+\@ifpackageloaded{xparse}{}{\RequirePackage{xparse}}
+% \end{macrocode}
+% Then we define, if they are not already defined, some boolean
+% switches related to the possible options. The above packages,
+% and the following switches are necessary in case this module
+% is used by itself with a different class. The module accepts
+% some options, that are declared just after these preliminary
+% definitions.
+% \begin{macrocode}
+\ifcsundef{ifclassica}{\newif\ifclassica \classicafalse}{}
+\ifcsundef{if@utoretitolo}{\newif\if@utoretitolo\@utoretitolofalse}{}
+\ifcsundef{if@ldstyle}{\newif\if@ldstyle\@ldstylefalse}{}
+\ifcsundef{if@xivpt}{\newif\if@xivpt \@xivptfalse}{}
+\ifcsundef{if@binding}{\newif\if@binding\@bindingfalse}{}
+\ifcsundef{ifdottorale}{\newif\ifdottorale\dottoralefalse}{}
+\ifcsundef{ifevenboxes}{\newif\ifevenboxes \evenboxesfalse}{}
+% \end{macrocode}
+% Using this module implies that some switches used in the
+% following commands should be set to false.
+% \begin{macrocode}
+\ifcsundef{ifTOPfront}{\newif\ifTOPfront \TOPfrontfalse}{}
+\ifcsundef{ifT@Pfrontespizio}{\newif\ifT@Pfrontespiziofalse}{}
+\ifcsundef{c@tomo}{\newcounter{tomo}\setcounter{tomo}{0}}{}
+\newif\iffemminile\newif\ifplurale
+\newif\iftriennale\triennalefalse
+\newif\ifdottorato \dottoratotrue
+
+% \end{macrocode}
+%
+% Here are the option declarations and their processing. Notice
+% that the |14pt| option implies that the calling class loads
+% some package that can set a normal size to 14pt or 14.4pt,
+% otherwise this option may produce an error or a warning;
+% in the best case it does not do anything. The |toptesi|
+% class loads such a suitable package and allows to set any
+% integer or fractional size; this package is |scrextend| and
+% the user who wants to use a normal size larger than 12pt
+% or smaller than 10pt, can resort to that package; possibly
+% that is not the only package suited for such acrobatic
+% settings, but the important point is to avoid “acrobatics”;
+% scientific books, reports, theses, and other such documents
+% are supposed to be read by adults, not by children while
+% normal sizes from 14pt on are more suited for elementary
+% school pupils. On the opposite, normal sizes smaller than
+% 10pt are difficult to read and should be avoided for
+% documents to be read continuously; it is possible to use
+% such small font sizes in footnotes, or in dictionaries,
+% but both footnotes and dictionary entries do not generally
+% occupy dozens of pages.
+% \begin{macrocode}
+\DeclareOption{evenboxes}{\evenboxestrue}
+\DeclareOption{cucitura}{\@bindingtrue}
+\DeclareOption{14pt}{\@xivpttrue}
+\DeclareOption{classica}{\classicatrue}
+\DeclareOption{autoretitolo}{\ifclassica\@utoretitolotrue\fi}
+\DeclareOption{oldstyle}{\ifclassica\@ldstyletrue\fi}
+\ProcessOptions*\relax
+% \end{macrocode}
+%
+% We now define two specific page styles, one for “normal”
+% title pages, and one for theses typeset with the |classica|
+% option in force: they are |\ps@titlepge| and |\ps@classica|.
+% \begin{macrocode}
+\def\headstrut{\vrule \@depth4\p@ \@height\z@ \@width\z@}
+\def\ps@titlepage{\let\@mkboth\@gobbletwo
+ \def\@oddfoot{\vbox to 0.05\paperheight{\vss
+ \hbox to\hsize{\hfil{\Large{\@submitdate}}\hfil}}}%
+ \let\@evenfoot\@oddfoot
+ \def\@oddhead{%
+ \vbox to\headheight{\vss\iftopTPTlogos
+ \hbox to\textwidth{%
+ \headstrut\hfil
+ \raisebox{3\baselineskip}{\usebox\TPT@logobox}\hfil\null%
+ }\fi
+ \ifcsvoid{@ateneo}{}{\vskip\smallskipamount
+ \hbox to\textwidth{\hss\LARGE\MakeUppercase{\@ateneo}\hss}}
+ \vss
+ }%
+ }%
+ \let\@evenhead\@oddhead
+ \def\chaptermark##1{}\def\sectionmark##1{}%
+}
+
+ \def\ps@classica{\let\@mkboth\markboth
+ \def\@oddhead{\vbox{%
+ \setbox256=\hbox{\LARGE\MakeUppercase{\@ateneo}}
+ \unless\ifdim\wd256<\textwidth
+ \setbox256=\hbox{\resizebox{\textwidth}{!}{\box256}}%
+ \fi
+ \hbox to \hsize{\hss\box256\hss}%
+ \ifclassica
+ \hbox to \hsize{\hfil\vrule\@width\z@
+ \@height2ex\vrule\@height1.4\p@\@depth-\p@\@width50mm\hfil}%
+ \fi
+ }}%
+ \def\@oddfoot{\vbox to \dimexpr\paperheight/20\relax{\vss
+ \ifclassica
+ \hbox to \hsize{\hfil\raisebox{-.3ex}[\z@][\z@]{%
+ \vrule\@height-2.6\p@\@depth3\p@\@width
+ \dimexpr\textwidth/3}\hfil}%
+ \fi
+ \hbox to\hsize{\hfill{\Large{\@submitdate}}\hfill}}%
+ }%
+ \let\@evenhead\@oddhead
+ \let\@evenfoot\@oddfoot
+ }%
+% \end{macrocode}
+%
+% We provide also the variant settings for when the |classica|
+% option is in force together with the |autoretitolo| one.
+% \begin{macrocode}
+\if@utoretitolo
+ \if@twoside
+%
+ \renewcommand*{\ps@headings}{\let\@mkboth\markboth%
+ \def\@oddfoot{\null \hfill \textbf{\lapagina} \hfill \null}%
+ \let\@evenfoot\@oddfoot
+ \def\@evenhead{%
+ \setbox\@intesta\hbox{\ifPDFTeX\latintext\fi
+ \footnotesize\strut\textsc{%
+ \@@author\ifcsvoid{@secondauthor}{\ et al.}: \@stitle}%
+ }%
+ \ifdim\wd\@intesta>\textwidth\headwrn{\titolo}\fi
+ \underline{\makebox[\textwidth]{\box\@intesta}}}%
+ \def\@oddhead{\ifPDFTeX\latintext\fi
+ \setbox\@intesta\hbox{%
+ \footnotesize\strut\textsl{\rightmark}}%
+ \ifdim\wd\@intesta>\textwidth \headWarn{\section}\fi%
+ \underline{\makebox[\textwidth]{\box\@intesta}}}%
+ \def\chaptermark##1{\markright{\thechapter\ -- ##1}}%
+ \def\sectionmark##1{}}%
+ \else
+ \renewcommand*{\ps@headings}{\let\@mkboth\markboth
+ \def\@oddfoot{\null \hfill \textbf{\lapagina}\hfill \null}%
+ \let\@evenfoot\empty\let\@evenhead\empty
+ \def\@oddhead{{\setbox\z@\hbox{\ifPDFTeX\latintext\fi
+ \footnotesize\textsc{%
+ \@@author\ifcsvoid{@secondauthor}{}{\ et al.}: \@stitle}}%
+ \setbox\tw@\hbox{\ifPDFTeX\latintext\fi
+ \footnotesize\textsl{\rightmark}}%
+ \dimen@=\dimexpr2em + \wd\z@ + \wd\tw@\relax
+ \ifdim\dimen@<\textwidth \relax
+ \else
+ \setbox\z@\vbox{\hsize.48\textwidth\parindent\z@
+ \raggedright
+ \ifPDFTeX\latintext\fi\footnotesize\textsc{%
+ \@@author\ifcsvoid{@secondauthor}{}{\ et al.}: \@stitle
+ }}%
+ \setbox\tw@\vbox{\hsize.48\textwidth\parindent\z@
+ \raggedleft
+ \ifPDFTeX\latintext\fi\footnotesize
+ \textsl{\rightmark}}%
+ \fi
+ \setbox\@intesta\vbox to\z@{%
+ \vss\hbox to\textwidth{\strut\box\z@\hfill\box\tw@}}%
+ \underline{\box\@intesta}}}%
+ \def\chaptermark##1{\markright{\thechapter\ -- ##1}}}
+ \fi
+\fi
+% \end{macrocode}
+% Now we define the title setting commands for both
+% title (|\titolo|) and subtitle (|\sottotitolo|) and
+% all the other commands for setting the fixed strings.
+% \begin{macrocode}
+\let\@stitle\empty
+
+\newcommand*{\titolo}[2][]{%
+\def\@tempA{#1}\ifdefempty{\@tempA}%
+ {\gdef\@stitle{#2}}{\gdef\@stitle{#1}}%
+ \gdef\@titolo{#2}%
+}%
+
+\def\sottotitolo#1{\gdef\@subtitle{#1}}
+\let\@materia\empty
+\def\Materia#1{\def\@materia{#1}}\let\materia\Materia
+\newif\ifDirettore \Direttorefalse
+\def\tutore#1{\gdef\@tutore{#1}}
+\def\direttore{\Direttoretrue\relatore}%
+\def\coordinatore{\Direttorefalse\relatore}%
+\def\QualificaDirettore#1{\gdef\@PhDdirector{#1}}%
+\def\relatore#1{\gdef\@principaladviser{#1}}
+\def\secondorelatore#1{\gdef\@secondadviser{#1}}
+\def\terzorelatore#1{\gdef\@thirdadviser{#1}}
+\def\esamedidottorato#1{\getseduta#1 !}
+\def\getseduta#1 #2!{%
+ \def\@tempA{#2}%
+ \ifx\@tempA\empty
+ \def\@submitdate{#1}%
+ \else
+ \unless\ifclassica
+ \def\@submitdate{#1 #2}%
+ \else
+ \s@dutaclassica#1 #2!%
+ \fi
+ \fi
+}%
+\def\s@dutaclassica#1 #2!{%
+ \if@ldstyle
+ \s@paranumeri#2-!%
+ \ifx\2\empty
+ \edef\@submitdate{\noexpand#1 \noexpand\oldstylenums{#2}}%
+ \else
+ \s@paranumeri#2!%
+ \edef\@submitdate{\noexpand#1
+ \noexpand\oldstylenums{\1} -- \noexpand\oldstylenums{\2}}%
+ \fi
+ \let\1\undefined
+ \let\2\undefined
+ \else
+ \def\@submitdate{#1 #2}%
+ \fi
+}
+\def\s@paranumeri#1-#2!{\def\1{#1}\def\2{#2}}%
+
+\newcommand*\NomeAnnoAccademico[1]{\gdef\AnnoAccademico{#1}}
+\@ifundefined{AnnoAccademico}{\gdef\AnnoAccademico{Anno accademico}}{}
+\def\annoaccademico#1{\ifclassica
+ \def\@submitdate{{\large\textsc{\AnnoAccademico}} {\Large\s@tanno#1!}}
+ \else
+ \PackageWarning{toptesi}{\string\annoaccademico\space
+ is usable only when the\MessageBreak
+ `classica' option is in force}%
+ \def\@submitdate{\AnnoAccademico\ #1 --- Needs the `classica' option}
+ \fi}
+\def\s@tanno#1-#2!{\oldstylenums{#1}\EnDash\oldstylenums{#2}}
+
+\def\EnDash{{\settowidth{\dimen@}{\large\scshape I}%
+\setbox\tw@\hbox{2}\dimen\tw@.5\ht\tw@\advance\dimen\tw@-.5\dp\tw@
+\dimen4\dimen\tw@\advance\dimen4by.0385ex\relax
+\advance\dimen\tw@-.0385ex\relax
+\makebox[1.5\dimen@]{%
+ \vrule\@width\dimen@\@height\dimen4\@depth-\dimen\tw@}}}
+\def\ciclodidottorato#1{\gdef\@ciclo{#1 \@cyclename}}%
+\def\corsodidottorato#1{\global\dottoratotrue
+ \global\gdef\@corso{#1}}
+\def\scuoladidottorato#1{\global\dottoratotrue
+ \gdef\@phdschool{#1}}
+\def\ateneo#1{\gdef\@ateneo{#1}}
+\def\nomeateneo#1{\gdef\@nomeat{\expandafter\uppercase{\expandafter #1}}}
+\newcommand\facolta[2][]{\gdef\@facname{#2}\gdef\@facnumber{#1}}
+\let\struttura\facolta
+% \end{macrocode}
+%
+% next we define how to handle one or more logos; even in
+% PH.D. schools there might be situations where the Ph.D.~program
+% has been carried on in several universities; it might be
+% required to set the logos of the universities where the research
+% program leading to the Ph.D. has been developed. The user commands
+% are |\logosede| and |\printloghi|; the latter does what
+% its name suggests, i.e. it prints the string of logos;
+% the former command accepts one logo file name, and queues
+% it into a logo list; this command may be used multiple times;
+% of course if there are several logos, their “string”
+% may become larger than the text width, and in this case
+% |\printloghi| shrinks the whole string (maintaining the
+% aspect ratio) so as to fit it within the measure. If the
+% logos are too many and/or they are too wide, this
+% shrinking may reduce them too much; there is no work
+% around to avoid this problem except refraining from using too
+% many and/or too wide logos.
+% \begin{macrocode}
+\newlength{\TPT@logospace}\TPT@logospace=3em\relax
+\newsavebox{\TPT@logobox}
+\newdimen\TPT@logoheight
+\newcommand*\setlogodistance[1]{\TPT@logospace=#1}
+\providecommand*{\@logosede}{}
+
+\ifcsundef{T@Tlogoheight}{%\
+ \newlength\T@Tlogoheight
+ \setlength\T@Tlogoheight{0.8\dimexpr(\paperwidth-\textwidth)/2}}{}
+
+\newcommand\logosede[2][\T@Tlogoheight]{\def\@logosede{#2}\TPT@logoheight=#1\relax
+\ifcsvoid{@logosede}{\sbox{\TPT@logobox}{}}{\begin{lrbox}{\TPT@logobox}%
+\expandafter\fillup@TCP@logobox\@logosede,!}}
+
+\def\fillup@TCP@logobox#1,#2!{%
+\ifblank{#1}{\end{lrbox}\ifdim\wd\TPT@logobox>\textwidth
+\sbox\TPT@logobox{\resizebox{\textwidth}{!}{\box\TPT@logobox}}\fi}%
+{\def\@logosede{#2}%
+\includegraphics[height=\TPT@logoheight]{#1}\hskip\TPT@logospace
+ \expandafter\fillup@TCP@logobox\@logosede,!}}
+
+\newcommand\printloghi{\unless\ifvoid\TPT@logobox\usebox{\TPT@logobox}\fi}
+% \end{macrocode}
+%
+% We keep defining macros to set fixed strings and/or variable data.
+% \begin{macrocode}
+\def\tutoreaziendale#1{\gdef\@tutoreaziendale{#1}}
+\newcommand\retrofrontespizio[1]{\long\gdef\@retrofrontespizio{#1}}
+\newcommand\FacoltaDi[1]{\gdef\@faculty{#1}}
+\let\StrutturaDidattica\FacoltaDi
+\newcommand\DottoratoIn[1]{\gdef\@PhDname{#1}}
+\newcommand\CorsoDiLaureaIn[1]{\gdef\@laureaname{#1}}
+\newcommand\TesiDiLaurea[1]{\gdef\@TesiDiLaurea{#1}}
+\newcommand\NomeMonografia[1]{\gdef\@monografia{#1}}
+\newcommand\NomeDissertazione[1]{\gdef\@dissertazione{#1}}
+\newcommand\InName[1]{\gdef\@InName{#1}}
+\newcommand\CandidateName[1]{\gdef\@nomecandidato{#1}}
+\newcommand\AdvisorName[1]{\gdef\Relatore{#1}\gdef\Relatori{#1}}
+\newcommand\CoAdvisorName[1]{\gdef\Correlatore{#1}\gdef\Correlatori{#1}}
+\newcommand\TutorName[1]{\gdef\Tutore{#1}}
+\newcommand\NomeTutoreAziendale[1]{\gdef\@tutoreaziendalename{#1}}
+\newcommand\CycleName[1]{\gdef\@cyclename{#1}}
+\newcommand\NomePrimoTomo[1]{\gdef\PrimoTomo{#1}}
+\newcommand\NomeSecondoTomo[1]{\gdef\SecondoTomo{#1}}
+\newcommand\NomeTerzoTomo[1]{\gdef\TerzoTomo{#1}}
+\newcommand\NomeQuartoTomo[1]{\gdef\QuartoTomo{#1}}
+\newcommand\IDlabel{\\matricola:\xspace}
+\IfFileExists{\jobname.cfg}{\input{\jobname.cfg}}%
+ {\IfFileExists{toptesi.cfg}{\input{toptesi.cfg}}{}}
+\@ifundefined{@cyclename}{\def\@cyclename{ciclo}}{}
+\@ifundefined{@titolo}{\def\@titolo{}}{}
+\NewDocumentCommand\candidato{m o}{\gdef\@@author{#1}%
+\IfNoValueTF{#2}{\gdef\@author{#1}}%
+ {\gdef\@author{#1\IDlabel#2}}
+\femminilefalse\pluralefalse}
+\NewDocumentCommand\candidata{m o}{\gdef\@@author{#1}%
+\IfNoValueTF{#2}{\gdef\@author{#1}}%
+ {\gdef\@author{#1\IDlabel#2}}
+\femminiletrue\pluralefalse}
+\providecommand\@secondauthor{}
+\NewDocumentCommand\secondocandidato{m o}{%
+\IfNoValueTF{#2}{\gdef\@secondauthor{#1}}%
+ {\gdef\@secondauthor{#1\IDlabel#2}}%
+\femminilefalse\pluraletrue}
+\NewDocumentCommand\secondacandidata{m o}{%
+\IfNoValueTF{#2}{\gdef\@secondauthor{#1}}%
+ {\gdef\@secondauthor{#1\IDlabel#2}}%
+\pluraletrue}
+\providecommand\@thirdauthor{}
+\NewDocumentCommand\terzocandidato{m o}{%
+\IfNoValueTF{#2}{\gdef\@thirdauthor{#1}}%
+ {\gdef\@thirdauthor{#1\IDlabel#2}}%
+\femminilefalse\pluraletrue}
+\NewDocumentCommand\terzacandidata{m o}{%
+\IfNoValueTF{#2}{\gdef\@thirdauthor{#1}}%
+ {\gdef\@thirdauthor{#1\IDlabel#2}}%
+\pluraletrue}
+
+\@ifundefined{@principaladviser}{\def\@principaladviser{}}{}
+\@ifundefined{@secondadviser}{\def\@secondadviser{}}{}
+\@ifundefined{@thirdadviser}{\def\@thirdadviser{}}{}
+\ifcsundef{@PhDdirector}{%
+ \ifDirettore\def\@PhDdirector{Direttore del corso di dottorato}\else
+ \def\@PhDdirector{Coordinatore del corso di dottorato}\fi}{}
+\@ifundefined{@tutore}{\def\@tutore{}}{}
+\@ifundefined{@nomerelatore}{\def\@nomerelatore{}}{}
+\@ifundefined{@nomecandidato}{\def\@nomecandidato{}}{}
+\@ifundefined{Candidato}{\def\Candidato{Candidato}}{}
+\@ifundefined{Candidata}{\def\Candidata{Candidata}}{}
+\@ifundefined{Candidati}{\def\Candidati{Candidati}}{}
+\@ifundefined{Candidate}{\def\Candidate{Candidate}}{}
+\@ifundefined{Relatore}{\def\Relatore{Relatore}}{}
+\@ifundefined{Relatori}{\def\Relatori{Relatori}}{}
+\@ifundefined{Correlatore}{\def\Correlatore{Correlatore}}{}
+\@ifundefined{Correlatori}{\def\Correlatori{Correlatori}}{}
+\@ifundefined{Tutore}{\def\Tutore{Tutore}}{}
+\@ifundefined{@tutoreaziendale}{\def\@tutoreaziendale{}}{}
+\@ifundefined{@tutoreaziendalename}%
+ {\def\@tutoreaziendalename{Supervisore Aziendale}}{}
+\@ifundefined{@retrofrontespizio}{\def\@retrofrontespizio{}}{}
+\@ifundefined{@subtitle}{\def\@subtitle{}}{}
+\@ifundefined{@corso}{\def\@corso{}}{}
+\@ifundefined{@ciclo}{\def\@ciclo{}}{}
+\@ifundefined{@ateneo}{\def\@ateneo{POLITECNICO DI TORINO}}{}
+\@ifundefined{@nomeat}{\def\@nomeat{}}{}% Nome proprio dell'ateneo
+\@ifundefined{@facolta}{\def\@facname{}}{}
+\@ifundefined{@facnumber}{\def\@facnumber{}}{}
+\@ifundefined{@faculty}{\def\@faculty{}}{}
+\@ifundefined{PrimoTomo}{\def\PrimoTomo{Tomo primo}}{}
+\@ifundefined{SecondoTomo}{\def\SecondoTomo{Tomo secondo}}{}
+\@ifundefined{TerzoTomo}{\def\TerzoTomo{Tomo terzo}}{}
+\@ifundefined{QuartoTomo}{\def\QuartoTomo{Tomo quarto}}{}
+\@ifundefined{@submitdate}{\def\@submitdate{\ifcase\the\month\or%
+ Gennaio\or Febbraio\or Marzo\or Aprile\or Maggio\or Giugno\or
+ Luglio\or Agosto\or Settembre\or Ottobre\or Novembre\or Dicembre\fi
+ \space \the\year}}{}
+\@ifundefined{@TesiDiLaurea}{\def\@TesiDiLaurea{Tesi di Laurea}}{}
+\@ifundefined{@phdschool}{\def\@phdschool{SCUOLA DI DOTTORATO}}{}
+\@ifundefined{@PhDname}{\def\@PhDname{Dottorato in }}{}
+\@ifundefined{@laureaname}{\def\@laureaname{Corso di Laurea in }}{}
+\@ifundefined{@dissertazione}{\def\@dissertazione{Tesi di Dottorato}}{}
+\@ifundefined{@monografia}{\def\@monografia{Monografia di Laurea}}{}
+\@ifundefined{@InName}{\def\@InName{in}}{}
+% \end{macrocode}
+%
+% We now start setting the |ThesisTitlePage| environment;
+% we use the |xparse| functionality to define it; the
+% environment accepts an optional asterisk as its first
+% and only argument, that is a single token may be entered
+% without brackets as the very first token after the
+% environment opening statement. If the user wants to use
+% this optional argument, s/he must enter
+% |\begin{ThesisTitlePage}*| with the asterisk after the
+% closing brace. The presence of the asterisk sets the
+% logo position to the title page lower half, while its
+% absence sets such position to the title page top.
+%
+% The opening commands provide also to read a configuration
+% file, if it exists in the same folder as the thesis main
+% file; such configuration file must be named \meta{thesis
+% main file name}|.cfg|. The environment body, besides the
+% possible data already retrieved from the configuration file,
+% accepts other setting commands for the title page necessary
+% and optional data; if some commands are repeated with
+% different data, the last ones prevail on the previous ones.
+% The actual title page typesetting is done by the closing
+% environment command.
+%
+% Among the setting commands there might be also the legal
+% page rendered with the |\retrofrontespizio| command; it
+% closes the recto title page, and on the verso, if the command
+% argument is void, nothing is printed except the blank verso page,
+% but if it contains something, the legal notice is printed
+% at the verso page bottom.
+% \begin{macrocode}
+\newbool{topTPTlogos}\newbool{AteneoInHead}
+
+\DeclareDocumentEnvironment{ThesisTitlePage}{s}{%
+ \IfBooleanTF{#1}{\boolfalse{topTPTlogos}\booltrue{AteneoInHead}}%
+ {\booltrue{topTPTlogos}\boolfalse{AteneoInHead}}%
+ \IfFileExists{\jobname.cfg}{\input{\jobname.cfg}}{%
+ \PackageWarning{toptesi-dottorale}{%
+ No configuration file found\MessageBreak}}
+}{%
+ \fr@ntespizio
+}
+% \end{macrocode}
+% Next we define the actual typesetting of the title page.
+% The code is substantially that of the generic module
+% |topfront| where we deleted the commands and the settings
+% related to thesis kinds that have nothing to do with
+% a generic doctoral thesis.
+% \begin{macrocode}
+\def\fr@ntespizio{%
+\begingroup\par
+ \oddsidemargin=\dimexpr(\oddsidemargin+\evensidemargin)/2\relax
+ \evensidemargin \oddsidemargin
+\null
+\setcounter{page}{1}%
+\normalfont
+\ifclassica
+ \boolfalse{topTPTlogos}
+ \thispagestyle{classica}
+ \ifcsvoid{@ateneo}{\def\@ateneo{Manca il nome dell'ateneo}
+ }{}
+\else
+ \thispagestyle{titlepage}
+\fi
+\ifcsvoid{@ateneo}{}{\booltrue{AteneoInHead}}
+\ifcsvoid{@ateneo}{%
+ \ifbool{topTPTlogos}
+ {}{\booltrue{AteneoInHead}\def\@ateneo{Manca il nome dell'ateneo}}%
+}{%
+ \booltrue{AteneoInHead}%
+}
+ \ifbool{AteneoInHead}{}{%
+ {{\centering\LARGE \@ateneo\par}}
+ }
+ \ifcsvoid{@nomeat}{}
+ {\ifbool{topTPTlogos}{\vspace*{\dimexpr \headsep+2.5ex}}{\vspace*{-3ex}}%
+ {\centering\@nomeat\par}\vfill}
+
+ \begin{center}
+ {\rmfamily\mdseries
+ \ifdottorato
+ \large \@phdschool\par\medskip
+ \else
+ \ifcsvoid{@faculty}{}{%
+ \LARGE\ifx\@facnumber\empty\else\@facnumber\space\fi
+ \@faculty\unskip\xspace\@facname\par\medskip
+ }
+ \fi
+ }%
+ \ifcsvoid{@corso}{}{{\large
+ \ifdottorato
+ \@PhDname\unskip\xspace
+ \@corso\ifx\@ciclo\empty\else~--~\@ciclo\fi
+ \else
+ \@laureaname\unskip\xspace\@corso
+ \fi
+ \par}}
+ \end{center}
+ \vspace{\stretch{0.2}}
+ \begin{center}
+ \LARGE\@dissertazione%
+ \unless\ifx\empty\@materia
+ \\\@InName\\\@materia
+ \fi
+ \end{center}
+ \vspace{\stretch{0.2}}
+ \begin{center}
+ {\huge\bfseries \baselineskip=0.95em plus 1pt
+ \@titolo \par}
+ \end{center}
+ \unless\ifx\@subtitle\empty
+ \begin{center}%
+ \large\textrm{\@subtitle}\par
+ \end{center}%
+ \fi
+ \ifclassica
+ \ifnum\value{tomo}>\z@
+ \par\bigskip
+ \noindent\makebox[\textwidth]{%
+ \large\textbf{%
+ \ifcase\c@tomo%
+ \or \PrimoTomo%
+ \or \SecondoTomo%
+ \or \TerzoTomo%
+ \or \QuartoTomo%
+ \else
+ \PackageWarning{toptesi}{%
+ Counter tomo equals \the\c@tomo\MessageBreak
+ We never considered a thesis might get
+ divided in more than four volumes}%
+ \fi}}%
+ \fi
+ \vspace{1em}
+ \fi
+ \par
+ \unless\iftopTPTlogos
+ {\vfill\centering \printloghi\par}\fi
+ \vfill
+ \iftriennale
+ \let\@nomerelatore\empty
+ \else
+ \ifdottorato
+ \edef\@nomerelatore{\@PhDdirector}%
+ \else
+ \ifcsvoid{@principaladviser}{}{%
+ \def\@nomerelatore{\Relatore}}
+ \unless\ifclassica
+ \ifcsvoid{@secondadviser}{}{%
+ \def\@nomerelatore{\Relatori}}%
+ \fi
+ \fi
+ \fi
+ \ifdottorato
+ \let\@nomecandidato\empty
+ \else
+ \iflanguage{italian}{%
+ \iffemminile
+ \def\@nomecandidato{\Candidata}%
+ \else
+ \def\@nomecandidato{\Candidato}%
+ \fi
+ \ifcsvoid{@secondauthor}{}{%
+ \iffemminile
+ \def\@nomecandidato{\Candidate}%
+ \else
+ \def\@nomecandidato{\Candidati}%
+ \fi}
+ }{}%
+ \fi
+ \iftriennale
+ \begin{center}%
+ \large\mdseries\textsc{\@author}
+ \end{center}%
+ \else
+ \def\BoxRelatori{%
+ \begin{tabular}[t]{l}%
+ \hbox{\ifclassica\else\large\fi
+ \textbf{\protect\@nomerelatore}}\\[.6ex]
+ \hbox{\large\textrm{\protect\@principaladviser}}%
+ \ifx\@secondadviser\empty \else
+ \ifclassica
+ \ifx\@thirdadviser\empty
+ \ifx\@secondadviser\empty\else
+ \\[1.5ex]\textbf{\Correlatore:}%
+ \fi
+ \else
+ \\[1.5ex]\textbf{\Correlatori:}%
+ \fi
+ \fi
+ \\[.6ex]\hbox{{\large\textrm{\protect\@secondadviser}}}%
+ \fi
+ \ifx\@thirdadviser\empty \else
+ \\[.6ex] \hbox{{\large\textrm{\protect\@thirdadviser}}}%
+ \fi
+ \end{tabular}%
+ }%
+ \def\print@secondocandidato{\\\relax
+ \hbox{\large\tabular{@{}l@{}}\@secondauthor\endtabular}}
+ \def\print@terzocandidato{\\\relax
+ \hbox{\large\tabular{@{}l@{}}\@thirdauthor\endtabular}}
+ \def\BoxCandidati{%
+ \begin{tabular}[t]{l}%
+ \hbox{\unless\ifclassica\large\fi
+ \textbf{\protect\@nomecandidato}}\\[.6ex]
+ \hbox{\large\tabular{@{}l@{}}\@author\endtabular}%
+ \ifcsvoid{@secondauthor}{}{\print@secondocandidato}%
+ \ifcsvoid{@thirdauthor}{}{\print@terzocandidato}%
+ \end{tabular}%
+ }%
+ \ifdottorato
+ \begin{center}\large
+ \textbf{\@author}\\[3em]
+ {\normalsize
+ \begin {tabular*}{\hsize}{@{\extracolsep{\fill}}ccc}
+ \ifcsvoid{@tutore}{}{\textbf{\Tutore}}
+ &\relax&
+ \ifcsvoid{@principaladviser}{}{\textbf{\@nomerelatore}}
+ \\
+ \ifcsvoid{@tutore}{}{\@tutore}
+ &\relax&
+ \ifcsvoid{@principaladviser}{}{\@principaladviser}
+ \end{tabular*}
+ }%
+ \end{center}
+ \else
+ \unless\ifclassica
+ \unless\ifevenboxes
+ \begin{flushleft}%
+ \BoxRelatori
+ \end{flushleft}\par\vspace*{-1.5\baselineskip}
+ \begin{flushright}%
+ \BoxCandidati
+ \end{flushright}%
+ \else
+ \makebox[\textwidth]{\BoxRelatori\hfill\BoxCandidati}
+ \fi
+ \else
+ \noindent
+ \makebox[\textwidth]{%
+ \BoxRelatori\hfill\BoxCandidati}\par
+ \fi
+ \fi
+ \fi
+\ifcsvoid{@tutoreaziendale}{}{%
+ \vfill\vfill
+ {\centering \textbf{\@tutoreaziendalename}\\[.6ex]
+ \@tutoreaziendale\par}}
+ \par\clearpage
+% Legal page
+ \ifcsvoid{@retrofrontespizio}{}%
+ {\null\vfill\thispagestyle{empty}\@retrofrontespizio\par\clearpage}%
+\endgroup}
+% \end{macrocode}
+%\iffalse
+%</topdoc>
+%\fi
+%
+% \subsection{The \texttt{toptesi-sss} module code}
+% The module for typesetting the high-school final-work
+% title-page starts here. We avoid using a |.def| file and put
+% all necessary commands in one file.
+%
+% First we load the described packages using different loading
+% schemes for \pdfLaTeX\ vs. \LuaLaTeX\ or \XeLaTeX.
+%
+%\iffalse
+%<*topsss>^^A SECONDARIA
+%\fi
+% \begin{macrocode}
+%%
+%%%% Math fonts and AMS extensions (|fontspec| is already loaded)
+\secondariatrue
+\ifPDFTeX
+ \@ifpackageloaded{newtxmath}{}%
+ {\@ifpackageloaded{newpxmath}{}%
+ {%
+ \RequirePackage{amsmath,amssymb,amsthm}%
+ }%
+ }%
+\else
+ \RequirePackage{amsmath,amsthm}
+ \RequirePackage{unicode-math}
+\fi
+\RequirePackage{xcolor} % Intelligent colors
+\RequirePackage{xspace} % Intelligent space
+\RequirePackage{xparse} % Command and environment advanced definitions
+\RequirePackage{calc} % Calculation macros
+\RequirePackage{ifthen} % Conditional statements
+\RequirePackage{booktabs} % professional rules in tables
+\RequirePackage{multirow} % Multirow table cells are not professional
+\RequirePackage[autostyle]{csquotes} % necessary for biblatex
+\ifPDFTeX \RequirePackage{indentfirst}\fi
+\raggedbottom
+% \end{macrocode}
+%
+% We initialise the internal macros to the default values; most
+% of them are just empty strings.
+% \begin{macrocode}
+\providecommand*\@SSSLogo{}
+\providecommand*\@tiposcuola{}
+\providecommand*\@indirizzomiur{}
+\providecommand*\@opzionemiur{}
+\providecommand*\@nomescuola{}
+\providecommand*\@sedescuola{}
+\providecommand*\@annoscolastico{}
+
+\providecommand*\@Ntesina{Tesina di maturit\`a}
+\providecommand*\@title{}
+\providecommand*\@subtitle{}
+
+\ifcsundef{ifemminile}{\newif\iffemminile\femminilefalse}{}
+\providecommand*\@Ncandidato{\iffemminile Studentessa\else
+ Studente\fi}
+\providecommand*\@author{}
+\providecommand*\@Npresidente{Presidente di commissione}
+\providecommand*\@presidente{}
+\providecommand*\@numerocommissione{}
+
+\newcommand*\SSSLogo[1]{\gdef\@SSSLogo{#1}}
+\newcommand*\NomeTesina[1]{\gdef\@Ntesina{#1}}
+\newcommand*\IndirizzoMiur[1]{\gdef\@indirizzomiur{#1}}
+\newcommand*\OpzioneMiur[1]{\gdef\@opzionemiur{#1}}
+\newcommand*\TipoScuola[1]{\gdef\@tiposcuola{#1}}
+\newcommand*\SedeScuola[1]{\gdef\@sedescuola{#1}}
+\newcommand*\NomeScuola[1]{\gdef\@nomescuola{#1}}
+\newcommand*\AnnoScolastico[1]{\gdef\@annoscolastico{#1}}
+\newcommand*\NomeCandidato[1]{\gdef\@Ncandidato{#1}}
+
+\newcommand*\titolo[1]{\gdef\@title{#1}}
+\newcommand*\sottotitolo[1]{\gdef\@subtitle{\ifblank{#1}{}%
+ {\medskip\par{\Large #1\par}}%
+ \vspace{\stretch{1}}}}
+
+\NewDocumentCommand\studente{m o}{\gdef\@@author{#1}%
+\IfNoValueTF{#2}{\gdef\@author{#1}}%
+ {\gdef\@author{#1\IDlabel#2}}\femminilefalse}
+\NewDocumentCommand\studentessa{m o}{\gdef\@@author{#1}%
+\IfNoValueTF{#2}{\gdef\@author{#1}}%
+ {\gdef\@author{#1\IDlabel#2}}\femminiletrue}
+\newcommand*\IDlabel{\\\normalfont Classe\ }
+\newcommand*\Presidente[1]{\gdef\@presidente{#1}}
+\newcommand*\NumeroCommissione[1]{\gdef\@numerocommissione{#1}}
+% \end{macrocode}
+%
+% The following code certainly does not hurt, but it was
+% necessary during the preliminary testing.
+% \begin{macrocode}
+\newcommand*\ifBlank{\expandafter\ifblank\expandafter}
+% \end{macrocode}
+% The environment |FrontespizioTesina| is being defined here.
+% No optional arguments are requested, therefore it is not
+% necessary to use the defining commands of package |xparse|.
+% The environment starts by reading the configuration file
+% |jobname.cfg| if it exists. Nothing is done if such file
+% does not exist, not even an info message; after all the
+% configuration file is optional.
+% \begin{macrocode}
+\newenvironment{FrontespizioTesina}{%
+\InputIfFileExists{\jobname.cfg}{\relax}{\relax}
+}{%
+% \end{macrocode}
+%
+% After this preliminary test the |titlepage| environment is
+% opened and the layout assembly starts. First the information
+% on the school; if the school generic name has been omitted
+% among the mandatory user commands, the string “Manca il tipo
+% di scuola” is printed in its place, so that the user is
+% directly reminded of the mandatory nature of this piece of
+% data. On the opposite if the Ministry of education data are
+% missing, nothing is done. After these mandatory and optional
+% data are printed, a couple of horizontal lines are typed so
+% as to mark the end of the title page heading.
+% \begin{macrocode}
+\begin{titlepage}\parindent=0pt
+\centering
+\raisebox{0.025\textheight}[0pt][0pt]{\parbox[b]{\textwidth}{%
+\centering
+\ifBlank{\@tiposcuola}{Manca il tipo di scuola}{\@tiposcuola}%
+\ifBlank{\@indirizzomiur}{\relax}{\space--\space\@indirizzomiur}%
+\ifBlank{\@opzionemiur}{\relax}{\space--\space\@opzionemiur}\par
+\vspace{-1ex}
+\makebox[0.5\textwidth]{\rule{0.50\textwidth}{0.4\p@}}\par
+\vspace{-1.5ex}
+\makebox[0.25\textwidth]{\rule{0.25\textwidth}{0.8\p@}}\par
+% \end{macrocode}
+%
+% After this heading the proper name of the school is printed,
+% possibly with its real address.
+% \begin{macrocode}
+\medskip
+
+\textsc{\@nomescuola}}}\par
+\null\hfill\ifBlank{\@sedescuola}{\relax}{%
+\raisebox{0.5\baselineskip}[0pt][0pt]{%
+\parbox{0.4\textwidth}{\raggedleft\@sedescuola}}}\par
+\vspace{\stretch{1}}
+% \end{macrocode}
+%
+% Next the name of the document and its title and subtitle
+% are set: the title in |\Large| boldface font, while the subtitle
+% in normal size.
+% \begin{macrocode}
+{\large \@Ntesina\par}
+\vspace{\stretch{0.5}}
+
+{\Large\textbf{\@title}\par}
+{\vspace{0.5\baselineskip}
+
+\normalsize\@subtitle\par}
+% \end{macrocode}
+%
+% If a file name is specified for the graphic file that
+% contains the school logo, such image is inserted in the
+% title page.
+% \begin{macrocode}
+\ifBlank{\@SSSLogo}%
+ {\vspace{\stretch{1}}}%
+ {\includegraphics[height=30mm]{\@SSSLogo}}\par\vspace{\stretch{1}}
+% \end{macrocode}
+%
+% The examining committee chairperson name and the Ministry
+% of education committee ID number are typeset within a
+% |minipage|. Another |minipage| contains the student's name.
+% Pay attention: the names of the student and of the president
+% are typeset in bold face small caps if the default fonts have
+% this typeface; if the chosen fonts do not have this typeface
+% the actual used typeface is bold roman.
+% \begin{macrocode}
+\begin{minipage}[t]{0.45\textwidth}\flushleft
+\ifBlank{\@presidente}{}{\@Npresidente\\
+{\bfseries\scshape\@presidente}\par
+\vspace{\baselineskip}}
+
+\ifBlank{\@numerocommissione}{}{Commissione numero\\
+\textbf{\@numerocommissione}}
+\end{minipage}
+\hfill
+\begin{minipage}[t]{0.45\textwidth}\flushright
+\@Ncandidato\\
+{\bfseries\scshape\@author}
+\end{minipage}
+
+\vspace{\stretch{1}}
+
+% \end{macrocode}
+%
+% Eventually the school year is printed with an initial string
+% `Anno scolastico'. This terminates the title page; the
+% environment is closed and the page ejected.
+% \begin{macrocode}
+\raisebox{-0.05\textheight}[0pt][0pt]{%
+\parbox[t]{\textwidth}{\centering
+\makebox[0.25\textwidth]{\hrulefill}\\[\medskipamount]
+Anno scolastico \@annoscolastico}}
+\end{titlepage}
+\clearpage}%%
+%%
+\endinput
+% \end{macrocode}
+% This is the end of this module code.
+%\iffalse
+%</topsss>
+%\fi
+%
+% \Finale
+% \endinput
+%
+\endinput
+%%%%%% Recent progress
+%%% (version 6.2.04 2018-05-05) With TeXLive 2018 diagnostic messages
+% on errors in the LaTeX kernel are more efficient and some of them
+% were notified, while until 2017 no notice was issued. The source
+% code was revised in order to eliminate those little nasty bugs.
+%
+%%% (version 6.2.01 2018-04-30) The main structure introduced with
+% previous versions and their minor versions remains untouched,
+% but a new option has been added in order to modify the bibliography
+% style when typesetting theses for the PoliTO Doctoral School ScuDo.
+% The specific module was developed having in mind theses in the
+% scientific domains covered by the IEEE Transactions; of course
+% not all doctoral theses deal with those domains, therefore the
+% bibliography style should be changeable according to the styles
+% used in other scientific domains.
+%
+%%% (version 6.1.8 -- 2017-10-15) Extended version 5.92.xx in order
+% to modularise the whole bundle; this requires the key=value options
+% in order to smoothly handle the various new options, especially those
+% that offer the user the new environment ThesisTitlePage
+% (FrontespizioTesi for high school tesina); a new environment SDbox
+% to produce figures and tables and any other possible floating body,
+% defined through package float, with their captions on a side,
+% possibly protruding into the external margin; in any case the SD
+% box can be used by itself without using the corresponding floating
+% environment. Modules available for different thesis types include
+% high school tesina, bachelor, master, doctoral theses, the doctoral
+% thesis title page for the Doctorate School of Politecnico di Torino;
+% custom and frontespizio key-value options are available for a totally
+% hand made title page, and a title page typeset by means of the
+% external package frontespizio by Enrico Gregorio; backwards
+% compatibility with the previous version is almost always maintained
+% for both title pages; even the ID number of the candidates is
+% maintained, although with a slightly different modern interface,
+% since the xparse package facilities are used to define some of the
+% new commands and environments. The a4paper paper size is
+% maintained as the default one, although alla paper sizes available
+% to the report/book/article class can be used (this required a loto
+% of thought, because the xkeyval package documentations require
+% thoughtful interpretation.
+%%%% (version 6.2.07 of 2018/11/12) Added checks in order to avoid loading
+% an older toptesi.sty package compared to the toptesi.cls. It avoids
+% any possible conflict with hacked toptesi.sty files, or even with
+% obsolete versions, still going around in Internet, that date back
+% to the old times when the toptesi.cls file did not yet exist (versions
+% 2.xxxx or older).
+%%%% (version 6.2.09 of 2018/11/20) Loaded the filecontents package in oder
+% to allow overwriting of the metadata file needed for PDF/A compliance.
+%%%% (version 6.2.10 of 2018/12/30) Adjusted information about PDF/A color
+% profile compliance after the |pdfx| package has been upgraded to
+% version 1.6.1 on 2018/12/22.
+%%%% (version 6.3.00 of 2019-03-09) Modified the toptesi-magistrale.sty
+% module in order to have a working set of commands to set
+% the candidates' list heading in a proper way with any number (<4)
+% of candidates of any sex; previous to this version this module did not
+% accept the commands \CandidateNames and \TitoloListaCandidati.
+%%%% (version 6.3.05 of 2019-07-01) redefined the \chapter command,
+% and adapted the corresponding declarations and commands, to exploit
+% the new functionalities. Such new functionalities depend on the
+% package xparse new (may be not that new, but new for me) syntax
+% that allows to declare the optional argument descriptors so as to
+% inherit the values of other arguments.Such syntax avoids a lot of
+% fragile tests, and is very handy. \ No newline at end of file