Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Zeilenumbruch innerhalb einer Tabellenzelle (longtable)

725 views
Skip to first unread message

Peter Poeml

unread,
Mar 7, 2000, 3:00:00 AM3/7/00
to
Hallo,

ich moechte in einer longtable-Tabelle innerhalb einer Zelle die Zeile
umbrechen. Ich habe es mit einem Befehl der longtable-Umgebung versucht,
der glaube ich /tabnewline heisst. Allerdings lande ich damit in nicht
in der naechsten Zeile der Zelle, sondern wieder ganz am Anfang der
Zeile. Mache ich etwas falsch? Gibt es einen anderen Befehl?

Peter

--
It's never too late to have a happy childhood.
Peter Poeml
po...@uni-muenster.de


Axel Reichert

unread,
Mar 8, 2000, 3:00:00 AM3/8/00
to
po...@susi.uni-muenster.de (Peter Poeml) writes:

[siehe Subject]

http://www.dante.de/faq/de-tex-faq/txt/de-tex-faq.txt

Stichwort "tabularnewline".

Tschoe!
--
Axel Reichert -- http://www.axel-reichert.de

po...@ees005.uni-muenster.de

unread,
Mar 8, 2000, 3:00:00 AM3/8/00
to
On 08 Mar 2000 08:30:55 +0100, Axel Reichert <ma...@axel-reichert.de> wrote:
>po...@susi.uni-muenster.de (Peter Poeml) writes:
>
>[siehe Subject]
>
> http://www.dante.de/faq/de-tex-faq/txt/de-tex-faq.txt
>
>Stichwort "tabularnewline".

Ich habe mich geirrt mit dem Namen des Befehls, \tabularnewline statt
\tabnewline. Meinte den gleichen Befehl. Allerdings ist meine Frage
vielleicht nicht genau genug formuliert gewesen. Ich moechte in einer
Tabelle folgendes erreichen (Beispiel):

Eins Dies ist ein
fortlaufender
Text mit einer
Art Liste danach:
1=bla
2=blubb
3=etc

Zwei Wieder ein Text.
1=und
2=so
3=weiter

Wie gesagt, \tabularnewline fuehrt ja zurueck in die linke Spalte. Der
Text in Spalte 2 wird ja automatisch umgebrochen, so weit so gut, aber
manchmal wuerde ich eben gerne einen gewollten Umbruch einfuegen.

Peter

Peter

Peter Poeml

unread,
Mar 9, 2000, 3:00:00 AM3/9/00
to
Vielleicht hat jemand eher eine Idee, wenn ich das Problem noch etwas
klarer darstelle (ja, vielleicht schaff ich das naechstes mal gleich von
Anfang an... sorry). So mache ich es z.Zt.:

Eins & Kurzer Text. & 1=bla \\
& & 2=blubb \\
& & 3=blaeh \\

Zwei & Dies ist ein & 1=bla \\
laengerer fort-
laufender <--- Diese Luecke soll weg...
Text
& & 2=blubb \\
& & 3=blaeh \\


Die rechte Spalte ist leider nicht so schmal, dass sich das Problem
dadurch loesen wuerde. Da steht naemlich gelegentlich auch etwas
laengerer Fliesstext drin.

Gibt es denn keine Moeglichkeit, den Zeilenumbruch innerhalb einer Zelle
zu beeinflussen?

Kann man eine minipage Umgebung in eine Tabellenzelle packen, oder
parbox, oder sonst aehnliches? \newline, und Leerzeile funktionieren
so jedenfalls nicht.

Oder vielleicht ein \hfill anhaengen, als unsichtbaren Auffueller?

Immer noch dankbar fuer Ideen zum ausprobieren

Stephan Lehmke

unread,
Mar 9, 2000, 3:00:00 AM3/9/00
to
In article <slrn8ce0ud...@susi.uni-muenster.de>, Peter Poeml writes:
> Eins & Kurzer Text. & 1=bla \\
> & & 2=blubb \\
> & & 3=blaeh \\
>
>
>
> Zwei & Dies ist ein & 1=bla \\
> laengerer fort-
> laufender <--- Diese Luecke soll weg...
> Text
> & & 2=blubb \\
> & & 3=blaeh \\
>
> Gibt es denn keine Moeglichkeit, den Zeilenumbruch innerhalb einer Zelle
> zu beeinflussen?

Versuch' mal


\documentclass{article}

\usepackage{longtable}
\usepackage{array}

