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.

Aditya
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the 
Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki     : http://contextgarden.net
___________________________________________________________________________________

Reply via email to