왜 center는 center\halign되지 않습니까?

왜 center는 center\halign되지 않습니까?

다음 코드를 사용하면:

\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}
}}

상자에 정렬하다

관련 정보