LaTeX tablolarında metin nasıl kaydırılır?


456

LaTeX'te birkaç tablo içeren bir rapor oluşturuyorum. Tablodaki hücre verilerim sayfanın genişliğini aştığı için buna takıldım. Bir şekilde metni tablonun aynı hücresindeki bir sonraki satıra girecek şekilde sarabilir miyim?

Bir şekilde tablonun genişliği ile ilgili mi? Ancak sayfanın genişliğini aştığı için bir fark yaratacak mı?


Uzun bir kelime sarmanın bir yolunu arıyordum, diğer çözüm ihtiyaçlarıma daha iyi uyuyor tex.stackexchange.com/questions/198325/wrap-word-in-table-cell
Miranda

Yanıtlar:


516

Sütun belirteçleriniz için l / r / c yerine p {width} kullanın.

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

37
İyi bir çözüm, ancak '|' Eğer masa etrafında bir sınır istemiyorsanız. O zaman olur\begin{tabular}{p{1cm}p{3cm}}
Andrejas

83
Her hücrede hizalamayı belirtirken bunu yapmanın bir yolu var mı?
Dylan Knowles

7
Her hücrede hizalamayı belirtmenin bir yolunu buldum! Bir makro oluşturun! \ newcolumntype {L} {> {\ centering \ arraybackslash} m {.8cm}} \ begin {table *} [t]% \ small \ caption {Karşılaştırma} \ centering% \ begin {tabular} {| L | L | L | L | L | L | L | L | L | L | L | L | L |}
Veridya

8
İlk sütunun içeriğine uyacak kadar uzun olması ve diğerinin kaydırma sırasında satır genişliğine kadar doldurması gereken iki sütunum varsa ne olur? Yani temelde, ihtiyacım varbegin{tabular}{lp{<whatever is left to fill the line width>}}
Sander

118
Harika bir çözüm. Ancak, rastgele boyut yerine göreli değerler kullanmanızı p{0.2\linewidth}p{0.6\linewidth}}
öneririm

141

Normal tabularortamda p{width}marcog'un belirttiği gibi sütun türünü kullanmak istersiniz . Ama bu sizi açık genişlikler vermeye zorlar.

Başka bir çözüm tabularxçevre:

\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üm X sütunları aynı genişliğe sahiptir. \hsizeBiçim bildiriminde ayarlayarak bunu etkileyebilirsiniz :

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

ama sonra tüm faktörler 1'e kadar toplamalı, sanırım (bunu LaTeX yoldaşından aldım). tabularySatır yüksekliklerini dengelemek için sütun genişliklerini ayarlayan paket de vardır . Ayrıntılar için, texdoc tabulary(TeXlive'de) ile her paketin belgelerini alabilirsiniz .


3
İlginç, bu gerçekten kullanışlı görünüyor. Sütun genişliklerinin seçilmesi söz konusu olduğunda ne kadar akıllıdır? Örneğin, sarılması gereken iki sütununuz var ancak biri diğerinden daha uzun metin içeriyorsa, sütunlar yine de eşit genişliğe mi atar?
moinudin

2
Cevabımı düzenledim. Ama aslında pratikte tablolarımı basitleştirmeye çalışıyorum, böylece tek bir sütun için sadece X'e ihtiyacım var. Ben sadece tabulary keşfetti :)
Damien Pollet

51

Diğer bir seçenek, metin kaydırmanın istendiği her hücreye bir minipage eklemektir, örneğin:

\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
Teşekkürler, bu itemizehücrelerime listeler koymamı sağladı .
Quentin Pradet

Cevabın anlamını açıklaması gerektiğini düşünüyorum \columnwidth: Denediğimde, sütun genişliğinden ziyade daha fazla tablo genişliği gibi görünüyordu, bu yüzden 0.2\columnwidthmakul bir genişlik elde etmek gibi manuel bir oran ayarlamak zorunda kaldım .
U. Windl

38

tabularyPaketin sadeliğini beğendim :

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

Örnekte, tablonun tüm genişliğini \ textwidth değerine göre düzenlersiniz. Örneğin 0.4. Sonra geri kalanı otomatik olarak paket tarafından yapılır.

Örneğin çoğu http://en.wikibooks.org/wiki/LaTeX/Tables adresinden alınmıştır .


21

Bir parça KEK gibi basit!

Eğer (gibi yeni bir sütun türü tanımlayabilir Lise bu durumda) mevcut hizalamasını korumak ( c, rya da 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}

resim açıklamasını buraya girin


5

Metninizi sarmak ancak hizalamayı korumak istiyorsanız, o hücreyi bir minipageveya varwidthortama sarabilirsiniz (varwidth varwidth paketinden gelir). Varwidth "içeriği kadar geniş ancak X'ten daha geniş değil" olacaktır. "P {xx}" gibi davranan ancak aşağıdakileri kullanarak sığacak şekilde daraltan özel bir sütun türü oluşturabilirsiniz

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

arraypaket gerektirebilir . Daha sonra \begin{tabular}{llM{2in}}ilk iki sütun gibi bir şey kullandığınızda normal sola hizalanır ve üçüncü sütun normal sola hizalanır ancak 2 inçten daha geniş olursa metin sarılır.


1

Metni değiştirmek için ABiçine A \r Bbir tablo hücresinde, hücre pozisyona koymak: \makecell{A \\ B}.

Bunu yapmadan önce paketi de eklemeniz gerekir makecell.


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

Downvote. Bu sadece kod değil, hiçbir açıklama yok.
starbeamrainbowlabs

1
Ayrıca, ikinci satır, tablonun yalnızca iki sütunu içerecek şekilde tasarlandığı 4 hücre içerdiğinden, yine de yanlıştır. Ve yine de hücre içeriğini sarmakla ilgili değil.
Ahmed salah
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.