
기본 \vrule
요소는 멋진 특성을 가지고 있습니다. 즉, 둘러싸는 상자의 높이와 깊이에 적응하는 능력이 있습니다.
\documentclass{article}
\newcommand\TestBox{\parbox[c][3cm][c]{1em}{\centering A}}
\begin{document}
\noindent
\TestBox\vrule\TestBox
\noindent
\rule{10pt}{1cm}\,\vrule\,\rule[3cm]{10pt}{1cm}
\end{document}
\vdotfill
와 점으로 구분된 유사한 명령을 정의하는 것이 가능합니까 \vrule
? 그렇다면 어떻게? 그렇지 않으면 왜 안되겠습니까?
답변1
\dotfill
\cleaders
는 무한 글루 사양( )을 통해 정의됩니다 \hfill
. 비슷한 정의에는 \vdotfill
두 가지 문제가 있습니다.
\leaders
친구들은 수평 모드에서는 수평 접착제로만 작업하고, 수직 모드에서는 수직 접착제로만 작업합니다. 직교 변형은 사용할 수 없습니다.가로가 하나가 아닌 세로 방향(높이와 깊이)이 두 개 있습니다. 이는 많은 새로운 질문을 제기합니다. 채우기는 어디에서 시작됩니까? 방향과 금액은 어떻게 지정되나요?
PDF 연산자
TeX 규칙이 PDF 페이지 설명의 한 줄로 구현되면 그래픽 상태가 점선으로 변경되거나 둥근 줄 끝이 될 수 있습니다. 그러나 규칙은 채워진 직사각형으로 구현될 수도 있는데, 이 경우에는 이 트릭이 작동하지 않습니다.
pdfTeX에 대한 서투른 해결 방법
via( 프로젝트의 \pdfsavepos
모듈이 인터페이스를 제공함)의 수직 위치는 기준선과 via (뒤) 및 (현재 행 앞)에 pdfTeX에 추가될 수 있습니다. 후자는 pdfTeX의 전문 분야입니다. 깊이와 높이를 계산할 수 있으며 수직 점선을 설정할 수 있습니다.zref-savepos
zref
\vadjust
\vadjust pre
그러나 이것이 모든 상황에서 작동하는 것은 아닙니다. 예를 들어, \vadjust
위치 측정을 방해하여 다른 재료가 추가될 수 있습니다 .
LuaTeX를 사용한 솔루션 스케치
LuaTeX는 새로운 기능인 "속성"을 제공합니다. 따라서 \vrule
수직 점선을 의미하는 속성으로 올바른 너비의 법선을 설정할 수 있습니다. 그런 다음 구축된 페이지(해당 노드 트리)를 탐색하여 점선 수직선으로 대체할 규칙을 찾습니다.
답변2
높이와 깊이 만 \vrule
외부 상자의 치수에 맞게 조정할 수 있습니다. 높이와 깊이를 알 수 없는 두 개 이상의 상자 사이에 점선으로 표시된 vrule을 넣어야 하는 경우 다음을 사용할 수 있습니다 \valign
.
\def\putbox{\afterassignment\putboxA\setbox0=}
\def\putboxA{\aftergroup\putboxB}
\def\putboxB{\global\dimen0=\dp0 \dp0=0pt \box0 & \kern\dimen0 \cr}
\def\puttext#1{\putbox\hbox{#1}}
\def\vdotfil{\omit\span\omit
\kern-.1pt\xleaders\vbox{\kern.1pt\hbox{.}\kern.1pt}\vfil\kern-.1pt\cr}
\valign{\vfil#&#\vfil\cr
\putbox\vbox{\kern 5cm \hbox{A}} % more than 5 cm height, 0pt depth
\vdotfil
\putbox\vbox{\hbox{B\vrule depth2cm width0pt}} % B height, 2 cm depth
}
\valign{\vfil#&#\vfil\cr
\puttext {Hello}\vdotfil \puttext {you}
}
\end
이 예에서는 높이 \vdotfil
가 5cm 이상, 깊이가 2cm 이상입니다. 두 번째 예는 와 동일합니다 \hbox{Hello\vrule you}
.
여기서는 두 개의 "선"으로 설계 \valign
되었습니다. 첫 번째 "선"에는 상자의 높이만 포함되고 두 번째 "선"에는 동일한 상자의 깊이만 포함됩니다. 매크로는 \putbox
다음 상자를 "높이 부분"과 "깊이 부분"으로 분리하고 결과를 적절한 "선"에 배치합니다. 이 복잡한 이유는 일반 수평 모드에서와 같이 기준선 측면에서 상자를 왼쪽에서 오른쪽으로 설정해야 하기 때문입니다.