[NTG-context] XML and Multipage table

Hans Hagen pragma at wxs.nl
Thu Apr 13 10:46:49 CEST 2006


Johannes Graumann wrote:
> Hello,
>
> Does anybody have an insight into why a table created with the following
> mapping rule for XML code does not present it's caption and is not split?
>
> Thanks Joh
>
> \defineXMLnested
>   [table]
>   {\bgroup
>    \defineXMLsave[caption]
>    \defineXMLsave[header]
>    \defineXMLsave[body]
>    %\defineXMLnested[header]{\bTABLEhead} {\eTABLEhead}
>    %\defineXMLnested[body]  {\bTABLEbody} {\eTABLEbody}
>    \placetable
>       [\XMLpar{table}{location}{here}]
>       [\XMLpar{table}{label}{unknown}]
>       {\XMLflush{caption}}
>       \bgroup
>      
> \setupTABLE[frame=off,split=repeat,style={\switchtobodyfont[small]\setupinterlinespace[line=2.8ex]}]
>        
> \framed[frame=off,topframe=on,bottomframe=on,offset=none,rulethickness=0.75pt]
>         \bgroup \bTABLE[distance=7.5pt]
>         \bTABLEhead
>           \XMLflush{header}
>         \eTABLEhead
>         \bTABLEbody
>           \XMLflush{body}
>         \eTABLEbody
>         \bTABLEfoot\eTABLEfoot
>         }
>   {\eTABLE
>    \egroup
>    \egroup
>    \egroup}
>   
first of all, putting a \framed around it makes it unsplittable; best use the framed options that come with the floats 

second, there's a problem in signaling the splitter, which demands a patch

\unprotect

% in core-ntb : we check the flag 

\def\splittblbox#1%
  {\ifinsidesplitfloat
     \donetrue
   \else\ifinsidefloat
     \donefalse
   \else
     \donetrue
   \fi\fi
   \ifdone
     \executeifdefined{splittblbox\tbltblsplitmethod}\splittblboxa{#1}%
   \else
     \notsplittblbox{#1}%
   \fi}

% in page-flt : we add a flag 

\newif\ifinsidesplitfloat % will become chardef

\def\dosplitfloat[#1]#2% nog dubbele refs
  {\ifinsidecolumns    % tzt ook nog figuren splitten
     % not yet supported
   \else
     \bgroup
     \insidefloattrue
     \insidesplitfloattrue
     \getparameters[\??si][#1]%
     \resetnumber[\??si]%
     \def\floatcaptionsuffix{\convertednumber[\??si]}%
     \TABLEcaptionheight\@@silines\lineheight % brrr
     \simplifypagebreak % \page becomes \goodbreak
     \dowithnextbox
       {\forgetall
        \dontcomplain
        \doloop
          {\setbox2\vsplit\nextbox to \lineheight
           \setbox2\vbox{\unvbox2}
           \ifdim\ht2>\lineheight
             \incrementnumber[\??si]%
             \ifcase\rawnumber[\??si]\or \ifdim\nextboxht=\zeropoint
               \let\floatcaptionsuffix\empty
             \fi \fi
             \bgroup
             #2{\unvbox2}
             \egroup
             \ifdim\nextboxht>\zeropoint
               \page
               \decrementnumber[\floatcaptionnumber]%
             \fi
           \fi
           \ifdim\nextboxht>\zeropoint\else
             \expandafter\exitloop
           \fi}%
        \egroup}
     \vbox
   \fi}

% beware: you need to set the splitmethod to b (boxed split) 

\starttext

\splitfloat
  {\placetable{test}}
  {\bTABLE[split=repeat,splitmethod=b]
     \dorecurse{100}{\bTR \bTD test \eTD \eTR}
   \eTABLE}

\stoptext

this whole splitting has to be revised (although a two way singaling is not that trivial here) 

Hans 


-----------------------------------------------------------------
                                          Hans Hagen | PRAGMA ADE
              Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
     tel: 038 477 53 69 | fax: 038 477 53 74 | www.pragma-ade.com
                                             | www.pragma-pod.nl
-----------------------------------------------------------------



More information about the ntg-context mailing list