% !TEX root =  ./it-lshort.tex

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Contents: Customising LaTeX output
% $Id$
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Tradotto liberamente n italiano dal Mauro Sacchetto 2019-06-23
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\chapter{Personalizzare \LaTeX}

\begin{intro}
I documenti prodotti con i comandi fin qui appresi appariranno sufficienti per un'ampia utenza. Per quanto i documenti così creati non abbiano un aspetto fantasioso, obbediscono a tutte le regole consolidate della buona tipografia, il che li rende facili da leggere e piacevoli da guardare.

Vi sono tuttavia  delle situazioni in cui \LaTeX\ non fornisce un comando
o un ambiente che risponde ai nostri intenti, oppure in cui la resa prodotta da certi comandi esistenti non soddisfa le nostre esigenze.

In questo capitolo cercheremo di fornire alcuni suggerimenti su come insegnare a \LaTeX\ a  produrre risultati diversi da quelli predefiniti.
\end{intro}


\section{Comandi, ambienti e pacchetti nuovi}

Si può notare che tutti i comandi introdotti in questo testo sono stampati all'interno di una cornice, e inoltre che compaiono nell'indice alla fine del libro. Invece di utilizzare direttamente i comandi di \LaTeX\ necessari a tal fine, è stato creato un \wi{pacchetto} in cui vengono definiti nuovi comandi e nuovi ambienti per questo scopo. Pertanto si può semplicemente scrivere:

\begin{example}
\begin{lscommand}
\ci{dum}
\end{lscommand}
\end{example}

%%%%%%%%%%%%

In questo esempio sono stati usati sia un nuovo ambiente chiamato \ei{lscommand}, che è responsabile del disegno della cornice attorno al comando, sia un nuovo comando chiamato \ci{ci}, che compone il nome del comando e ne inserisce la voce corrispondente nell'indice. Ciò può essere verificato andando a cercare il comando \ci{dum} nell'indice alla fine di questo libro, dove si troverà una voce per \ci{dum} che presenta i riferimenti a ogni pagina in cui tale comando è stato menzionato.

Se in un secondo momento si decidesse di non voler più scrivere i comandi racchiusi da una cornice, basterebbe semplicemente modificare la definizione dell'ambiente \texttt{lscommand} per conferirgli un nuovo aspetto. Ciò è molto più efficiente che scorrere l'intero documento per cercare tutti i luoghi in cui sono stati usati dei generici comandi \LaTeX\ per disegnare le cornici attorno ad alcune parole o frasi.

\subsection{Nuovi comandi}

Per aggiungere  nuovi comandi personalizzati si usa il comando

\begin{lscommand}
\ci{newcommand}\marg{nome}\oarg{num}\oarg{default}\marg{definizione}
\end{lscommand}

Fondamentalmente, il comando richiede due argomenti: il \meta{nome} della macro  che si desidera creare e la \meta{definizione} del comando. L'opzione \meta{num} tra parentesi quadre è facoltativa e specifica il numero di argomenti che la nuova macro richiede (fino a un massimo di 9). Se manca, il valore predefinito è 0, cioè nessun argomento. Il secondo argomento facoltativo \oarg{default} svolge due funzioni: $(a)$ il solo fatto di esistere, anche se \meta{default} fosse vuoto, implica che il primo argomento dei \meta{num} argomenti è facoltativo e $(b)$ che gli si assegna il valore specificato da \meta{default}; dunque, quando si userà il nuovo comando il primo argomento andrà immesso fra parentesi quadre; non ha importanza che cosa sia \meta{default}: è la macro \meta{nome} che saprà cosa farsene.

I due esempi seguenti dovrebbero aiutare a farsi un'idea.

Il primo esempio definisce un nuovo comando chiamato \ci{tnss}. Esso è
l'abbreviazione per “Una (mica tanto) breve introduzione a \LaTeXe”. Tale
comando potrebbe tornare utile se si dovesse scrivere molte volte il titolo di questo libro.

\begin{example}
\newcommand{\tnss}{Una mica
    tanto breve introduzione a
    \LaTeXe}
Questa è “\tnss” \ldots{}\\
“\tnss”
\end{example}

Il prossimo esempio illustra come definire un nuovo comando che accetta due argomenti, il primo dei quali è facoltativo.

Il parametro \verb|#1| viene sostituito dal primo argomento specificato,
\verb|#2| dal secondo e così via.

