행 높이를 기준으로 수직 정렬

행 높이를 기준으로 수직 정렬

나는 tabular. 3개의 열을 고려하세요. 두 개의 열에는 부드럽게 래핑되어야 하고 다음 위치에 정렬되어야 하는 텍스트가 포함되어 있습니다.맨 위세포의. 세 번째 열(예제에서는 가운데 열)은 행 내에서 세로 중앙에 위치해야 합니다.

예:

\documentclass{scrartcl}
\usepackage{lipsum}
\usepackage{array}
\begin{document}

    \begin{tabular}{m{4cm} m{1cm} m{4cm}}
    \lipsum[1][1] & x  & \lipsum[1][1]
    \end{tabular}

\end{document}

출력 1: 확인

이는 예상한 대로 보이지만 두 텍스트가 동일한 높이를 차지하는 경우에만 해당됩니다. 그렇지 않으면 (두 번째 \lipsum[1][1]를 로 변경하면 \lipsum[1][1-2]결과는 다음과 같습니다.

출력 2: 잘못됨

문제: 열 1의 내용이 셀 상단에 정렬되지 않습니다.

물론 두 개의 "긴" 열 정렬을 다음과 같이 변경해도 p{4cm}도움이 되지 않습니다.

\documentclass{scrartcl}
\usepackage{lipsum}
\usepackage{array}
\begin{document}
    \begin{tabular}{p{4cm} m{1cm} p{4cm}}
    \lipsum[1][1] & x  & \lipsum[1][1-2]
    \end{tabular}
\end{document}

출력 3: 잘못됨

문제: 이제 가운데 기둥이 더 이상 수직 중앙에 위치하지 않습니다.


이해가가는 것 같네요이런 일이 일어나고 있습니다. 이러한 모든 정렬은 셀 자체가 아닌 현재 셀의 첫 번째 "라인"을 기준으로 합니다. (이것이 어떻게 가능한지? 나는 다음을 생성할 수 있는 열 사양을 찾고 있습니다.

예상 출력

가장 좋은 경우에는 중앙 열의 너비를 지정할 필요조차 없습니다.

답변1

\multirow행 셀의 최대 줄 수를 계산하여 속임수를 쓸 수 있습니다 .

\documentclass{scrartcl}
\usepackage{lipsum}
\usepackage{array, multirow}

\begin{document}

    \begin{tabular}{p{4cm} m{1cm} p{4cm}}
    \lipsum[1][1] & \multirow{6}{=}{x} & \lipsum[1][1-2]
    \end{tabular}

\end{document} 

여기에 이미지 설명을 입력하세요

답변2

그렇게 사소한 것은 아닙니다.

두 개의 큰 상자를 측정한 다음 가운데 상자를 수직 중앙에 배치할 수 있습니다. 그러나 TeX이 이를 대신해 줄 수 있습니다.

\documentclass{article}

\usepackage[latin]{babel} % for better hyphenation
\usepackage{lipsum} % for mock text
\usepackage{microtype} % for less overfull boxes

\newcommand{\mytwocols}[4][4cm]{%
  \valign{##\cr
    \mycol{\vtop}{#1}{#2}\vfill\cr
    \noalign{\hspace{2\tabcolsep}}
    \vfill\mycol{\vbox}{1cm}{#3}\vfill\cr
    \noalign{\hspace{2\tabcolsep}}
    \mycol{\vtop}{#1}{#4}\vfill\cr
  }%
}
\newcommand{\mycol}[3]{%
  #1{\hsize#2\relax\parindent0pt\relax\sloppy#3}%
}


\begin{document}

\mytwocols
  {\lipsum[1][1]}
  {x}
  {\lipsum[1][1]}

\bigskip

\mytwocols
  {\lipsum[1][1]}
  {x}
  {\lipsum[1][1-2]}

\bigskip

\mytwocols
  {\lipsum[1][1-2]}
  {x}
  {\lipsum[1][1]}

\end{document}

여기에 이미지 설명을 입력하세요

답변3

또는 사용

\phantom

여기에 이미지 설명을 입력하세요

\documentclass{scrartcl}
\usepackage{lipsum}
\usepackage{array}
\newcolumntype{M}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\begin{document}
    \begin{tabular}{p{4cm} M{5cm} p{4cm}}
    \lipsum[1][1] &  {\phantom{\lipsum[1][1-2]}} x  & \lipsum[1][1-2]
    \end{tabular}
\end{document}

답변4

수동이지만 매우 간단한 해결책은 왼쪽 셀의 줄 수를 동일하게 하고 c"x" 구분 기호에 열을 사용하는 것입니다.

\documentclass{scrartcl}
\usepackage{lipsum}
\usepackage{array}
\begin{document}
    \begin{tabular}{m{4cm}@{\qquad}c@{\qquad}m{4cm}}
    \lipsum[1][1]\newline\newline\newline     & x  & \lipsum[1][1-2]
    \end{tabular}
\end{document}

관련 정보