\begin{document}

\begin{longtable}{lp{3cm}>{\raggedright}p{2cm}}
Eins & Kurzer Text. & 1=bla \\ 2=blubb \\ 3=blaeh \tabularnewline
Zwei & Dies ist ein laengerer fortlaufender Text
& 1=bla \\ 2=blubb \\ 3=blaeh
\end{longtable}

\end{document}

AFAIK hat Axel Reichert eine Methode, das etwas systematischer zu
machen. Hast Du mal in seinem tabsatz.ps nachgeschaut?

>
> Kann man eine minipage Umgebung in eine Tabellenzelle packen, oder
> parbox, oder sonst aehnliches?

Klar, aber eine p-Zelle ist ja schon eine parbox.

Gruss
Stephan

--
Stephan Lehmke Stephan...@cs.uni-dortmund.de
Fachbereich Informatik, LS I Tel. +49 231 755 6434
Universitaet Dortmund FAX 6555
D-44221 Dortmund, Germany

Peter Poeml

unread,
Mar 9, 2000, 3:00:00 AM3/9/00
to
On 9 Mar 2000 06:54:00 GMT, Stephan Lehmke

<Stephan...@cs.uni-dortmund.de> wrote:
>In article <slrn8ce0ud...@susi.uni-muenster.de>, Peter Poeml writes:
>> Zwei & Dies ist ein & 1=bla \\
>> laengerer fort-
>> laufender <--- Diese Luecke soll weg...
>> Text
>> & & 2=blubb \\
>> & & 3=blaeh \\
>>
>\documentclass{article}
>
>\usepackage{longtable}
>\usepackage{array}
>
>\begin{document}
>
>\begin{longtable}{lp{3cm}>{\raggedright}p{2cm}}
> Eins & Kurzer Text. & 1=bla \\ 2=blubb \\ 3=blaeh \tabularnewline
> Zwei & Dies ist ein laengerer fortlaufender Text
> & 1=bla \\ 2=blubb \\ 3=blaeh
>\end{longtable}
>
>\end{document}

Donnerschlag. Es funktioniert.
Also doch \tabularnewline, wie Axel vorgeschlagen hatte. Was ich bisher
nicht ausprobiert hatte, war die Spalte als raggedright zu definieren.
Soweit ich es verstehe, ist das der Moment wo \\ umdefiniert wird und
der Befehl \tabularnewline seinen Sinn bekommt.

Bin gestern abend (nein, eher nachts) auch noch auf die raggedright-Idee
gestossen und hatte mir vorgenommen es heute auszuprobieren. Du warst
schneller!

>AFAIK hat Axel Reichert eine Methode, das etwas systematischer zu
>machen. Hast Du mal in seinem tabsatz.ps nachgeschaut?

Ja, schon. Aber hatte nicht kapiert, dass raggedright eigentlich genau
das ist was ich will. Und ohne laeuft's anscheinend nicht.

>> Kann man eine minipage Umgebung in eine Tabellenzelle packen, oder
>> parbox, oder sonst aehnliches?
>
>Klar, aber eine p-Zelle ist ja schon eine parbox.

Waere ich froh, wenn ich die Hintergruende so kennen wuerde wie manch
anderer -- dann muesste ich nicht staendig "Versuch macht kluch"
anwenden... :-)

Allerherzlichsten Dank!!!

Moa Burton

unread,
Mar 10, 2000, 3:00:00 AM3/10/00
to
>\begin{longtable}{lp{3cm}>{\raggedright}p{2cm}}

funktioniert soweit ganz gut, aber wie kriegt man das hin, wenn
man die spaltenbreite nicht selbst angeben will/kann?

ich benutze bis jetzt auch:
eins & a \tabularnewline
& b \tabularnewline
& c \tabularnewline
zwei & a \tabularnewline
& b \tabularnewline
& c \tabularnewline
das problem dabei (ausser, dass es nicht wirklich sauber ist):
die a/b/c's bleiben bei einem seitenumbruch nicht auf der selben
seite!

Moa

* Sent from RemarQ http://www.remarq.com The Internet's Discussion Network *
The fastest and easiest way to search and participate in Usenet - Free!


Axel Reichert

unread,
Mar 10, 2000, 3:00:00 AM3/10/00
to
Moa Burton <moa_burto...@iname.com.invalid> writes:

>\begin{longtable}{lp{3cm}>{\raggedright}p{2cm}}

