The horizontal skip sticks to the next thing because there is no way for TeX to break the line here. There is no space following the skip because any space here is consumed by the processing.
If you take #2
out of the \hbox
, you'll see that only the first word disappears and the rest goes to the next line because now you have a space allowing a line break.
Likewise, if you change 300cm
to 0cm
, you'll see that HelloWorld ...
is typeset and not Hello World ...
.
\def\tp#1#2{#1\hskip 300cm minus 300cm\hbox{#2}}
\tp{Hello}{World it is}
\def\tp#1#2{#1\hskip 300cm \hbox{#2}}
\tp{Hello}{World it is}
\def\tp#1#2{#1\hskip 300cm #2}
\tp{Hello}{World it is}
\def\tp#1#2{#1\hskip 0cm \hbox{#2}}
\tp{Hello}{World it is}
\bye

EDIT
If you add something like \showlists
and adapt the text slightly
\def\tp#1#2{#1\hskip 300cm minus 300cm\hbox{#2}}
\showlists
\tp{Hi}{World it is}
\def\tp#1#2{#1\hskip 300cm \hbox{#2}}
\showlists
\tp{He}{World it is}
\def\tp#1#2{#1\hskip 0cm \hbox{#2}}
\showlists
\tp{Ho}{World it is}
\showlists
\bye
[I'm not sure you need to keep saying \showlists
if you don't want the compilation to stop.]
you can get a better idea what's happening:
### vertical mode entered at line 0
prevdepth ignored
! OK.
l.8 \showlists
?
### vertical mode entered at line 0
### current page:
\glue(\topskip) 3.05556
\hbox(6.94444+0.0)x469.75499, glue set - 0.954
.\hbox(0.0+0.0)x20.0
.\tenrm H
.\tenrm i
.\glue 8535.82677 minus 8535.82677
.\hbox(6.94444+0.0)x46.75008
..\tenrm W
..\kern-0.83334
..\tenrm o
..\tenrm r
..\tenrm l
..etc.
.etc.
total height 10.0
goal height 643.20255
prevdepth 0.0, prevgraf 1 line
! OK.
l.12 \showlists
?
Overfull \hbox (8144.76631pt too wide) in paragraph at lines 13--14
[]\tenrm He [] |
\hbox(6.94444+0.0)x469.75499
.\hbox(0.0+0.0)x20.0
.\tenrm H
.\tenrm e
.\glue 8535.82677
.\hbox(6.94444+0.0)x46.75008
..\tenrm W
..\kern-0.83334
..\tenrm o
..\tenrm r
..\tenrm l
..etc.
.etc.
### vertical mode entered at line 0
### current page:
\glue(\topskip) 3.05556
\hbox(6.94444+0.0)x469.75499, glue set - 0.954
.\hbox(0.0+0.0)x20.0
.\tenrm H
.\tenrm i
.\glue 8535.82677 minus 8535.82677
.\hbox(6.94444+0.0)x46.75008
..\tenrm W
..\kern-0.83334
..\tenrm o
..\tenrm r
..\tenrm l
..etc.
.etc.
\glue(\parskip) 0.0 plus 1.0
\glue(\baselineskip) 5.05556
\hbox(6.94444+0.0)x469.75499
.\hbox(0.0+0.0)x20.0
.\tenrm H
.\tenrm e
.\glue 8535.82677
.\hbox(6.94444+0.0)x46.75008
..\tenrm W
..\kern-0.83334
..\tenrm o
..\tenrm r
..\tenrm l
..etc.
.etc.
total height 22.0 plus 1.0
goal height 643.20255
prevdepth 0.0, prevgraf 1 line
! OK.
l.16 \showlists
For the last case (which I isolated by removing the others), I get
### horizontal mode entered at line 8
\hbox(0.0+0.0)x20.0
\tenrm H
\tenrm o
\glue 0.0
\hbox(6.94444+0.0)x46.75008
.\tenrm W
.\kern-0.83334
.\tenrm o
.\tenrm r
.\tenrm l
.etc.
etc.
spacefactor 1000
### vertical mode entered at line 0
prevdepth ignored
I think that it does not treat HoWorld
as a single world. It is that the \hskip
eats up any following glue, including an interword space. A space between words is, after all, just glue. But I'm by no means sure of this.