[NTG-context] How to calculate the height of text of a certain width?

Wolfgang Schuster wolfgang.schuster.lists at gmail.com
Tue Mar 24 19:29:26 CET 2020


Rudolf Bahr schrieb am 24.03.2020 um 19:04:
> On Tue, Mar 24, 2020 at 04:43:17PM +0100, Wolfgang Schuster wrote:
>>> \setbox0=\vbox{... somehow flushed text ...} wount work, i.e \wd0 or \ht0
>>> will both result in 0. With "unflushed" text this means will work perfectly.
>>
>> I have no idea where you get 0 (0pt?).
> 
> Nor do I, in the meantime. Sorry for my noise, I don't know what sort of
> mistakes I did to get "0.0pt".
> Corona? :-)
> 
> This is my test, which is essentially the same what Aditya suggests:
> -----------------------------------------
> \starttext
> 
> \setbox0=\vbox{\hsize=300pt\input ward }
> \copy0
> 
> wd0=\the\wd0, ht0=\the\ht0
> 
> \vskip12pt
> 
> \startalign[flushleft]
> \setbox1=\vbox{\hsize=300pt\input ward }
> \stopalign
> \copy1
> 
> wd1=\the\wd1, ht1=\the\ht1
> 
> \stoptext
> -----------------------------------------
> The .pdf-file is appended

When you need the height for the layer offset you can use \dowithnextbox 
because it hides \setbox etc.

\definelayer[TextBox]

\showframe[text][text]

\starttext

\dowithnextbox
   {\setlayer
      [TextBox]
      [x=\the\dimexpr(\textwidth -\nextboxwd)/3\relax,
       y=\the\dimexpr(\textheight-\nextboxht)/3\relax]
      {\flushnextbox}}
   \hbox{\framed[width=300pt,align=normal]{\samplefile{ward}}}

\flushlayer[TextBox]

\stoptext

> Now to your proposal, Wolfgang:
>>
>> \starttexdefinition NextboxDimension
>>    \starttabulate
>>    \NC Width  \EQ \the\nextboxwd \NC\NR
>>    \NC Height \NC \the\nextboxht \NC\NR
>>    \stoptabulate
>> \stoptexdefinition
>>
>> \starttext
>>
>> \dowithnextboxcs
>>    \NextboxDimension
>>    \vbox
>>      {\samplefile{ward}}
>>
>> \dowithnextboxcs
>>    \NextboxDimension
>>    \vbox
>>      {\setupalign[flushright]
>>       \samplefile{ward}}
>>
>> \dowithnextboxcs
>>    \NextboxDimension
>>    \vbox
>>      {\hsize=200pt
>>       \samplefile{ward}}
>>
>> \dowithnextboxcs
>>    \NextboxDimension
>>    \vbox
>>      {\hsize=200pt
>>       \setupalign[flushright]
>>       \samplefile{ward}}
>>
>> \stoptext
> 
> Up to now I cannot say anything about it, because there are some
> commands which are new to me. I have to study them first.

The \dowithnextbox command stores the passed argument in the named box 
\nextbox and performs the content of the first argument (or the command 
when you use \dowithnextbox*cs*).

The get the width and height of the box you can use \wd\nextbox or the 
wrapper \nextboxwd. The content of the box can be flushed with 
\flushnextbox but when you need only a copy of it you have to use 
\copy\nextbox.

Wolfgang



More information about the ntg-context mailing list