![테이블 형식: 한 테이블 형식의 차원을 다른 테이블 형식으로 연결합니다.](https://rvso.com/image/335499/%ED%85%8C%EC%9D%B4%EB%B8%94%20%ED%98%95%EC%8B%9D%3A%20%ED%95%9C%20%ED%85%8C%EC%9D%B4%EB%B8%94%20%ED%98%95%EC%8B%9D%EC%9D%98%20%EC%B0%A8%EC%9B%90%EC%9D%84%20%EB%8B%A4%EB%A5%B8%20%ED%85%8C%EC%9D%B4%EB%B8%94%20%ED%98%95%EC%8B%9D%EC%9C%BC%EB%A1%9C%20%EC%97%B0%EA%B2%B0%ED%95%A9%EB%8B%88%EB%8B%A4..png)
tabular
열 너비를 모든 행에서 가장 넓은 요소로 설정합니다.
tabular
서로의 열 너비를 고려하고 그 중 가장 큰 것을 선택하기 위해 두 개 이상의 개별 을 설정할 수 있습니까 ?
예를 들어, 추가 단락 텍스트로 a를 나누고 tabular
마치 다음 페이지로 넘어가는 것처럼 표 형식을 계속하려는 경우 longtable
(동일한 열 너비, 헤더 반복 가능) 이것이 가능합니까?
답변1
아이디어는 이 열 유형이 표 형식에 나타날 때마다 항상 동일한 너비를 갖도록 특수 열 유형을 여러 개 만드는 것입니다. 이를 위해서는 문서를 2번 실행해야 하며, 첫 번째 실행에서 계산된 너비가 aux 파일에 저장됩니다.
참고: 열의 폭을 더 좁히려면 aux 파일을 삭제하거나 최소한 \AtEndDocument를 주석 처리해야 합니다.
\documentclass{article}
\usepackage{array}
\newsavebox{\tempbox}% \box0 etc. used
\makeatletter
\newcommand{\saveWidth}[1]% #1=column name (A,B,...)
{\immediate\write\@auxout{\string\initWidth{#1}{\the\csname Width#1\endcsname}}}
\newcommand{\initWidth}[2]% #1=column name (A,B,...), #2=the width
{\@ifundefined{Width#1}{}{\global\csname Width#1\endcsname=#2\relax}}
\makeatother
\newlength{\WidthA}% one for each column type
\newlength{\WidthB}
\newlength{\WidthC}
\AtEndDocument{\saveWidth{A}\saveWidth{B}\saveWidth{C}}
\newcolumntype{A}{>{\savebox{\tempbox}\bgroup}{l}<{\egroup%
\ifdim\wd\tempbox>\WidthA \global\WidthA=\wd\tempbox\fi%
\makebox[\WidthA][l]{\usebox\tempbox}}}
\newcolumntype{B}{>{\savebox{\tempbox}\bgroup}{c}<{\egroup%
\ifdim\wd\tempbox>\WidthB \global\WidthB=\wd\tempbox\fi%
\makebox[\WidthB][c]{\usebox\tempbox}}}
\newcolumntype{C}{>{\savebox{\tempbox}\bgroup}{r}<{\egroup%
\ifdim\wd\tempbox>\WidthC \global\WidthC=\wd\tempbox\fi%
\makebox[\WidthC][r]{\usebox\tempbox}}}
\begin{document}
\noindent\begin{tabular}{ABC}
left & center & right\\
wide left & wide center & wide right
\end{tabular}
\medskip
Some text here.
\medskip
\noindent\begin{tabular}{ABC}
left & center & right\\
\end{tabular}
\medskip
Some text here.
\medskip
\noindent\begin{tabular}{ABC}
very wide left & very wide center & very wide right\\
\end{tabular}
\end{document}
새 열을 더 쉽게 만들 수 있도록 추가했습니다 \newcolumnwidth{<name>}{l/c/r}
(그 자체로는 다소 추악합니다).
\newcommand{\newcolumnwidth}[2]% #1=new column type, #2=l/c/r
{\expandafter\newlength\csname Width#1\endcsname%
\AtEndDocument{\saveWidth{#1}}%
\newcolumntype{#1}{>{\savebox{\tempbox}\bgroup}{#2}<{\egroup%
\ifdim\wd\tempbox>\csname Width#1\endcsname \global\csname Width#1\endcsname=\wd\tempbox\fi%
\makebox[\csname Width#1\endcsname][#2]{\usebox\tempbox}}}}
\newcolumnwidth{A}{l}
\newcolumnwidth{B}{c}
\newcolumnwidth{C}{r}
답변2
내가 따를 접근 방식은 환경 내부에서 수행되는 것과 유사합니다 tabbing
. 탭 정지를 정의하는 첫 번째 행을 설정한 다음 \kill
해당 행이 표시되지 않도록 설정합니다. 후속 행은 첫 번째 행이 없어도 이러한 탭 정지를 사용합니다.
\documentclass{article}
\begin{document}
\noindent
\begin{tabular}{l c r}
left & center & right \\
wide left & wide center & wide right
\end{tabular}
\medskip
Some text here.
\medskip
\noindent
\begin{tabular}{l c r}
\phantom{wide left} &
\phantom{wide center} &
\phantom{wide right} \\[-\normalbaselineskip]% Similar to \kill
left & center & right
\end{tabular}
\end{document}
위 예제의 " \kill
행"은 a 내부의 두 테이블에서 가장 넓은 요소를 배치하는 \phantom
반면 행의 높이는 형식의 개행을 사용하여 제거됩니다 \\[-\normalbaselineskip]
.
숨길 콘텐츠의 길이가 너무 길면 를 사용하세요 \hphantom
. 수직선의 중복 인쇄가 걱정된다면 사용하지 마십시오.booktabs
\kill
) 또는 다음 을 사용하여 "행" 에 각 열 요소를 삽입합니다.\multicolumn{1}{l}{...}
없이수직 규칙.