# Vertical space before vbox

Note: I'm using plain TeX

I'm trying to create a layout for theatrical plays that shows stage directions aligned to the right.

I had to enclose the directions in a \vbox to prevent them from being split across pages. My problem is that I'm not getting the correct vertical spacing (I want \parskip) before the \vbox, only after.

I could insert a \vskip inside the \vbox, but that would cause problems when the directions block is at the top of the page. How do I get my spacing right? Thanks!

\parindent 0pt
\parskip8pt

\long\def\stage[#1]{
\par
\vbox{
\hsize=6in
\leftskip2.5in
\parindent10pt
\hfill
{\it #1}
}
}

\long\def\says #1:#2|{
\bgroup
\hskip-1in
\vbox{\hsize=0.75in\hfill #1:}
\hsize5.5in
\leftskip1in
\vskip-20pt
#2\par
\egroup}

\says Man: This is a rather odd problem to have, I'm not sure what to do with it.|

\says Chorus: Look behind you! You'll find it there!|

\stage [The man spins wildly in his chair]

\says Man: I don't see anything. Anything at all!|

\bye

• \stage usage is wrong in your example -- \stage<foo> is meant rather, I think – user31729 Jul 9 '16 at 20:58
• \vbox doesn't start a paragraph, so you don't get \parskip glue. Just do \par\vskip\parskip\vbox{...}. As an aside, I find the definition of \says very peculiar. Wouldn't \hbox to0.75in{\hfil #1:} be simpler than using a \vbox? – egreg Jul 9 '16 at 21:09
• May be you have that in mind, but remember that you can delimit the arguments by a \par, so you wouldn't need | which seems rather awkward (i.e. \long\def\says#1:#2 \par{..}), just in case you didn't consider that. The \stage [..] seems more natural. – Manuel Jul 9 '16 at 21:27

A \vbox doesn't start a paragraph, so \parskip glue is not added.

\parindent 0pt
\parskip8pt

\long\def\stage[#1]{
\par\nobreak\vskip\parskip
\vbox{
\hsize=6in
\leftskip2.5in
%        \parindent10pt %%% What for???
\hfill
\it #1\par
}
}

\long\def\says #1:#2|{
\par
{
\hskip-1in
\hbox to 0.75in{\hfil #1:}
\hsize5.5in
\leftskip1in
\vskip-20pt
#2\par
}
}

\says Man: This is a rather odd problem to have, I'm not sure what to do with it.|

\says Chorus: Look behind you! You'll find it there!|

\stage [The man spins wildly in his chair]

\says Man: I don't see anything. Anything at all!|

\bye


I changed some bits of code. In particular

\vbox{\hsize=0.75in\hfill #1:}


should be

\hbox to 0.75in{\hfil #1:}


Simpler and more efficient. The setting of \parindent in \stage is meaningless, in my opinion. On the other hand, if the directive is long, the effect will be quite peculiar.