如何在LaTeX表中换行?


454

我正在LaTeX中创建一个包含几个表的报告。由于表中的单元格数据超出了页面的宽度,因此我坚持了这一点。我能以某种方式包装文本,使其落入表格同一单元格的下一行吗?

它与桌子的宽度有某种关系吗?但是,由于它超出了页面的宽度,会有所作为吗?


我正在寻找一种包装长字的方法,其他解决方案更适合我的需求tex.stackexchange.com/questions/198325/wrap-word-in-table-cell
Miranda

Answers:


512

将p {width}用作列说明符,而不是l / r / c。

\begin{tabular}{|p{1cm}|p{3cm}|}
  This text will be wrapped & Some more text \\
\end{tabular}

37
好的解决方案,但会丢失“ |” 如果您不希望桌子周围有边框。然后它将变成\begin{tabular}{p{1cm}p{3cm}}
Andrejas 2012年

83
在仍然在每个单元格中指定对齐方式的同时,有什么方法可以这样做?
Dylan Knowles

7
我找到了一种在每个单元格中指定对齐方式的方法!创建一个宏!\ newcolumntype {L} {> {\ centering \ arraybackslash} m {.8cm}} \ begin {table *} [t]%\ small \ caption {Comparison} \ centering%\ begin {tabular} {| L | L | L | L | L | L | L | L | L | L | L | L | L |}
Veridian 2013年

8
如果我有两列,第一列应尽可能长以适合其内容,而另一列在包装时应填充到行宽?所以基本上,我需要begin{tabular}{lp{<whatever is left to fill the line width>}}
Sander 2014年

118
很好的解决方案。但是,我建议您使用相对值而非任意尺寸,例如p{0.2\linewidth}p{0.6\linewidth}}
jgyou

139

在常规tabular环境中,您要使用p{width}marcog指示的列类型。但这迫使您给出明确的宽度。

另一个解决方案是tabularx环境:

\usepackage{tabularx}
...
\begin{tabularx}{\linewidth}{ r X }
    right-aligned foo & long long line of blah blah that will wrap when the table fills the column width\\
\end{tabularx}

所有X列的宽度相同。您可以通过\hsize在格式声明中进行设置来影响此设置:

>{\setlength\hsize{.5\hsize}} X >{\setlength\hsize{1.5\hsize}} X

但是我想所有的因素都必须合计为1(我是从LaTeX伴侣那里得到的)。还有tabulary一个可以调整列宽以平衡行高的软件包。有关详细信息,您可以使用texdoc tabulary(在TeXlive中)获取每个软件包的文档。


3
有趣的是,这看起来确实很有用。选择列宽有多聪明?例如,如果您有两列需要包装,但一列的文本比另一列长得多,它是否仍将它们分配为相等的宽度?
moinudin

2
我编辑了答案。但是实际上在实践中,我尝试简化表,以便单列只需要X。我刚刚发现了表格:)
Damien Pollet

49

另一种选择是在每个需要文本换行的单元格中插入一个小页面,例如:

\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}

8
谢谢,这使我可以将itemize列表放置在单元格中。
昆汀·普拉德

我认为答案应该解释以下含义\columnwidth:当我尝试使用它时,它似乎是表宽度而不是列宽度,因此我不得不设置一个手动比例0.2\columnwidth来获得合理的宽度。
U. Windl

37

我喜欢tabulary打包的简单性:

\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


20

像一块蛋糕一样简单!

您可以定义新的列式一样(L在这种情况下),同时保持当前的对齐方式crl):

\documentclass{article}
\usepackage{array}
\newcolumntype{L}{>{\centering\arraybackslash}m{3cm}}

\begin{document}

\begin{table}
    \begin{tabular}{|c|L|L|}
        \hline
        Title 1 & Title 2 & Title 3 \\
        \hline 
        one-liner & multi-line and centered & \multicolumn{1}{m{3cm}|}{multi-line piece of text to show case a multi-line and justified cell}   \\
        \hline
        apple & orange & banana \\
        \hline
        apple & orange & banana \\
        \hline
    \end{tabular}
\end{table}
\end{document}

在此处输入图片说明


5

如果要换行但保持对齐,则可以在minipagevarwidth环境中换行该单元格(varwidth来自varwidth包)。Varwidth将“与内容一样宽,但不超过X”。您可以创建一个自定义列类型,其行为类似于“ p {xx}”,但可以通过缩小以适合

\newcolumntype{M}[1]{>{\begin{varwidth}[t]{#1}}l<{\end{varwidth}}}

这可能需要array包装。然后,当您使用诸如\begin{tabular}{llM{2in}}前两列之类的内容时,我们通常会左对齐,而第三列会正常地左对齐,但是如果它的宽度大于2英寸,则文本将被换行。


1

要更改文本ABA \r B表格单元格,把这个进入细胞的位置:\makecell{A \\ B}

在此之前,您还需要包括package makecell


-11
\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}

下注。这是仅代码的答案,完全没有解释。
starbeamrainbowlabs

1
此外,无论如何都是错误的,因为第二行包含4个单元格,其中表被设计为仅容纳两列。无论如何,它与包装单元内容无关。
艾哈迈德萨拉赫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.