Grundsätzlich: Wie umfangreiche Text(!)-Tabellen in Latex?

Tabellen und Grafiken erstellen und anordnen


Sirius3
Forum-Anfänger
Forum-Anfänger
Beiträge: 14
Registriert: So 30. Okt 2011, 10:22

Beitrag von Sirius3 »

Hallo,

die Itemize-Umgebung hat doch nicht ganz so wollen, wie ich wollte.
Hier nun das Beispiel:
\documentclass{article}
\usepackage{needspace}

\def\makeLabel#1#2{\begin{minipage}[t]{2.5cm}\begin{raggedleft}\textsf{\footnotesize
#1
\rule[4pt]{1cm}{0.4pt}\\
#2
}\end{raggedleft}\end{minipage}}

\def\makeLabelB#1#2{\setbox1=\hbox{\makeLabel{#1}{#2}}\par\Needspace{\dp1}%
  \item\dp1 0pt\hskip-5mm\hskip-\wd1\box1\hskip5mm\ignorespaces}
\newenvironment{quellen}{\list{}{\leftmargin3cm\itemsep\baselineskip}}{\endlist}

\begin{document}

\begin{quellen}
\makeLabelB{
Nr. 1289/2738\\
S. 120 / f. 302va\\
}{
Jahr 1525\\
Lorem 1.\\
(Ips)\\
}
Lorem ...
\end{quellen}
\end{document}
Abstände müssen natürlich individuell angepasst werden;-)

Grüße
Sirius
Dateianhänge
quellen.png
quellen.png (29.18 KiB) 3454 mal betrachtet

Genmutant
Forum-Guru
Forum-Guru
Beiträge: 488
Registriert: Di 8. Jul 2008, 11:00
Wohnort: Augsburg

Beitrag von Genmutant »

Oh, das schaut aber sehr hübsch aus :)

eco
Forum-Anfänger
Forum-Anfänger
Beiträge: 20
Registriert: Fr 3. Aug 2012, 10:56

Beitrag von eco »

Hey!

@Sirius3: Genmutant hat vollkommen recht: Das ist echt prima! Ich danke dir sehr für deine Hilfe, mit diesem Arrangement sollte ich wirklich arbeiten können! Vielen Dank dafür!!!

Es gibt nur noch eine Kleinigkeit, die ich an deinem Beispiel (welches ich einfach komplett übernommen habe und nun mit meinen Inhalten fülle) nicht hinbekomme:

Ich kopiere einfach immer die gesamte Umgebung und füge neuen Text ein. An einigen Stellen ist der Text in der rechten Spalte relativ kurz. (Auch das kommt vor). Der Abstand zum vorherigen Text stimmt dann nicht mehr und die gesamte "Zeile" rutscht in den oberen Text hinein. Es scheint, als würde Latex die rechte Spalte als Grundlage für die Bemessung des Zeilenabstands nehmen. Gibt es dafür auch noch eine Lösung?

Ich habe deinen Quellcode einfach mal mit einem Blindtext gefüllt. Das Beispiel zeigt das Problem.

Viele Grüße!
\documentclass{article} 
\usepackage{needspace} 

\def\makeLabel#1#2{\begin{minipage}[t]{2.5cm}\begin{raggedleft}\textsf{\footnotesize 
#1 
\rule[4pt]{1cm}{0.4pt}\\ 
#2 
}\end{raggedleft}\end{minipage}} 

\def\makeLabelB#1#2{\setbox1=\hbox{\makeLabel{#1}{#2}}\par\Needspace{\dp1}% 
  \item\dp1 0pt\hskip-5mm\hskip-\wd1\box1\hskip5mm\ignorespaces} 
\newenvironment{quellen}{\list{}{\leftmargin3cm\itemsep\baselineskip}}{\endlist} 

\begin{document} 

\begin{quellen} 
\makeLabelB{ 
Nr. 1289/2738\\ 
S. 120 / f. 302va\\ 
}{ 
Jahr 1525\\ 
Lorem 1.\\ 
(Ips)\\ 
} 
Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\end{quellen} 
\begin{quellen} 
\makeLabelB{ 
Nr. 1289/2738\\ 
S. 120 / f. 302va\\ 
}{ 
Jahr 1525\\ 
Lorem 1.\\ 
(Ips)\\ 
} 
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo.\end{quellen} 
\end{document}
[/code]

