[NTG-context] How to make \framed ignore the width of the rule

David Arnold dwarnold45 at suddenlink.net
Thu Jun 7 18:54:57 CEST 2007


Huh?

This:

\starttext

\newdimen\scale \scale\1mm
\def\rule#1{\hrule width #1\scale}
\rule{10}

but you made this

\def\scale{1mm}
\def\rule#1{\hrule width #1\scale}
\rule{10}

\stoptext

Got me this error:

! Undefined control sequence.
l.4 \newdimen\scale \scale\1
                             mm

What am I missing?

On Jun 7, 2007, at 3:16 AM, Wolfgang Schuster wrote:

> On Wed, 06 Jun 2007 19:42:26 -0400
> Aditya Mahajan <adityam at umich.edu> wrote:
>
>> Hi,
>>
>> How can I make \framed ignore the width of the rule? I am trying to
>> typeset internet protocol headers, but I cannot fully get what I  
>> want.
>> Here is my attempt:
>>
>> \unprotect
>>
>> \makecounter{v!protocolheaderlength}
>>
>> \defineframed[protocolfieldheader]
>>              [location=lohi,height=3 
>> \lineheight,offset=none,strut=yes]
>>
>>
>> \def\startprotocolheader
>>   {\dodoubleempty\dostartprotocolheader}
>>
>> \def\dostartprotocolheader[#1][#2]%
>>   {\getparameters[c!protocol][#1]%
>>    \let\field\protocolheaderfield
>>    \resetcounter{v!protocolheaderlength}%
>>    \vbox\bgroup
>> %    \ruledvbox\bgroup
>>    \removeunwantedspaces
>>    \dontleavehmode
>>    \protocolfieldheader[frame=on,width=\c!protocolbits\c! 
>> protocolunitsize]%
>
>    \protocolfieldheader[frame=on,width=\dimexpr\c!protocolunitsize* 
> \c!protocolbits\relax]%
>
>>    {\let\\\crlf\bold #2}\crlf}
>>
>> \def\stopprotocoloheader
>>   {\egroup}
>>
>> \def\protocolheaderfield#1#2%
>>   {\doif{\countervalue{v!protocolheaderlength}}{\c!protocolbits}
>>    {\resetcounter{v!protocolheaderlength}\crlf}%
>>    \removeunwantedspaces
>>    \dontleavehmode
>>    \protocolfieldheader[width=#1\c!protocolunitsize]{\let\\\crlf #2 
>> \\(#1)}%
>
>    \protocolfieldheader[width=\dimexpr\c!protocolunitsize*#1\relax] 
> {\let\\\crlf #2\\(#1)}%
>
>>     \incrementcounter{v!protocolheaderlength}{#1}}
>>
>>
>> \protect
>>
>> % \showstruts
>> % \showboxes
>>
>> \starttext
>>
>>
>> % Why should unitsize=1mm. Are things being scaled by another factor?
>> \startprotocolheader[bits=16,unitsize=1mm][General MAC Headers]
>
> \startprotocolheader[bits=16,unitsize=1cm][General MAC Headers]
>
>>   \field    {1}   {HT}
>>   \field    {1}   {EC}
>>   \field    {6}   {Type}
>>   \field    {1}   {ESF}
>>   \field    {1}   {CI}
>>   \field    {2}   {EKS}
>>   \field    {1}   {Rsv}
>>   \field    {3}   {LEN MSB}
>>   \field    {8}   {LEN LSB}
>>   \field    {8}   {CID MSB}
>>   \field    {8}   {CID LSB}
>>   \field    {8}   {HCS}
>> \stopprotocoloheader
>>
>>
>> \stoptext
>>
>>
>> Notice that all the lines are not of the same size. It seems that the
>> rules of framed are causing the frame to be of a larger width.
>>
>> Also am I missing a scaling factor in width= expressions above.
>> Everything looks fine with unitsize=1mm, but the final figure is
>> clearly larger than 16mm. I am confused as to what is happening.
>>
>> Is there any better way to do this?
>>
>> Thanks,
>> Aditya
>
> Hi Aditya,
>
> you wanted something like this
>
> \newdimen\scale \scale\1mm
> \def\rule#1{\hrule width #1\scale}
> \rule{10}
>
> but you made this
>
> \def\scale{1mm}
> \def\rule#1{\hrule width #1\scale}
> \rule{10}
>
> The length of the \hrule in the first example is 10pt (10 \times  
> 1pt = 10pt),
> while in the second example it is 101pt width (10 & 1pt = 101pt).
>
> Wolfgang
> ______________________________________________________________________ 
> _____________
> If your question is of interest to others as well, please add an  
> entry to the Wiki!
>
> maillist : ntg-context at ntg.nl / http://www.ntg.nl/mailman/listinfo/ 
> ntg-context
> webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
> archive  : https://foundry.supelec.fr/projects/contextrev/
> wiki     : http://contextgarden.net
> ______________________________________________________________________ 
> _____________



More information about the ntg-context mailing list