Newsgroup: it.comp.software.tex
Titolo: fill a box

Cari LaTeX-ers,
ho il seguente problema che anche googlando non sono riuscito a
risolvere.
vorrei scrivere una macro che preso del testo ed un'altezza mi
visualizzasse una parbox (eventualmente con frame) alta quanto
specificato e contenente il testo passato e lo spazio libero da righe
tipo \hrulefill, per intenderci:
    \mybox{3c}(blah blah blah}
dovrebbe visualizzare:
    blah blah blah_________________
    _______________________________
    _______________________________
                 ...
    _______________________________
Per 3cm mentre la larghezza sarà sempre e CMQ \textwidth ma non è lì il
problema. Sono in grado di scrivere la macro e ovviamente di far
visualizzare il testo ma non riesco a fare andare a capo \hrulefill
Se fosse più semplice mi andrebbe anche bene esprimere l'altezza come
numero di righe ma non ne sono lo stesso venuto a capo.
Ho provato a scrivere dei loop ma evidentemente è oltre la mia portata.
Ogni aiuto è ovviamente gradito e benaccetto
Grazie
Walter
-- 
Walter Cazzola, PhD - DICo, University of Milano           ICQ UIN: 66633601
email: cazzola (at) 
dico.unimi.it
 (or remove nospam. from the above address)
· · · ---------------------------- · · · ---------------------------- · · ·

 Ogni aiuto Ë ovviamente gradito e benaccetto
Interessante. :-)
\newcommand{\mybox}[2]{%
  \par\medskip
  \vbox to #1\baselineskip{%
    \offinterlineskip\parfillskip=0pt
    \noindent\strut #2\ \hrulefill\par
    \leaders\hbox to\hsize{\strut\hrulefill}\vfill
  }
  \medskip\endgroup}
Spiegazione.
1) Mi metto in modo verticale e lascio un po' di spazio rispetto
al testo circostante con \par\medskip
2) Apro una \vbox di altezza complessiva #1\baselineskip; in essa 
annullo l'interlinea automatica con \offinterlineskip; le distanze
fra le righe saranno controllate tramite \strut.
3) Annullo il riempimento dell'ultima riga di un capoverso
con \parfillskip=0pt
4) Compongo il testo #2 e do \par dopo \hrulefill che quindi riempirà
fino in fondo con una riga.
5) Adesso che sono in modo verticale, dico a TeX di riempire lo spazio
disponibile nella \vbox con copie di una \hbox alta il giusto (\strut),
larga quanto \textwidth e riempita con una riga orizzontale.
6) Chiudo la \vbox e lascio uno spazio come prima.
Carino \leaders in modo verticale, eh? ;-)
Il secondo argomento è il numero di righe totali: con
\mybox{10}{...}
ottieni esattamente 10 righe.
Ciao
Enrico

 ottieni esattamente 10 righe.
però qualcosa non mi funziona come dovrebbe, per cominciare c'è un
\endgroup di troppo ma quello lo eliminato senza problemi. Quello che
non riesco a risolvere è l'uso dell'interlinea:
    - il testo viene composto con un'interlinea minore del resto del testo
    - il \par lascia una riga vuota o meglio l'interlinea tra il testo e
      le righe di righe (spero si capisca) è molto più larga.
Ultima cosa a che serve \leaders? Carino l'uso verticale (?!) ma son
sicuro lo apprezzerei maggiormente capendo cosa fa ;-)


 sicuro lo apprezzerei maggiormente capendo cosa fa ;-)
Fa lo stesso che in modo orizzontale: riempie lo spazio assegnato
(in questo caso \vfill) con copie della box che viene data come
argomento.
Occorre che in quelle box ci sia \strut, perch� fra le box impilate
con \leaders non viene inserita "la colla tra righe" (interline skip).
Ciao
Enrico