\begin{example}
\newcommand{\txsit}[2][mica tanto]
 {Questa è una \emph{#1}
  #2 Introduzione a \LaTeXe}
% nel corpo di testo:
\begin{itemize}
\item \txsit{breve}
\item \txsit[molto]{lunga}
\end{itemize}
\end{example}

\LaTeX\ non consente di creare un nuovo comando che ne sovrascriva uno già
esistente. C'è però un comando speciale, nel caso si voglia fare proprio
questo: \ci{renewcommand}. Esso utilizza la stessa sintassi del comando
\cs{newcommand}.

Quando non si sa se il comando esista già o non esista ancora, è conveniente usare il comando \ci{providecommand}. Esso funziona come \ci{newcommand} ma, se il comando è già definito, \LaTeXe\ tranquillamente non ridefinirà nulla.

Ci sono alcune cose da notare sugli spazi che seguono i comandi di \LaTeX. Per ulteriori informazioni, si veda il paragrafo~\ref{sec:whitespace} nella pagina~\pageref{sec:whitespace}.

\subsection{Nuovi ambienti}
Proprio come per il comando \cs{newcommand}, esiste un comando per creare un ambiente personalizzato. Il comando \ci{newenvironment} adotta la seguente sintassi:

\begin{lscommand}
\ci{newenvironment}\marg{nome}\oarg{num}\oarg{default}\marg{prima}\marg{dopo}
\end{lscommand}

Come \cs{newcommand}, \ci{newenvironment} può ricevere \meta{num} argomenti, dei quali, se è specificato \oarg{default}, il primo è facoltativo e il suo valore preimpostato vale \meta{default}. Quanto specificato nell'argomento \meta{prima} viene elaborato prima che venga elaborato il codice all'interno dell'ambiente. Quanto specificato nell'argomento \meta{dopo} viene elaborato quando si incontra il comando \cs{end}\marg{nome}.

Il seguente esempio illustra l'uso del comando \ci{newenvironment}:

\begin{example}
\newenvironment{sovrano}%
 {\rule{1ex}{1ex}%
      \hspace{\stretch{1}}}%
 {\hspace{\stretch{1}}%
      \rule{1ex}{1ex}}

\begin{sovrano}
Miei umili sudditi\ldots
\end{sovrano}
\end{example}

\LaTeX\ si assicura che non venga definito un ambiente che esiste già. Se però si vuole cambiare un ambiente esistente, si usa il comando \ci{renewenvironment}. Esso adotta la stessa sintassi del comando \ci{newenvironment}.

I comandi usati in questo esempio verranno spiegati in seguito. Per il comando \ci{rule}, vedi pagina \pageref{sec:rule}, per \ci{stretch} la pagina \pageref{cmd:stretch}; si possono trovare ulteriori informazioni su \ci{hspace} alla pagina \pageref{sec:hspace}.

\subsection{Spazio extra}\label{sec:whitespace}

Quando si crea un nuovo ambiente, si può facilmente essere infastiditi da spazi extra che si insinuano e che possono potenzialmente produrre effetti fatali, ad esempio quando si intenda creare un ambiente per il titolo che sopprima il proprio rientro nella stessa misura del capoverso che segue. Il comando \ci{ignorespaces} inserito alla fine del gruppo di comandi  \meta{prima} farà ignorare qualsiasi spazio successivo all'esecuzione di quel blocco iniziale. Per il gruppo di comandi \meta{dopo}, la cosa è un più complicata, in quanto l'elaborazione speciale avviene alla fine dell'ambiente. Con \ci{ignespacesafterend} \LaTeX\ esegue un \ci{ignorespaces} dopo che è completata l'elaborazione di \cs{end}\marg{nome}.

\begin{example}
\newenvironment{simple}%
 {\noindent}%
 {\par\noindent}

\begin{simple}
Si noti\\lo spazio a sinistra.
\end{simple}
Stessa cosa\\qui.
\end{example}

\begin{example}
\newenvironment{correct}%
 {\noindent\ignorespaces}%
 {\par\noindent%
   \ignorespacesafterend}

\begin{correct}
Nessuno spazio\\a sinistra.
\end{correct}
Stessa cosa\\qui.
\end{example}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\iffalse
  % CB: io toglierei completamente questo sottoparagrafo, perché con gli
  % editor di oggi solo pochi appassionati  inseriscono comandi nella
  % linea di comando.
  % Oggi lo stesso risultato si può ottenere mettendo pochi comandi che
  % non producano testo prima di \documentclass, per esempio
  %
  % \newif\ifblackandwhite \blachandwhitetrue
  % \documentclass[...]{...}
  % \ifblackndawhite % fai qualcosa in bianco e nero
  % \else            % fai qualcosa a colori
  % \fi
  %
  % Durante la lavorazione del documento fino alla versione finale
  % la compilazione delle successive bozze avviene in bianco e nero;
  % quando si è verso la fine della lavorazione, si edita la prima riga
  % sostituendo false a true e il gioco è fatto.
  % Funziona sia che si lanci la compilazione dalla riga di comando
  % (raro), sia che si clicchi l'apposito bottone dell'editor (quasi
  % sempre).
  % In sostanza questo sottoparagrafo sa di vecchio...

  \subsection{\LaTeX\ da riga di comando}

  Se si lavora su un sistema operativo Unix, si potrebbe usare Makefile
  per costruire il proprio progetto \LaTeX. A tale proposito potrebbe
  essere interessante produrre diverse versioni dello stesso documento
  invocando \LaTeX, o uno degli altri programmi di composizione, con
  parametri diversi dalla riga di comando. Se si aggiunge la seguente
  struttura al proprio documento:

  \begin{verbatim}
  \usepackage{ifthen}
  \ifthenelse{\equal{\blackandwhite}{true}}{%
    % fai qualcosa in bianco e nero
  }{%
    % fai qualcosa a colori
  }
  \end{verbatim}

  \noindent e quindi si invoca \LaTeX\ in questo modo:

  \begin{verbatim}
  latex '\newcommand{\blackandwhite}{true}\input{test.tex}'
  \end{verbatim}
  %
  allora dapprima il comando \verb|\blackandwhite| viene definito e in
  seguito il file attuale viene letto con l'input. Impostando
  \verb|\blackandwhite| a falso, verrà prodotta la versione colorata del
  documento.
\fi
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\subsection{Pacchetti personalizzati}
Quando vengono definiti molti nuovi ambienti e comandi, il preambolo del
documento diventerà piuttosto lungo. In questo caso, è una buona idea creare un pacchetto \LaTeX\ contenente tutte le definizioni dei propri comandi e ambienti. Si usa poi il comando \ci{usepackage} per rendere il pacchetto disponibile nel documento. Un esempio minimo di codice è contenuto nel codice~\ref{cod:pacchetto} nella pagina~\pageref{cod:pacchetto}.


\begin{codice}[!htbp]
\hrule\bigskip
\begin{Verbatim}
% Pacchetto demo di Tobias Oetiker, modificato per l'italiano
\ProvidesPackage{demopack}
\newcommand{\tnss}{Una mica tanto breve introduzione
                    a \LaTeXe}
\newcommand{\txsit}[2]{Una \emph{#1} {#2}
                       introduzione a \LaTeXe}
\newenvironment{sovrano}{\begin{quote}}{\end{quote}}
\end{Verbatim}
\hrule
\caption{Pacchetto di esempio\label{cod:pacchetto}}
\end{codice}
% CB: Avendo definito l'ambiente codice con le funzionalità del pacchetto
% float, stile plain, il comando \label con il suo argomento va messo
% dentro l'argomento di \caption.


La scrittura di un pacchetto consiste essenzialmente nel copiare i contenuti del preambolo del documento in un file separato, con estensione  \texttt{.sty}. C'è un comando speciale
%
\begin{lscommand}
\ci{ProvidesPackage}\marg{nome pacchetto}
\end{lscommand}
%
\noindent da collocare proprio all'inizio del file. \cs{ProvidesPackage} dice a \LaTeX\ il nome del pacchetto e gli consentirà di emettere un
comprensibile avviso quando si tenta di includere un pacchetto due volte.  Il codice~\ref{cod:pacchetto} mostra un piccolo pacchetto di esempio che
contiene dei comandi simili a quelli definiti negli esempi precedenti.

\section{Caratteri e corpi}
\label{sec:fontsize}

\subsection{Comandi per cambiare carattere}

\index{font}\index{font size} \LaTeX\ sceglie il carattere appropriato e la dimensione più opportuna in base alla struttura logica del documento (sezioni, note a piè di pagina, \ldots). In alcuni casi, però, si potrebbero voler cambiare caratteri e dimensioni a mano. Per fare ciò, si utilizzano i comandi elencati nelle tabelle~\ref{fonts} e~\ref{sizes}. La dimensione effettiva di ciascun carattere è un problema di design e dipende dalla classe del documento e dalle sue opzioni. La tabella~\ref{tab:pointsizes} mostra la dimensione assoluta in punti per questi comandi come implementati nelle classi standard dei documenti.

\begin{example}
{\small I piccoli e
\textbf{coraggiosi} romani
governavano} {\Large per intero
la grande e grossa \textit{Italia}.}
\end{example}

Una importante caratteristica di \LaTeXe\ è che gli attributi del carattere sono indipendenti. Questo significa che è possibile modificare i corpi e il carattere stesso conservando gli attributi grassetto o corsivo specificati in precedenza.

Nel \emph{modo matematico} si possono usare i \emph{comandi} atti a cambiare i caratteri per uscire temporaneamente dal \emph{modo matematico} ed entrare nel normale modo testo. Se si vuole modificare il carattere matematico, è necessario ricorrere a un altro speciale insieme di comandi; si veda la tabella~\ref{mathfonts}.

\begin{table}[!bp]
\caption{Caratteri}\label{fonts}

\medskip

\makebox[\textwidth]{%
\begin{tabular}{@{}rlrl@{}}
\toprule
\fni{textrm}\Marg{...}        &       \textrm{\wi{tondo}}&
\fni{textsf}\Marg{...}        &       \textsf{\wi{senza grazie}}\\
\fni{texttt}\Marg{...}        &       \texttt{typewriter}\\
\midrule
\fni{textmd}\Marg{...}        &       \textmd{medio}&
\fni{textbf}\Marg{...}        &       \textbf{\wi{grassetto}}\\
\fni{textup}\Marg{...}        &       \textup{\wi{dritto}}&
\fni{textit}\Marg{...}        &       \textit{\wi{corsivo}}\\
\fni{textsl}\Marg{...}        &       \textsl{\wi{inclinato}}&
\fni{textsc}\Marg{...}        &       \textsc{\wi{maiuscoletto}}\\
\fni{emph}\Marg{...}          &       \emph{evidenziato} &
\fni{textnormal}\Marg{...}    &       carattere del documento\\
\bottomrule
\end{tabular}%
}
\end{table}


\begin{table}[!tbp]\centering
\index{font size}
\caption{Dimensioni} \label{sizes}

\medskip

\begin{tabular}{@{}ll}
\toprule
\fni{tiny}         & \tiny          carattere minuscolo     \\
\fni{scriptsize}   & \scriptsize    carattere piccolissimo  \\
\fni{footnotesize} & \footnotesize  carattere molto piccolo \\
\fni{small}        & \small         carattere piccolo       \\
\fni{normalsize}   & \normalsize    carattere normale       \\
\fni{large}        & \large         carattere grande        \\
\fni{Large}        & \Large         carattere più grande    \\[5pt]
\fni{LARGE}        & \LARGE         carattere molto grande  \\[5pt]
\fni{huge}         & \huge          carattere grandissimo   \\[5pt]
\fni{Huge}         & \Huge          carattere enorme        \\
\bottomrule
\end{tabular}
\end{table}

\begin{table}[!tbp]\centering
\caption[Corpi in punti]{Misure assolute (arrotondate) in punti dei corpi delle classi standard; il corpo normale è definito nell'opzione di classe; quella predefinita è 10\,pt.}

\medskip

\label{tab:pointsizes}
\label{tab:sizes}
\begin{tabular}{lrrr}
\toprule
\multicolumn{1}{l}{Corpo} &
\multicolumn{1}{c}{10\,pt } &
           \multicolumn{1}{c}{11\,pt}  &
           \multicolumn{1}{c}{12\,pt}\\ \midrule
\fni{tiny}         & 5  &  6 &  6 \\
\fni{scriptsize}   & 7  &  8 &  8 \\
\fni{footnotesize} & 8  &  9 & 10 \\
\fni{small}        & 9  & 10 & 11 \\
\fni{normalsize}   & 10 & 11 & 12 \\
\fni{large}        & 12 & 12 & 14 \\
\fni{Large}        & 14 & 14 & 17 \\
\fni{LARGE}        & 17 & 17 & 20\\
\fni{huge}         & 20 & 20 & 25\\
\fni{Huge}         & 25 & 25 & 25\\
\bottomrule
\end{tabular}
\end{table}


\begin{table}[!tbp]\centering
\caption{Caratteri matematici} \label{mathfonts}\medskip
\begin{tabular}{@{}ll@{}}\toprule
\fni{mathrm}\Marg{...}    &     $\mathrm{Roman\ Font}$\\
\fni{mathbf}\Marg{...}    &     $\mathbf{Boldface\ Font}$\\
\fni{mathsf}\Marg{...}    &     $\mathsf{Sans\ Serif\ Font}$\\
\fni{mathtt}\Marg{...}    &     $\mathtt{Typewriter\ Font}$\\
\fni{mathit}\Marg{...}    &     $\mathit{Italic\ Font}$\\
\fni{mathcal}\Marg{...}   &     $\mathcal{CALLIGRAPHIC\ FONT}$\\
\fni{mathnormal}\Marg{...}&     $\mathnormal{Normal\ Math\ Font}$\\
\bottomrule
\end{tabular}
\end{table}


Insieme ai comandi relativi alle dimensioni, le \wi{parentesi graffe} giocano un ruolo importante. Esse vengono usate per costituire \emph{gruppi}. I gruppi\index{grouping} servono a limitare il raggio d'azione della maggior parte dei comandi di \LaTeX.

\begin{example}
A lui piacciono {\LARGE grandi e
{\small piccole} lettere}.
\end{example}

I comandi relativi alle dimensioni modificano anche la spaziatura fra le righe, ma solo se il capoverso termina all'interno del raggio d'azione del comando stesso. Pertanto, la parentesi deve comparire alla fine del capoverso; se il testo scritto in corpo maggiore del normale è breve e questo testo speciale si trova in linea con il resto del testo, non è necessario usare la graffa chiusa dopo la fine del capoverso. Da notare la posizione del comando \ci{par}\footnote{\cs{par} equivale a una riga vuota.} nei prossimi due esempi dove dovrebbe essere chiarissimo che determina esplicitamente la fine del capoverso, se lo si mette dentro o fuori il gruppo; nel secondo caso la spaziatura fra le righe è troppo piccola perché è quella del corpo normale, non quella del corpo \cs{Large}.

\begin{example}
{\Large Non leggere questo!
 Non è vero.
 Puoi credermi!\par}
\end{example}

\begin{example}
{\Large Neanche questo è vero.
Ma ricordati che sono un
bugiardo.}\par
\end{example}

Se si vuole cambiare il corpo di un intero capoverso di testo o anche più, si ricorre alla versione ambiente dei comandi per cambiare carattere.

\begin{example}
\begin{Large}
Questo non è vero.

Ma d'altra parte, che cosa
lo è di questi tempi? \ldots\par
\end{Large}
\end{example}

\noindent Questo risparmia dal dover contare molte parentesi graffe.

\subsection{Pericolo, pericolo, \dots}
Come rilevato all'inizio di questo capitolo, è pericoloso riempire il documento con comandi espliciti come quelli menzionati finora, perché essi operano in modo antitetico alla filosofia di \LaTeX, che è separare il codice logico da quello estetico del documento. Questo significa che se si usa lo stesso comando per cambiare carattere in luoghi diversi al fine di stampare un tipo speciale di informazione, bisognerebbe usare
\verb|\newcommand|  per definire una sorta di “involucro logico” per comporre quell'informazione.

\begin{example}
\newcommand{\oops}[1]{\textbf{#1}}
Non \oops{entrare} in questa stanza,
è piena di \oops{macchine}
con origine e finalità sconosciute.
\end{example}

Questo approccio ha il vantaggio che si può  decidere  in una  fase successiva di voler usare una rappresentazione estetica di pericolo diversa da \verb|\textbf|; così facendo non è necessario  scorrere l'intero  documento per trovare tutte le istanze di \verb|\textbf| e quindi verificare se sono state usate per indicare pericolo oppure per qualche altro scopo.

È diverso dire a \LaTeX\ di \emph{evidenziare} con \cs{emph} qualcosa e dirgli di usare un \emph{carattere} differente. Il comando \ci{emph} è sensibile al contesto, laddove i comandi per i caratteri sono assoluti.

\begin{example}
\textit{È possibile
  \emph{evidenziare} un testo
  anche se è in corsivo},
\textsf{in un carattere
  \emph{senza grazie,}}
\texttt{oppure in stile
  \emph{macchina da scrivere}.}
\end{example}

\subsection{Consiglio}

Per concludere questo viaggio nella terra dei caratteri e dei loro corpi, aggiungiamo qui un breve consiglio:\nopagebreak

\begin{quote}
  \underline{\textbf{Ricordati\Huge!}} \textit{Quanti}
  \textsf{p\textbf{\LARGE I}\texttt{Ù}} caratteri \Huge scegli
  \tiny di usare \footnotesize \textbf{in} un \small \texttt{documento},
  \large \textit{tanto} \normalsize più \textsc{leggibile} e
  \textsl{\textsf{bello} quel documento \large d\Large iv\LARGE en\huge t\Huge a}.
\end{quote}

\section{Spaziature}

\subsection{Scartamento o avanzamento di riga}

\index{scartamento}\index{avanzamento di riga}Se si vuole aumentare lo scartamento\footnote{In inglese si chiama \emph{baseline skip} che tradotto letteralmente indica l'avanzamento della riga di base fra due linee di testo consecutive.} di un documento, si modifica il suo valore inserendo nel preambolo il comando

\begin{lscommand}
\ci{linespread}\marg{fattore}
\end{lscommand}

Si usa \verb|\linespread{1.3}| per ottenere uno scartamento che visivamente sembra “una volta e mezzo” lo scartamento normale, mentre
{\setfontsize{9}\verb|\linespread{1.6}|} per ottenere uno scartamento che appare “doppio” del normale\index{double line spacing}.  Normalmente, lo \emph{scartamento} è 1,2 volte l'ammontare del \emph{corpo} del font corrente, e questo spiega perché, per esempio, il fattore 1,3 mostra uno scartamento del 50\% superiore al corpo; per riportare lo scartamento al suo valore normale si specifica il \meta{fattore}~1. È ancora meglio se si esegue qualunque modifica del \meta{fattore} dentro un gruppo che ne limiti il raggio d'azione.

L'effetto del comando \ci{linespread} è piuttosto drastico e non appropriato per un normale testo stampato. Di conseguenza, solo se c'è una buona ragione per cambiare lo scartamento, si usa il comando:

\begin{lscommand}
\ci{linespread}\Marg{1.5}\ci{selectfont}
\end{lscommand}

\begin{example}
{\linespread{1.5}\selectfont
Questo paragrafo è stampato
con l'avanzamento di riga impostata
a 1.5 rispetto a quello normale.
Da notare il comando \cs{par} alla
fine del capoverso.\par}

Questo capoverso ha un chiaro
proposito: mostrare come, dopo
che la parentesi graffa è stata
chiusa, ogni cosa torni normale.
\end{example}

%%%%%%%%%%

\subsection{Formattazione dei capoversi}\label{parsp}

In \LaTeX\ ci sono due parametri che influenzano l'aspetto dei capoversi.
Inserendo nel preambolo del file di input una definizione come

\begin{code}
\ci{setlength}\Marg{\ci{parindent}}\Marg{0pt} \\
\ci{setlength}\Marg{\ci{parskip}}\Marg{1ex plus 0.5ex minus 0.2ex}
\end{code}
%
perché il secondo  aumenta lo spazio fra due capoversi, mentre il primo  ne annulla il rientro.

I due parametri \texttt{plus} e \texttt{minus} della lunghezza sopra impostata suggeriscono a \TeX\ che può comprimere ed espandere lo spazio fra i paragrafi al massimo della quantità specificata, se serve che i capoversi stessi riempiano completamente la pagina.

Se i capoversi sono  separati da un po' di spazio anziché rientrati si segue una pratica del tutto sconsigliabile e che che ha effetti collaterali. Infatti, questo produce i suoi effetti anche nell'indice, le cui righe risultano di conseguenza maggiormente spaziate. Per evitare tale effetto, si possono spostare i due comandi dal preambolo all'interno del documento, in un qualche posto al di sotto del comando \cs{tableofcontents} oppure non usarli affatto, perché la maggior parte dei libri di editoria professionale usa il rientro e non la spaziatura per distinguere i capoversi.

Se si vuole far rientrare un capoverso che normalmente non sarebbe rientrato, si usa

\begin{lscommand}
\ci{indent}
\end{lscommand}
%
\noindent all'inizio del capoverso\footnote{Per attivare il rientro del primo capoverso dopo i titoli di sezione, si usa il pacchetto \pai{indentfirst}, contenuto nella raccolta `tools'.}. Ovviamente, questo avrà effetto solo se \verb|\parindent| non è impostato a zero.

Per creare un capoverso privo di rientro, si usa

\begin{lscommand}
\ci{noindent}
\end{lscommand}
\noindent come primo comando del capoverso. Ciò potrebbe essere utile quando si inizia un documento con del testo, anziché con un comando di sezionamento.

\subsection{Spazio orizzontale}\label{sec:hspace}

\LaTeX\ determina automaticamente gli spazi fra parole e frasi. Per aggiungere spazio orizzontale si usa:\index{spazio!orizzontale}

\begin{lscommand}
\ci{hspace}\marg{lunghezza}
\end{lscommand}

Se tale spazio dev'essere conservato anche se cade alla fine o all'inizio di una riga, si usa  la versione asteriscata \ci{hspace*}. La \meta{lunghezza}, nel caso più semplice, non è che un numero seguito da un'unità di misura.

Le più importanti unità di misura sono elencate nella tabella~\ref{units}.
\index{unità di misura}\index{dimensioni}

\begin{example}
Questo\hspace{15mm}è uno spazio
 di 15\,mm.
\end{example}

\begin{table}[tbp]\centering
\caption{\TeX\ Unità di misura}\label{units}\index{units}\medskip

\begin{tabular}{@{}l>{\arraybackslash}p{0.6\textwidth}@{}}
\toprule
\texttt{mm} & millimetro $\approx 1/25$~inch \quad \demowidth{1mm} \\
\texttt{cm} & centimetro = 10~mm  \quad \demowidth{1cm} \\
\texttt{in} & pollice $=$ 25.4~mm \quad \demowidth{1in} \\
\texttt{pt} & punto $\approx 1/72$~pollice $\approx {1}/{3}$~mm  \quad\demowidth{1pt}\\
\texttt{em} & ampiezza approssimativa di una `M' nel carattere corrente, da cui il nome; in realtà è approssimativamente pari al corpo del carattere corrente  \quad \demowidth{1em}\\
\texttt{ex} & altezza approssimativa di una `x' nel carattere corrente, da cui il nome \quad \demowidth{1ex}\\
\midrule
\texttt{mu} & da usarsi solo in matematica come argomento del comando \ci{mkern}, nativo di \TeX; serve per eseguire spaziature fini all'interno di espressioni matematiche: 18\,mu = 1em del font matematico corrente\\
\bottomrule
\end{tabular}
\end{table}


Il comando
\begin{lscommand}\label{cmd:stretch}
\ci{stretch}\marg{fattore}
\end{lscommand}
%
\noindent genera uno speciale spazio elastico. Esso si espande fino a riempire tutto lo spazio residuo di una riga. Se più comandi
\cs{hspace}\Marg{\cs{stretch}\marg{fattore}} vengono usati sulla stessa riga, essi occupano tutto lo spazio disponibile in proporzione ai loro rispettivi fattori di espansione.

\begin{example}
x\hspace{\stretch{1}}
x\hspace{\stretch{3}}x
\end{example}

Quando si usa lo spazio orizzontale assieme al testo, è conveniente che lo
spazio adatti la sua dimensione relativa a quella del carattere corrente. Ciò si fa usando le unità di misura relative al font corrente~\texttt{em} e~\texttt{ex}:

\begin{example}
{\Large spazio am\hspace{1em}pio}\\
{\tiny spazio rido\hspace{1em}tto}
\end{example}

\subsection{Spazio verticale}
Lo spazio fra capoversi, sezioni, sottosezioni, \ldots\ è determinato
automaticamente da \LaTeX. Se serve, si può aggiungere dell'ulteriore spazio verticale \emph{fra due capoversi} col comando:

\begin{lscommand}
\ci{vspace}\marg{lunghezza}
\end{lscommand}

Questo comando andrebbe usato, di norma, fra due righe vuote. Se lo spazio
dev'essere mantenuto all'inizio o alla fine di una pagina, si usa la versione asteriscata del comando: \ci{vspace*}.
\index{spazio!verticale}

Il comando \ci{stretch}\marg{fattore} produce un spazio allungabile indefinitamente con una “forza” che dipende dal \meta{fattore}; può essere usato per centrare verticalmente del testo in una pagina.

\begin{code}
\begin{verbatim}
Un po' di testo\ldots

\vspace{\stretch{1}}
Questo va all'ultima riga della pagina.\newpage
\end{verbatim}
\end{code}

Lo spazio aggiuntivo fra due righe dello \emph{stesso} capoverso o all'interno di una tabella è specificato mediante il comando:

\begin{lscommand}
\texttt{\string\\}\oarg{lunghezza}
\end{lscommand}

Mediante \ci{bigskip}, \ci{medskip} e \ci{smallskip} si aggiunge una quantità predefinita di spazio verticale senza doversi preoccupare di calcolarlo con esattezza.

%%%%

\section{Impostazione della pagina}

\LaTeXe\ consente di specificare la \wi{dimensione del foglio} come opzione al comando \verb|\documentclass|. Esso imposta i \wi{margini} corretti, ma talvolta i valori predefiniti possono non essere soddisfacenti per un dato documento. Naturalmente, essi possono essere modificati.
La figura~\ref{fig:layout} mostra tutti i parametri che possono essere modificati. La figura è stata prodotta grazie al pacchetto \pai{layout}, della raccolta tools.\footnote{\CTAN|macros/latex/required/tools|.}

\supaginapari{%
  \begin{figure}[!hp]
  \begin{center}
  \csname lay@layout\endcsname
  \end{center}

  \vspace{10mm}

  \caption[Parametri per l'impostazione delle pagine di questo libro]%
  {Parametri per l'impostazione delle pagine di questa guida. Il
  pacchetto \pai{layouts} stampa le impostazioni della pagina del
  documento corrente.}
  \label{fig:layout}
  \cih{footskip}  \cih{headheight}  \cih{headsep}  \cih{marginparpush}
  \cih{marginparsep}  \cih{marginparwidth}  \cih{oddsidemargin}
  \cih{paperheight}  \cih{paperwidth}  \cih{textheight}
  \cih{textwidth}  \cih{topmargin}  \index{layout della pagina}
  \end{figure}
}

\textbf{Un attimo!} Prima di lanciarsi nella frenesia del “Rendiamo un po' più larga questa pagina così stretta”, è opportuno soffermarsi a riflettere qualche secondo. Come per la maggior parte delle cose in \LaTeX, c'è una buona ragione perché l'aspetto della pagina sia così com'è.

Certo, rispetto alla pagina predefinita dei word processor, essa sembra terribilmente stretta. Ma se si dà un'occhiata al proprio libro preferito\footnote{Un vero libro stampato, prodotto da un buon editore.} e si conta il numero di caratteri presenti su una riga di testo standard, si scoprirà che non c'è più di una settantina di caratteri all'incirca per ogni riga. Se si fa lo stesso con una pagina di \LaTeX, allo stesso modo si scoprirà che anche qui c'è circa lo stesso numero di caratteri. L'esperienza mostra che la lettura diventa tanto più difficoltosa quanto più numerosi sono i caratteri. È difficile per gli occhi spostarsi dalla fine di una lunga riga fino all'inizio di quella successiva; questo è anche il motivo per cui i giornali sono composti in più colonne relativamente strette.

Quindi, se si aumenta la larghezza del corpo di testo, si rende difficile la vita ai lettori.

Ma per non eccedere in cautela, e visto che abbiamo promesso di dire come
fa\ldots

\LaTeX\ fornisce due comandi per modificare questi parametri, che solitamente sono usati nel preambolo del documento.

Il primo comando attribuisce un valore fisso a un qualsiasi parametro dimensionale:

\begin{lscommand}
\ci{setlength}\marg{parametro}\marg{lunghezza}
\end{lscommand}

Il secondo comando aggiunge una determinata lunghezza a un qualsiasi parametro dimensionale:

\begin{lscommand}
\ci{addtolength}\marg{parametro}\marg{lunghezza}
\end{lscommand}

Questo secondo comando è in genere più utile di \ci{setlength}, perché opera sui valori già impostati. Per ampliare di un centimetro l'ampiezza complessiva del testo si inseriscono nel preambolo del documento i seguenti comandi:

\begin{code}
\verb|\addtolength{\hoffset}{-5mm}|\\
\verb|\addtolength{\textwidth}{10mm}|
\end{code}

In questo ambito è possibile prendere in considerazione il pacchetto \pai{calc}.
Esso consente di effettuare operazioni aritmetiche nell'argomento di
\ci{setlength} e in altri luoghi dove, negli argomenti di una funzione, sono inseriti dei valori numerici. Almeno dal 2009, l'estensione \eTeX\ all'interprete \TeX\ è stata incorporata in tutti gli altri programmi di composizione, quindi basta consultarne la documentazione per conoscere i nuovi comandi; nel 2018 si è reso disponibile anche il pacchetto \pai{xfp}, che consente di eseguire direttamente i calcoli con numeri reali in virgola mobile (\emph{floating point}).

\section{Altro divertimento con le lunghezze}
Dove possibile, è preferibile evitare di usare lunghezze assolute nei documenti \LaTeX. È meglio basarsi sulla larghezza o sull'altezza di qualche elemento della pagina: ad esempio, la larghezza di una figura potrebbe essere impostata a \verb|\textwidth| per farne riempire orizzontalmente la griglia di stampa.

I tre comandi che seguono consentono di determinare l'ampiezza, l'altezza e la profondità di una stringa di \meta{testo}.

\begin{lscommand}
\ci{settoheight}\marg{sequenza di controllo}\marg{testo}\\
\ci{settodepth}\marg{sequenza di controllo}\marg{testo}\\
\ci{settowidth}\marg{sequenza di controllo}\marg{testo}
\end{lscommand}
\noindent Con \meta{sequenza di controllo} si intende una stringa che ha le stesse caratteristiche del nome di un comando, ma che designa, per esempio, un registro\discretionary{-}{}{-}lunghezza; per esempio, la sequenza di controllo \cs{textwidth} individua il contenuto di un tale registro nel quale è conservato il valore della larghezza della gabbia del testo; il valore conservato in tali registri si può scrivere nel documento facendone precedere il nome dal comando \ci{the}. 
\begin{example}
In questo testo la larghezza 
della gabbia vale 
\texttt{\the\textwidth}.
\end{example}
\noindent Nell'esempio appena mostrato si legge che la giustezza vale \texttt{181,39386pt}; si tratta della giustezza del riquadro dell'esempio; in realtà, usando il comando \verb|\the\textwidth| fuori dell'esempio, il risultato è \texttt{\the\textwidth}.

L'esempio che segue mostra una possibile applicazione di questi
comandi:
\begin{example}
\newenvironment{vardesc}[1]{%
  \settowidth{\parindent}{#1:\ }%
  \makebox[0pt][r]{#1:\ }%
  \ignorespaces}{}%
La formula di Pitagora lega le
misure dei cateti a quella 
dell'ipotenusa di un triangolo 
rettangolo:
\[
a^2+b^2=c^2
\]

\begin{vardesc}{dove}
$a$, $b$ -- sono i cateti
del triangolo.

$c$ -- è l'ipotenusa del triangolo.

$d$ -- non c'entra niente.
\end{vardesc}
\end{example}

%%%%%%%%%%%%%%

\section{Scatole}

\LaTeX\ costruisce le sue pagine racchiudendo tutto in scatole. Dapprima,
ciascuna lettera è una piccola scatola, che viene poi incollata ad altre lettere per formare parole. Queste ultime sono a loro volta incollate ad altre parole, ma con una colla speciale, che è elastica perché una serie di parole possa essere ristretta o espansa per riempire esattamente una linea sulla pagina.

Certo, questa è una versione molto semplicistica di ciò che realmente
accade, ma il punto è che \TeX\ funziona in base a colla e scatole. Le lettere non sono le uniche cose che possono essere inscatolate. Si può mettere praticamente tutto in una scatola, comprese altre scatole. Ogni scatola sarà gestita da \LaTeX\ come se fosse una singola lettera.

Nei capitoli precedenti abbiamo incontrato alcune scatole, benché ciò non sia stato detto esplicitamente. Ad esempio, sia l'ambiente \ei{tabular} sia \ci{includegraphics} producono entrambi una scatola. Ciò significa che è possibile collocare con facilità due tabelle o immagini affiancate. Basta solo assicurarsi che la loro larghezza complessiva non sia maggiore della larghezza del testo.

È possibile anche inserire un capoverso a piacere in una scatola col comando:

\begin{lscommand}
\ci{parbox}\oarg{pos}\marg{larghezza}\marg{testo}
\end{lscommand}

\noindent oppure con l'ambiente:

\begin{lscommand}
\cs{begin}\Marg{\ei{minipage}}\oarg{pos}\marg{larghezza}\\
\meta{testo}\\
\cs{end}\Marg{minipage}
\end{lscommand}

Il parametro \meta{pos} può assumere una delle lettere \texttt{c, t} oppure \texttt{b} per controllare l'allineamento verticale della scatola, relativo alla linea di base del testo circostante. L'argomento \meta{larghezza} prende un valore che specifica la larghezza della scatola. La differenza principale tra \ei{minipage} e \ci{parbox} è che non si possono usare tutti i comandi e gli ambienti all'interno di \ei{parbox}, mentre dentro \ei{minipage} si può usare praticamente tutto.

Mentre \ci{parbox} e \ei{minipage} possono racchiudere anche un intero capoverso, consentendo l'interruzione di linea, e qualsiasi altra cosa valida in un capoverso, esiste anche una classe di comandi di inscatolamento che opera solo su materiale allineato orizzontalmente. Ne conosciamo già un paio: sono \ci{mbox} e \ci{makebox}.  Questi comandi  possono essere annidati l'uno nell'altro, così che si possono ottenere effetti speciali ricorrendo a questi “trucchi”. Uno degli usi più noti di \cs{mbox} consiste nel racchiudere una parola in modo che essa non possa subire una cesura a fine riga.

Nel comando
%
\begin{lscommand}
\ci{makebox}\marg{larghezza}\oarg{pos}\marg{testo}
\end{lscommand}
%
\noindent \texttt{larghezza} definisce la larghezza della scatola risultante, come vista dall'esterno.\footnote{Ciò significa che essa può essere più piccola del contenuto della scatola. Si può persino impostare la sua larghezza di 0pt, in modo che il testo all'interno della scatola sarà composto con una posizione precisa, ma che può sovrapporsi al testo circostante.} Oltre alle espressioni di lunghezza si possono usare anche \ci{width}, \ci{height}, \ci{depth} e \ci{totalheight} nel parametro \meta{larghezza}. Essi sono impostati dai valori ottenuti misurando il \meta{testo} composto. Il parametro \emph{pos} assume un valore di una lettera: \textbf{c}enter (testo centrato), flush\textbf{l}eft (testo allineato a sinistra), flush\textbf{r}ight (testo allineato a destra), e infine \textbf{s}pread (parole \textbf{s}paziate che in linguaggio tipografico diventa “giustificazione forzata”) per riempire la scatola.

Il comando \ci{framebox} opera esattamente allo stesso modo di \ci{makebox}, ma disegna una cornice attorno al testo.

Il seguente esempio mostra alcune delle cose che si possono fare con i comandi \ci{makebox} e \ci{framebox}:

\begin{example}\parindent=0pt
\makebox[\textwidth]{%
    c e n t r a t o}\par
\makebox[\textwidth][s]{%
    a l l a r g a t o}\par
\framebox[1.26\width][c]{Credo che mi
 abbiano ingabbiato!} \par
\framebox[0.8\width][r]{Caspita,
    sono troppo largo} \par
\framebox[1cm][l]{Non preoccuparti,
    anch'io}
    Riesci a leggere questo?
\end{example}
Si possono usare nell'argomento anche dei comandi di spaziatura, per esempio \ci{hfil}, \ci{hfill}, o \ci{hfilll}; si tratta di spazi elastici con larghezza naturale nulla e allargamento “infinito”. Al variare del numero delle “l”, la loro spinta di allargamento diventa “più forte”.

\begin{example}
\framebox[\textwidth][c]{parola
    parola}\par
\framebox[\textwidth][c]{parola\hfil
    parola}\par
\framebox[\textwidth][c]{parola\hfill
    parola}
\end{example}


Ora che sappiamo controllare l'orizzontale, ovviamente il prossimo passo è
provvedere al controllo del verticale. Nessun problema per \LaTeX. Il comando:
%
\begin{lscommand}\setfontsize{8.9}
\ci{raisebox}\marg{sollevamento}\oarg{sopra-la-linea-di-base}\oarg{sotto-la-linea-di-base}\marg{testo}
\end{lscommand}
%
\noindent consente di definire le proprietà verticali di una scatola. Si  può ricorrere a \ci{width}, \ci{height}, \ci{depth} e a \ci{totalheight} per i primi tre parametri, in modo da manipolare la dimensione della scatola contenuta all'interno dell'argomento \emph{testo}.


\begin{example}
\raisebox{0pt}[0pt][0pt]{\Large%
\textbf{Aaaa\raisebox{-0.2ex}{a}%
\raisebox{-0.6ex}{a}%
\raisebox{-0.9ex}{a}%
\raisebox{-1.4ex}{r}%
\raisebox{-2.2ex}{g}%
\raisebox{-4.5ex}{h}}}
gridò, ma neanche il suo successore
sulla riga notò che gli era successo 
qualcosa di terribile.
\end{example}


\section{Linee}
\label{sec:rule}

Alcune pagine addietro si è fatto ricorso al comando:

\begin{lscommand}
\ci{rule}\oarg{sollevamento}\marg{larghezza}\marg{altezza}
\end{lscommand}
%
\noindent Nell'uso normale esso produce una semplice scatola nera.

\begin{example}
\rule{3mm}{0.1pt}%
\rule[-1mm]{5mm}{1cm}%
\rule{3mm}{0.1pt}%
\rule[1mm]{1cm}{5mm}%
\rule{3mm}{0.1pt}
\end{example}
%
\noindent Ciò è utile per disegnare linee orizzontali e verticali. La linea sulla pagina del titolo di questo manualetto, ad esempio, è stata creata col comando \ci{rule}.

\bigskip
{\flushright Fine\label{pag:Fine}\par}
%
\endinput