Tug.org의 \vadjust 예

Tug.org의 \vadjust 예

나는 Tug.org에서 TeX의 기본 요소에 대해 읽고 있었습니다. 나는 \vadjust의 사용 예를 발견했습니다.

1. \def\strutA#1#2{\vrule height#1 depth#2 width0pt}
2. \def\ta#1%
3. {%
4.      \strutA{8.5pt}{3.5pt}%
5.      \vadjust
6.      {
7.           \vbox to 0pt
8.           {
9.                \kern-1\baselineskip
10.                \moveleft0.5in\hbox to 0.5in
11.                {
12.                     \strutA{8.5pt}{3.5pt}%
13.                     \hfil#1\kern1em
14.                }
15.                \vss
16.           }%
17.      }%
18. }
19. \hsize=4.75in
20. There are cries, sobs, confusion among the people, and at that moment
21. the cardinal himself, the Grand Inquisitor, passes by the cathedral.
22. He is an old man, almost ninety, tall and erect,\ta{100} with a
23. withered face and sunken eyes, in which there is still a gleam of
24. light. He is not dressed in his brilliant cardinal's robes, as he was
25. the day before, when he was burning the enemies of the Roman
26. Church~\char144 \kern2em\hfill Fyodor Dostoyevsky, {\it The Brothers
27. Karamazov}\par 

코드를 이해하는 데 어려움이 있어서 코드를 실행한 다음 일부 값을 만지작거렸습니다. 여백 vbox를 기본 텍스트(또는 그 안에 있는 특정 줄)와 수직으로 정렬하는 데 사용된 값은 약간 인위적인 것 같습니다. \vadjust가 발생하는 줄의 줄 높이를 TeX에 요청하고 이를 사용하여 vbox의 위치를 ​​설정하는 방법이 있는지 궁금합니다.

답변1

아니요. 선의 높이와 깊이는 선에 있는 내용에 따라 달라지며, 선에 있는 내용은 \vadjust 자료가 조판된 후에 결정됩니다.

이 예에서는 스트럿을 사용하여 대부분의 케이스에 높이와 깊이가 알려져 있도록 합니다. 높이와 깊이에 대한 명시적인 값을 가진 \strutA는 필요하지 않습니다. 줄에 더 큰 것이 없는 한 일반적인 \strut는 잘 작동합니다. 자세히 설명하면 \vadjust의 상자가 기준선 건너뛰기 없이 세로 목록에 추가됩니다. 버팀목의 높이와 깊이를 합하면 \baselineskip이 되므로 버팀목보다 크거나 깊은 텍스트가 없는 한 \baselineskip만큼 커닝하여 기준선을 정렬할 수 있습니다. 다른 길이도 사용할 수 있습니다.

upwards kern = depth of strut in text + height of vadjust box

크기가 크면 페이지 나누기가 덜 이상적일 수 있습니다.

줄의 텍스트 깊이에 관계없이 더 일반적으로 작동하게 만드는 방법은 페이지를 강제로 나누고 출력 루틴이 상자를 수집하도록 하고(\lastbox 사용) 상자의 높이와 깊이를 기록하는 것입니다. 그러나 출력 루틴을 사용하면 상자를 하나의 상자로 결합할 수 있으므로 높이와 깊이를 측정할 필요가 없습니다.

관련 정보