Qual é a maneira correta de calcular o tamanho de \multicolumn ao usar tabularx?

Qual é a maneira correta de calcular o tamanho de \multicolumn ao usar tabularx?

Qual é a maneira correta de determinar o tamanho correto para uso p{}necessário para \multicolumnobter o tamanho correto?

O problema é o seguinte: quero usar tabularxe também usar \multicolumn. Para fazer isso, tenho que dar ao \multicolumn um tamanho exato para usar. E esse é o problema. Em tabelas complicadas, onde posso ter uma tabela dentro da outra, e uma linha que se estende por poucas colunas, os cálculos estão ficando difíceis.

Ficou mais difícil descobrir o tamanho correto e, se eu alterar a tabela posteriormente, terei que alterar o código novamente.

O primeiro exemplo abaixo mostra que X não pode ser usado com \multicolumn para estendê-lo a mais de uma coluna:

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

Gráficos matemáticos

Então tem que usar p{}. Nada mais permitiria que se estendesse às outras colunas.

Mas pquer um tamanho. depois de algumas tentativas e erros, aqui está um que chega perto do tamanho necessário

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

Gráficos matemáticos

Ok, está melhor agora. Mas se eu mudar alguma coisa mais tarde, terei que mudar .9para outra coisa, tenho certeza.

A questão é: é realmente assim que se deve fazer isso no Latex? Parece que o Latex deveria ter uma maneira de fazer isso automaticamente. Existe uma abordagem melhor que eu deveria observar em vez do que estou fazendo acima?

O acima é um pequeno exemplo. Quero usar tabularx e ter outras tabelas tabularx dentro também. Portanto, isso pode ficar complicado muito rapidamente.

Responder1

Você não precisa de várias colunas aqui, seu texto é apenas um parágrafo com a largura total da coluna externa da tabela. (Aliás, como comentei antes, eu não usaria tabularx para a coluna interna: em uma tabela onde cada coluna é uma Xcoluna, você sabe antecipadamente as larguras das colunas, então não há necessidade de fazer tabularx resolvê-las (embora funciona).

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

Responder2

Esta é uma forma de atingir o objetivo. O tamanho padrão de cada coluna é \hsize. Para alterá-lo, use >{\setlength\hsize{1\hsize}}. Quanto à largura de 3 colunas, é necessário configurá-la para 3 vezes o básico \hsizeporque ocupa 3 colunas.

insira a descrição da imagem aqui

Código:

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

informação relacionada