%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Contents: Personalizzazione del LaTeX % Translated by: Giuseppe Bilotta % $Id: custom.tex,v 1.15 2000/05/19 11:53:54 guild Exp $ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \chapter{Personalizzare il \LaTeX} \begin{intro} I documenti prodotti usando i comandi appresi finora saranno accettati da una larga fascia di persone. Sebbene non abbiano un aspetto fantasioso, obbediscono alle leggi della buona tipografia, cosa che li rende facili da leggere e piacevoli da guardare. Ci sono tuttavia situazioni in cui il \LaTeX{} non fornisce comandi o ambienti adatti alle intenzioni dell'autore, o in cui il risultato di un comando esistente non ne soddisfa le esigenze. In questo capitolo verranno esposti alcuni suggerimenti su come insegnare al \LaTeX{} nuovi trucchi, e su come fare in modo che produca risultati diversi da quelli predefiniti. \end{intro} \section{Comandi, ambienti e pacchetti nuovi} Si nota subito che tutti i comandi introdotti in questo libro sono scritti in un riquadro, e che sono poi elencati in un indice in fondo al libro. Invece di usare direttamente i comandi \LaTeX{} necessari, \`e stato creato un \wi{pacchetto} in cui sono stati definiti nuovi comandi ed ambienti per questo scopo; cos\`{\i}, si pu\`o scrivere semplicemente: \begin{example} \begin{command} \ci{dum} \end{command} \end{example} In questo esempio \`e stato usato un nuovo ambiente, chiamato \ei{command}, che disegna il riquadro attorno al comando, ed un nuovo comando, chiamato \ci{ci}, che scrive il nome del comando ed inserisce la voce corrispondente nell'indice. Ci\`o pu\`o essere verificato andando a cercare il comando \ci{dum} nell'indice in fondo al libro, dove si pu\`o trovare la voce \ci{dum}, con riferimenti ad ogni pagina dove il comando \ci{dum} \`e stato citato. Se in un qualunque momento si decidesse di non volere pi\`u un riquadro attorno ai comandi, si pu\`o semplicemente cambiare la definizione dell'ambiente \texttt{command}, per dargli un nuovo aspetto; ci\`o \`e molto pi\`u semplice di dover andare a sostituire i comandi usati per disegnare il riquadro in ogni singolo posto in cui sono stati usati. \subsection{Nuovi comandi} Per aggiungere comandi personali, si usa il comando \begin{command} \ci{newcommand}\verb|{|% \emph{nome}\verb|}[|\emph{num}\verb|]{|\emph{definizione}\verb|}| \end{command} Il comando richiede due argomenti: il \emph{nome} del nuovo comando, e la \emph{definizione} del comando. L'opzione \emph{num} in parentesi quadre \`e opzionale, e specifica il numero di argomenti che il nuovo comando richiede (fino ad un massimo di 9); se manca, si assume il valore predefinito 0, ossia nessun argomento. I due esempi seguenti dovrebbero rendere l'idea. Il primo esempio definisce un nuovo comando, chiamato \ci{umtb}, che \`e l'abbreviazione di ``Una (mica tanto) breve introduzione al \LaTeXe''; un comando simile potrebbe essere utile se si dovesse scrivere ripetutamente il titolo di questo libro. \begin{example} \newcommand{\umtb}{Una (mica tanto) breve introduzione al \LaTeXe} Questa \`e ``\umtb'' \ldots{} ``\umtb'' \end{example} Il prossimo esempio mostra come definire un comando che accetta argomenti. Il parametro \verb|#1| viene sostituito dal primo argomento specificato; nel caso di pi\`u argomenti, questi diventano \verb|#2|, \verb|#3|, \ldots{} e cos\`{\i} via. \begin{example} \newcommand{\txsit}[1] {Questa \`e una \emph{#1} breve introduzione al \LaTeXe} % nel corpo del documento: \begin{itemize} \item \txsit{(mica tanto)} \item \txsit{molto} \end{itemize} \end{example} Il \LaTeX{} non permette di creare nuovi comandi che sovrascrivano quelli gi\`a esistenti; c'\`e per\`o un comando speciale, da usare nel caso in cui ci\`o si voglia esplicitamente fare: \ci{renewcommand}; la sintassi \`e la stessa di \verb|\newcommand|. In certi casi, conviene usare il comando \ci{providecommand}: funziona come \ci{newcommand}, ma viene silenziosamente ingorato dal \LaTeXe{} se il comando definito esiste gi\`a. Ci sono alcune osservazioni da fare sugli spazi seguenti un comando \LaTeX{}. Per maggiori informazioni, vedere pagina \pageref{whitespace}. \subsection{Nuovi ambienti} Il comando \ci{newenvironment}, corrispondente di \verb|\newcommand|, permette di creare ambienti personali. La sua sintassi \`e la seguente: \begin{command} \ci{newenvironment}\verb|{|% \emph{nome}\verb|}[|\emph{num}\verb|]{|% \emph{prima}\verb|}{|\emph{dopo}\verb|}| \end{command} Come per \verb|\newcommand|, il comando \ci{newenvironment} si pu\`o usare con o senza un argomento opzionale. Ci\`o che viene specificato nell'argomento \emph{prima} viene elaborato prima del testo dell'ambiente; ci\`o che viene specificato nell'argomento \emph{dopo} viene elaborato quando viene incontrato il comando \verb|\end{|\emph{nome}\verb|}|. Il seguente esempio mostra l'uso del comando \ci{newenvironment}: \begin{example} \newenvironment{regio} {\rule{1ex}{1ex}% \hspace{\stretch{1}}} {\hspace{\stretch{1}}% \rule{1ex}{1ex}} \begin{regio} Miei umili sudditi\ldots \end{regio} \end{example} L'argomento \emph{num} si usa come nel comando \verb|\newcommand|. Il \LaTeX{} si assicura che non venga definito un ambiente gi\`a esistente: se si vuole cambiare un ambiente gi\`a definito, si usa il comando \ci{renewenvironment}, che ha la stessa sintassi di \ci{newenvironment}. I comandi usati in questo esempio verranno spiegati pi\`u avanti: il comando \ci{rule} a pagina \pageref{sec:rule}, \ci{stretch} a pagina \pageref{cmd:stretch}, \ci{hspace} a pagina \pageref{sec:hspace}. \subsection{Un pacchetto personale} Quando vengono definiti molti nuovi ambienti e comandi, il preambolo del documento pu\`o diventare piuttosto lungo; in questo caso, \`e una buona idea creare un pacchetto \LaTeX{} contenente le definizioni dei propri comandi ed ambienti; si pu\`o poi usare il comando \ci{usepackage} per rendere il pacchetto disponibile nel documento. \begin{figure}[!htbp] \begin{lined}{\textwidth} \begin{verbatim} % Pacchetto dimostrativo di Tobias Oetiker \ProvidesPackage{demopack} \newcommand{\lntc}{Una (mica tanto) breve introduzione al \LaTeXe} \newcommand{\txsit}[1]{Una \emph{#1} breve introduzione al \LaTeXe} \newenvironment{regio}{\begin{quote}}{\end{quote}} \end{verbatim} \end{lined} \caption{Esempio di pacchetto} \label{package} \end{figure} Essenzialmente, per scrivere un pacchetto si copia il contenuto del preambolo del documento in un file a parte, con un nome terminante per \texttt{.sty}. C'\`e poi il comando speciale \begin{command} \ci{ProvidesPackage}\verb|{|\emph{nome pacchetto}\verb|}| \end{command} \noindent da usare all'inizio del file contenente pacchetto. \verb|\ProvidesPackage| dice al \LaTeX{} il nome del pacchetto, permettendogli di emettere messaggi di errore appropriati quando si tenta di includere due volte lo stesso pacchetto. In figura~\ref{package} \`e mostrato un piccolo pacchetto di esempio, contenente i comandi definiti precedentemente. \section{Caratteri} \subsection{Comandi per cambiare il carattere} \index{carattere}\index{corpo} Il \LaTeX{} sceglie il carattere appropriato, con l'opportuna dimensione, in base alla struttura logica del documento (sezioni, note a pi\`e di pagina, \ldots). In alcuni casi, si potrebbe per\`o voler cambiare il carattere ed il corpo, manualmente; per far ci\`o, si possono usare i comandi elencati nelle tabelle~\ref{fonts} e~\ref{sizes}. Il corpo effettivo di ogni carattere \`e una questione di design, e dipende dalla classe del documento e dalle sue opzioni; in tabella~\ref{tab:pointsizes} sono elencati i corpi in punti per questi comandi, configurate dalle cassi standard. \begin{example} {\small I piccoli e % \textbf{coraggiosi} Romani governavano} {\Large tutta la grande e grossa \textit{Italia}.} \end{example} Un'importante caratteristica del \LaTeXe{} \`e che gli attributi dei font sono indipendenti: \`e cio\`e possibile specificare comandi per cambiare le dimensioni e persino il carattere, mantenendo gli attributi di grassetto o corsivo specificati prima. In modalit\`a matematica (\emph{math mode}) si possono usare i comandi di cambiamento dei caratteri per uscire temporaneamente dal \emph{math mode} ed inserire testo normale. Se si vuole usare un carattere diverso per la matematica, esistono comandi specifici, elencati nella tabella~\ref{mathfonts}. \begin{table}[!bp] \caption{Caratteri (tono e direzione)} \label{fonts} \begin{lined}{12cm} % % Alan suggested not to tell about the other form of the command % eg \verb|\sffamily| or \verb|\bfseries|. This seems a good thing to me. % \begin{tabular}{@{}rl@{\qquad}rl@{}} \ci{textrm}\verb|{...}| & \textrm{\wi{romano}}& \ci{textsf}\verb|{...}| & \textsf{\wi{sans serif}}\\ \ci{texttt}\verb|{...}| & \texttt{typewriter}\\[6pt] \ci{textmd}\verb|{...}| & \textmd{normale}& \ci{textbf}\verb|{...}| & \textbf{\wi{grassetto}}\\[6pt] \ci{textup}\verb|{...}| & \textup{\wi{tondo}}& \ci{textit}\verb|{...}| & \textit{\wi{corsivo}}\\ \ci{textsl}\verb|{...}| & \textsl{\wi{inclinato}}& \ci{textsc}\verb|{...}| & \textsc{\wi{maiuscoletto}}\\[6pt] \ci{emph}\verb|{...}| & \emph{enfatizzato} & \ci{textnormal}\verb|{...}| & font del \textnormal{documento} \end{tabular} \bigskip \end{lined} \end{table} \begin{table}[!bp] \index{corpo} \caption{Dimensioni} \label{sizes} \begin{lined}{12cm} \begin{tabular}{@{}ll} \ci{tiny} & \tiny font minuscolo\\ \ci{scriptsize} & \scriptsize font molto piccolo\\ \ci{footnotesize} & \footnotesize font abbastanza piccolo\\ \ci{small} & \small font piccolo\\ \ci{normalsize} & \normalsize font normale\\ \ci{large} & \large font grande \end{tabular}% \qquad\begin{tabular}{ll@{}} \ci{Large} & \Large font pi\`u grande\\[5pt] \ci{LARGE} & \LARGE font molto grande\\[5pt] \ci{huge} & \huge enorme \\[5pt] \ci{Huge} & \Huge il pi\`u grande \end{tabular} \bigskip \end{lined} \end{table} \begin{table}[!tbp] \caption{Dimensioni assolute in punti (corpi) nelle classi standard}\label{tab:pointsizes} \label{tab:sizes} \begin{lined}{12cm} \begin{tabular}{lrrr} \multicolumn{1}c{corpo} & \multicolumn{1}c{10pt (predefinito) } & \multicolumn{1}c{opzione 11pt} & \multicolumn{1}c{opzione 12pt}\\ \verb|\tiny| & 5pt & 6pt & 6pt\\ \verb|\scriptsize| & 7pt & 8pt & 8pt\\ \verb|\footnotesize| & 8pt & 9pt & 10pt \\ \verb|\small| & 9pt & 10pt & 11pt \\ \verb|\normalsize| & 10pt & 11pt & 12pt \\ \verb|\large| & 12pt & 12pt & 14pt \\ \verb|\Large| & 14pt & 14pt & 17pt \\ \verb|\LARGE| & 17pt & 17pt & 20pt\\ \verb|\huge| & 20pt & 20pt & 25pt\\ \verb|\Huge| & 25pt & 25pt & 25pt\\ \end{tabular} \bigskip \end{lined} \end{table} \begin{table}[!bp] \caption{Caratteri matematici.} \label{mathfonts} \begin{lined}{\textwidth} \begin{tabular}{@{}lll@{}} \textit{Comando}&\textit{Esempio}& \textit{Risultato}\\[6pt] \ci{mathcal}\verb|{...}|& \verb|$\mathcal{B}=c$|& $\mathcal{B}=c$\\ \ci{mathrm}\verb|{...}|& \verb|$\mathrm{K}_2$|& $\mathrm{K}_2$\\ \ci{mathbf}\verb|{...}|& \verb|$\sum x=\mathbf{v}$|& $\sum x=\mathbf{v}$\\ \ci{mathsf}\verb|{...}|& \verb|$\mathsf{G\times R}$|& $\mathsf{G\times R}$\\ \ci{mathtt}\verb|{...}|& \verb|$\mathtt{L}(b,c)$|& $\mathtt{L}(b,c)$\\ \ci{mathnormal}\verb|{...}|& \verb|$\mathnormal{R_{19}}\neq R_{19}$|& $\mathnormal{R_{19}}\neq R_{19}$\\ \ci{mathit}\verb|{...}|& \verb|$\mathit{ffi}\neq ffi$|& $\mathit{ffi}\neq ffi$ \end{tabular} \bigskip \end{lined} \end{table} Insieme ai comandi di specifica dei caratteri, le \wi{parentesi graffe} hanno un ruolo importante: vengono usate per costruire \emph{gruppi}; i gruppi limitano il raggio d'azione della maggior parte dei comandi \LaTeX{}.\index{gruppi} \begin{example} Gli piacciono {\LARGE grandi e {\small piccole}, le lettere}. \end{example} I comandi per il cambiamento della dimensione cambiano anche l'interlinea, ma solo se il paragrafo termina entro il raggio d'azione del comando; di conseguenza, la parentesi graffa chiusa non dovrebbe essere messa troppo presto: osservate la posizione del comando \verb|\par| nei due seguenti esempi. \begin{example} {\Large Non leggere questo! Non \`e vero! Puoi credermi!\par} \end{example} \begin{example} {\Large Neanche questo \`e vero. Ma ri\-cor\-da che sono un bugiardo.} \end{example} Se si desidera cambiare la dimensione del carattere per un intero paragrafo, o pi\`u, conviene usare la versione ambiente dei comandi di cambiamento: \begin{example} \begin{Large} Questo non \`e vero. Ma d'altra parte, cosa lo \`e, di questi tempi\ldots \end{Large} \end{example} \noindent Questo vi salver\`a dal dover contare innumerevoli parentesi graffe. \subsection{Pericolo, Will Robinson, Pericolo} Come osservato all'inizio di questo capitolo, \`e pericoloso ingombrare il documento con comandi espliciti come quelli elencati finora, perch\'e lavorano in contrasto alla filosofia del \LaTeX{}, che consiste nel separare l'aspetto logico e visivo del documento. Questo significa che se si utilizza lo stesso tipo di carattere in pi\`u punti, sempre per lo stesso tipo di informazione, \`e opportuno usare \verb|\newcommand| per definire un ``guscio logico'' per il comando di cambiamento del carattere. \begin{example} \newcommand{\oops}[1]{\textbf{#1}} Non \oops{entrare} in questa stanza, \`e abitata da una \oops{macchina} la cui origine ed il cui scopo sono sconosciuti. \end{example} Questo modo di fare ha il vantaggio che, se in seguito si decide di usare un'altra rappresentazione visiva del pericolo, lo si pu\`o fare senza cercare nel documento tutte le istanze di \verb|\textbf| per poi vedere se \`e stato usato per il pericolo o per qualche altra ragione. \subsection{Consiglio} Per concludere il nostro viaggio nella terra dei caratteri e dei corpi, ecco un piccolo consiglio:\nopagebreak \begin{quote} \underline{\textbf{Ricorda\Huge!}} \textit{tanti} \textsf{P\textbf{\LARGE i} \texttt{u}\textsl{\'}} font \Huge scegli \tiny di usare \footnotesize \textbf{in} un \small \texttt{documento}, \large \textit{tanto} \normalsize pi\`u \textsc{leggibile} e \textsl{\textsf{bello} div\large e\Large n\LARGE t\huge a}. \end{quote} \section{Spaziatura} \subsection{Interlinea} \index{interlinea} Se si vuole cambiare l'interlinea di un documento, si pu\`o usare il comando \begin{command} \ci{linespread}\verb|{|\emph{fattore}\verb|}| \end{command} \noindent nel preambolo; l'interlinea ``uno e mezzo'' si ottiene con \verb|\linespread{1.3}|, interlinea due con \verb|\linespread{1.6}|. L'interlinea normale si ottiene con un fattore~1.\index{interlinea doppia} \subsection{Formattazione dei paragrafi}\label{parsp} Il \LaTeX{} ha due parametri che influenzano l'aspetto dei paragrafi, che possono essere modificati con istruzioni del tipo \begin{code} \ci{setlength}\verb|{|\ci{parindent}\verb|}{0pt}| \\ \verb|\setlength{|\ci{parskip}\verb|}{1ex plus 0.5ex minus 0.2ex}|. \end{code} Lo scopo di queste istruzioni \`e di aumentare lo spazio tra paragrafi e di ridurre a zero il rientro iniziale, come richiesto dalle regole tipografiche di alcuni paesi dell'Europa continentale; bisogna per\`o stare attenti all'effetto che queste istruzioni hanno sull'indice: anche le sue voci vengono maggiormente spaziate; per evitare questo effetto, si possono spostare le due istruzioni precedenti da qualche parte dopo il comando \verb|\tableofcontents|, oppure li si pu\`o evitare del tutto, poich\'e la maggior parte dei libri professionali usano un rientro iniziale ed una spaziatura normale fra paragrafi. Se si vuole rientrare un paragrafo che non verrebbe normalmente rientrato, si pu\`o usare il comando \begin{command} \ci{indent} \end{command} \noindent all'inizio del paragrafo\footnote{Per attivare il rientro del primo paragrafo dopo ogni titolo di sezione, si pu\`o usare il pacchetto \pai{indentfirst} del gruppo `tools'.}. Ovviamente, ci\`o avr\`a un qualche effetto solo se \verb|\parindent| non \`e impostata a zero. Per creare un paragrafo senza rientro, si usa il comando \begin{command} \ci{noindent} \end{command} \noindent all'inizio del paragrafo; questo pu\`o tornare utile quando si voglia iniziare un documento direttamente con il testo, e non con un comando di sezione. \subsection{Spazio orizzontale} \label{sec:hspace} Il \LaTeX{} determina automaticamente lo spazio tra parole e frasi; se si vuole aggiungere spazio orizzontale, si usa: \index{orizzontale!spazio} \begin{command} \ci{hspace}\verb|{|\emph{lungh}\verb|}| \end{command} Qualora lo spazio debba essere mantenuto anche quando capita alla fine o all'inizio di una riga, si usa il comando \verb|\hspace*| invece di \verb|\hspace|. \emph{lungh}, nel caso pi\`u semplice, \`e solo un numero seguito da un'unita di misura (le principali unit\`a di misura sono elencate nella tabella~\ref{units}.) \index{unit\`a}\index{dimensioni} \begin{example} Questo\hspace{1.5cm}\`e uno spazio di 1,5 cm. \end{example} \suppressfloats \begin{table}[tbp] \caption{Unit\`a di misura del \TeX{}.} \label{units}\index{unit\`a} \begin{lined}{9.5cm} \begin{tabular}{@{}ll@{}} \texttt{mm} & millimetro $\approx 1/25$~pollici \quad \demowidth{1mm} \\ \texttt{cm} & centimetro = 10~mm \quad \demowidth{1cm} \\ \texttt{in} & pollice (\emph{inch}) $=$ 25,4~mm \quad \demowidth{1in} \\ \texttt{pt} & punto $\approx 1/72$~pollici $\approx \frac{1}{3}$~mm \quad\demowidth{1pt}\\ \texttt{em} & (circa) larghezza di `M' nel font attuale \quad \demowidth{1em}\\ \texttt{ex} & (circa) altezza di `x' nel font attuale \quad \demowidth{1ex} \end{tabular} \bigskip \end{lined} \end{table} \label{cmd:stretch} Il comando \begin{command} \ci{stretch}\verb|{|\emph{n}\verb|}| \end{command} \noindent genera uno speciale spazio elastico, che si allunga finch\'e tutto lo spazio rimanente sulla riga non viene eliminato; se due comandi \verb|\hspace{\stretch{|\emph{n}\verb|}}| vengono usati sulla stella linea, si allungano proporzionalmente al fattore di elasticit\`a. \begin{example} x\hspace{\stretch{1}} x\hspace{\stretch{3}}x \end{example} \subsection{Spazio verticale} Lo spazio tra paragrafi, sezioni, sottosezioni, \ldots\ viene determinato automaticamente dal \LaTeX; se necessario, si pu\`o aggiungere pi\`u spazio \emph{tra due paragrafi} con il comando: \begin{command} \ci{vspace}\verb|{|\emph{lungh}\verb|}| \end{command} Normalmente, questo comando va usato tra due righe vuote; se lo spazio deve essere conservato in cima o in fondo alla pagina, \`e bene usare la versione con asterisco del comando: \verb|\vspace*| invece di \verb|\vspace|. \index{verticale!spazio} Il comando \verb|\stretch|, usato insieme a \verb|\pagebreak|, permette di scrivere testo sull'ultima riga di una pagina, o centrato verticalmente sulla pagina. \begin{code} \begin{verbatim} Un po' di testo\ldots \vspace{\stretch{1}} Questo va in fondo alla pagina.\pagebreak \end{verbatim} \end{code} Spazio aggiuntivo tra due linee dello \emph{stesso} paragrafo (o tabella) viene specificato da \begin{command} \ci{\bs}\verb|[|\emph{lungh}\verb|]|. \end{command} \section{Layout di pagina} \begin{figure}[!hp] \begin{center} \makeatletter\@layout\makeatother \end{center} \vspace*{1.8cm} \caption{Parametri del layout di pagina.} \label{fig:layout} \end{figure} \index{layout di pagina} Il \LaTeXe{} permette di specificare le \wi{dimensioni del foglio} nel comando \verb|\documentclass|, e sceglie poi di conseguenza i \wi{margini} giusti; certe volte, tuttavia, si potrebbe non essere soddisfatti dei valori predefiniti, e naturalmente questi si possono cambiare. %no idea why this is needed here ... \thispagestyle{fancyplain}In figura~\ref{fig:layout} sono indicati tutti i parametri che possono essere cambiati. La figura \`e stata prodotta usando il pacchetto \pai{layout} del gruppo `tools'% \footnote{\url{CTAN:/tex-archive/macros/latex/packages/tools}}. \textbf{CALMA!}\ldots prima di buttarsi nella frenesia dell' ``Allarghiamo un po' questa strettissima pagina'' \`e bene riflettere un attimo. Come per la maggior parte delle cose in \LaTeX, c'\`e una buona ragione per cui il layout della pagina \`e quello che \`e. Certo, paragonato ad una pagina creata da \emph{MS Word}, sembra mostruosamente stretta; ma basta dare un'occhiata ad uno qualsiasi dei propri libri\footnote{Libri veri, stampati da case editrici serie.} preferiti e contare il numero di caratteri di una linea di testo normale: si scopre che non ci sono pi\`u di circa 66 caratteri per riga; ora, facendo lo stesso conteggio su una pagina prodotta dal \LaTeX{}, si scopre che ci sono pure circa 66 caratteri per riga. L'esperienza mostra che leggere diventa pi\`u difficile appena ci sono pi\`u caratteri per riga: questo dipende dal fatto che l'occhio si affatica spostandosi dalla fine di una riga all'inizio della successiva; questo \`e anche il motivo per cui i giornali vengono stampati su pi\`u colonne. Quindi, quando si aumenta la larghezza del testo, bisogna tenere in mente che si rende difficile la vita del lettore. Ma basta con queste cautele, poich\'e ho promesso di dire come fare\ldots Il \LaTeX{} ha due comandi per modificare questi parametri, che vengono usati, normalmente, nel preambolo del documento. Il primo comando assegna un ben fissato valore ad un qualsiasi parametro:% \begin{command} \ci{setlength}\verb|{|\emph{parametro}\verb|}{|\emph{lungh}\verb|}| \end{command} Il secondo comando aggiunge una certa lunghezza ad un qualsiasi parametro:% \begin{command} \ci{addtolength}\verb|{|\emph{parametro}\verb|}{|\emph{lungth}\verb|}| \end{command} Questo secondo comando \`e in genere pi\`u utile di \ci{setlength}, poich\'e permette di lavorare relativamente alle impostazioni preesistenti. Per esempio, per aggiungere un centimetro alla larghezza complessiva del testo, si usa questo comando nel preambolo del documento: \begin{code} \verb|\addtolength{\hoffset}{-0.5cm}|\\ \verb|\addtolength{\textwidth}{1cm}| \end{code} In questo contesto potrebbe essere utile dare un'occhiata al pacchetto \pai{calc}, che permette operazioni aritmetiche con gli argomenti di \verb|\setlength|, ed in altri posti dove si possono inserire valori numerici come argomenti di funzioni. \section{Divertirsi con le lunghezze} Quando possibile, \`e meglio cercare di evitare lunghezze assolute, nei documenti \LaTeX{}; \`e meglio basarsi sulla larghezza o altezza di qualche elemento della pagina; per esempio, la larghezza di una figura pu\`o essere eguagliata a \verb|\textwidth| per riempire completamente la pagina. I tre seguenti comandi permettono di determinare larghezza, altezza e profondit\`a di una stringa di testo: \begin{command} \ci{settoheight}\verb|{|\emph{comando}\verb|}{|\emph{testo}\verb|}|\\ \ci{settodepth}\verb|{|\emph{comando}\verb|}{|\emph{testo}\verb|}|\\ \ci{settowidth}\verb|{|\emph{comando}\verb|}{|\emph{testo}\verb|}| \end{command} \noindent Il seguente esempio mostra come si possono applicare i precedenti comandi: \begin{example} \flushleft \newenvironment{vardesc}[1]{% \settowidth{\parindent}{#1:\ } \makebox[0pt][r]{#1:\ }}{} \begin{displaymath} a^2+b^2=c^2 \end{displaymath} \begin{vardesc}{Dove}$a$, $b$ -- sono adiacenti all'angolo retto di un triangolo rettangolo. $c$ -- \`e l'ipotenusa del triangolo e si sente sola. $d$ -- infine, non si vede proprio, qui. Non \`e stupefacente? \end{vardesc} \end{example} \section{Scatole} Il \LaTeX{} costruisce le pagine manipolando scatole: dapprima, ogni lettera \`e una piccola scatola, che viene poi incollata ad altre lettere per formare parole; queste sono a loro volta incollate ad altre parole, ma stavolta con una speciale colla elastica, sicch\'e una serie di parole pu\`o essere ristretta o stirata in modo da riempire completamente una riga della pagina. Questa \`e certamente una versione semplicistica di cosa succede realmente, ma il punto \`e che il \TeX{} lavora su colla e scatole. Non solo le lettere sono scatole: virtualmente ogni cosa pu\`o essere messa in una scatola, anche altre scatole: ogni scatola verr\`a poi trattata dal \LaTeX{} come se fosse una singola lettera. Nel capitolo precedente sono gi\`a state presentate alcune scatole, sebbene non sia stato detto esplicitamente: l'ambiente \ei{tabular} ed il comando \ci{includegraphics}, per esempio, producono scatole. Questo significa che si possono facilmente affiancare due tabelle o due immagini: bisogna solo assicurarsi che la larghezza complessiva non superi la larghezza del testo. Si pu\`o anche imballare un paragrafo in una scatola, o con il comando \begin{command} \ci{parbox}\verb|[|\emph{pos}\verb|]{|\emph{largh}\verb|}{|\emph{testo}\verb|}| \end{command} \noindent o con l'ambiente \begin{command} \verb|\begin{|\ei{minipage}\verb|}[|\emph{pos}\verb|]{|\emph{largh}\verb|}| testo \verb|\end{|\ei{minipage}\verb|}|. \end{command} Il parametro \emph{pos} \`e una delle lettere \texttt{c, t} o \texttt{b}, e serve per controllare l'allineamento verticale della scatola, relativamente alla linea di base del testo attorno. \emph{largh} \`e un argomento di tipo lunghezza che specifica l'ampiezza della scatola. La differenza principale tra \ei{minipage} e \ei{parbox} \`e che non tutti i comandi si possono usare dentro \ei{parbox}, mentre in una \ei{minipage} si pu\`o usare praticamente tutto. Mentre \ci{parbox} imballa un intero paragrafo, suddividendo le linee etc, c'\`e un gruppo di comandi di inscatolamento che lavorano solo su materiale allineato orizzontalmente; uno di questi \`e gi\`a stato introdotto: \ci{mbox}, che si limita ad imballare una serie di scatole per formarne un'altra, e pu\`o essere usato per impedire al \LaTeX{} di separare due parole. Poich\'e si possono mettere scatole dentro scatole, questi imballatori orizzontali danno la massima flessibilit\`a. \begin{command} \ci{makebox}\verb|[|\emph{largh}\verb|][|\emph{pos}\verb|]{|\emph{testo}\verb|}| \end{command} \noindent \emph{largh} imposta la larghezza della scatola, come vista dall'esterno\footnote{Questo significa che pu\`o essere pi\`u piccola del materiale nella scatola; si pu\`o persino impostare la larghezza a 0pt, in modo che il testo nella scatola venga scritto senza influenzare le scatole vicine.}. Oltre ad espressioni di lunghezza, si possono usare i comandi \ci{width}, \ci{height}, \ci{depth} e \ci{totalheight} nel parametro di larghezza, per impostarla uguale allla larghezza, altezza profondit\`a ed altezza complessiva (rispettivamente) del \emph{testo} da comporre. Il parametro \emph{pos} \`e una lettera: \texttt{c}entrato, \texttt{l} allineato a sinistra (\emph{left}), \texttt{r} allineato a destra (\emph{right}), o \texttt{s} che distribuisce il testo in modo da riempire la scatola (\emph{spread}). Il comando \ci{framebox} funziona esattamente come \ci{makebox}, ma disegna una cornice attorno alla scatola. Ecco alcune cose che si possono fare con \ci{makebox} e \ci{framebox}: \begin{example} \makebox[\textwidth]{% c e n t r a t o}\par \makebox[\textwidth][s]{% d i f f u s o}\par \framebox[1.1\width]{Credo mi abbiano incastrato!} \par \framebox[0.8\width][r]{Orpo, sono troppo largo} \par \framebox[1cm][l]{fa niente, anch'io} Puoi leggere qui sotto? \end{example} Ora che sappiamo controllare l'orizzontale, il passo logico successivo \`e passare al verticale\footnote{Il controllo totale si pu\`o ottenere solo con il controllo sia dell'orizzontale, sia del verticale \ldots}. Non \`e un problema per il \LaTeX{}: il comando \begin{command} \ci{raisebox}\verb|{|\emph{sollevamento}\verb|}[|\emph{profondit\`a}\verb|][|\emph{altezza}\verb|]{|\emph{testo}\verb|}| \end{command} \noindent permette di definire le propriet\`a verticali di una scatola; si possono usare \ci{width}, \ci{height}, \ci{depth} e \ci{totalheight} per i primi tre parametri, in modo da manipolare la dimensione della scatola in rapporto all'argomento \emph{testo}. \begin{example} \raisebox{0pt}[0pt][0pt]{\Large% \textbf{Aaaa\raisebox{-0.3ex}a% \raisebox{-0.7ex}{aa}% \raisebox{-1.2ex}r% \raisebox{-2.2ex}g% \raisebox{-4.5ex}h}} grid\`o lui, ma neanche il suo successore nella riga not\`o che qualcosa di tremendo le era successo. \end{example} \section{Righi e puntelli} \label{sec:rule} Qualche pagina fa \`e stato usato il comando \begin{command} \ci{rule}\verb|[|\emph{sollevamento}\verb|]{|\emph{larghezza}\verb|}{|\emph{altezza}\verb|}|, \end{command} \noindent che normalmente produce un rettangolo nero. \newpage \begin{example} \rule{3mm}{.1pt}% \rule[-1mm]{5mm}{1cm}% \rule{3mm}{.1pt}% \rule[1mm]{1cm}{5mm}% \rule{3mm}{.1pt} \end{example} \noindent Questo \`e molto utile per disegnare linee orizzontali e verticali; ad esempio, la linea nella pagina del titolo \`e stata creata con un comando \ci{rule}. Un caso particolare \`e un rigo senza larghezza ma con una certa altezza; con terminologia tipografica, questo \`e chiamato \wi{puntello}, e viene usato per garantire che un certo elemento in una pagina abbia una certa altezza minima; lo si pu\`o ad esempio usare in un ambiente \texttt{tabular} per assicurarsi che una riga abbia una certa altezza. \begin{example} \begin{tabular}{|c|} \hline \rule{1pt}{4ex}Trave di sostegno\ldots\\ \hline \rule{0pt}{4ex}Puntello\\ \hline \end{tabular} \end{example} %%% Local Variables: %%% mode: latex %%% TeX-master: "lshort2e" %%% End: