Divida el texto de varias columnas en el margen del documento con tabularx

Divida el texto de varias columnas en el margen del documento con tabularx

Estoy usandotabularxdividir el contenido de una columna en el margen del documento (cf.Salto de línea en la celda de la tabla en el margen del documento). Pero cuando uso \multicolumnuna tabla de este tipo, se ignora la instrucción de dividir el texto en esa columna. ¿Cómo puedo hacerlo cumplir?

\documentclass{article}
\usepackage{tabularx}

\begin{document}
\newlength{\mylength}
\setlength{\mylength}{\linewidth}
\addtolength{\mylength}{-\parindent}

\hrule
    \begin{tabularx}{\mylength}{lX}
        Lorem ipsum dolor sit amet, consectetuer & adipiscing elit. Ut purus elit, vestibulum ut, placerat ac\\
        \multicolumn{2}{l}{Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus elit, vestibulum ut, placerat ac}\\
    \end{tabularx}
\hrule

\end{document}

ingrese la descripción de la imagen aquí


En respuesta a la pregunta de Mico:

\documentclass{article}
\usepackage{tabularx}

\begin{document}
\newlength{\mylength}
\setlength{\mylength}{\linewidth}
\addtolength{\mylength}{-\parindent}

\hrule
    \begin{tabularx}{\mylength}{llX}
        Lorem ipsum dolor & sit amet, consectetuer & adipiscing elit. Ut purus elit\\
    \end{tabularx}
\hrule
    \begin{tabularx}{\mylength}{llX}
        Lorem ipsum dolor & sit amet, consectetuer & adipiscing elit. Ut purus elit\\
        Lorem ipsum dolor sit & \multicolumn{2}{p{\mylength}}{Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus elit}\\
    \end{tabularx}
\hrule

\end{document}

ingrese la descripción de la imagen aquí

Respuesta1

La siguiente es una versión de su segundo MWE. Tenga en cuenta que debido a que el ancho de todo el tabularxentorno viene dado por \mylength, no debe usar ese parámetro para el ancho combinado de la segunda y tercera columnas. Para calcular el ancho correcto, uso dos variables de longitud adicionales \xlengthy \ylength. \xlengthse establece en el ancho de la primera columna (+ 4\tabcolsep); entonces, \ylengthse calcula como \mylength-\xlength.

ingrese la descripción de la imagen aquí

\documentclass{article}
\usepackage{tabularx}
\hyphenation{ad-ip-is-cing} % no idea if this is correct...

\newlength\xlength
\settowidth\xlength{Lorem ipsum dolor sit}
\addtolength\xlength{4\tabcolsep}

\newlength\mylength
\setlength\mylength{\linewidth}
\addtolength\mylength{-\parindent}

\newlength\ylength
\setlength\ylength\mylength
\addtolength\ylength{-\xlength}

\begin{document}
\hrule
\begin{tabularx}{\mylength}{llX}
Lorem ipsum dolor & sit amet, consectetuer & 
adipiscing elit. Ut purus elit\\
Lorem ipsum dolor sit & 
\multicolumn{2}{p{\ylength}}{Lorem ipsum dolor sit amet, 
    consectetuer adipiscing elit. Ut purus elit}\\
\end{tabularx}
\hrule
\end{document}

ApéndiceUn par de respuestas a las preguntas de seguimiento del OP:

  • El cálculo de \xlengthacuerdo con las líneas dadas en el código anterior esnecesarioporque la primera columna, que es de tipo l, no tiene un ancho preespecificado. Si está dispuesto a cambiar su tipo de columna a p, el ancho de esa columna podría usarse directamente para calcular el ancho de la multicolumna.

    Por ejemplo, si el ancho de la primera columna está dado por \xlength(usted debe elegir su valor...), puede iniciar el tabularxentorno de la siguiente manera:

    \begin{tabularx}{\mylength}{p{\xlength}lX}
    

    Tenga en cuenta que \xlengthahora es puramente el ancho de la primera columna, es decir, no incluye el término 4\tabcolsep.

    Luego, más adelante en este tabularxentorno, podría especificar el ancho de las dos columnas \multicolumn(de tipo p, como en el ejemplo anterior) de la siguiente manera:

    \multicolumn{2}{p{\dimexpr\mylength-\xlength-4\tabcolsep}}{<stuff>}
    
  • El término 4\tabcolsepes la suma de

    • 1\tabcolsepen el borde izquierdo de la mesa,
    • 2\tabcolseppara la cantidad de espacios en blanco entre las columnas 1 y 2, y
    • 1\tabcolsepen el borde derecho de la mesa.

información relacionada