Re: Un box impertinente

#23496
Up
0
Down
::

Ciao,
per divertimento mi chiedevo se fosse possibile trovare una soluzione al seguente problema: inserire oggetti occupando una giustezza maggiore di quella disponibile così da superare i margini (della misura voluta), senza però ricevere messaggi di overfull \hbox in compilazione.

Pensavo di risolvere utilizzando il comando \makebox a larghezza zero, nidificandone due, uno esterno allineato a sinistra sul primo margine sforando quest’ultimo della misura richesta, contenente a sua volta un altro \makebox allineato a destra con all’interno il materiale da comporre, che sarebbe terminato sforando il margine di destra.

La geniale intuizione, naturalmente non funziona (se volete scopritene il motivo) …
ma son riuscito a trovarne un’altra, naturalmente molto più semplice della prima:
un \makeboxe a larghezza zero centrato sulla pagina.

Ed ecco il codice:
`\documentclass[a4paper]{article}
\usepackage{calc}

\newcommand\regolo[1][\textwidth – 0.8pt]{
\noindent%
\rule{0.4pt}{28pt}%
\rule[14pt]{#1}{0.4pt}%
\rule{0.4pt}{28pt}\bigskip\par
}

% obsoleto
\newcommand\internalbox[1]{
\noindent\makebox[0pt][r]{
\noindent\rule{2cm}{0pt}
#1
}
}

% obsoleto
\newcommand\mylargeboxold[1]{
\makebox[0pt][r]{
\internalbox{#1}
}
}

\newcommand\testoesterno{
Testo di prova all'esterno del box direi molto rispettoso dei margini.
}

\newcommand\testointerno{
Testo di prova all'interno di un box direi impertinente pi\`u largo dei margini.
}

\newcommand\mylargebox[1]{
\noindent\hspace*{0.5\textwidth}
\makebox[0pt][c]{\parbox{18cm+0.8pt}{#1}}\par
}

\begin{document}
\regolo
\mylargebox{\regolo[18cm]}
\regolo

\testoesterno \testoesterno \testoesterno \testoesterno
\testoesterno \testoesterno \testoesterno \testoesterno
\bigskip

\mylargebox{\testointerno \testointerno \testointerno
\testointerno \testointerno \testointerno \testointerno}\bigskip

\testoesterno \testoesterno \testoesterno \testoesterno
\testoesterno \testoesterno \testoesterno \testoesterno
\bigskip

\mylargebox{
\begin{tabular}{p{8.5cm}p{8.5cm}}\hline
Tabella galattica & Tabella galattica \\\hline
Tabella galattica & Tabella galattica \\\hline
Tabella galattica & Tabella galattica \\\hline
\end{tabular}
}
\end{document}`

Il modo di scrivere il codice è un po ridicolo perchè è identato con parentesi di chiusura isolata. I comandi tipo \mylargeboxold sono quelli relativi alla prima soluzione.
Inoltre per chiarire visivamente i margini del testo, faccio uso della funzione \regolo.

Naturalmente (se qualcuno di voi ne avrà voglia) il prossimo messaggio conterrà una soluzione molto molto più semplice di questa…

insomma … è il bello di LaTeX.

`\centerline{\begin{minipage}{17cm+4\tabcolsep}
\testointerno \testointerno \testointerno
\testointerno \testointerno \testointerno \testointerno
\end{minipage}}
\centerline{\begin{tabular}{p{8.5cm}p{8.5cm}}\hline
Tabella galattica & Tabella galattica \\\hline
Tabella galattica & Tabella galattica \\\hline
Tabella galattica & Tabella galattica \\\hline
\end{tabular}}`
Ovviamente gli spazi vanno controllati con cura.

Soluzione: la definizione di \centerline è equivalente a
`\def\centerline#1{\hbox to\hsize{\hss#1\hss}}`
già presente nel nucleo di LaTeX. Non va propagandata, ma in certi casi come questo è particolarmente utile.

Ciao
Enrico

Go to top