相對於行高的垂直對齊方式

相對於行高的垂直對齊方式

我正在努力解決一個看似微不足道的垂直對齊問題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}

相關內容