Làm thế nào để bọc văn bản trong bảng LaTeX?


454

Tôi đang tạo một báo cáo trong LaTeX bao gồm một vài bảng. Tôi bị mắc kẹt vì điều đó vì dữ liệu di động của tôi trong bảng vượt quá chiều rộng của trang. Tôi có thể bằng cách nào đó bọc văn bản để nó rơi vào dòng tiếp theo trong cùng một ô của bảng không?

Có bằng cách nào đó liên quan đến chiều rộng của bảng? Nhưng khi nó vượt quá độ rộng của trang, nó sẽ tạo ra sự khác biệt?


Tôi đang tìm cách để bọc từ dài, giải pháp khác phù hợp hơn với nhu cầu của tôi tex.stackexchange.com/questions/198325/wrap-word-in-table-cell
Miranda

Câu trả lời:


513

Sử dụng p {width} cho các chỉ định cột của bạn thay vì l / r / c.

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

37
Giải pháp tốt, nhưng mất '|' nếu bạn không muốn có một đường viền quanh bàn. Sau đó nó sẽ trở thành\begin{tabular}{p{1cm}p{3cm}}
Andrejas

83
Có cách nào để làm điều này trong khi vẫn chỉ định căn chỉnh trong mỗi ô không?
Dylan Knowles

7
Tôi tìm thấy một cách để xác định sự liên kết trong mỗi ô! Tạo một macro! \ newcolumntype {L} {> {\ centre \ Arraybackslash} m {.8cm}} \ started {bảng *} [t]% \ small \ caption {So sánh} \ centre% \ started {tabular} {| L | L | L | L | L | L | L | L | L | L | L | L | L |}
Triều Tiên

8
Điều gì sẽ xảy ra nếu tôi có hai cột trong đó cột đầu tiên phải miễn là phù hợp với nội dung của nó và cột còn lại sẽ điền vào chiều rộng của dòng, trong khi gói? Về cơ bản, tôi cầnbegin{tabular}{lp{<whatever is left to fill the line width>}}
Sander

118
Giải pháp tuyệt vời. Tuy nhiên, tôi khuyên bạn nên sử dụng các giá trị tương đối thay vì chiều ý, vdp{0.2\linewidth}p{0.6\linewidth}}
jgyou

139

Với tabularmôi trường thông thường , bạn muốn sử dụng p{width}loại cột, như marcog chỉ ra. Nhưng điều đó buộc bạn phải đưa ra chiều rộng rõ ràng.

Một giải pháp khác là tabularxmôi trường:

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

Tất cả các cột X có cùng chiều rộng. Bạn có thể ảnh hưởng đến điều này bằng cách thiết lập \hsizetrong khai báo định dạng:

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

nhưng sau đó tất cả các yếu tố phải tổng hợp lên tới 1, tôi cho rằng (tôi đã lấy cái này từ người bạn đồng hành LaTeX). Ngoài ra còn có gói tabularysẽ điều chỉnh độ rộng cột để cân bằng chiều cao hàng. Để biết chi tiết, bạn có thể lấy tài liệu cho từng gói với texdoc tabulary(trong TeXlive).


3
Thật thú vị, điều đó có vẻ thực sự hữu ích. Làm thế nào thông minh là khi nói đến việc chọn độ rộng cột? Ví dụ: nếu bạn có hai cột cần được bọc nhưng một cột có văn bản dài hơn nhiều so với cột kia, liệu nó vẫn có thể gán cho chúng chiều rộng bằng nhau không?
moinudin

2
Tôi chỉnh sửa câu trả lời của tôi. Nhưng thực tế trong thực tế tôi cố gắng đơn giản hóa các bảng của mình để tôi chỉ cần X cho một cột duy nhất. Tôi mới phát hiện ra bảng báo cáo :)
Damien Pollet

49

Một tùy chọn khác là chèn một minipage vào mỗi ô nơi gói văn bản là mong muốn, ví dụ:

\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
Cảm ơn, điều này cho phép tôi đặt itemizedanh sách trong các tế bào của tôi.
Quentin Pradet

Tôi nghĩ rằng câu trả lời sẽ giải thích ý nghĩa của \columnwidth: Khi tôi thử nó, nó dường như có chiều rộng bảng hơn là chiều rộng cột, vì vậy tôi phải đặt tỷ lệ thủ công như 0.2\columnwidthđể có chiều rộng hợp lý.
U. Windl

37

Tôi thích sự đơn giản của tabularygói:

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

Trong ví dụ này, bạn sắp xếp toàn bộ chiều rộng của bảng tương ứng với \ textcreen. Ví dụ 0,4 của nó. Sau đó, phần còn lại được tự động thực hiện bởi gói.

Hầu hết các ví dụ được lấy từ http://en.wikibooks.org/wiki/LaTeX/Tables .


20

Đơn giản như một miếng BÁNH!

Bạn có thể xác định loại cột mới như ( Ltrong trường hợp này) trong khi duy trì căn chỉnh hiện tại ( c, rhoặc l):

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

nhập mô tả hình ảnh ở đây


5

Nếu bạn muốn bọc văn bản của mình nhưng duy trì căn chỉnh thì bạn có thể bọc ô đó trong một minipagehoặc varwidthmôi trường (độ rộng đến từ gói độ rộng). Độ rộng băng thông sẽ "rộng như nội dung của nó nhưng không rộng hơn X". Bạn có thể tạo một loại cột tùy chỉnh hoạt động như "p {xx}" nhưng thu nhỏ lại cho phù hợp bằng cách sử dụng

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

có thể yêu cầu arraygói. Sau đó, khi bạn sử dụng một cái gì đó giống như \begin{tabular}{llM{2in}}hai cột đầu tiên, chúng ta sẽ được căn trái bình thường và cột thứ ba sẽ được căn trái bình thường nhưng nếu nó rộng hơn 2in thì văn bản sẽ được bọc lại.


1

Để thay đổi văn bản ABthành A \r Btrong một ô trong bảng, đặt này vào vị trí di động: \makecell{A \\ B}.

Trước khi làm điều đó, bạn cũng cần bao gồm gói 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}

Downvote. Đây là một câu trả lời chỉ có mã, không có lời giải thích nào cả.
starbeamrainbowlabs

1
Hơn nữa, dù sao đi nữa, hàng thứ hai chứa 4 ô trong đó bảng được thiết kế chỉ chứa hai cột. Và dù sao nó cũng không liên quan đến việc bọc nội dung tế bào.
Ahmed salah
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.