表の作成時のmultirowの質問です。

表の作成時のmultirowの質問です。

- ichi ma の投稿
返信数: 3
まずは、以下にtabularのサンプルを示します。
<サンプル>
\begin{tabular}{|p{10zw}||l|l|p{10zw}|}
\hline
\multirow{2}{10zw}{【1列目連結した行】あああああああああああああああああああああああああああああああああああ} & 【1行2列目】 & 【1行3列目】 & 【1行4列目】いいいいいいいいいいいいいいい \\
\cline{2-4}
&【2行2列目】&【2行3列目】&【2行4列目】\\
\hline
\end{tabular}

=========
このサンプルであると、1列目の内容が枠より外れて表示されてしまします。
multirowを使用した場合も【1行4列目】のように折り返しありで横幅指定かつ、縦幅も自動調整を行うためにはどのような対応策がありますでしょうか?

駄文ですが、よろしくお願いします。
添付 multirow_sample.png
ichi ma への返信

Re: 表の作成時のmultirowの質問です。

- 和田 勇 の投稿
示された要素だけであれば 面倒ですが、
    一列目だけと、その他の列を一まとめにした、二つの表にし、
 それらを囲うように表を作成のようにtable の入れ子で実現可能と思われますが ...

TeXLive 2021 以降をご利用の場合であれば tabularray の「\SetCell」を使うことで実現可能と考えています。

 マニュアルは以下で参照可能です。
 「texdoc tabularray」で表示されるマニュアル
 http://mirrors.ctan.org/macros/latex/contrib/tabularray/tabularray.pdf

 上記マニュアル内を「MultirowCells」などで検索してみてください。

今回示した方法はhttps://tex.stackexchange.com/questions/620297/text-height-with-multirow-in-a-tabularx-table にも紹介されています。

ただし documentclass が指定されていなかったので jlreq を利用していることも
関係すると思いますが、tabular と tabularay(tblr) とでは若干実装の違いがあるので、
少なくとも以下の点の補正を考えないといけないと思います。

- 各セルの左右の空きの調整
- 行間スペース
- 2列目、3列目で改行が発生している
- cline が縦の二重罫線に突き刺さっている

検証に利用したソース等を添付しますので参考にしてください。
和田 勇 への返信

Re: 表の作成時のmultirowの質問です。

- ichi ma の投稿
和田 勇様
ご返信及び、とてもご丁寧なご教授を頂きありがとうございました。

教授いただいたtabularrayを使用し、思い描いていた表を作成することが出来ました。

枠の補正等はまた、勉強を重ねた後に修正して行きたい思います。
ichi ma への返信

Re: 表の作成時のmultirowの質問です。

- ut の投稿
(既にご解決済みとのことですので、遅れ馳せなのですが)

multirow パッケージのドキュメント(2021/03/15, version v2.8)
を見ますと、ご質問のような状況は、元々想定されているようです。
(尤も、想定はされていても、"... that is something \multirow
cannot do." とも書かれていますが…)

ドキュメントの:

  3.8 Dealing with tall entries

という節に説明がありますが:

  There are two cases:
  
  1. When there is an exceptionally tall row outside of the multirow
    block the positioning of the \multirow might be wrong.
  
  2. The second case is when the \multirow entry is taller than
    the surrounding normal rows. In that case the multirow text
    will stick out of its block.

とのことで、ご質問の例は、2. の場合に当たるようです。

で、この場合の対処法が 2 つ説明されていて、ひとつは、必要な
行数分だけ空行を追加するという方法で、もうひとつは、必要な高
さと深さを持った strut を立てるというやり方です。

(いずれにしても、ご要望の「縦幅も自動調整を行う」というのは
残念ながら出来なくて、一旦組んでみて、それで必要な行数を確認
することになります)

ご質問の「サンプル」に即すると、以下のようになるかと思います
(strut の値は jarticle.cls の 10pt の場合ですので、お使い
のクラスファイルに合わせて適宜調整してください):

\documentclass{jarticle}
\usepackage{multirow}

\newcommand{\fakesec}[1]{%
  \vspace{1.5\baselineskip}%
  \textbf{\sffamily#1}%
  \medskip
  }

\begin{document}

\fakesec{(1)調整なし}

\begin{tabular}{|p{10zw}||l|l|p{10zw}|}
\hline
\multirow{2}{10zw}{【1列目連結した行】あああああああああああああああああああああああああああああああああああ} & 【1行2列目】 & 【1行3列目】 & 【1行4列目】いいいいいいいいいいいいいいい \\
\cline{2-4}
&【2行2列目】&【2行3列目】&【2行4列目】\\
\hline
\end{tabular}

\fakesec{(2)必要な行数分だけ空行を追加する}

\begin{tabular}{|p{10zw}||l|l|p{10zw}|}
\hline
\multirow{2}{10zw}{【1列目連結した行】あああああああああああああああああああああああああああああああああああ} & 【1行2列目】 & 【1行3列目】 & 【1行4列目】いいいいいいいいいいいいいいい \\
\cline{2-4}
&【2行2列目】&【2行3列目】&【2行4列目】\\
&&&\\ % <--- extra row
\hline
\end{tabular}

\fakesec{(3)strutを立てる}

\begin{tabular}{|p{10zw}||l|l|p{10zw}|}
\hline
\multirow{2}{10zw}{【1列目連結した行】あああああああああああああああああああああああああああああああああああ} & 【1行2列目】 & 【1行3列目】 & 【1行4列目】いいいいいいいいいいいいいいい \\
\cline{2-4}
&【2行2列目】&【2行3列目】&【2行4列目】\rule[-19.5pt]{0pt}{30pt}\\ % <--- strut
\hline
\end{tabular}

\end{document}

添付 3594_multirow.jpg