# [NTG-context] tabulate inside itemize

Mike Cooper mike at murchisondrillingschools.com
Wed Jul 29 19:27:44 CEST 2020

THANKS ADITYA!
I got Wolfgang's solution first and it works great.
But I think there are some things in your solution that I should try to learn about.  :)

> -----Original Message-----
> From: ntg-context [mailto:ntg-context-bounces at ntg.nl] On Behalf Of Aditya
> Mahajan
> Sent: Wednesday, July 29, 2020 11:12 AM
> To: mailing list for ConTeXt users
> Subject: Re: [NTG-context] tabulate inside itemize
>
> On Wed, 29 Jul 2020, Mike Cooper wrote:
>
> > I would normally use tab stops and line breaks to achieve the following in a
> numbered list:
> >
> > 1.  DC     =  3.20 bbl =   420 ft
> >    HWDP   =  3.90 bbl =   450 ft
> >    DP     = 34.63 bbl = 2,037 ft
> >    Totals = 41.73 bbl = 2,907 ft
> >
> > 2.  [next step …]
> >
> >
> > This is what I tried, but the output has a blank line at the number.  I can’t find
> anything about tabulate inside itemize.
> >
> > \starttext
> >
> > \startitemize[n]
> >            \startitem \starttabulate[|l|l|r|l|r|]
> >                                    \NC DC \NC = \NC 3.20 bbl \NC = \NC 420 ft \NC \NR
> >                                    \NC HWDP \NC = \NC 3.90 bbl \NC = \NC 450 ft \NC \NR
> >                                    \NC DP \NC = \NC 34.63 bbl \NC =  \NC 2,037 ft \NC \NR
> >                                    \NC DC \NC = \NC 41.73 bbl \NC =  \NC 2,907 ft \NC \NR
> >                                    \stoptabulate \stopitem
> >            \startitem Convert 2,907 to TVD: \\TVD = 2,907 × cosine 45° = 2,907 ×
> 0.707 = 2,056 ft \stopitem
> >            \startitem ΔP = 2,056 ft × 0.052 × (15 - 7.2) = 834 psi
> > \stopitemize
> >
> > \stoptext
>
> Naive solution: Add a \hbox around tabulate:
>
>
> \defineframed[tabulateframed][location=top,frame=off]
>
> \starttext
>
> \startitemize[n]
>              \startitem \dontleavehmode
>                \tabulateframed{\starttabulate[|l|l|r|l|r|]
>                                      \NC DC \NC = \NC 3.20 bbl \NC = \NC 420 ft \NC \NR
>                                      \NC HWDP \NC = \NC 3.90 bbl \NC = \NC 450 ft \NC \NR
>                                      \NC DP \NC = \NC 34.63 bbl \NC =  \NC 2,037 ft \NC \NR
>                                      \NC DC \NC = \NC 41.73 bbl \NC =  \NC 2,907 ft \NC \NR
>                                      \stoptabulate} \stopitem
>              \startitem Convert 2,907 to TVD: \\TVD = 2,907 × cosine 45° = 2,907 ×
> 0.707 = 2,056 ft \stopitem
>              \startitem ΔP = 2,056 ft × 0.052 × (15 - 7.2) = 834 psi \stopitemize
>
> \stoptext
>
> Normally, you can fix such issues by appending a \dontleavehmode in front of the
> command but that doesn't work here. The offending code is line 1300 of tabl-
> tbl.mkxl:
>
> \unexpanded\def\tabl_tabulate_outside_before
>    {\ifhmode\par\fi
>     \ifhmode
>       \vbox\bgroup
>       \let\tabl_tabulate_outside_after    \egroup
>       \let\tabl_tabulate_outside_inbetween\relax
>     \orelse\ifinner
>       \let\tabl_tabulate_outside_after    \relax
>       \let\tabl_tabulate_outside_inbetween\relax
>     \else
>       \whitespace
>       \tabulationparameter\c!before
>       \relax
>       \let\tabl_tabulate_outside_after    \tabl_tabulate_outside_after_indeed
>       \let\tabl_tabulate_outside_inbetween\tabl_tabulate_outside_inbetween_indeed
>     \fi}
> \protect
>
> When you use \dontleavehmode\starttabulate, \starttabulate starts in horizontal
> mode but the first \par in the above command takes it back to vertical mode. The
> next \ifhmode then evaluates to false, \ifinner also evaluates to false, so we enter
> the \else loop which inserts a \whitespace.
>
> The reason why adding a \hbox{...} (which is what \framed without an align key
> does) works is because inside an \hbox{...} \par doesn't take TeX back to vertical
> mode. So, we enter the first branch.
>