Sirius3
Forum-Anfänger
Forum-Anfänger
Beiträge: 14
Registriert: So 30. Okt 2011, 10:22

Beitrag von Sirius3 »

Hallo eco,

solangsam wird das ja fast ein richtiges Packet:
\documentclass{article}

%%%%%%%%%%%%%%%%%%%%%%%%%
% Itemize-Umgebung mit mehrzeiligen Labels
%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{needspace}  % wird gebraucht, damit die linke Spalte
% nicht ueber das Ende einer Seite rutscht

% setzt das mehrzeilige Label:
\def\makeLabel#1#2{\begin{minipage}[t]{2.5cm}\begin{raggedleft}\textsf{\footnotesize
#1
\rule[3pt]{1cm}{0.4pt}\\
#2
}\end{raggedleft}\end{minipage}}

% Umgebung für ein Item
\makeatletter
\def\quelle#1#2{\par
  \setbox0=\hbox{\makeLabel{#1}{#2}\hskip5mm}
  \dimen@=\dp0 \advance\dimen@\ht0 \dp0=\z@
  \setbox0=\vbox\bgroup
    \parshape 1 \@totalleftmargin \linewidth
    \item\hskip-\wd0\box0\ignorespaces}
\def\endquelle{\egroup
  \ifdim\ht0<\dimen@
    \ht0=\dimen@
    \box0
  \else
    \Needspace{\dimen@}
    \unvbox0
  \fi}
\makeatother

% Umgebung, in der die Items stehen
\newenvironment{quellen}{\list{}{\leftmargin3cm\itemsep\baselineskip}}{\endlist}

% Beispiel:
\begin{document}
\begin{quellen}
\begin{quelle}{
Nr. 1289/2738\\
S. 120 / f. 302va\\
}{
Jahr 1525\\
Lorem 1.\\
(Ips)\\
}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
\end{quelle}

\begin{quelle}{
Nr. 1289/2738\\
S. 120 / f. 302va\\
}{
Jahr 1525\\
Lorem 1.\\
(Ips)\\
}
Lorem ipsum ...
\end{quelle}
\end{quellen}

\end{document}
Die quellen-Umgebung faßt alle Einträge zusammen, wärend eine quelle-Umgebung
einen einzelnen Eintrag enthält.
Für alle, die wissen wollen wie es funktioniert:
Wir starten im Macro \quelle.
1) das Label wird zusammengebaut und seine Gesamthöhe in \dimen@ gespeichert.
2) der gesamte Eintrag wird als \vbox erstellt
Der \parshape ist aus der itemize-Umgebung kopiert, um den Text links einzurücken.
Am Ende des Fließtextes landen wir im Macro \endquelle
und beenden die \vbox aus 2).
3) ist die Höhe des Fließtextes kleiner als die des Labels, wird die Höhe entsprechend
vergrößert und die Box kommt als ganzes auf die Seite.
4) andernfalls wird die Box wieder aufgebrochen (\unvbox) damit der Seitenumbruchs-
algorithmus von TeX seine Arbeit tun kann.
5) Fertig.

Grüße
Sirius

eco
Forum-Anfänger
Forum-Anfänger
Beiträge: 20
Registriert: Fr 3. Aug 2012, 10:56

Beitrag von eco »

Hallo!

@Sirius3: Ich bin – wenn ich das so sagen darf – schwer beeindruckt! Das sieht nun wirklich nach viel Arbeit aus, und ich bin dir sehr dankbar!

Ich habe in den letzten Tagen noch erst etwas mit Blindtext gearbeitet, um dein "Paket" einmal so richtig anzuwenden. Die letzten beiden Tage schließlich habe ich damit verbracht, dann endlich auch einmal etwas von meinen Ergebnissen zu übertragen, damit ich nicht nur Lorem ipsum lesen muss, sondern das ganze dann mal live und in Farbe sehe. Die Überführung in die Umgebung der einzelnen Items war zwar etwas mühsam, aber damit war ja zu rechnen.

