Newsgroup: it.comp.software.tex
Titolo: Indentazione e spaziatura delle liste

Ciao a tutti!
Come si fa, in ambiente LaTeX, a modificare l'indentazione e la 
spaziatura tra gli "item" di una lista (ad es. quella che si ottiene
con il comando \enumerate )? C'e' un parametro analogo a \parskip e
\parindent che funziona solo per le liste?
Grazie in anticipo,
Valerio



Cito e traduco (male :-P) dal Kopka & Daly:
"* \topsep: e' lo spazio verticale (aggiunto a \parskip) inserito tra
la lista ed il testo che precede o che segue. Non puo' essere variato
globalmente poiche' e' ridefinito ad ogni livello della lista.
* \partopsep: e' lo spazio verticale (aggiunto a \topsep + \parskip)
inserito prima e dopo la lista quando una linea vuota precede il primo
o segue l'ultimo \item. Pruo' essere ridefinito globalmente, ma solo
per il primo ed il secondo livello.
* \parsep: spazio verticale tra paragrafi di un singolo \item.
Ridefinito al valore di default ad ogni livello.
* \itemsep: spazio verticale (aggiunto a \parsep) inserito tra due
\item. Ridefinito al valore di default ad ogni livello.
* \leftmargin: distanza tra il margine sinistro dell'environment
corrente ed il margine sinistro del testo della lista.
* \rightmargin: dstanza dal margine destro dell'environment corrente
ed il margine destro del testo della lista. Valore standard 0pt.
* \listparindent: indentazione (credo si traduca cosi'...) della prima
linea di un paragrafo in un \item rispetto al margine sinistro del
testo della lista. Normalmente pari a 0pt.
* \labelwidth: larghezza della box riservata all'etichetta. Il testo
dell'etichetta e' stampato giustificato a destra in tale spazio.
* \labelsep: spazio tra la box dell'etichetta ed il testo della lista.
* \itemindent: ammontare dell'indentazione verso destra dell'etichetta
e della prima linea di testo di un \item. Normalmente a 0pt."
\bye

 [...]
Ti ringrazio moltissimo per la risposta. Un problemino, pero`, mi e`
rimasto: i comandi che mi hai spedito funzionano (quasi) tutti,
inserendo comandi tipo
\setlength{\labelsep}{3pt}        % oppure
\addtolength{\itemindent}{0.5 cm} % ecc.
Il fatto che certi comandi che descrivi vengano ridefiniti ad ogni
livello significa che se voglio cambiare ad es. \parsep in tutte le
liste di un documento devo mettere il comando all'"interno" di ogni
lista, come
\begin{enumerate}
\setlength{\labelsep}{3pt}
\item
% ...
\end{enumerate}
e cosi` via? Oppure non ho capito niente? Cosa si intende esattamente
per "livello"? E come mai (e questa e` la cosa piu` importante)
\leftmargin e \rightmargin non mi funzionano MAI, dovunque li metta e
con quelsiasi impostazione? Come se nenche ci fossero... :-( Quello
che voglio fare, nella mia tesina di Laboratorio di Astronomia I, e`
eliminare del tutto l'indentazione delle liste rispetto al margine
sinistro, in modo che appaiano del tipo:
Bla bla Bla bla Bla bla Bla bla Bla bla Bla bla bl(testo normale):
1. Bla bla Bla bla Bla bla Bla bla Bla bla Bla bla Bla bla Bla bla
   Bla bla Bla bla Bla bla Bla bla Bla bla Bla bla Bla bla Bla bla
2. Bla bla Bla bla Bla bla Bla bla Bla bla Bla bla Bla bla Bla bla 
   Bla bla Bla bla Bla bla Bla bla Bla bla Bla bla Bla bla Bla bla 
e con minore spazio tra un \item e l'altro. Pensavo bastasse ritocca-
re le tre lunghezze \itemsep, \parsep e \leftmargin, ma quest'ultima
proprio non ne vuole sapere! Dove sto sbagliando?
Scusa (e scusate) la mia ignoranza (uso spesso LaTeX, ma puoi 
immaginare, soprattutto agli inizi, come e` frustrante trovarsi di
fronte a questi problemi...)
Ciao,
Valerio


Avvertenza: leggi questo post con caratteri a spaziatura fissa!!
Internamente, ad ogni nuovo livello, il parametro \leftmargin e' fatto
variare dalla macro \@listN, dove N e' il livello in questione (in
numeri romani) da i a vi. Questa macro va a pescare i valori da
assegnare a \leftmargin da \leftmarginN (anche qui i<=N<=vi). I
parametri \leftmarginN danno l'indentazione del livello N-esimo
*rispetto* al livello (N-1)-esimo e vanno modificati *all'esterno*
della lista. Bada che pero' l'indentazione di un livello rispetto ad
un altro e' relativa al testo dell'item, non all'etichetta.
Dichiarando quindi \setlength{\leftmargini}{0pt} ottieni una cosa del
tipo:
    Testo normale testo normale testo normale testo normale
    testo normale testo normale testo normale testo normale
    testo normale testo normale testo normale testo normale
    testo normale testo normale testo normale testo normale:
1.  Primo elemento della lista
2.  Secondo elemento della lista
3.  Ultimo elemento della lista
    testo normale testo normale testo normale testo normale
    testo normale testo normale testo normale testo normale
    testo normale testo normale testo normale testo normale
    testo normale testo normale testo normale testo normale.
ovviamente orrenda. Potresti quindi risolvere il problema con:
% Nel preambolo
\newlength{\myleftmargini}
\newlength{\oldleftmargini}
% Dopo \begin{document} ma credo vada bene anche nel
% preambolo
\setlength{\oldleftmargini}{\leftmargini} % Salviamo il
    % vecchio \leftmargini, non si sa mai...
\setlength{\myleftmargini}{0pt} % Partiamo da zero
\addtolength{\myleftmargini}{\labelwidth} % Impediamo
   % all'etichetta di sporgere dal testo "normale"
\addtolength{\myleftmargini}{\labelsep} % Il parametre
  % \leftmargin e' relativo al testo di un \item
\setlength{\leftmargini}{\myleftmargini}
se non fosse per il fatto che le etichette sono allineate a destra
nella loro "scatoletta" larga \labelwidth. Inoltre, se \itemindent non
fosse a zero avremmo qualche problemino...
L'etichetta e' generata da \makelabel, che viene ridefinito da itemize
ed enumerate *ogni volta* che usi un ambiente itemize o enumerate.
Forse mi sono un po' perso, ma il problema mi sembra piu' complicato
del previsto. Ho anche dato un'occhiata al package enumerate, ma ci
sono problemi con l'allineamento nel caso di liste (enumerate) con
piu' di 9 \item.
Ecco quindi la mia possibile soluzione:
- usi il preambolo visto sopra;
- all'interno di ogni ambiente itemize ed enumerate sostituisci la
dichiarazione di \makelabel con 
  \def\makelabel#1{\rlap{#1}\hss}
[la dichiarazione originaria era \def\makelabel#1{\hss\llap{#1}}];
- rimani conscio della limitazione di non poter avere \itemindent
diverso da zero (ma magari e' risolvibile);
- rimani conscio delle possibili limitazioni che potrebbero saltar
fuori in seguito;
- rimani conscio del fatto che questo codice che ti propongo non e'
affatto testato e potrebbe anche sputtanare tutta l'impaginazione
della tua tesina... :-)
Credo quindi, nel caso reputassi valida una simile soluzione, che ti
convenga definirti un tuo ambiente:
\newenvironment*{myenum}{%
  \begin{enumerate}%
  \def\makelabel##1{\rlap{##1}\hss}}{%
  \end{enumerate}%
}
Meglio ancora sarebbe definirti un ambiente partendo da zero, tramite
\begin{list}...\end{list}, eliminando tutte le possibili limitazioni.
Vedi un po' tu quale soluzione preferisci.
Spero di non aver commesso troppi errori, ma sono un po' troppo stanco
ed accaldato per ricontrollare cio' che ho scritto...
\bye