특정 열의 텍스트(가로 및 세로 모두)를 가운데 정렬하려면 어떻게 해야 합니까?

특정 열의 텍스트(가로 및 세로 모두)를 가운데 정렬하려면 어떻게 해야 합니까?

이 열의 모든 값이 중앙에 오도록 처음 세 열을 수직으로 가운데에 배치하려면 어떻게 해야 합니까?

\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가 열 자체의 너비를 계산하는 한 가지 유형입니다. 문자 lcr이러한 유형의 열을 나타냅니다. 작성자가 열에 텍스트를 추가할 때마다 열 너비가 "늘어납니다".

반면에 작성자가 너비를 정의하는 열 유형이 있습니다. 이 열 유형의 식별자는 예를 들어 입니다 p{<width>}. 이를 마지막 열에 사용하고 p{5cm}MWE에 정의했습니다. 이 기둥의 너비는 5cm입니다. 작성자(예: 당신!)가 5cm보다 넓은 텍스트를 더 추가하면 LaTeX는 텍스트를 나누고 새 줄을 시작합니다. 결과 열은 예제에서 볼 수 있듯이 양쪽 정렬된 텍스트 형식으로 지정됩니다.

원하는 결과를 얻으려면 해야 할 일은 다음과 같습니다.

  1. array패키지를 로드하다
  2. 또는 열 m{<width>}대신 열 유형을 사용하십시오 .cp{<width>}

물론 이것은 절반의 진실이다.

패키지 는 및 열 유형을 array제공합니다 . 사용자가 너비를 정의해야 한다는 점에서 열 처럼 작동합니다 . LaTeX는 줄을 끊고 정렬된 텍스트를 생성합니다. 이러한 열 유형의 차이점은mbp수직 정렬. 경험 법칙은 다음과 같습니다.

  • p에 정렬됩니다,
  • m에 정렬되어 있습니다.유휴 및
  • b에 정렬되어 있습니다.오토톰.

(정확한 동작을 이해하려면 어레이 매뉴얼을 읽어보십시오!)

따라서 m테이블에서 열 유형을 사용하면 요청한 대로 모든 줄이 세로 중앙에 정렬됩니다.

하지만 우리는 수평 정렬도 해결해야 합니다. 열 은 방금 교체한 열과 m동일하게 동작합니다 . p마지막 열에서는 이 동작이 정상입니다. 그러나 첫 번째 열에서는 텍스트도 가로 중앙에 배치되기를 원합니다.

패키지 에서 제공하는 다음 트릭이 있습니다 array. 를 사용할 수 있습니다 >{cmd}. 를 중괄호 내부에서 옆 열로 >밀어내는 화살표로 시각화합니다 . cmd표 형식에 다음과 같이 정의하면

\begin{tabular}{ l >{\raggedright}p{5cm} l }

해당 테이블의 첫 번째 열과 마지막 열로 p두 개의 일반적인 열 사이 중간에 5cm 너비의 열 유형이 표시됩니다 .l

그러나 이 두 번째 열을 입력할 때마다 해당 열에 >{\raggedright}명령이 푸시됩니다 . 이 명령은 두 번째 열의 정렬을 왼쪽은 플러시되고 오른쪽은 울퉁불퉁하게 변경합니다.\raggedrightm

위의 정의 대신 다음을 입력할 수 있습니다.

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

모든 열 정의( cp{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가 첫 번째 단어에서 분리를 시작할 수 있게 해줍니다. 이는 매우 작은 열에서 중요합니다.

관련 정보