Ganz hervorragend finde ich, dass sich im Text weiterhin mit den gängigen Befehlen wie \emph oder \textbf arbeiten lässt. Auch die Schreibung in {\sc Kapitälchen} funktioniert – gut: wieso hätte es auch anders sein sollen, aber ich freu mich grad' darüber!

Deine Umgebung habe ich maßvoll angepasst – freilich nach dem try and error Prinzip, d.h. ich habe so lange die Parameter verändert, bis etwas sinnvolles dabei heraus kam. Das ganze erzähle ich hier noch einmal, weil ich wie immer für Feedback und bessere Herangehensweisen offen bin!

Hauptsächlich habe ich die Schrift des mehrzeiligen Labels deutlich verkleinert, den Abstand nach rechts etwas vergrößert und die Trennlinie dünner gemacht:
\def\makeLabel#1#2{\begin{minipage}[t]{2.7cm}\begin{raggedleft}\textsf{\tiny 
#1 
\rule[3pt]{1cm}{0.2pt}\\ 
#2 
}\end{raggedleft}\end{minipage}}
Zudem habe ich mich entschieden, die Items etwas kleiner zu gestalten, so dass das Label nur noch drei und nicht mehr vierzeilig ist. (Was den größeren Abstand nach rechts erklärt, da die dritte Zeile nun länger ist.)
\begin{quelle}{ 
Nr. 1289/2738\\ 
S. 120 / f. 302va\\ 
}{ 
1525 Lorem 1. (Ips)\\ 
} 
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. 
\end{quelle} 
Um die Schrift der rechten "Spalte" insgesamt zu verkleinern (und mehr Text auf jede Seite zu bekommen) habe ich innerhalb der Umgebung die Schriftgröße pauschal verkleinert.
\beginn{quellen}
\small
\beginn{quelle}
...
\end{quelle}
...
\end{quellen}
Um den Abstand der einzelnen Items noch etwas besser hinzubekommen (der Abstand zw. dem ersten und dem zweiten ist ein anderer, als zwischen dem zweiten und dritten bzw. zwischen allen anderen!) habe ich zwischen jedes einen \smallskip eingefügt.

Der kurze einleitende Text hinter einer \subsection{Überschrift} und dem ersten Item ist mit einem \vspace{\baselineskip} abgesetzt. Dazu muss ich erwähnen, dass ich jedes Kapitel in einer eigenen *.tex-Datei anfertige und mittels \include{Dateiname} in einer Hauptdatei einfüge.

Da ich gewisse Einträge farblich hinterlegen möchte (um Querverweise aufzuzeigen) habe ich geladen: \usepackage{framed, xcolor}. Das sieht dann bei mir so aus:
\beginn{quellen}
\small
\begin{shaded}\beginn{quelle}
...
\end{quelle}\end{shaded}
...
\end{quellen}
Bei mehreren Einträgen in Folge wandert das \end{shaded} weiter nach unten.

Hier bekomme ich jedoch zwei Dinge nicht hin:

1.
Die Abstände nach oben und unten sind abweichend. Manchmal muss ich durch \\ eine Leerzeile einfügen, damit der gesamte Text grau hinterlegt wird. In Gänze betrachtet hauen die Abstände jedoch noch nicht 100%ig hin! Mal sind sie oben etwas größer, mal unten.

2.
Ich kann keine Items in anderen Graustufen hinterlegen. Sämtliche Experimente mit Farbboxen sind gescheitert, da sie sich nie genau mit den Abständen der Items decken. Im Moment nutze ich die \usepackage{framed} Option {framed} (statt {shaded}), aber auch das klappt (wie in Frage 1.) nur zu 90%. Die ausgedruckte Seite bzw. die *.pdf am Bildschirm sieht da nicht gleichmäßig aus, da es zu kleineren Lücken kommt.

Nichtsdestoweniger bin ich bisher sehr zufrieden über die bisherigen Ergebnisse! Ich möchte mich daher noch einmal bei allen konstruktiven Beiträgen und Anregungen bedanken, besonders natürlich noch einmal bei Sirius3 für dessen Mühe!

