
¿Cuál es la forma correcta de determinar el tamaño correcto para usar con p{}
el necesario para \multicolumn
obtener el tamaño correcto?
El problema es este: quiero usar tabularx
y 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}
Así que hay que usarlo p{}
. Nada más permitiría que se extendiera a las otras columnas.
Pero p
quiere 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}
Vale, ahora está mejor. Pero si cambio algo más tarde, tengo que cambiar .9
a 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 X
columna, 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 \hsize
porque ocupa 3 columnas.
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}