我正在LaTeX中创建一个报告,其中涉及到几个表。我卡住了,因为我在表格中的单元格数据超过了页面的宽度。我能否以某种方式将文本换行,使其落入表中相同单元格中的下一行?
它是否与桌子的宽度有关?但由于它超出了页面的宽度,会有什么不同吗?
我正在LaTeX中创建一个报告,其中涉及到几个表。我卡住了,因为我在表格中的单元格数据超过了页面的宽度。我能否以某种方式将文本换行,使其落入表中相同单元格中的下一行?
它是否与桌子的宽度有关?但由于它超出了页面的宽度,会有什么不同吗?
当前回答
新的表格数组使得在单元格中包装文本比以往任何时候都更容易。
该包支持所有传统使用的列名,如c, l, r等,但也有自己的Q列,它接受各种键来控制宽度和垂直和水平对齐。它还提供了一个X列,如tabularx '所示,它将自动计算列的宽度,以使表格符合可用的文本宽度。
另一个很好的特性是,所有的设置也可以为单个单元格完成。
\documentclass{article}
\usepackage{tabularray}
\begin{document}
\begin{table}
\begin{tblr}{|c|Q[2cm,valign=m]|X[j,valign=m]|}
\hline
Title 1 & Title 2 & Title 3 \\
\hline
one-liner & multi-line text & multi-line piece of text to show case a multi-line and justified cell \\
\hline
apple & orange & banana \\
\hline
\SetCell{h,2cm} wrapping text only in a single cell & orange & banana \\
\hline
\end{tblr}
\end{table}
\end{document}
(感谢Shayan Amani在回答中提供了一个MWE !)
其他回答
\begin{table}
\caption{ Example of force text wrap}
\begin{center}
\begin{tabular}{|c|c|}
\hline
cell 1 & cell 2 \\ \hline
cell 3 & cell 4 & & very big line that needs to be wrap. \\ \hline
cell 5 & cell 6 \\ \hline
\end{tabular}
\label{table:example}
\end{center}
\end{table}
如果你想要包装你的文本,但保持对齐,那么你可以包装单元格在一个迷你页面或varwidth环境(varwidth来自varwidth包)。Varwidth将“与内容一样宽,但不超过X”。您可以创建一个自定义列类型,它的作用类似于“p{xx}”,但是使用
\newcolumntype{M}[1]{>{\begin{varwidth}[t]{#1}}l<{\end{varwidth}}}
这可能需要数组包。然后当你使用像\begin{tabular}{llM{2in}}这样的东西时,前两列我们是正常的左对齐,第三列将是正常的左对齐,但如果它超过2in,那么文本将被换行。
我喜欢表格包的简单性:
\usepackage{tabulary}
...
\begin{tabulary}{\linewidth}{LCL}
\hline
Short sentences & \# & Long sentences \\
\hline
This is short. & 173 & This is much loooooooonger, because there are many more words. \\
This is not shorter. & 317 & This is still loooooooonger, because there are many more words. \\
\hline
\end{tabulary}
在本例中,您根据\textwidth来安排表的整个宽度。比如0.4。然后其余的工作由包自动完成。
大部分示例摘自http://en.wikibooks.org/wiki/LaTeX/Tables。
新的表格数组使得在单元格中包装文本比以往任何时候都更容易。
该包支持所有传统使用的列名,如c, l, r等,但也有自己的Q列,它接受各种键来控制宽度和垂直和水平对齐。它还提供了一个X列,如tabularx '所示,它将自动计算列的宽度,以使表格符合可用的文本宽度。
另一个很好的特性是,所有的设置也可以为单个单元格完成。
\documentclass{article}
\usepackage{tabularray}
\begin{document}
\begin{table}
\begin{tblr}{|c|Q[2cm,valign=m]|X[j,valign=m]|}
\hline
Title 1 & Title 2 & Title 3 \\
\hline
one-liner & multi-line text & multi-line piece of text to show case a multi-line and justified cell \\
\hline
apple & orange & banana \\
\hline
\SetCell{h,2cm} wrapping text only in a single cell & orange & banana \\
\hline
\end{tblr}
\end{table}
\end{document}
(感谢Shayan Amani在回答中提供了一个MWE !)
另一种选择是在每个需要文本换行的单元格中插入一个迷你页,例如:
\begin{table}[H]
\begin{tabular}{l}
\begin{minipage}[t]{0.8\columnwidth}%
a very long line a very long line a very long line a very long line
a very long line a very long line a very long line a very long line
a very long line a very long line a very long line %
\end{minipage}\tabularnewline
\end{tabular}
\end{table}