Un box impertinente

  • Creatore
    Topic
  • #23495
    robitex
    Amministratore del forum
      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.

    Visualizzazione 0 filoni di risposte
    • Autore
      Risposte
      • #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

    Visualizzazione 0 filoni di risposte
    • Devi essere connesso per rispondere a questo topic.

    Go to top