PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : tabularx: manueller Zeilenumbruch in einer Zelle



DarkSorcerer
14-01-2010, 07:47
moin zusammen,

ich rätsel schon die ganze zeit rum wie ich einen manuellen zeilenumbruch in einer zelle bei tabularx bekomme. bei eingabe von "\\" bricht er mir aber immer in die erste spalte der nächsten zeile, anstatt in der zelle zu bleiben. über google habe ich dann noch was mit \tabularnewline gefunden und \parbox, hat aber trotzdem in die nächste zeile der tabelle umgebrochen oder einen latex feher geworfen.

meine tabelle, 2 spalten, die letzte spalte soll sich auf die ganze breite der seite strecken:


\begin{tabularx}{\textwidth}{| l | X |}\toprule
Use Case Nummer & \textbf{UC-Portal1} \\\midrule

Name & \textbf{Am Portal anmelden} \\\midrule

Kurzbeschreibung & Der User meldet sich am Portal an \\\midrule

[... weitere UC geschichten]

Aktionen & \parbox{1. Klick auf Anmelden \\ 2. Eingabe von Username und Passwort \\ 3. Berechtigungsprüfung gegen LDAP} \\\midrule

Aktionsdetails & ... \\\bottomrule
\end{tabularx}


In der Zelle Aktionen möchte ich nun eine Art Aufzählung hinbekommen:

1. ...
2. ...
3. ...

mit \begin{itemize} oder \begin{enumerate} bekomme ich latex fehler (missing \item in \end{tabluarx}. keine ahnung warum das kommt, habe den block korrekt geschlossen... daher will ich das jetzt manuell machen.

meine frage: wie bekomme ich es hin, dass ich die aufzählung _in der zelle_ umbrechen kann?

danke für tipps

u_fischer
14-01-2010, 08:37
\documentclass[10pt,parskip]{scrreprt}
\usepackage[ngerman]{babel}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{tabularx}
\makeatletter
\newcommand\novspace{\@minipagetrue}
\makeatother
\begin{document}
\begin{tabularx}{\textwidth}{| l | X |}
text &\novspace
\begin{itemize}
\item abc
\item abc
\item abc
\end{itemize}\\
text2 & Zeile\newline Zeile \\
text3
\end{tabularx}
\end{document}

Xenara
14-01-2010, 08:37
Oder hier ein paar Varianten:



\documentclass{scrartcl}

\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[ansinew]{inputenc}

\usepackage{tabularx}
\usepackage{booktabs}


\begin{document}

\begin{tabularx}{\textwidth}[t]{lX}\toprule
Use Case Nummer & \textbf{UC-Portal1} \\\midrule
%
Name & \textbf{Am Portal anmelden} \\\addlinespace
%%
Kurzbeschreibung & Der User meldet sich am Portal an \\\addlinespace
%%
Aktionen & %
1. Klick auf Anmelden \newline%
2. Eingabe von Username und Passwort \newline%
3. Berechtigungsprüfung gegen LDAP \\\addlinespace
%%
Aktionen & %
\begin{tabular}[t]{@{}lp{.3\textwidth}}
1. & Klick auf Anmelden \\%
2. & Eingabe von Username und Passwort \\%
3. & Berechtigungsprüfung gegen LDAP
\end{tabular}
\\\addlinespace
%%
Aktionen & %
\begin{enumerate}
\item Klick auf Anmelden
\item Eingabe von Username und Passwort
\item Berechtigungsprüfung gegen LDAP
\end{enumerate}
\\\addlinespace
%%
Aktionsdetails & ... \\\bottomrule
\end{tabularx}

\end{document}


(Die enumerate müsstest du noch anpassen, vermutlich analog zu Ulrikes Vorschlag mit itemize.)

DarkSorcerer
14-01-2010, 10:03
super danke für die hilfe. es funktioniert jetzt mit dem umbruch in der zelle. meine tabelle wird jetzt ziemlich groß und sollte sich über 2 seiten strecken. dummerweise will latex die tabelle auf eine seite quetschen und die tabelle läuft bis zum seitenende und der rest der tabelle wird verschluckt.

wie sage ich latex, dass die zeilen vernünftig getrennt und dann auf die nächste seite verteilt werden soll?

danke!

Xenara
14-01-2010, 10:47
Longtable bzw. LongtableX verwenden, eine normale Tabelle kann nicht über mehrere Seiten gehen.

voss
14-01-2010, 11:35
wie sage ich latex, dass die zeilen vernünftig getrennt und dann auf die nächste seite verteilt werden soll?


statt tabularx einfach das Paket ltablex laden.

Herbert

Xenara
14-01-2010, 11:51
statt tabularx einfach das Paket ltablex laden.

Das Paket kannte ich noch gar nicht, es ist aber absolut hammergenial und löst eines meiner Probleme.
Ein ganz herzlichen Dankeschön von mir, Herbert. :)

DarkSorcerer
15-01-2010, 07:18
danke für den tipp. habe bei usepackage tabularx durch ltablex ersetzt. latex übersetzt mit einigen fehlern:



! LaTeX Error: Something's wrong--perhaps a missing \item
...
\end{tabularx}


trotz der fehler wird aber das pdf dokument erstellt und die tabelle wird korrekt umgebrochen. weiß einer, warum die fehler kommen bzw wie ich die weg bekomme?

