¿Por qué no hay ningún comando para comenzar un párrafo con \vbox?

¿Por qué no hay ningún comando para comenzar un párrafo con \vbox?

\vboxno cambia de modo y \hboxno cambia de modo, como lo demuestran los siguientes dos grupos de ejemplos.

Los dos ejemplos siguientes producen resultados idénticos:

\hbox{A}
\end
\noindent A
\end

Los dos ejemplos siguientes también producen resultados idénticos:

\vbox{\hrule width 1em}
\end
\noindent\vbox{\hrule width 1em}
\end

Además, el contenido vacío cambia el modo de vertical a horizontal, como en \unhbox\voidb@x. Ese mismo contenido vacío se puede obtener mediante \unvbox\voidb@x. Pero usar esto no cambia el modo de vertical a horizontal (consulte los dos ejemplos siguientes). ¿Por qué?

\leavevmode\hbox{A}
\end
\catcode`\@=11
\unvbox\voidb@x\hbox{A}
\end

(Aquí, en el primer ejemplo, se agrega sangría y en el segundo, no).

\vboxpuede estar dentro del párrafo, como \hbox. ¿Qué secuencia de control se puede utilizar para crear un \vboxpárrafo en el medio y al principio?

Respuesta1

El comando para iniciar el modo horizontal con a \vboxes \leavevmode. ¿Por qué necesitarías algo más?

Me temo que su suposición es errónea: no son los “contenidos vacíos” los que desencadenan el cambio de modo. Esprecisamente \unhboxEso hace.

A diferencia de \boxy \copy, \unhboxes un comando horizontal, por lo que activa el modo horizontal si TeX está en modo vertical. La macro \leavevmodesirve \voidb@xpara que no se agregue nada a la lista horizontal (posiblemente después de haberla iniciado).

El comando analógico \unvboxes un comando vertical yterminaun párrafo.

\catcode`@=11
\def\leavehmode{\unvbox\voidb@x}
\catcode`@=12

\everypar{PAR}% to show a paragraph has started

abc\leavehmode def

\bye

ingrese la descripción de la imagen aquí

Respuesta2

No sé si esto está claro o no, pero digámoslo explícitamente (del TeXbook):

|\leavevmode| is an abbreviation for `|\unhbox\voidbox|',
where |\voidbox| is a permanently empty box register.

Ahora bien, ¿qué hace \unhbox\voidboxrealmente? Echemos un vistazo entex.web:

@ @<Cases of |main_control| that build...@>=
vmode+start_par: new_graf(cur_chr>0);
vmode+letter,vmode+other_char,vmode+char_num,vmode+char_given,
   vmode+math_shift,vmode+un_hbox,vmode+vrule,
   vmode+accent,vmode+discretionary,vmode+hskip,vmode+valign,
   vmode+ex_space,vmode+no_boundary:@t@>@;@/
  begin back_input; new_graf(true);
  end;

Como puedes ver cualquiera de esas combinaciones de modo y algo más inicia un párrafo, pero vmode+un_vboxno está entre ellas.

A título personal, me parece interesante que Knuth no dejara vmode+<*>vboxempezar un párrafo pero vmode+valignlo hace.

información relacionada