\vbox
\hbox
다음 두 예제 그룹에서 설명한 것처럼 모드를 전환하지 않으며 모드를 전환하지 않습니다.
다음 두 예제는 동일한 출력을 생성합니다.
\hbox{A}
\end
\noindent A
\end
다음 두 예제도 동일한 출력을 생성합니다.
\vbox{\hrule width 1em}
\end
\noindent\vbox{\hrule width 1em}
\end
또한 빈 콘텐츠는 에서와 같이 모드를 수직에서 수평으로 전환합니다 \unhbox\voidb@x
. 를 통해 동일한 빈 콘텐츠를 얻을 수 있습니다 \unvbox\voidb@x
. 그러나 이것을 사용해도 모드가 수직에서 수평으로 전환되지는 않습니다(다음 두 예 참조). 왜?
\leavevmode\hbox{A}
\end
\catcode`\@=11
\unvbox\voidb@x\hbox{A}
\end
(첫 번째 예에서는 들여쓰기가 추가되고 두 번째 예에서는 들여쓰기가 추가되지 않습니다.)
\vbox
와 같은 단락 안에 있을 수 있습니다 \hbox
. \vbox
단락의 시작 부분과 중간 부분에 어떤 제어 순서를 사용할 수 있습니까 ?
답변1
a를 사용하여 수평 모드를 시작하는 명령 \vbox
은 입니다 \leavevmode
. 왜 다른 것이 필요합니까?
귀하의 가정은 틀렸습니다. 유감스럽게도 모드 변경을 유발하는 것은 "빈 내용"이 아닙니다. 그것은정확하게 \unhbox
그렇죠.
\box
및 \copy
와 다르게 \unhbox
는 수평 명령이므로 TeX가 수직 모드인 경우 수평 모드를 트리거합니다. 매크로는 수평 목록에 아무 것도 추가되지 않도록 \leavevmode
사용합니다 \voidb@x
(아마도 시작한 후).
아날로그 명령 \unvbox
은 수직 명령이며끝단락.
\catcode`@=11
\def\leavehmode{\unvbox\voidb@x}
\catcode`@=12
\everypar{PAR}% to show a paragraph has started
abc\leavehmode def
\bye
답변2
이것이 명확한지 아닌지는 모르겠지만 (TeXbook에서) 명시적으로 설명하겠습니다.
|\leavevmode| is an abbreviation for `|\unhbox\voidbox|',
where |\voidbox| is a permanently empty box register.
이제 \unhbox\voidbox
실제로 무엇을 합니까? 좀 살펴보자tex.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;
보시다시피 모드와 다른 것의 조합은 단락을 시작하지만 vmode+un_vbox
그 조합에는 포함되지 않습니다.
개인적으로 Knuth가 vmode+<*>vbox
문단을 시작 하지 않고 vmode+valign
시작했다는 점이 흥미롭습니다.