Da jeder, der eine Abschlussarbeit/Diss etc. geschrieben hat, weiß, dass man bei solchen Sachen stets bemüht ist, das wirklich Beste abzuliefern, bin ich so frei, die oben angesprochenen 2 Punkte (hoffentlich: Pünktchen) noch einmal zur Debatte zu stellen.

Viele Grüße
Eco

Sirius3
Forum-Anfänger
Forum-Anfänger
Beiträge: 14
Registriert: So 30. Okt 2011, 10:22

Beitrag von Sirius3 »

Hallo Eco,

ich hab mal versucht, deine Probleme mit den Abständen nachzuvollziehen.
Das Paket framed macht bei mir seltsame Dinge, aber schon in ganz normalem
Text. Vielleicht kannst Du ein kurzes Beispiel machen, das zeigt, wo die Abstände
nicht zu 100% passen.

Grüße
Sirius

eco
Forum-Anfänger
Forum-Anfänger
Beiträge: 20
Registriert: Fr 3. Aug 2012, 10:56

Beitrag von eco »

Hey!

Ich habe hier einfach mal ein kleines Beispiel angefügt. Zwar wieder nur mit Blindtext, aber es verdeutlicht die Problematik doch anschaulich.

Ich will mich nicht an dem Paket framed festhalten. Es schien mir nur das am leichtesten anwendbare. Da es nun jedoch nicht optimal klappt, bin ich für Alternativen offen :-)

Ich hab' mich mal an einem Minimalbeispiel versucht und hier meine ganz normale Präambel genommen, daraus jedoch alles wieder entfernt, was für die Angelegenheit hier unwichtig ist.
\documentclass[titlepage]{scrartcl} 						%Dokumentenklasse. Hier mit Option "Titelseite"
\usepackage{geometry}								%Einrichtung der Seite.
\geometry{a4paper, top=20mm, left=20mm, right=20mm, bottom=30mm}
\usepackage[utf8]{inputenc} 							%Paket zur Kodierung für alle Systeme (Mac/Win/ Unix).
\usepackage[german, ngerman]{babel} 					%Paket für die Besonderheiten der deutschen Sprache.
\usepackage[onehalfspacing]{setspace}					%Paket für den Zeilenabstand. Hier anderhalbfacher; nicht für Fußnoten.
\usepackage{framed}
\usepackage{xcolor}									%Paket für Farben.
\usepackage{needspace}								%Paket für Abstände zwischen Text. Wird hier vor allem für den Anhang benötigt.
\usepackage[T1]{fontenc}
\setlength{\headheight}{1.1\baselineskip}				%Legt die Höhe des Leerraumes fest, der am oberen Seitenrand für eine Kopfzeile reserviert wird.

\colorlet{shadecolor}{gray!25} 

%Itemize-Umgebung mit mehrzeiligen Labels%
%%%%%	Für den Anhang	%%%%

%Damit die linke Spalte nicht über das Ende einer Seite rutschst wird das \usepackage{needspace} benötigt. Ist oben eingebunden!

%Das mehrzeilige Label wird definiert. 
\def\makeLabel#1#2{\begin{minipage}[t]{2.7cm}\begin{raggedleft}\textsf{\tiny 
#1 
\rule[3pt]{1cm}{0.2pt}\\ 
#2 
}\end{raggedleft}\end{minipage}} 

