Как правильно рассчитать размер \multicolumn при использовании tabularx?

Как правильно рассчитать размер \multicolumn при использовании tabularx?

Как правильно определить нужный размер, чтобы использовать p{}его \multicolumnправильно?

Проблема в следующем: я хочу использовать tabularxи также использовать \multicolumn. Чтобы сделать это, я должен указать \multicolumn точный размер для использования. И это проблема. В сложной таблице, где я могу иметь одну таблицу внутри другой, и строку, которая простирается на несколько столбцов, вычисления становятся сложными.

Становится все сложнее определить правильный размер, и если я позже изменю таблицу, мне придется снова менять код.

Первый пример ниже показывает, что 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. Чтобы изменить его, используйте >{\setlength\hsize{1\hsize}}. Что касается ширины 3 столбцов, ее нужно установить в 3 раза больше базовой, \hsizeпоскольку она занимает 3 столбца.

введите описание изображения здесь

Код:

\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}

Связанный контент