> eins & a \tabularnewline
> & b \tabularnewline
> & c \tabularnewline
> zwei & a \tabularnewline
> & b \tabularnewline
> & c \tabularnewline

> die a/b/c's bleiben bei einem seitenumbruch nicht auf der selben
> seite!

Sie blieben, wenn du

eins & a \\ b \\ c \tabularnewline

benutztest.

In l-, r- und c-Spalten ist kein Zeilenumbruch innerhalb der Zelle
moeglich, \\ oder \tabularnewline beenden die Tabellenzeile. In
p-Spalten erreicht man einen Zeilenumbruch innerhalb der Zelle mit \\,
\tabularnewline beendet die Tabellenzeile.

Wer sich das nicht merken kann, sollte sich angewoehnen,
grundsaetzlich \tabularnewline fuer neue Tabellenzeilen zu benutzen
und nur innerhalb von Zellen \\.

Stephan Lehmke

unread,
Mar 10, 2000, 3:00:00 AM3/10/00
to
In article <13f7e512...@usw-ex0108-063.remarq.com>, Moa Burton writes:
>>\begin{longtable}{lp{3cm}>{\raggedright}p{2cm}}
>
> funktioniert soweit ganz gut, aber wie kriegt man das hin, wenn
> man die spaltenbreite nicht selbst angeben will/kann?
>
> ich benutze bis jetzt auch:
> eins & a \tabularnewline
> & b \tabularnewline
> & c \tabularnewline
> zwei & a \tabularnewline
> & b \tabularnewline
> & c \tabularnewline
> das problem dabei (ausser, dass es nicht wirklich sauber ist):
> die a/b/c's bleiben bei einem seitenumbruch nicht auf der selben
> seite!

Das kannst Du vermeiden, indem Du alle \tabularnewline, an denen kein
Seitenumbruch erfolgen soll, mit einem * versiehst.

Eine `saubere' Loesung kann man wohl nur erhalten, wenn man die
`optimale' Spaltenbreite dynamisch bestimmt. Sowas habe ich fuer zwei
Spalten mal vor Urzeiten durch systematisches Ausprobieren realisiert,
ging eigentlich nicht schlecht, selbst auf einem Atari ST ;-)

Etwa so:

\documentclass{article}

\usepackage{ifthen}
\usepackage{calc}

\newlength{\maximalbreite}
\newcounter{zaehler}
\newcounter{zaehleroptimum}
\newlength{\hoehe}
\newlength{\bestehoehe}

\newcommand{\optimieretabelle}[5]
{%
\setlength{\maximalbreite}{#4}%
\setcounter{zaehler}{0}%
\setlength{\bestehoehe}{\maxdimen}%
\whiledo{\value{zaehler} < #1}
{%
\stepcounter{zaehler}%
\settoheight{\hoehe}
{%
\setlength{#2}{\maximalbreite / #1 * \value{zaehler}}%
\setlength{#3}{\maximalbreite - #2}%
#5%
}%
\ifthenelse{\hoehe < \bestehoehe}{\setlength{\bestehoehe}{\hoehe}\setcounter{zaehleroptimum}{\value{zaehler}}}{}%
}%
\setlength{#2}{\maximalbreite / #1 * \value{zaehleroptimum}}%
\setlength{#3}{\maximalbreite - #2}%
#5%
}

\newlength{\erstespalte}
\newlength{\zweitespalte}
\begin{document}
\hrule

\noindent
\optimieretabelle
{100}{\erstespalte}{\zweitespalte}{\linewidth-8\tabcolsep-1.5cm-\widthof{sieben}}
{%
\begin{tabular}{lp{1.5cm}p{\erstespalte}p{\zweitespalte}}
eins & bla bla bla & blubb blubb blubb blubb blubb & quack \\
zwei & bla bla bla & blubb blubb & quack quack quack quack \\
drei & bla bla bla & blubb blubb & quack quack quack quack \\
vier & bla bla bla & blubb & quack quack quack quack quack \\
f"unf & bla bla bla & blubb & quack quack quack quack quack \\
sechs & bla bla bla & blubb blubb blubb blubb blubb & quack \\
sieben & bla bla bla & blubb blubb blubb blubb & quack quack \\
acht & bla bla bla & blubb blubb blubb blubb & quack quack quack
\end{tabular}%
}

\hrule
\end{document}


(nicht zu ernst nehmen, ist jetzt ziemlich schnell programmiert, aber
man kann vielleicht das Prinzip erkennen... ;-)

0 new messages