다음 코드를 사용하면:
\documentclass[a4paper]{report}
\begin{document}
\begin{center}
\halign{\vrule \hfil # \hfil & \hfil # \hfil \vrule \cr
a & b \cr\noalign{\hrule}
c & d \cr\noalign{\hrule}
}
\end{center}
\end{document}
\halign
나는 페이지 중앙에 간단한 테이블을 생성할 것으로 기대합니다 . 하지만 아래 사진처럼 그렇지 않습니다.
\centering
역시 효과가 없습니다. 왜 그런 일이 발생합니까?
답변1
LaTeX에서도 낮은 수준의 명령을 사용하고 싶은 유혹을 느낄 수도 있습니다. 그러나 처음에는 이해하기 쉽지 않은 몇 가지 미묘한 부분이 있습니다.
이러한 미묘함 중 하나 \halign
는수직 명령, 발견되면 수직 모드가 시작됩니다. 스캔할 때 TeX가 수평 모드에 있으면 를 \halign
실행하여 종료합니다 \par
.
이는 다음 테스트 파일(Plain TeX)에 의해 입증됩니다.
a\def\par{PAR\endgraf\let\par\endgraf}bc\halign{#\cr HALIGN\cr}def
\bye
출력하는
의 일시적인 재정의는 그것이 효과적으로 실행되었음을 \par
보여주는 것을 목표로 한다 .\par
TeX가 수직 모드에 있을 때, 단락을 만들지 않고 단순히 상자를 쌓습니다. 따라서 \centering
(에서 적용되는 center
) 단락에만 영향을 주기 때문에 아무 작업도 수행하지 않습니다. 따라서 일반적으로 0 \halign
이므로 왼쪽 여백과 같은 높이로 인쇄됩니다 \tabskip
. 스캔되는 \tabskip
순간 적용되는 접착제는 다른 상자가 지정 되지 않는 한 모든 상자(모든 정렬 행에 대해 하나의 상자)와 두 정렬 셀 사이에 \halign
형성된 모든 상자의 왼쪽에 추가됩니다 . 더 많은 정보를 알고 싶다면 TeXbook의 22장을 읽어보세요. 하지만 쉽지는 않습니다.\halign
\tabskip
어떻게 \halign
단락의 일부를 만들 수 있나요? 그것을 포함할 수 있고 또한 포함할 수 있는 것 안에 그것을 숨김으로써: a가 \vbox
일반적으로 사용됩니다(Plain TeX에서 테이블을 중앙에 배치하는 가장 일반적인 장치는 를 사용하는 것입니다. $$\vbox{\halign{...}}$$
LaTeX에서는 시도하지 마십시오). 그 자체로 단락을 시작 하지는 \vbox
않지만 중단하지도 않습니다.
\begin{center}
\leavevmode\vbox{\halign{...}}
\end{center}
정렬을 중앙에 맞추게 됩니다.
사용 tabular
; 당신은 안전할 것입니다.
답변2
\halign
주변의 수직 목록에 배치되는 수평 상자를 작성하며 단락 작성기에 영향을 받지 않고 준수 됩니다 \leftskip
.\rightskip
다음을 사용하여 중앙에 맞추려고 할 수 있습니다.
\documentclass{article}
\begin{document}
\halign{\vrule \hfil # \hfil & \hfil # \hfil \vrule \cr
a & b \cr\noalign{\hrule}
c & d \cr\noalign{\hrule}
}
\tabskip 0pt plus 1000pt minus 1000pt
\halign to \hsize{\tabskip0pt\vrule \hfil # \hfil & \hfil # \hfil \vrule
\tabskip 0pt plus 1000pt minus 1000pt \cr
a & b \cr\noalign{\hrule}
c & d \cr\noalign{\hrule}
}
\end{document}
그러나 \hrule
전체 \hsize
너비가 확장됩니다.
\halign
우리는 를 에 넣을 수 있습니다 \vbox
.
\bigskip
\centering
\noindent\vbox{\halign{\vrule \hfil # \hfil & \hfil # \hfil \vrule \cr
a & b \cr\noalign{\hrule}
c & d \cr\noalign{\hrule}
}}