Re: \framedtext su pi\`u pagine

#51239
Up
0
Down
::


Ecco una prima soluzione (ovviamente opera di Luigi) per un testo che si spezza al più su due pagine

`\newdimen\SpaceLeft
\def\CheckSpace{%
\ifdim\pagetotal=0pt\SpaceLeft=\vsize\else\SpaceLeft=\pagegoal\advance\SpaceLeft
by -\pagetotal\advance\SpaceLeft by -2\lineheight\fi}%

\setupcolors[state=start]

\long\def\StartBg#1\StopBg{%
\bgroup
\setbox8000=\vbox{\hsize=\dimexpr\textwidth-1em\relax#1}
\CheckSpace% \the\SpaceLeft\the\ht8000 \the\dp8000
\ifdim\dimexpr(\ht8000+\dp8000)>\SpaceLeft\relax
%
\setbox8001=\vsplit8000 to \SpaceLeft%
\setbox8001=\vbox{\unvbox8001}%
%
\setupbackground
[bottomframe=off,
rulethickness=1pt,
rightframe=on,width=\textwidth,
leftframe=on]
\startbackground\unvbox8001\stopbackground%

\setupbackground
[bottomframe=on,
rulethickness=1pt,
rightframe=on,width=\textwidth,
leftframe=on]
\startbackground\unvbox8000\stopbackground%
\else
\setupbackground
[bottomframe=on,
rulethickness=1pt,
rightframe=on,
leftframe=on]
\startbackground #1\stopbackground%
\fi
\egroup
}

\setupbackground
[bottomframe=on,
rulethickness=1pt,
rightframe=on,
leftframe=on]

\starttext

\startbackground
\input knuth
\stopbackground

e poi

\StartBg
\input knuth
\input knuth
\input knuth
\StopBg

\stoptext`

Una soluzione alternativa potrebbe essere usare il comando \definetextbackground e settare la variabile mp in modo adeguato.

`\setupcolors[state=start]
\enableregime[utf]
\def\Linea{\startMPcode
draw (0,0) — (\the\textwidth-1,0) withpen pencircle scaled 1bp withcolor red;
\stopMPcode
}
\definetextbackground
[Prova]
[
mp=background:mp,
location=paragraph,
rulethickness=1pt,
width=broad,
leftoffset=1em,
rightoffset=1em,
after={\Linea}
]
\startuseMPgraphic{background:mp}
path p;
for i = 1 upto nofmultipars :
p = (multipars
topenlarged 5pt
bottomenlarged 10pt);
fill p withcolor lightgray ;
draw leftboundary p withpen pencircle scaled 1bp withcolor red ;
draw rightboundary p withpen pencircle scaled 1bp withcolor red ;
endfor;
\stopuseMPgraphic

\starttext

\startProva
\input knuth
\input knuth
\input knuth
\input knuth
\input knuth
\stopProva

\stoptext`

Può succedere però che la “\Linea” venga disegnata a pagina nuova 🙁

Go to top