%EB%A5%BC%20%EA%B0%80%EC%9A%B4%EB%8D%B0%20%EC%A0%95%EB%A0%AC%ED%95%98%EB%A0%A4%EB%A9%B4%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%95%B4%EC%95%BC%20%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
이 열의 모든 값이 중앙에 오도록 처음 세 열을 수직으로 가운데에 배치하려면 어떻게 해야 합니까?
\begin{center}
\begin{tabular}{|c| c |c| p{5cm}|}
\hline
\rowcolor[gray]{.8}Day & Min Temp & Max Temp & \multicolumn{1}{c|}{ Summary} \\ \hline
Monday & 11C & 22C & A clear day with lots of sunshine.
However, the strong breeze will bring down the temperatures \\ \hline
Tuesday & 9C & 19C & Cloudy with rain, across many northern regions.
Clear spells across most of Scotland and Northern Ireland, but rain
reaching the far northwest \\ \hline
Wednesday & 10C & 21C & Rain will still linger for the morning.
Conditions will improve by early afternoon and continue throughout the evening. \\ \hline
\end{tabular}
\end{center}
다음과 같아야 합니다.
편집하다:
댓글에 붙여넣은 질문을 통해 제가 시도한 내용은 다음과 같습니다.
\begin{center}
\renewcommand{\tabularxcolumn}[1]{m{#1}}
\begin{tabularx}{|m{1in}|c|c| p{5cm}|}
\hline
\rowcolor[gray]{.8}Day & Min Temp & Max Temp & \multicolumn{1}{c|}{ Summary} \\ \hline
Monday & 11C & 22C & A clear day with lots of sunshine. However, the strong breeze will bring down the temperatures \\ \hline
Tuesday & 9C & 19C & Cloudy with rain, across many northern regions. Clear spells across most of Scotland and Northern Ireland, but rain reaching the far northwest \\ \hline
Wednesday & 10C & 21C & Rain will still linger for the morning. Conditions will improve by early afternoon and continue throughout the evening. \\ \hline
\end{tabularx}
\end{center}
여전히 작동하지 않습니다.
답변1
TeX.SE에 오신 것을 환영합니다!
다음번에는 전체 MWE를 게시하는 것을 고려해 보십시오. 답변에 누락된 부분을 추가했지만 제목 줄의 회색 배경색이 누락되었습니다. 이것을 숙제로 생각하세요 ;-)
LaTeX는 기본적으로 두 가지 유형의 열을 알고 있습니다. LaTeX가 열 자체의 너비를 계산하는 한 가지 유형입니다. 문자 l
및 c
는 r
이러한 유형의 열을 나타냅니다. 작성자가 열에 텍스트를 추가할 때마다 열 너비가 "늘어납니다".
반면에 작성자가 너비를 정의하는 열 유형이 있습니다. 이 열 유형의 식별자는 예를 들어 입니다 p{<width>}
. 이를 마지막 열에 사용하고 p{5cm}
MWE에 정의했습니다. 이 기둥의 너비는 5cm입니다. 작성자(예: 당신!)가 5cm보다 넓은 텍스트를 더 추가하면 LaTeX는 텍스트를 나누고 새 줄을 시작합니다. 결과 열은 예제에서 볼 수 있듯이 양쪽 정렬된 텍스트 형식으로 지정됩니다.
원하는 결과를 얻으려면 해야 할 일은 다음과 같습니다.
array
패키지를 로드하다- 또는 열
m{<width>}
대신 열 유형을 사용하십시오 .c
p{<width>}
물론 이것은 절반의 진실이다.
패키지 는 및 열 유형을 array
제공합니다 . 사용자가 너비를 정의해야 한다는 점에서 열 처럼 작동합니다 . LaTeX는 줄을 끊고 정렬된 텍스트를 생성합니다. 이러한 열 유형의 차이점은m
b
p
수직 정렬. 경험 법칙은 다음과 같습니다.
p
에 정렬됩니다피,m
에 정렬되어 있습니다.중유휴 및b
에 정렬되어 있습니다.비오토톰.
(정확한 동작을 이해하려면 어레이 매뉴얼을 읽어보십시오!)
따라서 m
테이블에서 열 유형을 사용하면 요청한 대로 모든 줄이 세로 중앙에 정렬됩니다.
하지만 우리는 수평 정렬도 해결해야 합니다. 열 은 방금 교체한 열과 m
동일하게 동작합니다 . p
마지막 열에서는 이 동작이 정상입니다. 그러나 첫 번째 열에서는 텍스트도 가로 중앙에 배치되기를 원합니다.
패키지 에서 제공하는 다음 트릭이 있습니다 array
. 를 사용할 수 있습니다 >{cmd}
. 를 중괄호 내부에서 옆 열로 >
밀어내는 화살표로 시각화합니다 . cmd
표 형식에 다음과 같이 정의하면
\begin{tabular}{ l >{\raggedright}p{5cm} l }
해당 테이블의 첫 번째 열과 마지막 열로 p
두 개의 일반적인 열 사이 중간에 5cm 너비의 열 유형이 표시됩니다 .l
그러나 이 두 번째 열을 입력할 때마다 해당 열에 >{\raggedright}
명령이 푸시됩니다 . 이 명령은 두 번째 열의 정렬을 왼쪽은 플러시되고 오른쪽은 울퉁불퉁하게 변경합니다.\raggedright
m
위의 정의 대신 다음을 입력할 수 있습니다.
\begin{tabular}{l p{5cm} l}
first cell & \raggedright lots of text in the second cell, which is flush left & third cell \\
next line, first cell & \raggedright again lots of text ... & third cell \\
new line first cell & \raggedright ... & ... \\
once again & \raggedright ... & end \\
\end{tabular}
하지만 이 경우 두 번째 열을 입력할 때마다 명령을 입력해야 하므로 \raggedright
매우 빠르게 짜증날 수 있습니다. 해당 열에 들어갈 때마다 입력하는 대신 >{\raggedright}
이전 정의의 트릭이 자동으로 수행됩니다. 나에게 유망한 것 같습니다.
\arraybackslash\hspace{0pt}
정말 깔끔한 LaTeX 코드를 얻으려면 위의 예제에 추가해야 합니다 . 하지만 이 엄청난 문자열은 입력 코드를 읽을 수 없게 만듭니다. 그래서 다음 트릭을 제시하겠습니다.
패키지 는 명령 array
도 제공합니다 \newcolumntype
. 문서의 서문(예: 앞 \begin{document}
)에 이를 사용해야 합니다. 새 열 유형으로 사용할 문자를 선택하면 됩니다. 중앙 정렬 유형의 열을 요청하셨습니다. 따라서 이전에는 정의되지 않았던 문자 "C"를 제안합니다.
따라서 가장 간단한 해결책은
\newcolumntype{C}{>{\raggedright\arraybackslash\hspace{0pt}}m{5cm}}
모든 열 정의( c
및 p{5cm}
)를 새롭고 빛나는 C
열 유형으로 바꾸세요.
\begin{tabular}{|C|C|C|C|}
때로는 이렇게 간단한 솔루션에도 몇 가지 큰 단점이 있습니다. 특별한 경우에는 테이블의 모든 열 너비가 이제 5cm입니다. 내 생각에는 정확히 당신이 원하는 것이 아닌 것 같아요, 그렇죠? 처음 3개 열의 너비는 5cm일 필요는 없습니다. 어떻게 해결할 수 있을까요?
다음 개선 사항은 다음과 같습니다. 첫 번째 행에서 가장 넓은 항목은 "수요일"이라는 단어인 것 같습니다. 따라서 LaTeX에서 너비를 결정하고 이를 첫 번째 열의 너비로 사용하도록 합니다. 그러기 위해서는 명령을 사용하여 \settowidth
단어의 너비를 측정할 수 있습니다. 그러나 우리는 또한 의 새로운 열 정의를 변경해야 합니다 C
. 우리는 이를 좀 더 유연한 방식으로 정의해야 합니다. 주의 깊게 살펴보면 C
열의 너비가 가변적이어야 함을 알 수 있습니다 p{<width>}
. 기둥 p
에는 한 쌍의 중괄호가 있습니다. 그럼 이것을 우리 C
칼럼 에 추가해 보겠습니다 .
\newcolumntype{C}[1]{>{\raggedright\arraybackslash\hspace{0pt}}m{#1}}
차이점이 보이시나요? [1]
정의 시작 부분에 추가했습니다 . 즉, C
열에는 한 쌍의 중괄호가 있어야 합니다. 해당 쌍에 주어진 값은 #1
내 정의 끝에 로 표시됩니다. 이는 우리에게 원하는 유연성을 제공합니다.
이제 전체 MWE는 다음과 같습니다.
\documentclass{article}
\usepackage{array} % better control for tabular
%% Define the length of the longest day name
\newlength{\daylength}
\settowidth{\daylength}{Wednesday}
%% Create a new columntype, where the text is vertically and
%% horizontally centered. The new identifier should be "C".
\newcolumntype{C}[1]{%
>{\centering\arraybackslash\hspace{0pt}}m{#1}}
\begin{document}
\begin{center}
\begin{tabular}{|C{\daylength}| C{2cm} | C{2cm} | m{5cm} |}
\hline
Day & Min Temp & Max Temp & \multicolumn{1}{c|}{ Summary} \\
\hline
Monday & 11C & 22C & A clear day with lots of sunshine.
However, the strong breeze will bring down the temperatures \\
\hline
Tuesday & 9C & 19C & Cloudy with rain, across many northern regions.
Clear spells across most of Scotland and Northern Ireland, but rain
reaching the far northwest \\
\hline
Wednesday & 10C & 21C & Rain will still linger for the morning.
Conditions will improve by early afternoon and continue throughout the evening. \\
\hline
\end{tabular}
\end{center}
\end{document}
결과는 다음과 같습니다.
개인적으로 나는 또한 R
왼쪽 정렬 열을 용이하게 하는 새로운 유형의 열을 정의할 것입니다. 이 작은 열은 정렬될 때 보기 좋지 않기 때문입니다. 네 숙제 더미에 추가할게. :-)
편집하다
\arraybackslash
다시 사용하여 \\
표 줄을 끝내고 새 줄을 시작할 수 있습니다. \hspace{0pt}
LaTeX가 첫 번째 단어에서 분리를 시작할 수 있게 해줍니다. 이는 매우 작은 열에서 중요합니다.