Bagaimana cara membungkus teks dalam tabel LaTeX?

454

Saya membuat laporan di LaTeX yang melibatkan beberapa tabel. Saya terjebak pada itu karena data sel saya di tabel melebihi lebar halaman. Bisakah saya membungkus teks sehingga jatuh ke baris berikutnya di sel tabel yang sama?

Apakah itu terkait dengan lebar tabel? Tetapi karena melebihi lebar halaman, apakah akan ada bedanya?

Arnkrishn
sumber
Saya sedang mencari cara untuk membungkus kata yang panjang, solusi lain yang lebih baik sesuai dengan kebutuhan saya tex.stackexchange.com/questions/198325/wrap-word-in-table-cell
Miranda

Jawaban:

514

Gunakan p {width} untuk penentu kolom Anda alih-alih l / r / c.

\begin{tabular}{|p{1cm}|p{3cm}|}
  This text will be wrapped & Some more text \\
\end{tabular}
moinudin
sumber
37
Solusi yang bagus, tetapi kehilangan '|' jika Anda tidak ingin perbatasan di sekitar meja. Kemudian akan menjadi\begin{tabular}{p{1cm}p{3cm}}
Andrejas
83
Apakah ada cara untuk melakukan ini sementara masih menentukan perataan di setiap sel?
Dylan Knowles
7
Saya menemukan cara untuk menentukan perataan di setiap sel! Buat makro! \ newcolumntype {L} {> {centering \ arraybackslash} m {.8cm}} \ begin {table *} [t]% \ small \ caption {Perbandingan} \ centering% \ begin {tabular} {| L | L | L | L | L | L | L | L | L | L | L |} |
Veridian
8
Bagaimana jika saya memiliki dua kolom di mana yang pertama harus sepanjang sesuai dengan isinya dan yang lain harus memenuhi lebar garis, saat membungkus? Jadi pada dasarnya, saya perlubegin{tabular}{lp{<whatever is left to fill the line width>}}
Sander
118
Solusi bagus Namun, saya akan merekomendasikan menggunakan nilai relatif alih-alih dimensi arbitrer, misalnyap{0.2\linewidth}p{0.6\linewidth}}
jgyou
139

Dengan tabularlingkungan biasa , Anda ingin menggunakan p{width}jenis kolom, seperti yang ditunjukkan marcog. Tapi itu memaksa Anda untuk memberikan lebar eksplisit.

Solusi lain adalah tabularxlingkungan:

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

Semua kolom X mendapatkan lebar yang sama. Anda dapat memengaruhi ini dengan menyetel \hsizedalam deklarasi format:

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

tapi kemudian semua faktor harus berjumlah 1, saya kira (saya mengambil ini dari pendamping LaTeX). Ada juga paket tabularyyang akan menyesuaikan lebar kolom untuk menyeimbangkan ketinggian baris. Untuk detailnya, Anda bisa mendapatkan dokumentasi untuk setiap paket dengan texdoc tabulary(di TeXlive).

Damien Pollet
sumber
3
Menarik, itu terlihat sangat berguna. Seberapa cerdas ketika harus memilih lebar kolom? Misalnya, jika Anda memiliki dua kolom yang perlu dibungkus tetapi satu dengan teks yang lebih panjang daripada yang lain, apakah masih menandainya dengan lebar sama?
moinudin
2
Saya mengedit jawaban saya. Tetapi sebenarnya dalam praktiknya saya mencoba menyederhanakan tabel saya sehingga saya hanya perlu X untuk satu kolom. Saya baru saja menemukan tabularium :)
Damien Pollet
50

Pilihan lain adalah memasukkan minipage di setiap sel di mana pembungkusan teks diinginkan, misalnya:

\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}
Neil Rubens
sumber
8
Terima kasih, ini memungkinkan saya untuk menempatkan itemizedaftar di sel saya.
Quentin Pradet
Saya pikir jawabannya harus menjelaskan arti \columnwidth: Ketika saya mencobanya, tampaknya lebih lebar daripada lebar kolom, jadi saya harus menetapkan proporsi manual seperti 0.2\columnwidthuntuk mendapatkan lebar yang masuk akal.
U. Windl
37

Saya suka kesederhanaan tabularypaket:

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

Dalam contoh, Anda mengatur seluruh lebar tabel sehubungan dengan \ textwidth. Misalnya 0,4. Kemudian sisanya secara otomatis dilakukan oleh paket.

Sebagian besar contoh diambil dari http://en.wikibooks.org/wiki/LaTeX/Tables .

ozi
sumber
20

Sederhana seperti sepotong KUE!

Anda dapat menentukan jenis kolom baru seperti ( Ldalam hal ini) sambil mempertahankan perataan saat ini ( c, ratau 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}

masukkan deskripsi gambar di sini

Shayan Amani
sumber
5

Jika Anda ingin membungkus teks Anda tetapi mempertahankan perataan maka Anda dapat membungkus sel itu dalam lingkungan minipageatau varwidth(varwidth berasal dari paket varwidth). Varwidth akan "selebar isinya tetapi tidak lebih lebar dari X". Anda dapat membuat tipe kolom khusus yang bertindak seperti "p {xx}" tetapi menyusut agar pas dengan menggunakan

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

yang mungkin memerlukan arraypaket. Kemudian ketika Anda menggunakan sesuatu seperti \begin{tabular}{llM{2in}}dua kolom pertama kita akan rata kiri dan kolom ketiga akan normal kiri tetapi jika lebih lebar dari 2in maka teks akan dibungkus.

cheshirekow
sumber
1

Untuk mengubah teks ABmenjadi A \r Bdalam sel tabel, menempatkan ini ke posisi sel: \makecell{A \\ B}.

Sebelum melakukan itu, Anda juga perlu memasukkan paket makecell.

FlowerBeach
sumber
-12
\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}
Md Monjur Ul Hasan
sumber
Downvote. Ini adalah jawaban hanya kode, tanpa penjelasan sama sekali.
starbeamrainbowlabs
1
Lebih jauh lagi, itu salah karena baris kedua berisi 4 sel di mana tabel dirancang untuk mengakomodasi hanya dua kolom. Dan itu tidak terkait dengan membungkus konten sel.
Ahmed salah