%Die Umgebung für ein Item:
\makeatletter 
\def\quelle#1#2{\par 
  \setbox0=\hbox{\makeLabel{#1}{#2}\hskip5mm} 
  \dimen@=\dp0 \advance\dimen@\ht0 \dp0=\z@ 
  \setbox0=\vbox\bgroup 
    \parshape 1 \@totalleftmargin \linewidth 
    \item\hskip-\wd0\box0\ignorespaces} 
\def\endquelle{\egroup 
  \ifdim\ht0<\dimen@ 
    \ht0=\dimen@ 
    \box0 
  \else 
    \Needspace{\dimen@} 
    \unvbox0 
  \fi} 
\makeatother 

%Die Umgebung, in der die Items stehen:
\newenvironment{quellen}{\list{}{\leftmargin3cm\itemsep\baselineskip}}{\endlist} 

\begin{document}

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim:

\begin{quellen} 
%Hier ist der Abstand nach oben nun größer als nach unten.
\begin{shaded}\begin{quelle}{ 
Nr. 1289/2738\\ 
S. 120 / f. 302va\\ 
}{ 
1525 Aug. 12\\ 
} 
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. 
\end{quelle} \end{shaded}
\small
%Hier nur ein weiterer Eintrag mit authentischer Länge.
\begin{quelle}{ 
Nr. 1289/2738\\ 
S. 120 / f. 302va\\ 
}{ 
1525 Aug. 12\\ 
} 
Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo.
\end{quelle}
\small
%Hier wieder was kurzes. Länge nach unten nur durch zwei "\\" erreicht. Einfach mal wegnehmen, um zu sehen was passiert. Der Abstand zum vorherigen Beitrag ist rieseig.
\begin{shaded} \begin{quelle}{ 
Nr. 1289/2738\\ 
S. 120 / f. 302va\\ 
}{ 
1525 Aug. 12\\ 
} 
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor.
\\
\\
\end{quelle} \end{shaded}
%Hier schließlich ein Beispiel mit {framed} (zur Unterscheidung von {shaded}, wobei mit ein zweites {shaded} in einem anderen Grauton lieber wäre, aber das gibt das Paket nicht her. Hier stimmen weder die Ränder links/rechts, noch die Abstände oben/unten.
\begin{framed}\begin{quelle}{ 
Nr. 1289/2738\\ 
S. 120 / f. 302va\\ 
}{ 
1525 Aug. 12\\ 
} 
Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo.
\end{quelle}\end{framed}
\end{quellen} 

\end{document}

eco
Forum-Anfänger
Forum-Anfänger
Beiträge: 20
Registriert: Fr 3. Aug 2012, 10:56

Beitrag von eco »

Hey!

Hat schon jemand eine Lösung oder eine Alternative gefunden?

VG
Eco

eco
Forum-Anfänger
Forum-Anfänger
Beiträge: 20
Registriert: Fr 3. Aug 2012, 10:56

Beitrag von eco »

Hallo Forum!

Das ist sicherlich nicht der Weisheit letzter Schluss, aber ich habe nun eine Lösung gefunden die mich zufrieden stellt. Und die möchte ich euch nun nicht vorenthalten. Vielleicht hat ja irgendwann jemand das gleiche Problem.

Ich habe mich von allen Tabellen-Umgebungen und Minipage-Versuchen getrennt und habe das Problem von vorne auf neu durchdacht.

Die beiden Zauberworte heißen:
\usepackage{parcolumns}	% Paket für mehrere Spalten pro Seite.
\usepackage{mdframed}	% Paket für farbl. Hintergrund etc. 
Wie in einem Zeitungsartikel werden mehrer Spalten auf einer Seite eingerichtet. Der Clou: Die Einträge beginnen immer auf einer Höhe. Das Paket kann korrekt am Seitenende auf die Folgeseite umbrechen.

Ich habe die zusammenhängenden Spalten neu definiert:
\newcommand{\colorplace}[1]{
\begin{mdframed}[backgroundcolor=#1]
\colplacechunks
\end{mdframed}
}
Das Argument #1 ist dann jeweils die Hintergrundfarbe, die ich an anderer Stelle ebenfalls definiert habe.

Ein Eintrag sieht dann z.B. so aus:
\colchunk[1]{Text in linker Spalte.}
\colchunk[2]{Text in mittlerer Spalte}
\colchunk[3]{Text in rechter Spalte}
\colorplace{white} % Ohne Hintergrundfarbe = weiß! Sonst stimmen die Abstände nicht mehr.
Alle normalen Formatierungen (\emph\bf\sc etc.) sind möglich. Gleiches gilt für hängende Zeilen, links- oder rechtsbündig etc.

Für Details siehe die Dokumentation beider Pakete – es ist teilw. sehr umfangreich. Gerade mdframed kann wohl sehr viel. Da ist mitunter viel Feintuning möglich.

MfG
eco

Antworten