如何在LaTeX表中包装文本?

Arn*_*shn 414 text latex word-wrap

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

它与表的宽度有什么关系吗?但是因为它超出了页面的宽度,它不会有所作为,是吗?

mar*_*cog 471

使用p {width}作为列说明符而不是l/r/c.

\begin{tabular}{|p{1cm}|p{3cm}|}
  This text will be wrapped & Some more text \\
\end{tabular}
Run Code Online (Sandbox Code Playgroud)

  • 好的解决方案 但是,我建议使用相对值而不是任意维度,例如`p {0.2\linewidth} p {0.6\linewidth}}` (99认同)
  • 在指定每个单元格中的对齐方式时,有没有办法做到这一点? (76认同)
  • 很好的解决方案,但失去了'|' 如果你不想在桌子周围有边框.然后它会变成`\ begin {tabular} {p {1cm} p {3cm}}` (35认同)
  • 如果我有两个列,第一个应该只需要适合它的内容而另一个应该填充到行宽,然后包装怎么办?所以基本上,我需要`begin {tabular} {lp {<剩余的东西来填充线宽>}}` (8认同)
  • 我找到了一种在每个单元格中指定对齐方式!创建一个宏!\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 |} (5认同)
  • 手动指定宽度显然是这个方法的一个主要缺陷(谁真的*想要指定宽度,只是因为他们想要文本换行?)我建议使用@DamienPollet建议的`tabularx` (3认同)
  • p 代表什么? (3认同)
  • @ashman **p** 适用于_paragraph_ :) (2认同)

Dam*_*let 136

对于常规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}
Run Code Online (Sandbox Code Playgroud)

所有X列都具有相同的宽度.您可以通过设置\hsize格式声明来影响这一点:

>{\setlength\hsize{.5\hsize}} X >{\setlength\hsize{1.5\hsize}} X
Run Code Online (Sandbox Code Playgroud)

但是所有因素必须总计为1,我想(我从LaTeX同伴那里拿走了这个).还有一个包tabulary将调整列宽以平衡行高.有关详细信息,您可以使用texdoc tabulary(在TeXlive中)获取每个包的文档.

  • 有趣的是,这看起来非常有用.在选择色谱柱宽度时,它有多聪明?例如,如果您有两个需要包装的列但是一个文本比另一个更长的文本,它是否仍将它们等于宽度? (3认同)
  • 我编辑了我的答案.但实际上在实践中我尝试简化我的表,以便我只需要一个列的X. 我刚刚发现了tabulary :) (2认同)

小智 46

另一种选择是在每个需要文本包装的单元格中插入一个小型文件,例如:

\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}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这允许我在我的单元格中放置`itemize`列表. (6认同)

ozi*_*ozi 36

我喜欢简单的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} 
Run Code Online (Sandbox Code Playgroud)

在该示例中,您将相对于\ textwidth排列表的整个宽度.例如0.4.然后其余部分由包自动完成.

大多数示例来自http://en.wikibooks.org/wiki/LaTeX/Tables.


Sha*_*ani 14

像一块蛋糕一样简单!

您可以定义新的列式一样(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}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


Flo*_*ach 7

要将文本更改ABA \r B表格单元格中的文本,请将其放入单元格位置:\makecell{A \\ B}

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

  • 这使得内容默认居中,你可以通过 ```\makecell[l]{A \\ B}``` 定义对齐方式 (l = left, r=right) (2认同)

che*_*kow 5

如果你想换你的文本,但保持对齐,然后你可以用该小区在minipagevarwidth环境(varwidth来自varwidth包).变量将"与其内容一样宽但不宽于X".您可以创建一个自定义列类型,其行为类似于"p {xx}",但通过使用缩小以适应

\newcolumntype{M}[1]{>{\begin{varwidth}[t]{#1}}l<{\end{varwidth}}}
Run Code Online (Sandbox Code Playgroud)

可能需要array包装.然后,当你使用类似\begin{tabular}{llM{2in}}前两列的东西时,我们正常左对齐,第三列将是正常的左对齐,但如果它比2in宽,那么文本将被包装.