% \iffalse meta-comment % % attinormativi.dtx % % Documented source for the `attinormativi' LaTeX class. % Sorgente documentato per la classe LaTeX `attinormativi'. % % Copyright (C) 2026 Federico Gallo % % 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.0 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} % % \fi % % \changes{v1.0}{2026/05/08}{Prima 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 % % \end{macrocode} % % \Finale \endinput