tabularx を使用するときに \multicolumn サイズを計算する正しい方法は何ですか?

tabularx を使用するときに \multicolumn サイズを計算する正しい方法は何ですか?

正しいサイズを得るためにp{}必要な正しいサイズを決定する正しい方法は何ですか?\multicolumn

問題はこれです: を使用しtabularx、 も使用したいのです\multicolumnが。そのためには、使用する正確なサイズを \multicolumn に指定する必要があります。そして、これが問題です。1 つのテーブルを別のテーブル内に配置したり、行がいくつかの列に拡張されたりする複雑なテーブルでは、計算が難しくなります。

正しいサイズを把握するのが難しくなり、後でテーブルを変更する場合は、コードを再度変更する必要があります。

以下の最初の例は、X を \multicolumn と組み合わせて使用​​して複数の列に拡張することはできないことを示しています。

\documentclass[10pt,notitlepage]{article}%
\usepackage{tabularx}
\usepackage{array}
\newcolumntype{Y}{>{\centering\arraybackslash}X}
\usepackage{lipsum}
\setlength{\parindent}{0pt}
\begin{document}

\begin{tabularx}{\textwidth}{@{}|l|Y|@{}}\hline
 column 1 &
 {\begin{tabularx}{\linewidth}{@{}Y|Y|Y@{}}\hline
      \lipsum[75] & \lipsum[75] &  \lipsum[75] \\\hline
      \multicolumn{3}{X}{\lipsum[75]}
  \end{tabularx}
 }
 \\\hline
\end{tabularx}
\end{document}

Mathematica グラフィックス

したがって、 を使用する必要がありますp{}。他の列に拡張できるものはありません。

しかし、pサイズがほしい。試行錯誤した結果、必要なサイズに近いものが見つかった。

\documentclass[10pt,notitlepage]{article}%
\usepackage{tabularx}
\usepackage{array}
\newcolumntype{Y}{>{\centering\arraybackslash}X}
\usepackage{lipsum}
\setlength{\parindent}{0pt}
\begin{document}

\begin{tabularx}{\textwidth}{@{}|l|Y|@{}}\hline
 column 1 &
 {\begin{tabularx}{\linewidth}{@{}Y|Y|Y@{}}\hline
       \lipsum[75] &  \lipsum[75] &   \lipsum[75] \\\hline
      \multicolumn{3}
        %this calculation below is needed, and not sure if it is correct now
        {p{.9\dimexpr \textwidth-4\arrayrulewidth-8\tabcolsep\relax}}{\lipsum[75]}
  \end{tabularx}
 }
 \\\hline
\end{tabularx}
\end{document}

Mathematica グラフィックス

はい、今は良くなりました。しかし、後で何かを変える場合は、別のものに変更する必要があること.9は確かです。

質問は、これが本当に Latex で行うべき方法なのかということです。Latex にはこれを自動的に行う方法があるはずです。私が上で行っている方法の代わりに、検討すべきより良いアプローチはありますか?

上記は小さな例です。私は tabularx を使用し、その中に他の tabularx テーブルも含めたいと思っています。そのため、これはすぐに複雑になる可能性があります。

答え1

ここでは複数列は必要ありません。テキストは、外側の表の列の幅全体の段落にすぎません。(ちなみに、以前にコメントしたように、内側の列には tabularx を使用しません。すべての列が列である表ではX、列の幅が事前にわかっているので、tabularx で列の幅を計算する必要はありません (ただし、計算は機能します)。)

\documentclass[10pt,notitlepage]{article}%
\usepackage{tabularx}
\usepackage{array}
\newcolumntype{Y}{>{\centering\arraybackslash}X}
\usepackage{lipsum}
\setlength{\parindent}{0pt}
\begin{document}

\begin{tabularx}{\textwidth}{@{}|l|Y|@{}}\hline
 column 1 &
 {\begin{tabularx}{\linewidth}{@{}Y|Y|Y@{}}\hline
       \lipsum[75] &  \lipsum[75] &   \lipsum[75] \\\hline
  \end{tabularx}
 }

\lipsum[75]
 \\\hline
\end{tabularx}
\end{document}

答え2

これは目的を達成するための方法です。各列のデフォルトのサイズは です\hsize。これを変更するには を使用します。3 列の幅については、 3 列を占めるため、>{\setlength\hsize{1\hsize}}基本の 3 倍に設定する必要があります。\hsize

ここに画像の説明を入力してください

コード:

\documentclass[10pt,notitlepage]{article}%
\usepackage{tabularx}
\usepackage{array}
\newcolumntype{Y}{>{\centering\arraybackslash}X}
\usepackage{lipsum}
\setlength{\parindent}{0pt}
\begin{document}

\begin{tabularx}{\textwidth}{@{}|l|Y|@{}}\hline
 column 1 &{
\begin{tabularx}{\linewidth}{Y|Y|Y}%
\lipsum[75] &\lipsum[75] & \lipsum[75] \\ \hline
\multicolumn{3}{>{\centering\setlength\hsize{3\hsize}}Y}{\lipsum[75]}
\end{tabularx}}\\ \hline
\end{tabularx}
\end{document}

関連情報