行の高さに対する垂直方向の配置

行の高さに対する垂直方向の配置

私は、一見些細な垂直方向の配置の問題に苦労していますtabular。3つの列を考えてみましょう。2つの列にはソフトラップされるはずのテキストが含まれており、セルの 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: OK

これは予想どおりのように見えますが、2 つのテキストの高さが同じ場合のみです。それ以外の場合 (2 番目\lipsum[1][1]を に変更するだけ\lipsum[1][1-2])、結果は次のようになります。

出力2: 間違い

問題: 列 1 の内容がセルの上部に揃っていません。

もちろん、2 つの「長い」列の配置を次のように変更しても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

そんなに些細なことではない。

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}

関連情報