如何在LaTeX表中包装文本?

问题描述 投票:381回答:7

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

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

text latex wrapping
7个回答
442
投票

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

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

132
投票

使用常规的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中)获取每个包的文档。


43
投票

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

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

35
投票

我喜欢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


5
投票

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

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

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


5
投票

简单就像一块蛋糕!

您可以定义一个新的列类型(在本例中为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}


-7
投票
\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}
© www.soinside.com 2019 - 2024. All rights reserved.