Bsp:


...
\usepackage{booktabs, ltablex}
...
...
.
.
\begin{tabularx}{\textwidth}{| l | X |}\toprule
Use Case Nummer & \textbf{UC-Portal1} \\\midrule

Name & \textbf{Am Portal anmelden} \\\midrule

Kurzbeschreibung & Der User meldet sich am Portal an \\\midrule

Actor & ... \\\midrule

...

Aktionen & \novspace
\begin{enumerate}
\item Klick auf Anmelden
\item Eingabe von Username und Passwort
\item Berechtigungsprüfung gegen LDAP
\end{enumerate}\\\midrule

Aktionsdetails & ... \\\bottomrule
\end{tabularx}

Xenara
15-01-2010, 07:24
Minimalbeispiel?

DarkSorcerer
15-01-2010, 08:11
wurde oben hinzugefügt...
danke

u_fischer
15-01-2010, 08:24
Das oben ist kein Minimalbeispiel, sondern ein ziemlich unordentlicher Codeschnipsel. Mach ein vollständiges, lauffähiges Beispiel, das wir direkt kopieren und ausprobieren können =Minimalbeispiel.

DarkSorcerer
15-01-2010, 08:58
Hier das Beispiel:



\documentclass[11pt]{report}
\usepackage[intoc]{nomencl}
\renewcommand{\nomname}{Abkürzungsverzeichnis}
\makenomenclature
\usepackage{appendix}
\usepackage[ngerman]{babel}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{hyperref}
\usepackage{listings}
\usepackage{booktabs, ltablex}
\usepackage{array, ragged2e}
\lstset{language=C}
\makeatletter
\newcommand\novspace{\@minipagetrue}
\makeatother
\begin{document}
\begin{tabularx}{\textwidth}{| l | X |}\toprule
Aktionen & \novspace
\begin{enumerate}
\item Klick auf Anmelden
\item Eingabe von Username und Passwort
\item Berechtigungsprüfung gegen LDAP
\end{enumerate}\\\midrule

Aktionsdetails & ... \\\bottomrule
\end{tabularx}
\end{document}


Folgender Fehler (hab das in mehreren Tabellen mit der enumeration, daher summieren sich die Fehler, das Dokument wird aber trotzdem erstellt):



! LaTeX Error: Something's wrong--perhaps a missing \item
...
1.305 \end{tabularx}


danke

Xenara
15-01-2010, 09:08
Mein erster Lösungsansatz: minipage um die Aufzählung:



\documentclass[10pt,parskip]{scrreprt}
\usepackage[ngerman]{babel}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{booktabs}
\usepackage{ltablex}
\usepackage{blindtext}


\makeatletter
\newcommand\novspace{\@minipagetrue}
\makeatother
\begin{document}
\begin{tabularx}{\textwidth}{| l | X |}
\toprule
Aktionen &
\begin{minipage}[t]{10cm}
\novspace
\begin{enumerate}
\item Klick auf Anmelden
\item Eingabe von Username und Passwort
\item Berechtigungsprüfung gegen LDAP
\end{enumerate}
\end{minipage}
\\\midrule
Aktionsdetails & \blindtext \\\bottomrule
\end{tabularx}
\end{document}


Btw, vertikale Linien in Tabellen sind böse. Ausserdem verwendest du booktabs, daher werden die vertikalen Striche unterbrochen. Versuche, nur mit horizontalen Linien und entsprechenden Abständen auszukommen, das wird viel schöner.

voss
15-01-2010, 09:09
danke für den tipp. habe bei usepackage tabularx durch ltablex ersetzt. latex übersetzt mit einigen fehlern:



! LaTeX Error: Something's wrong--perhaps a missing \item
...
\end{tabularx}


trotz der fehler wird aber das pdf dokument erstellt und die tabelle wird korrekt umgebrochen. weiß einer, warum die fehler kommen bzw wie ich die weg bekomme?



\usepackage{ltablex,varwidth}
\let\Enum\enumerate\let\endEnum\endenumerate
\renewenvironment{enumerate}
{\varwidth{\linewidth}\Enum}
{\endEnum\endvarwidth}

Herbert

DarkSorcerer
15-01-2010, 12:22
@Xenara
danke es funktioniert jetzt. dein tip mit "booktabs" rausnehmen habe ich gerade probiert. allerdings übersetzt er dann nicht mehr, weil \midrule, \bottomrule usw nicht mehr erkannt werden. anscheinend benötigt er dafür booktabs.

gibt es da eine alternative? ich fände es auch schöner ohne unterbrochene striche.

danke

Xenara
15-01-2010, 13:09
Er kann natürlich nicht mehr übersetzen, denn midrule etc. gehören nunmal zu diesem Paket. Du kannst aber das gute alte \hline verwenden.

Du hast meine Anmerkung zu vertikalen Linien aber schon gesehen, ober? Sieh dir mal ein ordentliches (Fach-)Buch an, es werden nie vertikale Linien in Tabellen verwendet.

DarkSorcerer
18-01-2010, 06:53
danke für die info, ich werds mir mal ohne vertikale linien anschauen. im moment zeig ich sie an, weil es bei der darstellung von use cases einfach der standard ist.