
正しいサイズを得るために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}
したがって、 を使用する必要があります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}
はい、今は良くなりました。しかし、後で何かを変える場合は、別のものに変更する必要があること.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}