- Questo topic ha 24 risposte, 6 partecipanti ed è stato aggiornato l'ultima volta 10 anni, 1 mese fa da
Alessandro.
-
CreatoreTopic
-
4 Agosto 2016 alle 12:38 #107139::
Quando compilo il mio documento (uso TeXMaker) ottengo una serie di warning di tipo “Badbox” con il messaggio “Underfull \hbox (badness 10000) in paragraph at lines …–…”.Ho notato che compaiono in corrispondenza dei paragrafi che contengono formule (contenute nell’ambiente math) che per questioni di lunghezza vengono spezzate e mandate a capo.
Sapreste dirmi come risolvere questi warning?
-
CreatoreTopic
-
AutoreRisposte
-
-
4 Agosto 2016 alle 13:45 #107140::
alessandropagin” post=107234Quando compilo il mio documento (uso TeXMaker) ottengo una serie di warning di tipo “Badbox” con il messaggio “Underfull \hbox (badness 10000) in paragraph at lines …–…”.
Ho notato che compaiono in corrispondenza dei paragrafi che contengono formule (contenute nell’ambiente math) che per questioni di lunghezza vengono spezzate e mandate a capo.
Sapreste dirmi come risolvere questi warning?
Potresti inviarci un esempio minimo che mostri il tuo problema?
Ciao
Tommaso
-
4 Agosto 2016 alle 16:57 #107141::
alessandropagin” post=107234Quando compilo il mio documento (uso TeXMaker) ottengo una serie di warning di tipo “Badbox” con il messaggio “Underfull \hbox (badness 10000) in paragraph at lines …–…”.
Ho notato che compaiono in corrispondenza dei paragrafi che contengono formule (contenute nell’ambiente math) che per questioni di lunghezza vengono spezzate e mandate a capo.
Sapreste dirmi come risolvere questi warning?
Non mi preoccuperei più di tanto; la matematica non può andare a capo dove capita, quindi le righe che contengono formule in linea sono più difficili da giustificare e l’underfull hbox (il contenuto della riga è più lasco, con spazi interparola più grandi, di quanto LaTeX sia disposto ad accettare senza warning.
Ci sono due soluzioni:
1) non metti formule in linea con il testo ma le metti fuori testo;
2) componi i capoversi che contengono quelle linee lasche dentro l’ambiente sloppy;
3) metti l’intero capoverso critico dentro un ambiente fatto così:`{\tolerance= 3000\relax
Capoverso critico.\par}`dove puoi cambiare il valore da assegnare a \tolerance cercando di diminuire o di aumentare quel valore senza mai superare il valore 9999 (il valore 10000 per la routine di composizione dei capoversi, significa “infinito”, ciò viene accettata qualunque bruttezza senza emettere messaggi).Come mai dico che le soluzioni sono due e ne indico tre? Perché la terza è uno “spoco trucco” che sarebbe meglio evitare, ma certamente è più elastico e configurabile che non l’ambiente sloppy.
-
5 Agosto 2016 alle 0:00 #107142
-
5 Agosto 2016 alle 4:20 #107143::
alessandropagin” post=107241Cercando di costruire un esempio di codice da postare mi sono accorto che in realtà questo warning non è legato al fatto che le formule matematiche vadano a capo, potrebbe essere dovuto al fatto che finito un paragrafo metto i caratteri `\\` per andare a capo e poi lascio una riga vuota?
E perché mai fai così? Questa è una cosa da non fare MAI.
Se leggi una guida introduttiva, scoprirai come si fa ad andare a capo.
Ciao
Tommaso
-
5 Agosto 2016 alle 7:23 #107144
-
5 Agosto 2016 alle 8:16 #107145::
sono due cose distinte:
1) \\ va a capo ma non termina il capoverso, tant’è che se lasci una riga vuota dopo \\ ricevi un warning che ti informa che non c’è nulla da spezzare.
2) una riga vuota termina il capoverso; Il capoverso viene inviato al compositore di capoversi e accodato alla bozza non impaginata del documento; quando questa bozza non impagina contiene abbastanza materiale, compresi gli oggetti, mobili e le nota, per poter impaginare davvero, il modulo addetto esegue questo lavoro e accoda la pagina all file di uscita.Come vedi si tratta di due cose distinte. Nel tuo caso se vai a capo prima di una formula in linea la formula viene composta all’inizio della nuova riga e se non è tanto lunga (insomma non supera la lunghezza di una riga), non verrà mai spezzata per andare a capo. Però è chiaro a chiunque che il capoverso è composto male.
Ti ripeto: la soluzione corretta al tuo problema è quella di comporre le tue formule fuori testo, magari non numerate, ma con le spaziature giuste e secondo tutte le regole tipografiche. Se non ti va questo modo di operare, non usare \\, come ti ha raccomandato @illinguista1972, ma usa l’ambiente sloppy o lo sporco trucco che ti ho indicato.
-
5 Agosto 2016 alle 8:42 #107146
-
5 Agosto 2016 alle 10:06 #107147::
alessandropagin” post=107246Indipendentemente che si tratti di capoversi con formule o con testo, il modo corretto di terminare un capoverso è quindi lasciare una riga vuota nel codice, mentre se io volessi lasciare una riga vuota nel pdf cosa dovrei fare?
Trovi soluzioni facili da usare in Have new line between paragraphs, no indentation e Is there an easy way to have my whole document with a space between paragraphs rather than indentation?.
Ciao
Claudio
-
5 Agosto 2016 alle 11:55 #107148::
Per staccare due paragrafi con una riga bianca ho scelto di terminare il primo con \newline e iniziare il secondo con \noindent.
In questo modo però mi rimane il warning.Se invece non metto il \newline ma solo il \noindent il warning sparisce ma ovviamente non c’è la riga bianca che vorrei.
-
5 Agosto 2016 alle 16:05 #107149::
alessandropagin” post=107246Indipendentemente che si tratti di capoversi con formule o con testo, il modo corretto di terminare un capoverso è quindi lasciare una riga vuota nel codice, mentre se io volessi lasciare una riga vuota nel pdf cosa dovrei fare?
Ci sono diversi modi per farlo, compreso quello di definire un altro valore per il parametro \parskip. Oppure quello di racchidere nel sorgente fra due righe vuote il comando \null; Sempre di sporco trucco si parla, ma funziona benissimo.
Tuttavia la soluzione sarebbe una soluzione alla Word Processor, non una soluzione tipografica. Nella buona tipografia non si lasciano spazi fra i capoversi se ogni capoverso comincia con una riga rientrata. Separare i capoversi con righe vuote nel PDF ha un certo numero di inconvenienti, a parte al bruttezza. Quindi, se vuoi un consiglio non richiesto, non pensarci nemmeno.
-
7 Agosto 2016 alle 13:07 #107150::
D’accordo allora opto per evitare le soluzioni alla Word Processor, come mi consigli.Ti chiedo allora in che altro modo potrei gestire lunghe dimostrazioni matematiche in cui concettualmente mi verrebbe da spezzare il testo in blocchi in corrispondenza dei vari passaggi della dimostrazione.
-
7 Agosto 2016 alle 16:18 #107151::
alessandropagin” post=107241Cercando di costruire un esempio di codice da postare mi sono accorto che in realtà questo warning non è legato al fatto che le formule matematiche vadano a capo, potrebbe essere dovuto al fatto che finito un paragrafo metto i caratteri `\\`
Ci avrei scommesso.
alessandropagin” post=107241
per andare a capo e poi lascio una riga vuota?“Tu lo dici”.
-
8 Agosto 2016 alle 14:06 #107152
-
8 Agosto 2016 alle 14:12 #107153
-
8 Agosto 2016 alle 20:13 #107154::
No, non è corretto; come ho spiegato in un precedente messaggio NON devi scrivere \\ e POI lasciare una riga vuota.DEVI SOLTANTO lasciare una riga vuota.
Capisco che talvolta sono prolisso e forse la mia prolissità possa produrre confusione di idee in un neofita, invece di schiarirgliele. Ma se dico che \\ NON serve per terminare un capoverso, ma solo per andare a capo, mentre la riga vuota termina il capoverso e ovviamente il capoverso successivo inizia su una nuova riga (generalmente) rientrata, non mi sembra una cosa difficile da capire.
Ma per mettere una formula in display non numerata devi semplicemente racchiuderla fra i delimitatori [tt]\[ [/tt] e[tt]\] [/tt] senza lasciare righe vuoe né prima né dopo; ripeto l’esempio:`Capoverso con formule
\[
formula in display senza numero
\]
prosecuzione del capoverso con formule`Questo si trova scritto in qualunque guida ed è veramante superfluo ripeterlo qui nel forum che presuppone che tutti noi ci documentiamo prima di scrivere. È chiaro che un vuoto di memoria può capitare a tutti (a me capita), ma alla prima risposta che contiene qualche accenno alla soluzione del problema la memoria si riaccende immediatamente se uno ha qualcosa da ricordare avendo letto la documentazione almeno quella di base.Scusami, non è che sono acido perché è mezzanotte passata; forse sono stanco e le vacanze non mi hanno ancora riposato abbastanza 🙂
-
8 Agosto 2016 alle 21:20 #107155::
alessandropagin” post=107279(…)
Ti chiedo allora in che altro modo potrei gestire lunghe dimostrazioni matematiche in cui concettualmente mi verrebbe da spezzare il testo in blocchi in corrispondenza dei vari passaggi della dimostrazione.Ho scritto la mia risposta nell’articoletto di cui accludo di seguito il codice sorgente: tale codice serve anche a illustrare come si applica in pratica la risposta stessa.
`
\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[italian]{babel}\title{Come spaziare i capoversi}
\author{G.~Mezzetti}
\date{8~agosto 2016}\DeclareRobustCommand*{\nickname}[1]{\textsf{@#1}}
\begin{document}
\maketitle
Per concludere un capoverso si lascia una riga vuota nel sorgente \texttt{.tex}.
Cos\`{\i}, per esempio, la riga vuota che, nel sorgente, segue tre righe (anzi,
ormai soltanto due) dopo questa \`{e} sufficiente a concludere il capoverso che
state leggendo.Questo \`{e} un nuovo capoverso. Ora, diciamo che, \emph{solo} dopo
\emph{questo} particolare capoverso, vogliamo \emph{eccezionalmente} lasciare,
come dice \nickname{alessandropagin}, <>; ebbene, il modo
corretto per fare ci\`{o} \`{e} di inserire non gi\`{a} una vera e propria riga
vuota, bens\`{\i} uno spazio verticale di opportune dimensioni. Per esempio,
qui sotto inseriamo uno spazio verticale di ampiezza pari a
\verb|\baselineskip|, che corrisponde esattamente allo scartamento normale tra
due linee consecutive. L'effetto visivo \`{e} dunque esattamente quello di una
riga vuota tra questo capoverso e il successivo.\vspace{\baselineskip}
Questo \`{e} il capoverso successivo. Si pu\`{o} notare che lo spazio che lo
precede \`{e} piuttosto ampio, forse eccessivo: in altre parole, <> sembra essere troppo. Possibile che \LaTeX\ non abbia da offrire un
comando per inserire uno spazio verticale adatto a marcare visivamente una
separazione logica particolare tra due capoversi successivi, o, altrimenti
detto, una cesura, uno snodo, un respiro nel fluire delle argomentazioni?Be', naturalmente ci sono i comandi di sezionamento (\verb|\chapter|, se
diponibile, \verb|\section|, \verb|\subsection|, \ldots, \verb|\subparagraph|);
poi, ci sono gli ambienti \texttt{itemize} ed \texttt{enumerate}; ma supponiamo
non si voglia usare niente di tutto ci\`{o}, si voglia semplicemente lasciare un
po' di spazio fra alcuni particolari capoversi (e non fra tutti): possibile,
ripeto, che gli autori del \LaTeX\ non abbiano previsto qualcosa a questo scopo?Certo che lo hanno previsto: anzi, ci aveva gi\`{a} pensato Knuth nel suo
formato <>. Ci sono tre comandi standard che inseriscono spazi
verticali di dimensioni decrescenti:
\begin{itemize}
\item
\verb|\bigskip|, che di solito inserisce uno spazio all'incirca uguale
all'altezza di una riga;\item
\verb|\medskip|, che di solito inserisce uno spazio all'incirca uguale
a met\`{a} dell'altezza di una riga;\item
\verb|\smallskip|, che di solito inserisce uno spazio all'incirca uguale
a un quarto dell'altezza di una riga;
\end{itemize}
Si ha dunque la possibilit\`{a} di graduare, per cos\`{\i} dire, l'intensit\`{a}
della cesura logica che si vuole rappresentare. Questi comandi vanno usati
\emph{fra} i capoversi, esattamente come abbiamo fatto, sopra, con il comando
\verb|\vspace|.\medbreak % vedi sotto
Cos\`{\i}, per indicare che questo capoverso \`{e} separato dal successivo da
una forte cesura logica, potremmo inserire fra i due capoversi in questione un
comando \verb|\bigskip|; ci\`{o} \`{e} stato fatto e, nella stampa prodotta, se
ne pu\`{o} vedere l'effetto.\bigskip
Se, invece, si vuole indicare una cesura logica di media intensit\`{a}, si
opter\`{a} per il comando \verb|\medskip|: se ne osservi l'effetto tra questo
capoverso e il successivo.\medskip
Infine, per le cesure logiche di minima entit\`{a} potr\`{a} essere usato
\verb|\smallskip|. Uno \verb|\smallskip| \`{e} inserito fra questo capoverso e
il successivo.\smallskip
Direi che, per la maggior parte dei casi, il pi\`{u} appropriato \`{e}
\verb|\medskip|.C'\`{e} per\`{o} un'altra cosa importante da sapere: ciascuno di questi tre
comandi ha una variante la quale, oltre a inserire lo spazio verticale che si
\`{e} detto, ha anche l'effetto aggiuntivo di incoraggiare un'interruzione di
pagina fra i due capoversi tra cui il comando stesso \`{e} inserito. Dico
incoraggiare, non forzare: l'interruzione di pagina avr\`{a} effettivamente
luogo solo se non comporta la necessit\`{a} di lasciare, nella pagina che viene
abbandonata, spazi bianchi verticali eccessivi. Se \LaTeX\ giudicher\`{a} che
l'interruzione possa aver luogo, la pagina che viene abbandonata verr\`{a}
“stirata'' in modo da abbassare l'ultima riga del capoverso che precede fino al
fondo della gabbia del testo, mentre la prima riga del capoverso successivo
verr\`{a} collocata nell'usuale posizione in cima alla gabbia di testo
(\emph{senza} essere preceduta da alcuno spazio verticale); se, invece,
l'interruzione di pagina verr\`{a} giudicata inopportuna, i due capoversi
saranno separati dallo spazio verticale corrispondente al comando usato.Queste varianti si distinguono per l'uso di \texttt{…break} al posto di
\texttt{…skip}: abbiamo dunque \verb|\bigbreak|, \verb|\medbreak| e
\verb|\smallbreak| in luogo di \verb|\bigskip|, \verb|\medskip| e
\verb|\smallskip|, rispettivamente. Con le impostazioni usuali, \LaTeX\ \`{e}
circa tre volte pi\`{u} propenso a inserire un'interruzione di pagina in
corrispondenza di un \verb|\bigbreak| di quanto lo \`{e} in corrispondenza di
uno \verb|\smallbreak|; \verb|\medbreak| si situa a met\`{a} tra i due.In definitiva, la raccomandazione \`{e} di usare:
\begin{itemize}
\item
\verb|\bigbreak| tra due capoversi separati da una forte cesura logica;\item
\verb|\medbreak| tra due capoversi separati da una cesura logica di
media entit\`{a};\item
\verb|\smallbreak| tra due capoversi separati da una cesura logica
modesta.
\end{itemize}
Per esempio, dopo questo capoverso \`{e} inserito un \verb|\bigbreak|.\bigbreak
\begingroup
% \tracingparagraphs = 1
% \showboxbreadth = 1000
% \showboxdepth = 10Non bisogna mai, \emph{mai,} \textbf{mai} usare~\verb|\\| alla fine di un
capoverso. Se lo si fa, come viene fatto alla fine di questo capoverso, si
ottiene s\`{\i} una riga <> alla fine dello stesso, ma anche un
avvertimento di
\begin{verbatim}
Underfull \hbox (badness 10000) in paragraph at lines …
\end{verbatim}
perch\'{e} tale riga <> contiene solo la \verb|\rightskip| \emph{glue}.
La ragione per cui questo succede \`{e} spiegata in \textsl{The \TeX book},
pagina~114, ultimo capoverso (una <>).\\ % \showlists
\endgroup
Ecco il capoverso successivo, che evidenzia la riga <
>. Un discorso analogo vale per un~\verb|\\| posto alla fine di un capoverso
parziale che precede una formula fuori testo.\bigbreak
Un'ultima parola sul pacchetto \texttt{parskip}. Mi sembra che, nel caso in
esame, esso non risponda alla domanda posta, la quale, come ho gi\`{a} detto, mi
pare riguardi non tanto il desiderio di sostituire, in \emph{tutti} i capoversi,
l'indentazione di \verb|\parindent| con uno spazio verticale \verb|\parskip| non
nullo, quanto piuttosto quello di inserire spazi aggiuntivi fra
\emph{particolari} coppie di capoversi. Ma, al di l\`{a} di questo, io non lo
amo: certo, \`{e} sempre meglio usare il pacchetto \texttt{parskip} che
limitarsi a una pura e semplice ridefinizione diretta di \verb|\parindent| e
\verb|\parskip|; tuttavia, come esplicitamente ammette la stessa documentazione
del pacchetto, anch'esso non va oltre alcuni aggiustamenti parziali, fermo
restando che l'unico luogo veramente appropriato per una ridefinizione di questa
portata dell'aspetto tipografico del documento \`{e} la classe di documento
stessa.\end{document}
`Aggiungo due osservazioni:
- Come ha già rimarcato @OldClaudio, non è possibile che si debbano replicare all’infinito, per così dire «on demand», spiegazioni che si trovano in tutte le guide; 😐
- La soluzione che suggerisco non sopprime l’indentazione del capoverso che segue una spaziatura verticale: si prega di notare che ciò è intenzionale, perché, per l’uso che si vuole fare, sarebbe sbagliato (e brutto!) fare il contrario.
Ciao.
—
Gustavo
-
9 Agosto 2016 alle 5:31 #107156::
OldClaudio” post=107305No, non è corretto; come ho spiegato in un precedente messaggio NON devi scrivere \\ e POI lasciare una riga vuota.
DEVI SOLTANTO lasciare una riga vuota.
Capisco che talvolta sono prolisso e forse la mia prolissità possa produrre confusione di idee in un neofita, invece di schiarirgliele. Ma se dico che \\ NON serve per terminare un capoverso, ma solo per andare a capo, mentre la riga vuota termina il capoverso e ovviamente il capoverso successivo inizia su una nuova riga (generalmente) rientrata, non mi sembra una cosa difficile da capire.
Ma per mettere una formula in display non numerata devi semplicemente racchiuderla fra i delimitatori [tt]\[ [/tt] e[tt]\] [/tt] senza lasciare righe vuoe né prima né dopo; ripeto l’esempio:`Capoverso con formule
\[
formula in display senza numero
\]
prosecuzione del capoverso con formule`Questo si trova scritto in qualunque guida ed è veramante superfluo ripeterlo qui nel forum che presuppone che tutti noi ci documentiamo prima di scrivere. È chiaro che un vuoto di memoria può capitare a tutti (a me capita), ma alla prima risposta che contiene qualche accenno alla soluzione del problema la memoria si riaccende immediatamente se uno ha qualcosa da ricordare avendo letto la documentazione almeno quella di base.Scusami, non è che sono acido perché è mezzanotte passata; forse sono stanco e le vacanze non mi hanno ancora riposato abbastanza 🙂
Infatti. Io non intendevo affatto dire che il metodo corretto per ottenere un’intera riga vuota tra due capoversi (ciò che chiede il nostro amico) è quello usato da lui, cioè scrivere [tt]\\[/tt], lasciare una riga vuota nel sorgente e poi continuare a scrivere.
Intendevo spiegargli la citazione evangelica di Lorenzo, che alle mie orecchie è suonata così: «tu lo dici», cioè è corretto quello che dici, ovvero che il warning che ricevi è dovuto proprio al metodo errato che usi, come tu stesso (tu è il nostro amico) hai ipotizzato nel messaggio #107241.
Almeno, io ho capito così.
Ciao
Tommaso
-
9 Agosto 2016 alle 23:28 #107157::
Vi ringrazio tutti per i suggerimenti che mi avete dato, in particolare ringrazio letteracdp che con il suo articoletto mi ha convinto che \bigbreak, \medbreak e \smallbreak sono esattamente i comandi che fanno al caso mio (molto più dell’andare a capo lasciando una riga vuota).Ho adottato quindi questa soluzione che, oltre ad eliminarmi i molti warning che vi avevo riferito ha reso esteticamente più elegante lo spezzettamento logico che volevo fare.
Mi sono però accorto che nascosti nei molti warning “underfull \hbox” che ora sono spariti c’erano cinque warning “overfull \hbox”.
Nel dettaglio si tratta di warning di tipo “Badbox” il cui messaggio esatto è “Overfull \hbox (18.23842pt too wide) in paragraph at lines …–…”.
Mi sembra di osservare che nei cinque paragrafi in cui compare questo errore vi sono formule inline che vengono mandate a capo automaticamente da latex ma che per qualche carattere sforano comunque dalla colonna di testo della pagina, come mi dovrei comportare per gestire correttamente questa situazione?
-
10 Agosto 2016 alle 5:01 #107158::
Esattamante come hai fatto per le formule in line che davano il messaggio underful hbox. Il sistema TeX spezza le formule matematica con grande riluttanza, ma il “testo matematico” non può essere diviso in sillabe, quindi il soli punti di possibilità di andare a capo sono gli operatori binari; ci sarebbe anche la possibilità di andare a capo con un “discretionary break” che permette di inserire un segno di moltiplicazione esplicito (\times) dopo il quale va a capo. Difficile da usare senza stravolgere una formula, ma sapendo che cosa fare lo si può usare. Invece con le formule fuori testo come hai fatto per le altre non ci sono problemi.
-
10 Agosto 2016 alle 6:58 #107159
-
10 Agosto 2016 alle 7:08 #107160::
alessandropagin” post=107322Benissimo, grazie! 😉
Visto che siamo in tema…se io volessi spezzare una formula in corrispondenza dei simboli relazionali ma facendo in modo che questi si allineino tutti verticalmente come potrei fare?
Riporto un esempio che forse è più chiaro:
`
5+3*(2+1)=5+3*3=
=5+9=
=14`Guarda 14.4.6 L’ambiente align della Guida GuIT in formato B5 che trovi nella documentazione.
Ciao
Claudio
-
10 Agosto 2016 alle 23:19 #107161::
Perfetto, grazie! 😉Quindi il vecchio codice `\begin{math}
5+3*(2+1)=5+3*3=5+9=14
\end{math}` deve essere sostituito dal nuovo codice `\begin{align}
5+3*(2+1)&=5+3*3=\\
&=5+9=\\
&=14
\end{align}`?Ovvero l’ambiente align sostituisce completamente l’ambiente math nel caso in cui io voglia gestire questi allineamenti?
-
11 Agosto 2016 alle 5:34 #107162
-
11 Agosto 2016 alle 21:55 #107163
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.