¿Cuál es la forma correcta de calcular el tamaño de \multicolumna cuando se utiliza tabularx?

¿Cuál es la forma correcta de calcular el tamaño de \multicolumna cuando se utiliza tabularx?

¿Cuál es la forma correcta de determinar el tamaño correcto para usar con p{}el necesario para \multicolumnobtener el tamaño correcto?

El problema es este: quiero usar tabularxy también usar \multicolumn. Para hacer eso, tengo que darle a \multicolumn un tamaño exacto para usar. Y este es el problema. En una tabla complicada, donde puedo tener una tabla dentro de otra y una fila que se extiende a unas pocas columnas, los cálculos se vuelven difíciles.

Se vuelve más difícil calcular el tamaño correcto y, si cambio la tabla más tarde, tendré que cambiar el código nuevamente.

El primer ejemplo a continuación muestra que X no se puede usar con \multicolumn para que se extienda a más de una columna:

\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

Así que hay que usarlo p{}. Nada más permitiría que se extendiera a las otras columnas.

Pero pquiere una talla. Después de algunas pruebas y errores, aquí hay uno que se acerca al tamaño necesario.

\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

Vale, ahora está mejor. Pero si cambio algo más tarde, tengo que cambiar .9a otra cosa, estoy seguro.

La pregunta es: ¿Es así realmente como se supone que se debe hacer esto en Latex? Parece que Latex debería tener una forma de hacer esto automáticamente. ¿Existe algún enfoque mejor que debería considerar en lugar de lo que estoy haciendo arriba?

Lo anterior es un pequeño ejemplo. Quiero usar tabularx y tener otras tablas tabularx dentro también. Entonces esto puede complicarse muy rápidamente.

Respuesta1

No necesita varias columnas aquí, su texto es solo un párrafo del ancho completo de la columna exterior de la tabla. (Por cierto, como comenté antes, no usaría tabularx para la columna interna: en una tabla donde cada columna es una Xcolumna, sabes de antemano los anchos de las columnas, por lo que no hay necesidad de hacer que tabularx los resuelva (aunque 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}

Respuesta2

Esta es una manera de lograr el objetivo. El tamaño predeterminado de cada columna es \hsize. Para cambiarlo, use >{\setlength\hsize{1\hsize}}. En cuanto al ancho de 3 columnas, es necesario configurarlo en 3 veces el básico \hsizeporque ocupa 3 columnas.

ingrese la descripción de la imagen aquí

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}

información relacionada