%20en%20columnas%20particulares%3F.png)
¿Cómo puedo centrar verticalmente las primeras tres columnas de modo que todos los valores de estas columnas estén en el centro?
\begin{center}
\begin{tabular}{|c| c |c| p{5cm}|}
\hline
\rowcolor[gray]{.8}Day & Min Temp & Max Temp & \multicolumn{1}{c|}{ Summary} \\ \hline
Monday & 11C & 22C & A clear day with lots of sunshine.
However, the strong breeze will bring down the temperatures \\ \hline
Tuesday & 9C & 19C & Cloudy with rain, across many northern regions.
Clear spells across most of Scotland and Northern Ireland, but rain
reaching the far northwest \\ \hline
Wednesday & 10C & 21C & Rain will still linger for the morning.
Conditions will improve by early afternoon and continue throughout the evening. \\ \hline
\end{tabular}
\end{center}
Debe tener un aspecto como este:
Editar:
Esto es lo que probé a partir de las preguntas pegadas en los comentarios:
\begin{center}
\renewcommand{\tabularxcolumn}[1]{m{#1}}
\begin{tabularx}{|m{1in}|c|c| p{5cm}|}
\hline
\rowcolor[gray]{.8}Day & Min Temp & Max Temp & \multicolumn{1}{c|}{ Summary} \\ \hline
Monday & 11C & 22C & A clear day with lots of sunshine. However, the strong breeze will bring down the temperatures \\ \hline
Tuesday & 9C & 19C & Cloudy with rain, across many northern regions. Clear spells across most of Scotland and Northern Ireland, but rain reaching the far northwest \\ \hline
Wednesday & 10C & 21C & Rain will still linger for the morning. Conditions will improve by early afternoon and continue throughout the evening. \\ \hline
\end{tabularx}
\end{center}
Todavía no funciona.
Respuesta1
¡Bienvenido a TeX.SE!
Considere publicar un MWE completo la próxima vez. Agregué algunas partes faltantes a mi respuesta, pero omití el color de fondo gris en la línea del título. Considera esto como tu tarea ;-)
LaTeX básicamente conoce dos tipos de columnas. Un tipo, donde LaTeX calcula el ancho de la propia columna. Las letras l
, c
y r
representan este tipo de columnas. Las columnas "crecen" en ancho cada vez que el autor les agrega texto.
Por otro lado si tenemos el tipo de columnas, donde el autor define un ancho. El identificador de este tipo de columna es, por ejemplo p{<width>}
. Lo usó para su última columna y lo definió p{5cm}
en su MWE. Esta columna tendrá 5 cm de ancho. Si el autor (¡es decir, usted!) agrega más texto, que tenga más de 5 cm de ancho, LaTeX dividirá el texto y comenzará una nueva línea. La columna resultante tendrá formato de texto justificado, como puede ver en sus ejemplos.
Para obtener los resultados deseados, todo lo que tienes que hacer es
- cargar el
array
paquete - use el
m{<width>}
tipo de columna en lugar de columnasc
op{<width>}
Por supuesto, esto es sólo la mitad de la verdad.
Los array
paquetes le ofrecen los tipos de columnas m
y b
. Actúan como la p
columna en la que el usuario tiene que definir su ancho. LaTeX luego romperá líneas y producirá texto justificado. La diferencia entre esos tipos de columnas es laalineamiento vertical. La regla general es:
p
está alineado en elPAG,m
está alineado en elMETROinactivo yb
está alineado en elBotomano.
(¡Lea el manual de la matriz para comprender el comportamiento exacto!)
Entonces, usar un m
tipo de columna en su tabla alineará todas las líneas verticalmente centradas, como lo solicitó.
Pero también tenemos que abordar la alineación horizontal. Las m
columnas se comportan igual que las p
columnas que acabamos de reemplazar. En la última columna, este comportamiento está bien. Pero en las primeras columnas queremos que el texto también esté centrado horizontalmente.
Aquí viene el siguiente truco, que ofrece el array
paquete. Puedes usar el >{cmd}
. Visualice el >
como una flecha, que empuja el cmd
desde el interior de las llaves hacia la columna al lado. Si defines en tu tabla algo como
\begin{tabular}{ l >{\raggedright}p{5cm} l }
Obtendrá un p
tipo de columna de 5 cm de ancho en el medio entre dos l
columnas habituales como primera y última columna de esa tabla.
Pero >{\raggedright}
empuja el comando \raggedright
a esa m
columna, cada vez que ingresa a esta segunda columna. Este comando cambiará la alineación en esa segunda columna para que quede nivelada en el lado izquierdo y irregular en el lado derecho.
En lugar de la definición anterior, podría haber escrito
\begin{tabular}{l p{5cm} l}
first cell & \raggedright lots of text in the second cell, which is flush left & third cell \\
next line, first cell & \raggedright again lots of text ... & third cell \\
new line first cell & \raggedright ... & ... \\
once again & \raggedright ... & end \\
\end{tabular}
Pero en este caso, debe ingresar el \raggedright
comando cada vez que ingresa a la segunda columna, lo que puede resultar molesto muy rápidamente. En lugar de escribirlo cada vez que ingresas a esa columna, el >{\raggedright}
truco de la definición anterior lo hará automáticamente por ti. Me parece prometedor.
Para obtener un código LaTeX realmente limpio, debe agregar \arraybackslash\hspace{0pt}
al ejemplo anterior. Pero esta monstruosa cadena hará que su código de entrada sea ilegible. Entonces te presento el siguiente truco.
El array
paquete también ofrece el \newcolumntype
comando. Debe usarlo en el preámbulo de su documento (es decir, antes \begin{document}
). Simplemente elija una letra para que actúe como un nuevo tipo de columna. Solicitaste un tipo de columna centrada. Por eso sugiero la letra "C", que no estaba definida antes.
Entonces la solución más simple sería
\newcolumntype{C}{>{\raggedright\arraybackslash\hspace{0pt}}m{5cm}}
y reemplace todas sus definiciones de columna ( c
y p{5cm}
) con este nuevo y brillante C
tipo de columna.
\begin{tabular}{|C|C|C|C|}
A veces, una solución tan sencilla tiene algunos inconvenientes importantes. En su caso particular, cada columna de su tabla ahora tiene 5 cm de ancho. Supongo que no es exactamente lo que quieres, ¿verdad? Las primeras tres columnas no necesitan tener 5 cm de ancho. ¿Cómo podríamos solucionar eso?
Aquí está mi próxima mejora. En la primera fila, la entrada más amplia parece ser la palabra "miércoles". Dejemos que LaTeX determine su ancho y utilícelo como ancho para la primera columna. Para hacerlo, puede usar el comando \settowidth
para medir el ancho de la palabra. Pero también tenemos que cambiar nuestra nueva definición de columna C
. Tenemos que definirlo de una manera más flexible. Tras una inspección cuidadosa, se debe dar cuenta de que la C
columna debe tener un ancho variable, como p{<width>}
lo tiene. La p
columna tiene un par de tirantes. Así que agreguemos esto a nuestra C
columna.
\newcolumntype{C}[1]{>{\raggedright\arraybackslash\hspace{0pt}}m{#1}}
¿Ver la diferencia? Agregué [1]
al comienzo de la definición. Esto significa que la C
columna debe tener un par de tirantes. El valor dado en ese par se indica con #1
al final de mi definición. Esto nos da la flexibilidad deseada.
El MWE completo ahora se ve así:
\documentclass{article}
\usepackage{array} % better control for tabular
%% Define the length of the longest day name
\newlength{\daylength}
\settowidth{\daylength}{Wednesday}
%% Create a new columntype, where the text is vertically and
%% horizontally centered. The new identifier should be "C".
\newcolumntype{C}[1]{%
>{\centering\arraybackslash\hspace{0pt}}m{#1}}
\begin{document}
\begin{center}
\begin{tabular}{|C{\daylength}| C{2cm} | C{2cm} | m{5cm} |}
\hline
Day & Min Temp & Max Temp & \multicolumn{1}{c|}{ Summary} \\
\hline
Monday & 11C & 22C & A clear day with lots of sunshine.
However, the strong breeze will bring down the temperatures \\
\hline
Tuesday & 9C & 19C & Cloudy with rain, across many northern regions.
Clear spells across most of Scotland and Northern Ireland, but rain
reaching the far northwest \\
\hline
Wednesday & 10C & 21C & Rain will still linger for the morning.
Conditions will improve by early afternoon and continue throughout the evening. \\
\hline
\end{tabular}
\end{center}
\end{document}
y da como resultado esta salida
Personalmente, también definiría un nuevo R
tipo de columna, que facilita una columna alineada a la izquierda, ya que estas columnas pequeñas no se ven bien cuando están justificadas. Lo agregaré a tu montón de tareas. :-)
EDITAR
\arraybackslash
le permite nuevamente usarlo \\
para finalizar la línea de la tabla y comenzar una nueva línea. \hspace{0pt}
permite que LaTeX comience a dividirse en la primera palabra, lo cual es importante en columnas muy pequeñas.