[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