
Analisei algumas das diferentes soluções fornecidas no tópico a seguir sobre como fazer quebras de linha forçadas em uma célula da tabela:
Como adicionar uma quebra de linha forçada dentro de uma célula da tabela
Com base nisso, compilei uma tabela que consiste em alguns dos métodos de quebra de linha sugeridos para ver como eles interagem com a forma como listei a formatação de minhas tabelas no preâmbulo:
\documentclass{article}
\usepackage{graphicx} % Required for inserting images
\usepackage[left=2cm, right=2cm, top=2cm, bottom=2cm]{geometry}
% Must have features for my tables
\usepackage{array}
\setlength{\tabcolsep}{18pt}
\setlength{\arrayrulewidth}{0.5mm}
\renewcommand{\arraystretch}{1.5}
% ________________________________
\usepackage[usestackEOL]{stackengine}
% Package for \strutlongstacks{T} forced linebreak method
\usepackage{makecell}
% Package for \makecell forced linebreak method
\begin{document}
\begin{table}[h]
\centering
\strutlongstacks{T}
\begin{tabular}{|c|c|m{3cm}|}
\hline
\multicolumn{3}{|c|}{Calender for the rest of the year} \\
\hline
\textbf{Date} & \textbf{Homework} & \textbf{Goal} \\
\hline
Week 1 & Homework 1 and 2 & \begin{tabular}[c]{@{}c@{}}Goal for 1 is to... \\ Goal for 2 is to... \end{tabular} \\ % Text exceeds cell when limit is reached
\hline
Week 2 & Homework 3 and 4 & \vtop{\hbox{\strut Goal for 3 is to...}\hbox{\strut Goal for 4 is to...}} \\ % Force elongates cell on itself when limit is exceeded
\hline
Week 3 & Homework 5 and 6 & \Centerstack{Goal for 5 is to... \\ Goal for 6 is to...} \\ % Text exceeds cell when limit is reached
\hline
Week 4 & Homework 7 and 8 & \begin{flushleft} Goal for 7 is to... \\ Goal for 8 is to... \end{flushleft} \\ % Works for long text, too, only for column types of "|m{}|", though, not for regular "|c|"
\hline
Week 5 & Homework 9 and 10 & \parbox{3cm}{Goal for 9 is to... \\ Goal for 10 is to...} \\ % Works but completely ignores the \renewcommand{\arraystretch}{1.5} in the preamble
\hline
Week 6 & Homework 11 and 12 & \makecell{Goal for 11 is to... \\ Goal for 12 is to...} \\ % Text exceeds cell when limit is reached
\hline
\end{tabular}
\caption{Caption}
\label{tab:my_label}
\end{table}
\end{document}
Você pode ver aqui como fica no lado da saída:
Gosto de como as metas 1 e 2 são exibidas e complementam minhas configurações no preâmbulo e, portanto, gostaria que pudesse ser modificado de forma que, quando uso m{3cm}
na terceira coluna, a segunda coluna ainda esteja centralizada, como no dever de casa 7 e 8 AND também faz quebras automáticas de linha quando o texto excede os limites fornecidos para a célula.
Se vocês puderem pensar em alguma maneira de otimizar qualquer um deles para que seja formatado corretamente ou criar novas formas criativas que o façam, ficaríamos muito gratos se vocês os compartilhassem aqui :)
Responder1
Pelo que entendi, seu problema é obter uma coluna multilinhas de tamanho fixo, centralizada verticalmente.
Você pode usar tamanhos fixos em \makecell
. Exemplo:
\makecell[c{p{3cm}}]{Goal for 1 is to... \\ Goal for 2 is to...}
criará uma célula centralizada verticalmente, com largura fixa de 3cm
. No seu caso, como a largura está definida na especificação da coluna, substitua 3cm
por \hsize
(levará o da coluna). Mas para obter uma posição vertical correta, você deve deixar \makecell
manuseá-la e usá-la p{3cm}
em vez de m{3cm}
na especificação da coluna.
Adicione também
\renewcommand{\cellset}{\def\arraytretch{1.5}}%
se você quiser espaços maiores dentro \makecell
.
Exemplo completo:
\documentclass{article}
\usepackage{graphicx} % Required for inserting images
\usepackage[left=2cm, right=2cm, top=2cm, bottom=2cm]{geometry}
% Must have features for my tables
\usepackage{array}
\usepackage{makecell}
\setlength{\tabcolsep}{18pt}
\setlength{\arrayrulewidth}{0.5mm}
\renewcommand{\arraystretch}{1.5}
\renewcommand{\cellset}{\def\arraytretch{1.5}}%
\begin{document}
\begin{table}[h]
\centering
\begin{tabular}{|c|c|p{3cm}|}
\hline
\multicolumn{3}{|c|}{Calender for the rest of the year} \\
\hline
\textbf{Date} & \textbf{Homework} & \textbf{Goal} \\
\hline
\hline
Week 1 & Homework 1 and 2
& \makecell[c{p{\hsize}}]{Goal for 1 is to... lot of things that take many lines \\
Goal for 2 is to... lot of things that take many lines} \\
\hline
Week 2 & Homework 3 and 4
& \makecell[c{p{\hsize}}]{Goal for 3 is to... lot of things that take many lines \\
Goal for 4 is to... lot of things that take many lines} \\
\hline
Week 3 & Homework 5 and 6
& \makecell[c{p{\hsize}}]{Goal for 5 is to... lot of things that take many lines \\
Goal for 6 is to... lot of things that take many lines} \\
\hline
\end{tabular}
\caption{With \textsf{makecell}}
\label{tab:my_label}
\end{table}
\end{document}
De qualquer forma, existe agora otabela tabularpacote, que fornece muitas personalizações para tabelas por meio de uma interface moderna de valor-chave e replica as funcionalidades dos pacotes de tabelas clássicos. Com tabularray
, colunas de 3cm
largura centralizadas verticalmente são definidas com Q[3cm,m]
( Q
é o especificador de colunas usado por tabularray
) e células de múltiplas linhas são simplesmente obtidas com colchetes:
Week 1 & Homework 1 and 2 & {Goal for 1 is to...\\ Goal for 2 is to...} \\
Exemplo (veja como fica mais claro, com separação entre formatação e conteúdo):
\documentclass{article}
\usepackage{graphicx} % Required for inserting images
\usepackage[left=2cm, right=2cm, top=2cm, bottom=2cm]{geometry}
% Must have features for my tables
\usepackage{tabularray}
\begin{document}
\begin{table}[h]
\centering
\begin{tblr}
{
colspec={ | Q[c,m] | Q[c,m] | Q[3cm,m] |},
hline{1-Z} = {1}{-}{0.5mm, solid},
hline{3} = {2}{-}{0.5mm, solid},
vlines={0.5mm},
row{2} = {font=\bfseries},
colsep=18pt,
stretch=1.5,
}
\SetCell[c=3]{c} Calender for the rest of the year
\\
Date & Homework & Goal
\\
Week 1 & Homework 1 and 2
& {Goal for 1 is to... lot of things that take many lines \\[6pt]
Goal for 2 is to... lot of things that take many lines}
\\
Week 2 & Homework 3 and 4
& {Goal for 3 is to... lot of things that take many lines \\[6pt]
Goal for 4 is to... lot of things that take many lines}
\\
Week 3 & Homework 5 and 6
& {Goal for 5 is to... lot of things that take many lines \\[6pt]
Goal for 6 is to... lot of things that take many lines}
\end{tblr}
\caption{With \textsf{tabularray}}
\label{tab:my_label}
\end{table}
\end{document}
Responder2
Eu não acho que você precise de nada sofisticado… Exceto para \tabularnewline
finalizar as linhas, por causa \\
da última coluna.
\documentclass{article}
\usepackage[left=2cm, right=2cm, top=2cm, bottom=2cm]{geometry}
\usepackage{array}
\begin{document}
\begin{table}[htp]
\centering
\renewcommand{\arraystretch}{1.5}
\begin{tabular}{|c|c|>{\raggedright}m{5cm}|}
\hline
\multicolumn{3}{|c|}{Calendar for the rest of the year} \tabularnewline
\hline
\textbf{Date} & \textbf{Homework} & \multicolumn{1}{c|}{\textbf{Goal}} \tabularnewline
\hline
Week 1 & Homework 1 and 2 &
Goal for 1 is to... lot of things that take many lines \\[6pt]
Goal for 2 is to... lot of things that take many lines \tabularnewline
\hline
Week 2 & Homework 3 and 4 &
Goal for 3 is to... lot of things that take many lines \\[6pt]
Goal for 4 is to... lot of things that take many lines \tabularnewline
\hline
Week 3 & Homework 5 and 6 &
Goal for 5 is to... lot of things that take many lines \\[6pt]
Goal for 6 is to... lot of things that take many lines
Goal for 1 is to... \tabularnewline
\hline
\end{tabular}
\caption{Caption}
\label{tab:my_label}
\end{table}
\end{document}
Layout alternativo:
\documentclass{article}
\usepackage[left=2cm, right=2cm, top=2cm, bottom=2cm]{geometry}
\usepackage{array,booktabs}
\begin{document}
\begin{table}[htp]
\centering
\begin{tabular}{@{}cc>{\raggedright}p{5cm}@{}}
\toprule
\multicolumn{3}{c}{Calendar for the rest of the year} \tabularnewline
\midrule
\textbf{Date} & \textbf{Homework} & \multicolumn{1}{c}{\textbf{Goal}} \tabularnewline
\midrule
Week 1 & Homework 1 and 2 &
Goal for 1 is to... lot of things that take many lines \\[6pt]
Goal for 2 is to... lot of things that take many lines \tabularnewline
\addlinespace
Week 2 & Homework 3 and 4 &
Goal for 3 is to... lot of things that take many lines \\[6pt]
Goal for 4 is to... lot of things that take many lines \tabularnewline
\addlinespace
Week 3 & Homework 5 and 6 &
Goal for 5 is to... lot of things that take many lines \\[6pt]
Goal for 6 is to... lot of things that take many lines
Goal for 1 is to... \tabularnewline
\bottomrule
\end{tabular}
\caption{Caption}
\label{tab:my_label}
\end{table}
\end{document}