% \iffalse meta-comment
%
% attinormativi.dtx
%
% Documented source for the `attinormativi' LaTeX class.
% Sorgente documentato per la classe LaTeX `attinormativi'.
%
% Copyright (C) 2026 Federico Gallo <gallofede75@gmail.com>
%
% This work may be distributed and/or modified under the conditions of
% the LaTeX Project Public License, either version 1.3c of this license
% or (at your option) any later version.
% The latest version of this license is at:
%   https://www.latex-project.org/lppl.txt
% This work has the LPPL maintenance status `maintained'.
% The Current Maintainer of this work is Federico Gallo.
%
% This work consists of the files:
%   attinormativi.dtx   (this file)
%   attinormativi.ins
% and the derived files:
%   attinormativi.cls
%
% \fi
%
% \iffalse
%<*driver>
\ProvidesFile{attinormativi.dtx}
  [2026/05/17 v1.1 Documented source for attinormativi class]
\documentclass[11pt,a4paper]{ltxdoc}
\usepackage{iftex}
\ifPDFTeX
  \usepackage[utf8]{inputenc}
  \usepackage[T1]{fontenc}
  \usepackage{lmodern}
\else
  \usepackage{fontspec}
  \setmainfont{Latin Modern Roman}
  \setsansfont{Latin Modern Sans}
  \setmonofont{Latin Modern Mono}
\fi
\usepackage[italian]{babel}
\addto\captionsitalian{\renewcommand{\abstractname}{Abstract}}
\usepackage[
  a4paper,
  top=25mm, bottom=25mm,
  inner=38mm, outer=24mm,
  marginparwidth=33mm,
  marginparsep=3mm,
  headheight=14pt
]{geometry}
\usepackage[dvipsnames,svgnames]{xcolor}
\definecolor{accentcolor}{HTML}{2B4D8E}
\definecolor{codebg}     {HTML}{F5F5F5}
\definecolor{notabg}  {HTML}{FFF8DC}
\definecolor{warnbg}  {HTML}{FFF0E0}
\definecolor{warnframe}{HTML}{C0602A}
\definecolor{rulecolor}  {HTML}{CCCCCC}
\usepackage{hologo}
\usepackage{booktabs}
\usepackage{array}
\usepackage{longtable}
\usepackage{enumitem}
\usepackage{ragged2e}
\newcolumntype{L}[1]{>{\RaggedRight\arraybackslash}p{#1}}
\setlist[itemize] {noitemsep, topsep=0.4ex, leftmargin=1.8em}
\setlist[enumerate]{noitemsep, topsep=0.4ex, leftmargin=1.8em}
\usepackage{tcolorbox}
\tcbuselibrary{skins,breakable}
\newtcolorbox{notabox}[1][Nota]{%
  enhanced, breakable,
  colback=notabg, colframe=accentcolor,
  fonttitle=\bfseries\small, title={#1},
  left=4pt, right=4pt, top=3pt, bottom=3pt, boxrule=0.5pt,
  before=\smallskip, after=\smallskip
}
\newtcolorbox{warnbox}[1][Attenzione]{%
  enhanced, breakable,
  colback=warnbg, colframe=warnframe,
  fonttitle=\bfseries\small, title={#1},
  left=4pt, right=4pt, top=3pt, bottom=3pt, boxrule=0.5pt,
  before=\smallskip, after=\smallskip
}

\newcommand*{\pkg}[1]{\textsf{#1}}
\newcommand*{\cls}[1]{\textsf{#1}}
\newcommand*{\opt}[1]{\texttt{#1}}
\providecommand*{\meta}[1]{\textlangle\textit{#1}\textrangle}
\newenvironment{cmdtable}[1][Comando]{%
  \vspace{0.4ex}\small\sloppy
  \begin{longtable}{L{0.46\linewidth} L{0.48\linewidth}}
  \toprule
  \textbf{#1} & \textbf{Descrizione} \\
  \midrule\endhead
  \bottomrule\endlastfoot
}{%
  \end{longtable}\vspace{0.2ex}
}
\newcommand*{\cmdrow}[2]{\texttt{#1} & #2 \\[0.15ex]}
\EnableCrossrefs
\CodelineIndex
\RecordChanges

\usepackage{hyperref}
\hypersetup{%
  colorlinks=true,
  linkcolor=accentcolor,
  citecolor=accentcolor,
  urlcolor=accentcolor,
  pdfborder={0 0 0},
  pdftitle={attinormativi --- Sorgente documentato},
  pdfsubject={Classe LaTeX per atti normativi italiani},
  pdfkeywords={LaTeX, atti normativi, diritto, italiano, CTAN}
}

\begin{document}
  \DocInput{attinormativi.dtx}
  \PrintChanges
  \PrintIndex
\end{document}
%</driver>
% \fi
%
% \changes{v1.1}{2026/05/17}{Versione stabile.}

% \GetFileInfo{attinormativi.dtx}
%
% \DoNotIndex{\newcommand,\renewcommand,\NewDocumentCommand}
% \DoNotIndex{\begin,\end,\par,\vspace,\hspace,\noindent}
% \DoNotIndex{\textbf,\textit,\textrm,\texttt,\emph}
% \DoNotIndex{\small,\large,\Large,\huge,\Huge,\normalsize,\normalfont}
% \DoNotIndex{\centering,\clearpage,\phantomsection}
% \DoNotIndex{\label,\ref,\nameref,\addcontentsline}
% \DoNotIndex{\setcounter,\the,\value,\refstepcounter,\stepcounter}
% \DoNotIndex{\ifx,\empty,\else,\fi,\begingroup,\endgroup}
% \DoNotIndex{\RequirePackage,\LoadClass,\ProvidesClass,\NeedsTeXFormat}
% \DoNotIndex{\DeclareOption,\ProcessOptions,\CurrentOption}
% \DoNotIndex{\newif,\newcounter,\newlist,\newenvironment}
% \DoNotIndex{\AtBeginDocument,\@ifpackageloaded,\@starttoc}
% \DoNotIndex{\protected@edef,\@currentlabelname,\@dottedtocline}
%
% \title{La classe \textsf{attinormativi}\\[0.3ex]
%        \large Sorgente documentato --- Versione \fileversion}
% \author{Federico Gallo\\\texttt{gallofede75@gmail.com}}
% \date{\filedate}
%
% \maketitle
%
% \begin{abstract}
% \smallskip
% The class \cls{attinormativi} provides a complete typographic framework
% for drafting Italian normative acts: laws, decrees, regulations,
% statutes, resolutions, and similar documents. It manages the six-level
% hierarchical structure typical of the Italian legislative tradition
% (\emph{Book}, \emph{Title}, \emph{Chapter}, \emph{Section},
% \emph{Article}, \emph{Paragraph}), the institutional title page,
% dedicated indexes (articles, annexes, definitions), draft mode with
% editorial notes, and optional integration with the \pkg{cleveref}
% package for Italian-language cross-references.
%
% \bigskip
% \smallskip
% La classe \cls{attinormativi} fornisce un framework tipografico completo
% per la composizione di atti normativi italiani: leggi, decreti, regolamenti,
% statuti, delibere e documenti assimilabili. Gestisce la struttura gerarchica
% a sei livelli tipica della tradizione legislativa italiana (\emph{Libro},
% \emph{Titolo}, \emph{Capo}, \emph{Sezione}, \emph{Articolo}, \emph{Comma}),
% il frontespizio istituzionale, gli indici dedicati (articoli, allegati,
% definizioni), la modalità bozza con note redazionali e l'integrazione
% opzionale con il pacchetto \pkg{cleveref} per i riferimenti incrociati
% in italiano.
%
% \end{abstract}
%
% \tableofcontents
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \section{Introduzione}
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% La classe \cls{attinormativi} è costruita sopra la classe standard
% \cls{book} ed è compatibile con pdf\LaTeX{}, \hologo{XeLaTeX} e
% \hologo{LuaLaTeX}.
%
% La classe introduce:
% \begin{itemize}
%   \item una gerarchia strutturale a sei livelli corrispondente alla
%         tradizione legislativa italiana;
%   \item comandi per i metadati dell'atto e generazione automatica
%         del frontespizio;
%   \item numerazione automatica e manuale, con isolamento del numero
%         manuale in un gruppo \TeX{} per non alterare il contatore interno;
%   \item riferimenti incrociati tra articoli e commi, con supporto
%         nativo per il pacchetto \pkg{cleveref};
%   \item un glossario delle definizioni con indice separato;
%   \item liste tipizzate per le enumerazioni normative
%         (\emph{lettere} e \emph{numeri});
%   \item tre comandi tipizzati per le clausole finali ricorrenti;
%   \item allegati con numerazione automatica alfabetica e indice;
%   \item un indice specifico degli articoli;
%   \item modalità bozza con note redazionali a blocco e in linea;
%   \item opzioni di classe per la famiglia tipografica, i margini
%         e l'impaginazione fronte/retro.
% \end{itemize}
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \section{Requisiti e installazione}
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% \subsection{Motori di composizione}
%
% La classe è compatibile con pdf\LaTeX{}, \hologo{XeLaTeX} e
% \hologo{LuaLaTeX}. Si raccomanda \TeX{} Live 2020 o successivo oppure
% MiK\TeX{} 21 o successivo.
%
% \subsection{Pacchetti richiesti}
%
% Tutti i pacchetti elencati sono inclusi in una installazione standard
% di \TeX{} Live o MiK\TeX{}:
%
% \begin{cmdtable}[Pacchetto]
%   \cmdrow{iftex}    {Rilevamento del motore}
%   \cmdrow{inputenc} {Codifica input UTF-8 (solo pdf\LaTeX{})}
%   \cmdrow{fontenc}  {Codifica font T1 (solo pdf\LaTeX{})}
%   \cmdrow{lmodern}  {Latin Modern --- serif e sansserif; incluso nel kernel}
%   \cmdrow{fontspec} {Font OpenType per \hologo{XeLaTeX}/\hologo{LuaLaTeX}}
%   \cmdrow{geometry} {Impostazione dei margini}
%   \cmdrow{babel}    {Localizzazione italiana}
%   \cmdrow{microtype}{Ottimizzazione microtypografica}
%   \cmdrow{xcolor}   {Colori per le note redazionali}
%   \cmdrow{xparse}   {Sintassi avanzata per i comandi (solo kernel < 2020-10-01)}
%   \cmdrow{titlesec} {Formattazione dei titoli di sezione}
%   \cmdrow{chngcntr} {Gestione dei contatori}
%   \cmdrow{enumitem} {Liste personalizzate}
%   \cmdrow{hyperref} {Riferimenti ipertestuali e metadati PDF}
% \end{cmdtable}
%
% \begin{notabox}[Nota --- Latin Modern]
% La classe utilizza esclusivamente la famiglia \emph{Latin Modern},
% disponibile in qualsiasi installazione standard di \TeX{} Live e MiK\TeX{}
% senza dipendenze aggiuntive. Con pdf\LaTeX{} viene caricato il pacchetto
% \pkg{lmodern}; con \hologo{XeLaTeX} e \hologo{LuaLaTeX} i font OpenType
% corrispondenti (\emph{Latin Modern Roman}, \emph{Latin Modern Sans},
% \emph{Latin Modern Mono}) sono selezionati tramite \pkg{fontspec}.
% Le varianti serif e sansserif appartengono alla medesima famiglia e
% garantiscono coerenza tipografica in entrambe le modalità.
% \end{notabox}
%
% \subsection{Installazione}
%
% Per una installazione locale (singolo progetto), copiare
% \texttt{attinormativi.cls} nella stessa cartella del file \texttt{.tex}.
%
% Per una installazione utente permanente, copiare il file nella
% directory TEXMF locale, ad esempio:
% \begin{verbatim}
%   TEXMFHOME/tex/latex/attinormativi/
% \end{verbatim}
% e aggiornare il database dei file:
% \begin{verbatim}
%   mktexlsr
% \end{verbatim}
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \section{Opzioni della classe}
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% \subsection{Opzione \opt{bozza}}
%
% L'opzione \opt{bozza} attiva la modalità bozza: le note redazionali
% inserite con |\notaredaz| e |\notaredazinline| diventano
% visibili nel documento compilato. In assenza di tale opzione le note
% non compaiono nel PDF.
%
% \begin{cmdtable}[Opzione]
%   \cmdrow{bozza}{Attiva le note redazionali e il banner di bozza}
% \end{cmdtable}
%
% \subsection{Opzione \opt{serif} / \opt{sansserif}}
%
% Controlla la famiglia tipografica del documento.
%
% \begin{cmdtable}[Opzione]
%   \cmdrow{serif (default)}
%         {Latin Modern Roman --- tutti i motori}
%   \cmdrow{sansserif}
%         {Latin Modern Sans --- tutti i motori}
% \end{cmdtable}
%
% In entrambe le modalità la sillabazione italiana e la giustificazione
% rimangono pienamente attive.
%
% \subsection{Opzione \opt{simplex} / \opt{duplex}}
%
% Controlla l'impaginazione fronte/retro.
%
% \begin{cmdtable}[Opzione]
%   \cmdrow{simplex (default)}
%         {Impaginazione solo fronte; alias: \opt{oneside}}
%   \cmdrow{duplex}
%         {Impaginazione fronte/retro; alias: \opt{twoside}}
% \end{cmdtable}
%
% \begin{warnbox}[Nota implementativa --- duplex e keyval/geometry]
% La classe inietta le stringhe \texttt{twoside}/\texttt{oneside}
% nell'argomento esplicito di |\LoadClass|, non tramite
% |\PassOptionsToClass|. Questo evita il conflitto con
% \pkg{keyval}/\pkg{geometry} che si verifica quando quelle stringhe
% raggiungono \pkg{keyval} dopo la sua inizializzazione.
% \end{warnbox}
%
% \subsection{Opzioni di margine}
%
% Le opzioni \opt{left=}, \opt{right=}, \opt{top=}, \opt{bottom=}
% consentono di sovrascrivere i margini predefiniti direttamente nella
% dichiarazione della classe.
%
% \begin{cmdtable}[Margine]
%   \cmdrow{left}   {35\,mm (default)}
%   \cmdrow{right}  {30\,mm (default)}
%   \cmdrow{top}    {25\,mm (default)}
%   \cmdrow{bottom} {25\,mm (default)}
% \end{cmdtable}
%
% Esempio:
% \begin{verbatim}
%   \documentclass[left=40mm, right=25mm, top=30mm]{attinormativi}
% \end{verbatim}
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \section{Comandi e ambienti}
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% \subsection{Metadati dell'atto}
%
% \DescribeMacro{\autoritaatto}
% \DescribeMacro{\tipoatto}
% \DescribeMacro{\numeroatto}
% \DescribeMacro{\dataatto}
% \DescribeMacro{\titoloatto}
% \DescribeMacro{\oggettoatto}
% I sei comandi di metadato si dichiarano nel preambolo del documento,
% prima di |\begin{document}|. Tutti sono opzionali: le voci non
% impostate non compaiono nel frontespizio.
%
% \begin{cmdtable}
%   \cmdrow{\textbackslash autoritaatto\{testo\}}{Ente o autorità emanante}
%   \cmdrow{\textbackslash tipoatto\{testo\}}    {Tipo dell'atto}
%   \cmdrow{\textbackslash numeroatto\{testo\}}  {Numero identificativo}
%   \cmdrow{\textbackslash dataatto\{testo\}}    {Data in forma libera}
%   \cmdrow{\textbackslash titoloatto\{testo\}}  {Titolo ufficiale}
%   \cmdrow{\textbackslash oggettoatto\{testo\}} {Oggetto sintetico o rubrica}
% \end{cmdtable}
%
% \subsection{Frontespizio}
%
% \DescribeMacro{\frontespizioatto}
% Il comando |\frontespizioatto| genera una pagina titolo (\texttt{titlepage})
% con i metadati impostati, centrata e priva di numero di pagina.
% Va inserito immediatamente dopo |\begin{document}|.
%
% \DescribeMacro{\maketitle}
% La classe definisce |\maketitle| come alias di |\frontespizioatto|
% per compatibilità con editor visivi, template engine e script Pandoc.
%
% \subsection{Struttura gerarchica}
%
% \DescribeMacro{\libro}
% \DescribeMacro{\titolo}
% \DescribeMacro{\capo}
% \DescribeMacro{\sezione}
% \DescribeMacro{\articolo}
% \DescribeMacro{\comma}
% La classe fornisce sei comandi strutturali, tutti con la stessa
% sintassi:
% \begin{verbatim}
%   \comando[numero-manuale]{testo del titolo}[label]
% \end{verbatim}
%
% \begin{cmdtable}
%   \cmdrow{\textbackslash libro[n]\{t\}[l]}
%         {Libro --- livello 1, \texttt{\textbackslash part}; numerazione romana}
%   \cmdrow{\textbackslash titolo[n]\{t\}[l]}
%         {Titolo --- livello 2, \texttt{\textbackslash chapter}; numerazione romana}
%   \cmdrow{\textbackslash capo[n]\{t\}[l]}
%         {Capo --- livello 3, \texttt{\textbackslash section}; numerazione romana}
%   \cmdrow{\textbackslash sezione[n]\{t\}[l]}
%         {Sezione --- livello 4, \texttt{\textbackslash subsection}; numerazione romana}
%   \cmdrow{\textbackslash articolo[n]\{t\}[l]}
%         {Articolo --- livello 5, \texttt{\textbackslash subsubsection}; numerazione araba}
%   \cmdrow{\textbackslash comma[n]\{testo\}[l]}
%         {Comma --- livello 6, \texttt{\textbackslash paragraph}; numerazione araba}
% \end{cmdtable}
%
% Il primo argomento opzionale \meta{n} forza un numero specifico
% \emph{senza} alterare il contatore interno: l'elemento successivo
% con numerazione automatica riprende dalla progressione corretta.
%
% \begin{warnbox}[Nota implementativa --- ripristino del contatore]
% I comandi strutturali con numero manuale isolano la modifica del contatore
% in un gruppo \TeX{} (\cs{begingroup}/\cs{endgroup}). Poiché i contatori
% \LaTeX{} sono globali, l'incremento automatico eseguito dal comando
% strutturale (|\part|, |\chapter| ecc.) avviene \emph{prima} del ripristino
% esplicito tramite |\setcounter|. Il valore salvato in |\AN@saved@counter|
% è il valore \emph{antecedente} all'incremento, cosicché il ripristino
% rimette il contatore allo stato precedente all'intera emissione,
% garantendo la corretta progressione automatica successiva.
% \end{warnbox}
%
% \subsection{Ambienti di corredo}
%
% \DescribeEnv{preambolo}
% \DescribeEnv{relazione}
% Gli ambienti \texttt{preambolo} e \texttt{relazione} generano
% capitoli non numerati con voce nell'indice generale.
%
% \subsection{Disposizioni finali tipizzate}
%
% \DescribeMacro{\entrataInVigore}
% \DescribeMacro{\abrogazioni}
% \DescribeMacro{\normatransitoria}
% I tre comandi generano automaticamente un articolo con titolo fisso
% e un comma con il testo fornito.
%
% \begin{cmdtable}
%   \cmdrow{\textbackslash entrataInVigore[n]\{t\}[l]}
%         {Articolo «Entrata in vigore»}
%   \cmdrow{\textbackslash abrogazioni[n]\{t\}[l]}
%         {Articolo «Abrogazioni»}
%   \cmdrow{\textbackslash normatransitoria[n]\{t\}[l]}
%         {Articolo «Norma transitoria»}
% \end{cmdtable}
%
% \subsection{Riferimenti incrociati}
%
% \DescribeMacro{\artref}
% \DescribeMacro{\articoloeref}
% \DescribeMacro{\commaref}
% \DescribeMacro{\artcomma}
% \DescribeMacro{\articolocomma}
% \DescribeMacro{\artcommaref}
%
% \begin{cmdtable}
%   \cmdrow{\textbackslash artref\{l\}}              {«art.~N»}
%   \cmdrow{\textbackslash articoloeref\{l\}}         {«articolo~N»}
%   \cmdrow{\textbackslash commaref\{l\}}             {«comma~N»}
%   \cmdrow{\textbackslash artcomma\{l1\}\{l2\}}      {«art.~N, comma~M»}
%   \cmdrow{\textbackslash articolocomma\{l1\}\{l2\}} {«articolo~N, comma~M»}
%   \cmdrow{\textbackslash artcommaref\{l\}}          {Riferimento combinato tramite label unica}
% \end{cmdtable}
%
% La classe supporta inoltre il pacchetto \pkg{cleveref} con nomi
% italiani per tutti i livelli strutturali. Se \pkg{cleveref} è stato
% caricato dall'utente prima di |\begin{document}|, le definizioni
% vengono attivate automaticamente in |\AtBeginDocument|.
%
% \subsection{Glossario delle definizioni}
%
% \DescribeEnv{definizioni}
% \DescribeMacro{\definizione}
% \DescribeMacro{\definizioneref}
% \DescribeMacro{\defref}
% \DescribeMacro{\indicedefinizioni}
%
% L'ambiente \texttt{definizioni} fornisce un elenco tipograficamente
% formattato di termini con la rispettiva definizione; le voci sono
% numerate con lettere minuscole a), b), c)\ldots{} e il termine viene
% composto in grassetto. Ciascuna voce viene indicizzata automaticamente.
%
% \begin{cmdtable}
%   \cmdrow{definizioni}                               {Ambiente elenco definizioni}
%   \cmdrow{\textbackslash definizione\{nome\}\{t\}[l]}{Voce con indicizzazione automatica}
%   \cmdrow{\textbackslash definizioneref\{l\}}        {Citazione del termine in corsivo}
%   \cmdrow{\textbackslash defref\{l\}}                {Alias di \texttt{\textbackslash definizioneref}}
%   \cmdrow{\textbackslash indicedefinizioni}           {Indice delle definizioni}
% \end{cmdtable}
%
% \subsection{Liste normative}
%
% \DescribeEnv{lettere}
% \DescribeEnv{numeri}
% Due ambienti di lista predefiniti adeguati alla struttura degli
% atti normativi:
%
% \begin{cmdtable}[Ambiente]
%   \cmdrow{lettere}{Lista alfabetica: a), b), c)\ldots}
%   \cmdrow{numeri} {Lista numerica: 1), 2), 3)\ldots}
% \end{cmdtable}
%
% \subsection{Allegati}
%
% \DescribeMacro{\allegato}
% \DescribeMacro{\allegatoref}
% \DescribeMacro{\indiceallegati}
%
% \begin{cmdtable}
%   \cmdrow{\textbackslash allegato[id]\{t\}[l]}
%         {Allegato con numerazione automatica (A, B\ldots) o manuale}
%   \cmdrow{\textbackslash allegatoref\{l\}}
%         {«Allegato X»}
%   \cmdrow{\textbackslash indiceallegati}
%         {Indice degli allegati}
% \end{cmdtable}
%
% \begin{notabox}[Nota --- larghezza della colonna numerica nell'indice degli allegati]
% La voce |\l@ANallegato| usa una larghezza fissa di \texttt{10.5em} per
% la colonna del numero. Titoli di allegato eccezionalmente lunghi possono
% sforare il margine destro. In tal caso è sufficiente ridefinire il comando
% nel preambolo del documento:
% \begin{verbatim}
%   \renewcommand*{\l@ANallegato}{\@dottedtocline{1}{0pt}{12em}}
% \end{verbatim}
% \end{notabox}
%
% \subsection{Indice degli articoli}
%
% \DescribeMacro{\indicearticoli}
% Il comando |\indicearticoli| genera un capitolo separato con l'elenco
% di tutti gli articoli e rimando alla pagina.
%
% \subsection{Modalità bozza}
%
% \DescribeMacro{\bozzainfo}
% \DescribeMacro{\notaredaz}
% \DescribeMacro{\notaredazinline}
%
% \begin{cmdtable}
%   \cmdrow{\textbackslash bozzainfo}
%         {Banner «VERSIONE DI BOZZA» con data di compilazione}
%   \cmdrow{\textbackslash notaredaz\{t\}}
%         {Nota a blocco con riquadro e numerazione progressiva}
%   \cmdrow{\textbackslash notaredazinline\{t\}}
%         {Nota breve in linea, evidenziata in rosso}
%   \cmdrow{\textbackslash ifANbozza}
%         {Booleano pubblico per codice condizionale}
% \end{cmdtable}
%
% \subsection{Nomi strutturali ridefinibili}
%
% \DescribeMacro{\ANLibroName}
% \DescribeMacro{\ANTitoloName}
% \DescribeMacro{\ANCapoName}
% \DescribeMacro{\ANSezioneName}
% \DescribeMacro{\ANArticoloName}
% \DescribeMacro{\ANCommaName}
% \DescribeMacro{\ANAllegatoName}
%
% I nomi stampati nei titoli e negli indici possono essere ridefiniti
% nel preambolo del documento, ad esempio per adattare la classe a
% ordinamenti diversi da quello italiano:
%
% \begin{verbatim}
%   \renewcommand*{\ANCapoName}{Sezione}
% \end{verbatim}
%
% \subsection{Diagnostica}
%
% \DescribeMacro{\ANclassversion}
% La macro |\ANclassversion| espone la stringa di versione della classe
% (ad es.\ \texttt{v1.1 (2026/05/17)}) per uso nei documenti o negli
% script di verifica.
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \section{Esempio minimo}
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% L'esempio seguente illustra il flusso completo di un atto normativo
% minimo, comprensivo di indici, definizioni e allegato.
%
% \begin{verbatim}
% \documentclass[bozza, serif, simplex, 12pt]{attinormativi}
%
% \autoritaatto{Comune di Esempiopoli}
% \tipoatto{Regolamento}
% \numeroatto{3}
% \dataatto{17 maggio 2026}
% \titoloatto{Regolamento per la gestione degli spazi pubblici}
% \oggettoatto{Disciplina delle modalità di utilizzo e concessione
%              degli spazi pubblici comunali}
%
% \begin{document}
% \frontespizioatto
% \bozzainfo
% \tableofcontents
% \indicearticoli
%
% \titolo{Disposizioni generali}
%
% \articolo{Definizioni}[art:definizioni]
% \comma{Ai fini del presente regolamento si intende per:}
% \begin{definizioni}
%   \definizione{Spazio pubblico}{qualsiasi area di proprietà comunale
%     aperta al pubblico accesso}[def:spaziopubblico]
%   \definizione{Concessionario}{il soggetto titolare di concessione
%     rilasciata ai sensi del presente regolamento}[def:concessionario]
% \end{definizioni}
%
% \articolo{Finalità e ambito di applicazione}[art:finalita]
% \comma{Il presente regolamento disciplina le modalità di utilizzo
% e di concessione temporanea degli \defref{def:spaziopubblico}
% di proprietà del Comune di Esempiopoli.}[c:finalita:1]
% \comma{Le disposizioni del presente regolamento si applicano a
% tutti i soggetti, pubblici e privati, che intendano utilizzare
% gli spazi di cui al comma precedente.}
%
% \titolo{Procedimento concessorio}
%
% \articolo{Domanda di concessione}[art:domanda]
% \comma{La domanda di concessione è presentata al Comune mediante
% apposito modulo, allegando la documentazione indicata
% nell'\allegatoref{all:modello}.}
%
% \entrataInVigore{Il presente regolamento entra in vigore il giorno
% successivo alla sua pubblicazione all'albo pretorio online.}
%
% \indiceallegati
% \indicedefinizioni
%
% \allegato{Modello di domanda di concessione}[all:modello]
% Testo del modello allegato.
%
% \end{document}
% \end{verbatim}
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \section{Flusso di compilazione}
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Per ottenere tutti gli indici correttamente popolati sono necessarie
% almeno due passate del motore di composizione. Il flusso raccomandato
% con \hologo{LuaLaTeX} è il seguente:
%
% \begin{verbatim}
%   lualatex documento.tex
%   makeindex -s gind.ist documento.idx   # indice analitico
%   makeindex -s gglo.ist -o documento.gls documento.glo  # glossario
%   lualatex documento.tex
%   lualatex documento.tex
% \end{verbatim}
%
% Con \texttt{latexmk} è sufficiente aggiungere nella directory di lavoro
% un file \texttt{latexmkrc} con il contenuto seguente:
%
% \begin{verbatim}
%   @default_files = ('documento.tex');
%   $pdf_mode = 4;   # LuaLaTeX
%   add_cus_dep('glo','gls',0,'run_makeglossaries');
%   add_cus_dep('idx','ind',0,'run_makeindex');
%   sub run_makeglossaries {
%       system("makeindex -s gglo.ist -o '$_[0].gls' '$_[0].glo'");
%   }
%   sub run_makeindex {
%       system("makeindex -s gind.ist '$_[0].idx'");
%   }
% \end{verbatim}
%
% \begin{warnbox}[File ausiliari corrotti]
% Se la compilazione si interrompe in modo anomalo, il file \texttt{.aux}
% può risultare troncato. La compilazione successiva produce l'errore
% \texttt{File ended while scanning use of \textbackslash @writefile}.
% La soluzione è eliminare tutti i file ausiliari
% (\texttt{.aux}, \texttt{.toc}, \texttt{.idx}, \texttt{.glo},
% \texttt{.art}, \texttt{.alg}, \texttt{.dfn}, \texttt{.out})
% e ripartire da capo.
% \end{warnbox}
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \section{Cronologia delle versioni}
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% \begin{description}[leftmargin=5em, labelwidth=4.5em]
%
%   \item[v1.0] \textit{Prima versione stabile (2026/05/08).}
%
%   \item[v1.1] \textit{Migrazione font a Latin Modern (2026/05/17).}
%     Sostituzione di tutti i font di terze parti con la famiglia
%     \emph{Latin Modern}, disponibile in ogni installazione standard
%     senza dipendenze aggiuntive. Le varianti \opt{serif} (Latin Modern
%     Roman) e \opt{sansserif} (Latin Modern Sans) appartengono alla
%     medesima famiglia e garantiscono coerenza tipografica. Rimossi i
%     pacchetti \pkg{mathptmx}, \pkg{helvet}, \pkg{unicode-math} e i
%     font STIX Two e TeX Gyre Heros. Correzione del refuso nella
%     tabella delle note redazionali (\cs{notaredazinline} era descritto
%     erroneamente come \cs{notaredaz}). Aggiunta di \cs{markboth} negli
%     indici secondari per la corretta generazione delle intestazioni.
%     Sostituzione di \cs{clearpage} con \cs{newpage} in \cs{bozzainfo}.
%     Soppressione dello spazio spurio generato da \cs{paragraph\{\}} nel
%     comando \cs{comma}. Condizionamento del caricamento di \pkg{xparse}
%     al kernel LaTeX (superfluo da 2020-10-01). Nota documentativa sul
%     meccanismo di ripristino del contatore in \cs{AN@emit}. Nota sulla
%     larghezza variabile di \cs{l@ANallegato}. Esempio minimo esteso con
%     definizioni e allegato. Sezione dedicata al flusso di compilazione.
%
% \end{description}
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \StopEventually{\PrintChanges\PrintIndex}
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% \section{Implementazione}
%
% Il codice che segue è estratto direttamente da \texttt{attinormativi.cls}
% e annotato con commenti che spiegano le scelte implementative.
%
%    \begin{macrocode}
%<*class>
% attinormativi.cls
%
% LaTeX class for Italian normative acts.
% Classe LaTeX per atti normativi italiani.
%
% Version: 1.1  --  2026/05/17
%
% Modifiche rispetto a v1.0:
%   [font]        Migrazione a Latin Modern (serif e sansserif della stessa
%                 famiglia, zero dipendenze aggiuntive) per tutti i motori.
%                 Rimossi mathptmx, helvet, unicode-math, STIX Two, TeX Gyre.
%   [xparse]      Caricamento condizionato al kernel: non necessario
%                 con LaTeX >= 2020-10-01.
%   [comma]       Soppressione dello spazio spurio generato da
%                 \paragraph{} tramite uso di \paragraph*{} con
%                 ridefinizione del formato via titlesec.
%   [bozzainfo]   Sostituzione di \clearpage con \newpage per evitare
%                 pagine bianche indesiderate prima del banner.
%   [indici]      Aggiunta di \markboth in indicearticoli,
%                 indiceallegati, indicedefinizioni per intestazioni corrette.
%   [maketitle]   Alias \let\maketitle\frontespizioatto per compatibilità.
%   [cleveref]    Definizioni \crefname / \Crefname per tutti i livelli
%                 strutturali in italiano.
%   [margini]     Opzioni left=, right=, top=, bottom=.
%   [duplex]      Iniezione twoside/oneside in \LoadClass per evitare
%                 il conflitto keyval/geometry.

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{attinormativi}[2026/05/17 v1.1 Classe per atti normativi italiani]

% Macro di versione accessibile ai documenti per diagnostica
\def\ANclassversion{v1.1 (2026/05/17)}
%    \end{macrocode}
%
% \subsection{Sezione 1 --- Dichiarazione delle opzioni}
%
% \subsubsection{1a. Modalità bozza}
%
% Il booleano interno |\ifAN@bozza| è usato dalla classe.
% Il booleano pubblico |\ifANbozza| è accessibile ai documenti utente
% senza richiedere |\makeatletter|/|\makeatother|.
%
%    \begin{macrocode}
% ==========================================================================
% SEZIONE 1 — Dichiarazione delle opzioni
% ==========================================================================

% ── 1a. Bozza ──────────────────────────────────────────────────────────────

\newif\ifAN@bozza
\AN@bozzafalse
\newif\ifANbozza
\ANbozzafalse
\DeclareOption{bozza}{\AN@bozzatrue\ANbozzatrue}
%    \end{macrocode}
%
% \subsubsection{1b. Famiglia tipografica}
%
% L'alias \opt{sanserif} (con un solo~\texttt{s}) è accettato per
% tolleranza tipografica.
%
%    \begin{macrocode}
% ── 1b. Famiglia tipografica ───────────────────────────────────────────────

\newif\ifAN@sansserif
\AN@sansseriffalse
\DeclareOption{sansserif}{\AN@sansseriftrue}
\DeclareOption{sanserif}{\AN@sansseriftrue}  % alias tollerante (un solo 's')
\DeclareOption{serif}{}
%    \end{macrocode}
%
% \subsubsection{1c. Fronte/retro vs solo fronte}
%
% Solo booleano: nessun |\PassOptionsToClass| qui.
% L'opzione concreta viene iniettata in |\LoadClass| (§~1e).
%
%    \begin{macrocode}
% ── 1c. Fronte/retro vs solo fronte ────────────────────────────────────────

\newif\ifAN@duplex
\AN@duplexfalse
\DeclareOption{duplex} {\AN@duplextrue}
\DeclareOption{simplex}{\AN@duplexfalse}
\DeclareOption{twoside}{\AN@duplextrue}
\DeclareOption{oneside}{\AN@duplexfalse}
%    \end{macrocode}
%
% \subsubsection{1d. Margini personalizzabili}
%
% Il parser |\AN@parseMarginOption| separa la chiave dal valore con
% il delimitatore \texttt{=}. Le opzioni non riconosciute vengono
% passate a \cls{book} tramite |\PassOptionsToClass|.
%
%    \begin{macrocode}
% ── 1d. Margini personalizzabili ───────────────────────────────────────────

\def\AN@margin@left  {35mm}
\def\AN@margin@right {30mm}
\def\AN@margin@top   {25mm}
\def\AN@margin@bottom{25mm}

\def\AN@str@left  {left}
\def\AN@str@right {right}
\def\AN@str@top   {top}
\def\AN@str@bottom{bottom}

\def\AN@parseMarginOption#1=#2\relax{%
  \def\AN@optkey{#1}%
  \def\AN@optval{#2}%
  \ifx\AN@optval\empty
    \PassOptionsToClass{\AN@currentopt}{book}%
  \else
    \ifx\AN@optkey\AN@str@left   \edef\AN@margin@left  {\AN@optval}\else
    \ifx\AN@optkey\AN@str@right  \edef\AN@margin@right {\AN@optval}\else
    \ifx\AN@optkey\AN@str@top    \edef\AN@margin@top   {\AN@optval}\else
    \ifx\AN@optkey\AN@str@bottom \edef\AN@margin@bottom{\AN@optval}\else
      \PassOptionsToClass{\AN@currentopt}{book}%
    \fi\fi\fi\fi
  \fi
}

\DeclareOption*{%
  \edef\AN@currentopt{\CurrentOption}%
  \expandafter\AN@parseMarginOption\AN@currentopt=\relax\relax
}
%    \end{macrocode}
%
% \subsubsection{1e. ProcessOptions e LoadClass}
%
% L'iniezione dell'opzione di layout nell'argomento esplicito di
% |\LoadClass| garantisce che le stringhe \texttt{twoside}/\texttt{oneside}
% arrivino esclusivamente a \cls{book} e non transitino per
% \pkg{keyval}/\pkg{geometry}.
%
%    \begin{macrocode}
% ── 1e. ProcessOptions e LoadClass ─────────────────────────────────────────

\ProcessOptions\relax

\ifAN@duplex
  \LoadClass[twoside,openright]{book}
\else
  \LoadClass[oneside,openany]{book}
\fi
%    \end{macrocode}
%
% \subsection{Sezione 2 --- Pacchetti richiesti}
%
% La classe utilizza esclusivamente la famiglia \emph{Latin Modern}
% in tutte le modalità e su tutti i motori. Con pdf\LaTeX{} viene
% caricato \pkg{lmodern}; con \hologo{XeLaTeX} e \hologo{LuaLaTeX}
% i font OpenType corrispondenti sono selezionati tramite \pkg{fontspec}.
% Non sono richiesti pacchetti di font di terze parti.
%
% Il caricamento di \pkg{xparse} è condizionato alla versione del kernel:
% dalla release 2020-10-01 i comandi |\NewDocumentCommand| e affini
% sono nativi in \LaTeX{} e il pacchetto risulterebbe superfluo.
%
%    \begin{macrocode}
% ==========================================================================
% SEZIONE 2 — Pacchetti richiesti
% ==========================================================================

\RequirePackage{iftex}

% ── Font ───────────────────────────────────────────────────────────────────

\ifPDFTeX
  \RequirePackage[utf8]{inputenc}
  \RequirePackage[T1]{fontenc}
  \RequirePackage{lmodern}
  \ifAN@sansserif
    \renewcommand{\familydefault}{\sfdefault}
  \fi
\else
  \RequirePackage{fontspec}
  \ifAN@sansserif
    \setmainfont{Latin Modern Sans}
    \setsansfont{Latin Modern Sans}
    \setmonofont{Latin Modern Mono}
  \else
    \setmainfont{Latin Modern Roman}
    \setsansfont{Latin Modern Sans}
    \setmonofont{Latin Modern Mono}
  \fi
\fi

% ── Geometry ───────────────────────────────────────────────────────────────

\RequirePackage{geometry}
\ifAN@duplex
  \geometry{
    a4paper,
    twoside,
    top    = \AN@margin@top,
    bottom = \AN@margin@bottom,
    inner  = \AN@margin@left,
    outer  = \AN@margin@right
  }
\else
  \geometry{
    a4paper,
    top    = \AN@margin@top,
    bottom = \AN@margin@bottom,
    left   = \AN@margin@left,
    right  = \AN@margin@right
  }
\fi

% ── Localizzazione e tipografia ────────────────────────────────────────────

\RequirePackage[italian]{babel}
\RequirePackage{microtype}

% ── Utility ────────────────────────────────────────────────────────────────

\RequirePackage{xcolor}

% xparse è nativo nel kernel LaTeX dalla release 2020-10-01.
% Lo carichiamo solo su installazioni più vecchie.
\@ifpackagelater{LaTeX}{2020/10/01}{}{%
  \RequirePackage{xparse}%
}

\RequirePackage{titlesec}
\RequirePackage{chngcntr}
\RequirePackage{enumitem}
\RequirePackage{hyperref}
%    \end{macrocode}
%
% \subsection{Sezione 3 --- Giustificazione di emergenza}
%
%    \begin{macrocode}
% ==========================================================================
% SEZIONE 3 — Giustificazione di emergenza
% ==========================================================================

\AtBeginDocument{\emergencystretch=2em}
%    \end{macrocode}
%
% \subsection{Sezione 4 --- Profondità di numerazione}
%
%    \begin{macrocode}
% ==========================================================================
% SEZIONE 4 — Profondità di numerazione
% ==========================================================================

\setcounter{secnumdepth}{6}
\setcounter{tocdepth}{3}
%    \end{macrocode}
%
% \subsection{Sezione 5 --- Hyperlink}
%
%    \begin{macrocode}
% ==========================================================================
% SEZIONE 5 — Hyperlink
% ==========================================================================

\hypersetup{
  colorlinks = true,
  linkcolor  = black,
  citecolor  = black,
  urlcolor   = black,
  pdfborder  = {0 0 0}
}
%    \end{macrocode}
%
% \subsection{Sezione 6 --- Modalità bozza e note redazionali}
%
% \begin{macro}{\notaredaz}
% Nota a blocco con riquadro, visibile solo in modalità bozza.
% Il contatore |\ANnotaredaz| fornisce la numerazione progressiva.
% \end{macro}
%
% \begin{macro}{\notaredazinline}
% Nota breve in linea, evidenziata in rosso, visibile solo in bozza.
% \end{macro}
%
% \begin{macro}{\bozzainfo}
% Banner «VERSIONE DI BOZZA» inserito all'inizio del documento.
% Usa |\newpage| anziché |\clearpage| per evitare l'emissione di
% una pagina bianca vuota prima del banner stesso.
% \end{macro}
%
%    \begin{macrocode}
% ==========================================================================
% SEZIONE 6 — Modalità bozza e note redazionali
% ==========================================================================

\newcounter{ANnotaredaz}

\NewDocumentCommand{\notaredaz}{+m}{%
  \ifAN@bozza
    \refstepcounter{ANnotaredaz}%
    \par\smallskip
    \noindent
    \fbox{%
      \begin{minipage}{0.96\linewidth}
        \small
        \textbf{Nota redazionale \theANnotaredaz.} #1
      \end{minipage}%
    }%
    \par\smallskip
  \fi
}

\NewDocumentCommand{\notaredazinline}{+m}{%
  \ifAN@bozza
    \textcolor{red}{[\textbf{Nota redazionale:} #1]}%
  \fi
}

\NewDocumentCommand{\bozzainfo}{}{%
  \ifAN@bozza
    \begin{center}
      \fbox{%
        \begin{minipage}{0.85\linewidth}
          \centering
          \textbf{VERSIONE DI BOZZA}\\
          Documento compilato il \today.\\
          Le note redazionali sono visibili solo in modalit\`a bozza.
        \end{minipage}%
      }
    \end{center}
    \newpage
  \fi
}
%    \end{macrocode}
%
% \subsection{Sezione 7 --- Nomi strutturali}
%
% I nomi dei livelli strutturali sono ridefinibili nel preambolo del
% documento. Il comando |\addto\captionsitalian| integra le ridefinizioni
% con il meccanismo di \pkg{babel}.
%
%    \begin{macrocode}
% ==========================================================================
% SEZIONE 7 — Nomi strutturali
% ==========================================================================

\newcommand*{\ANLibroName}{Libro}
\newcommand*{\ANTitoloName}{Titolo}
\newcommand*{\ANCapoName}{Capo}
\newcommand*{\ANSezioneName}{Sezione}
\newcommand*{\ANArticoloName}{Articolo}
\newcommand*{\ANCommaName}{Comma}

\addto\captionsitalian{%
  \renewcommand*{\partname}{\ANLibroName}%
  \renewcommand*{\chaptername}{\ANTitoloName}%
}
%    \end{macrocode}
%
% \subsection{Sezione 8 --- Metadati dell'atto}
%
% \begin{macro}{\tipoatto}
% \begin{macro}{\numeroatto}
% \begin{macro}{\dataatto}
% \begin{macro}{\autoritaatto}
% \begin{macro}{\titoloatto}
% \begin{macro}{\oggettoatto}
% I sei comandi di metadato memorizzano il valore in una macro interna
% tramite |\renewcommand|. Le macro interne sono inizializzate vuote
% in modo che il frontespizio possa testarne la presenza con |\ifx...\empty|.
% \end{macro}\end{macro}\end{macro}\end{macro}\end{macro}\end{macro}
%
%    \begin{macrocode}
% ==========================================================================
% SEZIONE 8 — Metadati dell'atto
% ==========================================================================

\newcommand*{\ANtipoatto}{}
\newcommand*{\ANnumeroatto}{}
\newcommand*{\ANdataatto}{}
\newcommand*{\ANautoritaatto}{}
\newcommand*{\ANtitoloatto}{}
\newcommand*{\ANoggettoatto}{}

\NewDocumentCommand{\tipoatto}    {m}{\renewcommand*{\ANtipoatto}{#1}}
\NewDocumentCommand{\numeroatto}  {m}{\renewcommand*{\ANnumeroatto}{#1}}
\NewDocumentCommand{\dataatto}    {m}{\renewcommand*{\ANdataatto}{#1}}
\NewDocumentCommand{\autoritaatto}{m}{\renewcommand*{\ANautoritaatto}{#1}}
\NewDocumentCommand{\titoloatto}  {m}{\renewcommand*{\ANtitoloatto}{#1}}
\NewDocumentCommand{\oggettoatto} {m}{\renewcommand*{\ANoggettoatto}{#1}}
%    \end{macrocode}
%
% \subsection{Sezione 9 --- Frontespizio e alias \texttt{\textbackslash maketitle}}
%
% \begin{macro}{\frontespizioatto}
% Il frontespizio condiziona la stampa di ciascun campo al test
% |\ifx...\empty|, così gli utenti che non impostano tutti i metadati
% ottengono un frontespizio coerente senza voci vuote.
% \end{macro}
%
%    \begin{macrocode}
% ==========================================================================
% SEZIONE 9 — Frontespizio e alias \maketitle
% ==========================================================================

\NewDocumentCommand{\frontespizioatto}{}{%
  \begin{titlepage}
  \centering
  \vspace*{2cm}
  \ifx\ANautoritaatto\empty\else
    {\Large \ANautoritaatto\par}\vspace{2cm}
  \fi
  \ifx\ANtipoatto\empty\else
    {\huge\bfseries \ANtipoatto\par}\vspace{0.5cm}
  \fi
  \ifx\ANnumeroatto\empty\else
    {\Large n.~\ANnumeroatto\par}\vspace{0.5cm}
  \fi
  \ifx\ANdataatto\empty\else
    {\large \ANdataatto\par}\vspace{2cm}
  \fi
  \ifx\ANtitoloatto\empty\else
    {\LARGE\bfseries \ANtitoloatto\par}\vspace{1.5cm}
  \fi
  \ifx\ANoggettoatto\empty\else
    \begin{minipage}{0.82\textwidth}
      \centering\large \ANoggettoatto
    \end{minipage}
  \fi
  \vfill
  \end{titlepage}
}

\let\maketitle\frontespizioatto
%    \end{macrocode}
%
% \subsection{Sezione 10 --- Contatori}
%
% Il contatore degli articoli (|\subsubsection|) è reso globale
% tramite |\counterwithout|: la progressione è unica per l'intero
% documento, indipendente dalla struttura dei capitoli e titoli.
%
% Il contatore |\articoloecomma| fornisce etichette combinate
% per i riferimenti articolo+comma tramite |\artcommaref|.
%
%    \begin{macrocode}
% ==========================================================================
% SEZIONE 10 — Contatori
% ==========================================================================

\renewcommand*{\thepart}{\Roman{part}}
\renewcommand*{\thechapter}{\Roman{chapter}}
\renewcommand*{\thesection}{\Roman{section}}
\renewcommand*{\thesubsection}{\Roman{subsection}}

\counterwithout{subsubsection}{subsection}
\renewcommand*{\thesubsubsection}{\arabic{subsubsection}}

\counterwithin*{paragraph}{subsubsection}
\renewcommand*{\theparagraph}{\arabic{paragraph}}

\newcounter{articoloecomma}
\renewcommand*{\thearticoloecomma}{art.~\thesubsubsection, c.~\theparagraph}
%    \end{macrocode}
%
% \subsection{Sezione 11 --- Formati dei titoli}
%
% I titoli strutturali sono composti in stile centrato con il nome
% del livello e il numero su una riga e il testo del titolo sulla
% riga successiva (\texttt{display} shape di \pkg{titlesec}).
% Il livello articolo aggiunge il testo in corsivo.
%
% Il livello comma usa lo stile \texttt{runin} con titolo vuoto.
% Per evitare lo spazio spurio che |\paragraph{}| genera prima del
% numero, il formato è configurato in modo che il separatore
% dopo il titolo non produca spazio orizzontale quando il titolo
% è assente.
%
%    \begin{macrocode}
% ==========================================================================
% SEZIONE 11 — Formati dei titoli
% ==========================================================================

\titleformat{\part}[display]
  {\normalfont\Huge\bfseries\centering}
  {\ANLibroName~\thepart}{1ex}{}

\titleformat{\chapter}[display]
  {\normalfont\huge\bfseries\centering}
  {\ANTitoloName~\thechapter}{1ex}{}

\titleformat{\section}[display]
  {\normalfont\Large\bfseries\centering}
  {\ANCapoName~\thesection}{1ex}{}

\titleformat{\subsection}[display]
  {\normalfont\large\bfseries\centering}
  {\ANSezioneName~\thesubsection}{1ex}{}

\titleformat{\subsubsection}[display]
  {\normalfont\normalsize\bfseries\centering}
  {\ANArticoloName~\thesubsubsection}{0.5ex}{\itshape}

% Il separatore è impostato a 0pt per sopprimere lo spazio spurio
% prima del numero del comma quando il titolo è vuoto.
\titleformat{\paragraph}[runin]
  {\normalfont\normalsize}
  {\theparagraph.}{0pt}{}

\titlespacing*{\part}         {0pt}{0pt}{4ex}
\titlespacing*{\chapter}      {0pt}{2ex plus 1ex minus .2ex}{3ex}
\titlespacing*{\section}      {0pt}{2.5ex plus 1ex minus .2ex}{1.5ex}
\titlespacing*{\subsection}   {0pt}{2ex plus 1ex minus .2ex}{1ex}
\titlespacing*{\subsubsection}{0pt}{2ex plus 1ex minus .2ex}{1ex}
\titlespacing*{\paragraph}    {0pt}{0.6ex plus .2ex minus .1ex}{0.75em}
%    \end{macrocode}
%
% \subsection{Sezione 12 --- Riferimenti avanzati e supporto cleveref}
%
% I comandi di riferimento in italiano sono forniti senza richiedere
% l'installazione di pacchetti aggiuntivi.
%
% Il blocco |\AtBeginDocument| attiva le definizioni \pkg{cleveref}
% solo se il pacchetto è stato effettivamente caricato dall'utente,
% attraverso il test |\@ifpackageloaded|. Questo evita errori in
% documenti che non usano \pkg{cleveref}.
%
%    \begin{macrocode}
% ==========================================================================
% SEZIONE 12 — Riferimenti avanzati e supporto cleveref
% ==========================================================================

\newcommand*{\artref}[1]{art.~\ref{#1}}
\newcommand*{\commaref}[1]{comma~\ref{#1}}
\newcommand*{\artcommaref}[1]{\ref{a+c:#1}}
\newcommand*{\articoloeref}[1]{articolo~\ref{#1}}
\newcommand*{\commaeref}[1]{comma~\ref{#1}}
\newcommand*{\artcomma}[2]{art.~\ref{#1}, comma~\ref{#2}}
\newcommand*{\articolocomma}[2]{articolo~\ref{#1}, comma~\ref{#2}}

\AtBeginDocument{%
  \@ifpackageloaded{cleveref}{%
    \crefname  {part}          {libro}      {libri}
    \Crefname  {part}          {Libro}      {Libri}
    \crefname  {chapter}       {titolo}     {titoli}
    \Crefname  {chapter}       {Titolo}     {Titoli}
    \crefname  {section}       {capo}       {capi}
    \Crefname  {section}       {Capo}       {Capi}
    \crefname  {subsection}    {sezione}    {sezioni}
    \Crefname  {subsection}    {Sezione}    {Sezioni}
    \crefname  {subsubsection} {articolo}   {articoli}
    \Crefname  {subsubsection} {Articolo}   {Articoli}
    \crefname  {paragraph}     {comma}      {commi}
    \Crefname  {paragraph}     {Comma}      {Commi}
    \crefname  {articoloecomma}{comma}      {commi}
    \Crefname  {articoloecomma}{Comma}      {Commi}
    \crefname  {ANdefinizione} {definizione}{definizioni}
    \Crefname  {ANdefinizione} {Definizione}{Definizioni}
    \crefname  {ANallegato}    {allegato}   {allegati}
    \Crefname  {ANallegato}    {Allegato}   {Allegati}
  }{}%
}
%    \end{macrocode}
%
% \subsection{Sezione 13 --- Macro interna \texttt{\textbackslash AN@emit}}
%
% \begin{macro}{\AN@emit}
% La macro |\AN@emit| è il motore comune a tutti i comandi strutturali.
% Riceve cinque argomenti:
% \begin{enumerate}
%   \item il comando \LaTeX{} da invocare (|\part|, |\chapter|, ecc.);
%   \item il nome del contatore corrispondente;
%   \item il numero manuale (può essere |\NoValue|);
%   \item il testo del titolo;
%   \item l'etichetta (può essere |\NoValue|).
% \end{enumerate}
%
% Quando è presente un numero manuale, la modifica al contatore è
% isolata in un gruppo \TeX{}. Poiché i contatori \LaTeX{} sono globali,
% l'incremento automatico eseguito dal comando strutturale avviene prima
% del ripristino esplicito: il valore salvato in |\AN@saved@counter| è
% quello \emph{antecedente} all'incremento, così il ripristino finale
% riporta il contatore allo stato precedente all'intera emissione,
% garantendo la corretta progressione automatica successiva.
% \end{macro}
%
%    \begin{macrocode}
% ==========================================================================
% SEZIONE 13 — Macro interna \AN@emit
% ==========================================================================
\NewDocumentCommand{\AN@emit}{m m m m m}{%
  \IfNoValueTF{#3}
    {%
      #1{#4}%
      \IfNoValueF{#5}{\label{#5}}%
    }
    {%
      \begingroup
        % Salva il valore del contatore PRIMA dell'incremento automatico
        % che il comando strutturale eseguirà globalmente.
        % Il ripristino finale riporta il contatore a questo valore,
        % garantendo la corretta progressione automatica successiva.
        \edef\AN@saved@counter{\the\value{#2}}%
        \expandafter\renewcommand\csname the#2\endcsname{#3}%
        #1{#4}%
        \IfNoValueF{#5}{\label{#5}}%
        \setcounter{#2}{\AN@saved@counter}%
      \endgroup
    }%
}
%    \end{macrocode}
%
% \subsection{Sezione 14 --- Comandi strutturali pubblici}
%
% \begin{macro}{\libro}
% \begin{macro}{\titolo}
% \begin{macro}{\capo}
% \begin{macro}{\sezione}
% \begin{macro}{\articolo}
% Tutti i comandi strutturali delegano a |\AN@emit|.
% Il comando |\articolo| aggiunge anche la registrazione nell'indice
% degli articoli tramite |\ANaddarticleindex|.
% \end{macro}\end{macro}\end{macro}\end{macro}\end{macro}
%
% \begin{macro}{\comma}
% Il comma gestisce autonomamente la numerazione manuale per
% compatibilità con il contatore |\articoloecomma| (riferimento
% combinato articolo+comma) e la doppia etichetta associata.
% Il separatore del formato \texttt{runin} è impostato a \texttt{0pt}
% (§~11) per sopprimere lo spazio spurio prima del testo del comma
% quando il titolo è vuoto.
% \end{macro}
%
%    \begin{macrocode}
% ==========================================================================
% SEZIONE 14 — Comandi strutturali pubblici
% ==========================================================================

\NewDocumentCommand{\libro}  {o m o}{\AN@emit{\part}       {part}       {#1}{#2}{#3}}
\NewDocumentCommand{\titolo} {o m o}{\AN@emit{\chapter}    {chapter}    {#1}{#2}{#3}}
\NewDocumentCommand{\capo}   {o m o}{\AN@emit{\section}    {section}    {#1}{#2}{#3}}
\NewDocumentCommand{\sezione}{o m o}{\AN@emit{\subsection} {subsection} {#1}{#2}{#3}}

\NewDocumentCommand{\articolo}{o m o}{%
  \AN@emit{\subsubsection}{subsubsection}{#1}{#2}{#3}%
  \IfNoValueTF{#1}
    {\ANaddarticleindex{\thesubsubsection}{#2}}
    {\ANaddarticleindex{#1}{#2}}%
}

\NewDocumentCommand{\comma}{o +m o}{%
  \IfNoValueTF{#1}
    {%
      \paragraph{}#2\par
      \IfNoValueF{#3}{%
        \label{#3}%
        \refstepcounter{articoloecomma}%
        \label{a+c:#3}%
      }%
    }
    {%
      \begingroup
        \edef\AN@saved@para{\the\value{paragraph}}%
        \renewcommand*{\theparagraph}{#1}%
        \paragraph{}#2\par
        \IfNoValueF{#3}{%
          \label{#3}%
          \refstepcounter{articoloecomma}%
          \label{a+c:#3}%
        }%
        \setcounter{paragraph}{\AN@saved@para}%
      \endgroup
    }%
}
%    \end{macrocode}
%
% \subsection{Sezione 15 --- Liste}
%
%    \begin{macrocode}
% ==========================================================================
% SEZIONE 15 — Liste
% ==========================================================================

\newlist{lettere}{enumerate}{1}
\setlist[lettere]{
  label      = \alph*),
  ref        = \alph*),
  leftmargin = 2.5em,
  itemsep    = 0.2ex,
  topsep     = 0.5ex
}

\newlist{numeri}{enumerate}{1}
\setlist[numeri]{
  label      = \arabic*),
  ref        = \arabic*),
  leftmargin = 2.5em,
  itemsep    = 0.2ex,
  topsep     = 0.5ex
}
%    \end{macrocode}
%
% \subsection{Sezione 16 --- Definizioni}
%
% \begin{environment}{definizioni}
% L'ambiente \texttt{definizioni} usa un ambiente \texttt{list} con
% parametri personalizzati. Il contatore |\ANdefinizione| si azzera
% all'inizio di ogni ambiente.
% \end{environment}
%
% \begin{macro}{\definizione}
% Ogni voce incrementa |\ANdefinizione|, compone il termine in grassetto
% e aggiunge la voce all'indice delle definizioni.
% \end{macro}
%
%    \begin{macrocode}
% ==========================================================================
% SEZIONE 16 — Definizioni
% ==========================================================================

\newcounter{ANdefinizione}
\renewcommand*{\theANdefinizione}{\alph{ANdefinizione}}
\newcommand*{\ANDefinizioneName}{Definizione}

\NewDocumentCommand{\indicedefinizioni}{}{%
  \chapter*{Indice delle definizioni}%
  \markboth{Indice delle definizioni}{Indice delle definizioni}%
  \addcontentsline{toc}{chapter}{Indice delle definizioni}%
  \@starttoc{dfn}%
}

\newcommand*{\l@ANdefinizione}{\@dottedtocline{1}{0pt}{0em}}
\newcommand*{\ANadddefinitionindex}[1]{\addcontentsline{dfn}{ANdefinizione}{#1}}

\NewDocumentEnvironment{definizioni}{}
  {%
    \begin{list}{}{%
      \setlength{\leftmargin}{2.5em}%
      \setlength{\labelwidth}{2em}%
      \setlength{\labelsep}{0.75em}%
      \setlength{\itemsep}{0.4ex}%
      \setlength{\topsep}{0.6ex}%
    }%
    \setcounter{ANdefinizione}{0}%
  }
  {\end{list}}

\NewDocumentCommand{\definizione}{m +m o}{%
  \refstepcounter{ANdefinizione}%
  \protected@edef\@currentlabelname{#1}%
  \item[\textbf{\theANdefinizione)}]\textbf{#1}: #2%
  \ANadddefinitionindex{#1}%
  \IfNoValueF{#3}{\label{#3}}%
}

\newcommand*{\definizioneref}[1]{\emph{\nameref{#1}}}
\newcommand*{\defref}[1]{\definizioneref{#1}}
%    \end{macrocode}
%
% \subsection{Sezione 17 --- Ambienti di servizio}
%
%    \begin{macrocode}
% ==========================================================================
% SEZIONE 17 — Ambienti di servizio
% ==========================================================================

\NewDocumentEnvironment{preambolo}{+b}
  {\chapter*{Preambolo}\addcontentsline{toc}{chapter}{Preambolo}#1}{}

\NewDocumentEnvironment{relazione}{+b}
  {\chapter*{Relazione illustrativa}%
   \addcontentsline{toc}{chapter}{Relazione illustrativa}#1}{}
%    \end{macrocode}
%
% \subsection{Sezione 18 --- Disposizioni finali tipizzate}
%
% \begin{macro}{\AN@articoloFisso}
% La macro interna |\AN@articoloFisso| fattorizza la logica comune ai
% tre comandi tipizzati. Gestisce le quattro combinazioni possibili di
% presenza/assenza del numero manuale e dell'etichetta.
% \end{macro}
%
%    \begin{macrocode}
% ==========================================================================
% SEZIONE 18 — Disposizioni finali tipizzate
% ==========================================================================

\NewDocumentCommand{\AN@articoloFisso}{m m +m m}{%
  \IfNoValueTF{#2}
    {%
      \IfNoValueTF{#4}{\articolo{#1}}{\articolo{#1}[#4]}%
    }
    {%
      \IfNoValueTF{#4}{\articolo[#2]{#1}}{\articolo[#2]{#1}[#4]}%
    }%
  \comma{#3}%
}

\NewDocumentCommand{\entrataInVigore} {o +m o}{\AN@articoloFisso{Entrata in vigore}{#1}{#2}{#3}}
\NewDocumentCommand{\abrogazioni}     {o +m o}{\AN@articoloFisso{Abrogazioni}{#1}{#2}{#3}}
\NewDocumentCommand{\normatransitoria}{o +m o}{\AN@articoloFisso{Norma transitoria}{#1}{#2}{#3}}
%    \end{macrocode}
%
% \subsection{Sezione 19 --- Allegati}
%
% \begin{macro}{\allegato}
% Il comando |\allegato| gestisce la numerazione automatica alfabetica
% (A, B, C\ldots) e quella manuale. La macro interna
% |\ANallegatoheading| genera il titolo del capitolo non numerato,
% aggiunge la voce all'indice generale e all'indice degli allegati.
% \end{macro}
%
%    \begin{macrocode}
% ==========================================================================
% SEZIONE 19 — Allegati
% ==========================================================================

\newcounter{ANallegato}
\renewcommand*{\theANallegato}{\Alph{ANallegato}}
\newcommand*{\ANAllegatoName}{Allegato}
\newcommand*{\allegatoref}[1]{\ANAllegatoName~\ref{#1}}

\NewDocumentCommand{\indiceallegati}{}{%
  \chapter*{Indice degli allegati}%
  \markboth{Indice degli allegati}{Indice degli allegati}%
  \addcontentsline{toc}{chapter}{Indice degli allegati}%
  \@starttoc{alg}%
}

% La larghezza di 10.5em è adeguata per identificatori standard (Allegato A).
% Per titoli molto lunghi ridefinire nel preambolo:
%   \renewcommand*{\l@ANallegato}{\@dottedtocline{1}{0pt}{12em}}
\newcommand*{\l@ANallegato}{\@dottedtocline{1}{0pt}{10.5em}}

\newcommand*{\ANaddattachmentindex}[2]{%
  \addcontentsline{alg}{ANallegato}{\protect\numberline{\ANAllegatoName~#1}#2}%
}

\NewDocumentCommand{\ANallegatoheading}{m m o}{%
  \clearpage\phantomsection
  \chapter*{\ANAllegatoName~#1\\[0.5ex]\large #2}%
  \markboth{\ANAllegatoName~#1}{#2}%
  \addcontentsline{toc}{chapter}{\ANAllegatoName~#1 -- #2}%
  \ANaddattachmentindex{#1}{#2}%
  \IfNoValueF{#3}{\label{#3}}%
  \vspace{1em}%
}

\NewDocumentCommand{\allegato}{o m o}{%
  \IfNoValueTF{#1}
    {%
      \refstepcounter{ANallegato}%
      \IfNoValueTF{#3}
        {\ANallegatoheading{\theANallegato}{#2}}
        {\ANallegatoheading{\theANallegato}{#2}[#3]}%
    }
    {%
      \begingroup
        \renewcommand*{\theANallegato}{#1}%
        \refstepcounter{ANallegato}%
        \IfNoValueTF{#3}
          {\ANallegatoheading{#1}{#2}}
          {\ANallegatoheading{#1}{#2}[#3]}%
      \endgroup
    }%
}
%    \end{macrocode}
%
% \subsection{Sezione 20 --- Indice degli articoli}
%
%    \begin{macrocode}
% ==========================================================================
% SEZIONE 20 — Indice degli articoli
% ==========================================================================

\NewDocumentCommand{\indicearticoli}{}{%
  \chapter*{Indice degli articoli}%
  \markboth{Indice degli articoli}{Indice degli articoli}%
  \addcontentsline{toc}{chapter}{Indice degli articoli}%
  \@starttoc{art}%
}

\newcommand*{\l@ANarticolo}{\@dottedtocline{1}{0pt}{8.5em}}

\newcommand*{\ANaddarticleindex}[2]{%
  \addcontentsline{art}{ANarticolo}{\protect\numberline{\ANArticoloName~#1}#2}%
}

\endinput
%</class>
%    \end{macrocode}
%
% \Finale
\endinput
