LaTeX: Fehlender Durchschuss mit tabbed+parbox

Hi,

die einzelnen Zeilen einer tabbed-Umgebung haben bei mir keinen Durchschuss, wenn ich Teile davon noch in einer parbox verpacke. Die Zeilen in den verwendeten parboxen allerdings schon (wie es sich gehört). Das sieht ziemlich blöde aus.
Dieser Screenshot zeigt das Problem: http://www.bildhoster.de/uploads/25.01.2008_02:05:58…

Mein aktueller Quelltext (auzugsweise) dazu hier: http://pastebin.org/16883

Weiß da jemand Abhilfe?

Grüße
Benjamin

P.S. Wie ich grade sehe, ist das Problem auch auf anderen Seiten, auf denen ich exzessiv parbox-Objekte benutze vorhanden. Das Problem ist also, dass LaTeX unter den Boxen keinen Abstand einbaut.
Irgendeine Idee?

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi,

Weiß da jemand Abhilfe?

Ja. Zum wiederholten male: Bitte Anleitung lesen & verstehen. Du tippst wohl gerne viel? Oder warum tackerst Du ein ums andere mal die gleiche merkwürdige Sequenz von hingefummelten Abständen etc. in den Editor? Warum nutzt Du dann überhaupt LaTeX?

Du solltest Dir angewöhnen, klar (logisches) Markup vom Inhalt zu trennen. Was ist, wenn Du Deine Liste von Zaubersprüchen irgendwann vielleicht mal anders setzen möchtest? Evtl. mit kursiven anstatt fetten Hervorhebungen, einpsaltig anstatt zweispaltig oder so? Dann fummelst Du wie ein Word-Anwender Monatelang an Deinem Text rum.

Definiere Dir lieber eine gescheite Umgebung für den Eintrag von Zaubersprüchen. Sowas wie

\listspell[]{}{}

wäre doch erheblich angenehmer als

\\> \hspace{1em}\parbox[t]{\columnwidth-1.5cm-1em}
{\parindent-1em \textbf{:} \\

oder?

Zu Deinem unmittelbaren Problem: Warum sollte LaTeX da irgend einen Abstand einfügen? Du setzt parboxen unmittelbar hintereinander. Die „\“ erzwingen einen Zeilenumbruch, sorgen aber nicht für „Durchschuss“. Du bist in einer „tabbing“ Umgebung! Oder hast Du irgendwas in der Art definiert? (mit baselinestrech rumgefummelt oder so?) Zwischen den Parboxen macht LaTeX keinen Durchschuss, sondern behandelt diese Boxen, der Name lässt es erahnen, wie einen Absatz. Innerhalb von Parboxen (und auch Minipages) wird hingegen kein Einzug, sondern vertikaler Abstand eingefügt.

Du kennst die Parameter \setlength{\parindent}{soundso} bzw. \setlength{\parskip}{soundso}? Noch besser verwendet man die parskip Option des KOMA Script Paketes.

Last not least wäre es sicher einfacher, sich das D&D Regelbuch einfach fertig zu kaufen, anstatt es abzutippen.

Gruß

Fritze

Hi,

Weiß da jemand Abhilfe?

Ja. Zum wiederholten male: Bitte Anleitung lesen & verstehen.
Du tippst wohl gerne viel? Oder warum tackerst Du ein ums
andere mal die gleiche merkwürdige Sequenz von hingefummelten
Abständen etc. in den Editor? Warum nutzt Du dann überhaupt
LaTeX?

Nein, ich tippe nicht gerne viel. Den Latexcode generiere ich durch ein PHP-Skript. Es war so erstmal einfacher als mit Makro.

Du solltest Dir angewöhnen, klar (logisches) Markup vom Inhalt
zu trennen. Was ist, wenn Du Deine Liste von Zaubersprüchen
irgendwann vielleicht mal anders setzen möchtest? Evtl. mit
kursiven anstatt fetten Hervorhebungen, einpsaltig anstatt
zweispaltig oder so? Dann fummelst Du wie ein Word-Anwender
Monatelang an Deinem Text rum.

Definiere Dir lieber eine gescheite Umgebung für den Eintrag
von Zaubersprüchen. Sowas wie

\listspell[]{}{}

wäre doch erheblich angenehmer als

\>
\hspace{1em}\parbox[t]{\columnwidth-1.5cm-1em}
{\parindent-1em \textbf{:} \

oder?

Hast recht, sieht besser aus. Ich habe mir jetzt folgenden Befehl für den Teil hinter dem Tab erstellt.
\newcommand{\spellsummary}[3]{\noindent\hspace{1em}\parbox{#1-1em}{\parindent-1em \textbf{#2\ifthenelse{\NOT\equal{#3}{}}{}{:}} #3 }}

Zu Deinem unmittelbaren Problem: Warum sollte LaTeX da irgend
einen Abstand einfügen? Du setzt parboxen unmittelbar
hintereinander. Die „\“ erzwingen einen Zeilenumbruch, sorgen
aber nicht für „Durchschuss“. Du bist in einer „tabbing“
Umgebung! Oder hast Du irgendwas in der Art definiert? (mit
baselinestrech rumgefummelt oder so?)

\ ist eben in der tabbing-Umgebung der Weg, eine neue Zeile anzufangen. Einen anderen kenne ich nicht.
Nein, baselinestretch habe ich nicht angetastet.

Zwischen den Parboxen
macht LaTeX keinen Durchschuss, sondern behandelt diese Boxen,
der Name lässt es erahnen, wie einen Absatz. Innerhalb von
Parboxen (und auch Minipages) wird hingegen kein Einzug,
sondern vertikaler Abstand eingefügt.

Du kennst die Parameter \setlength{\parindent}{soundso} bzw.
\setlength{\parskip}{soundso}? Noch besser verwendet man die
parskip Option des KOMA Script Paketes.

Habe ich probiert, das wirkt sich aber nur auf den Text innerhalb der Boxen aus, nicht auf den Abstand zwischen den Boxen, selbst wenn ich die Längen im Gültigkeitsbereich der tabbing-Umgebung setze.
Was mir auffällt ist, dass der Durchschuss hinter einzeiligen parboxes durchaus vorhanden ist, aber nicht mehr, sobald in den Boxen umgebrochen wird.

Last not least wäre es sicher einfacher, sich das D&D
Regelbuch einfach fertig zu kaufen, anstatt es abzutippen.

Ich besitze ca. 20 dieser Bücher. Wir wollen aber nicht jedes mal mindestens 5 davon nach einem betimmten Zauber durchsuchen, wenn wir ihn brauchen. Das kostet Zeit, die man doch lieber mit dem eigentlichen Spiel verbringen möchte. Darum dieses Projekt. Und im Spell Compendium, welches ich auch gekauft habe, stehen nicht alle Zaubersprüche.

Einfacher wäre die ganze Sache, wenn man boxenlos den Text komplett einrücken könnte. Dann könnte man einfach den eine Einrückung von 1.5cm+1em festlegen und die erste Zeile um -1.5cm-1em. Aber danach habe ich lange gesucht und nichts gescheites gefunden.

Grüße
Benjamin

Nach erneuter Suche und einigem Herumprobieren, führt nun folgender Code zum gewünschten Ergebnis:

\newcommand{\spellsummary}[2]{\textbf{#1\ifthenelse{\NOT\equal{#2}{}}{:}{}} #2}

\newlength{\tslisthang}
\setlength{\tslisthang}{1.5em}

\newlength{\tsintleftsize}
\newlength{\tsinthangsize}

% \begin{tabbedslist}{leftwidth}{school or level}%
% Es muss ein % am ende der \begin.... zeile hängen, sonst gibt es unerwünschte einrückung beim ersten eintrag
\newenvironment{tabbedslist}[2]{%
\par
\begingroup
\raggedright%
\setlength{\tsintleftsize}{#1}% 
\setlength{\tsinthangsize}{\tsintleftsize+\tslisthang}%
\noindent%
\begin{picture}(0,0)%
 \put(0,0){#2}%
\end{picture}\noindent}
{\par\endgroup}

\newcommand{\tslistentry}[1]{\noindent\hangindent=\tsinthangsize\hspace{\tsintleftsize}#1\par}

Und Benutzung dann mit

\begin{tabbedslist}{3em}{Necro}%
\tslistentry{\spellsummary{Avascular Mass}{Reduce foe to half hp and stun, entangle in 20-ft. radius from victim.}}
\tslistentry{\spellsummary{Bestow Curse, Greater}{As bestow curse, but more severe penalties.}}
.....
\end{tabbedslist}

Hallo,

Nein, ich tippe nicht gerne viel. Den Latexcode generiere ich
durch ein PHP-Skript. Es war so erstmal einfacher als mit
Makro.

Ach so. Woher kommt denn dann der Text, wenn ich das so off topic fragen darf?
Hast Du „online“ Versionen der Regelbücher?

Hast recht, sieht besser aus. Ich habe mir jetzt folgenden
Befehl für den Teil hinter dem Tab erstellt.
\newcommand{\spellsummary}[3]{\noindent\hspace{1em}\parbox{#1-1em}
{\parindent-1em \textbf{#2\ifthenelse{\NOT\equal{#3}{}}{}{:}} #3 }}

Hmm. Das meinte ich nicht mit „gescheiter Umgebung“. Es ist die selbe Bastelei,
verkapselt in einem Makro. Ich meine, dass das wesentlich eleganter gehen
sollte, kann das aber auch nicht „mal eben aus der Hosentasche“. Ich habe hier
leider keinen Zugriff auf eine LaTeX Umgebung. Vielleicht gucke ich mir das
irgendwann später nochmal an.

\ ist eben in der tabbing-Umgebung der Weg, eine neue Zeile
anzufangen. Einen anderen kenne ich nicht.

Ist schon richtig. Aber Zeilenumbruch in der Tabbing-Umgebung ist was anderes,
als Absätze machen :smile:

Habe ich probiert, das wirkt sich aber nur auf den Text
innerhalb der Boxen aus, nicht auf den Abstand zwischen den
Boxen, selbst wenn ich die Längen im Gültigkeitsbereich der
tabbing-Umgebung setze.

Ja, die Tabbing-Umgebung setzt keine Absätze, sondern Zeilen. Sie ist selbst
ein Absatz.

Was mir auffällt ist, dass der Durchschuss hinter einzeiligen
parboxes durchaus vorhanden ist, aber nicht mehr, sobald in
den Boxen umgebrochen wird.

Einzeilige Parboxen sind sinnlos. Warum da ein „Durchschuss“ kommt, kann ich im
Moment nicht sagen. Das sind dann schon eher tiefer gehende Fragen.

Einfacher wäre die ganze Sache, wenn man boxenlos den Text
komplett einrücken könnte. Dann könnte man einfach den eine
Einrückung von 1.5cm+1em festlegen und die erste Zeile um
-1.5cm-1em. Aber danach habe ich lange gesucht und nichts
gescheites gefunden.

Wie wäre es mit dem „titlesec“ Paket? Da kann man sowas definieren:

http://ctan.wustl.edu/tex-archive/macros/latex/contr…

Komplett einrücken kannst Du einen Text doch aber nur, wenn Du ihn in
einer „Box“ hast. Wie sollte das sonst gehen? Du könntest Minipage-Umgebungen
nutzen und diese herumschieben. Aber all das ist im Grunde Frickelei. In Deinem
Fall wäre mal wieder „plain TeX“ Makro schreiben angesagt, um daraus das von
Dir benötigte Layout zu erzeugen. Evtl. in einem eigenen Makropaket.

Viel Erfolg & Spaß weiterhin!

Gruß

Fritze

Hallo,

Nein, ich tippe nicht gerne viel. Den Latexcode generiere ich
durch ein PHP-Skript. Es war so erstmal einfacher als mit
Makro.

Ach so. Woher kommt denn dann der Text, wenn ich das so off
topic fragen darf?
Hast Du „online“ Versionen der Regelbücher?

Wir haben zwei Sorten von Büchern: Hardcover und PDF (kann man u.a. bei DTRPG.com kaufen). Die Zauber aus dem Player’s Handbook gibt es direkt von wizards zum Download als RTF. Von den anderen HCs wurden die entsprechenden Seiten gescannt und OCRt. Nachdem alles erstmal als Reintext vorlag, habe ich den dann geparst und in eine Datenbank gelegt. Dort kommen jetzt die Daten her. Klingt einfach, hat aber über 2 Wochen gedauert. Insgesamt hat das Projekt inzwischen rund 4000 Zeilen Code.

Hast recht, sieht besser aus. Ich habe mir jetzt folgenden
Befehl für den Teil hinter dem Tab erstellt.
\newcommand{\spellsummary}[3]{\noindent\hspace{1em}\parbox{#1-1em}
{\parindent-1em \textbf{#2\ifthenelse{\NOT\equal{#3}{}}{}{:}} #3 }}

Hmm. Das meinte ich nicht mit „gescheiter Umgebung“. Es ist
die selbe Bastelei,
verkapselt in einem Makro. Ich meine, dass das wesentlich
eleganter gehen
sollte, kann das aber auch nicht „mal eben aus der
Hosentasche“. Ich habe hier
leider keinen Zugriff auf eine LaTeX Umgebung. Vielleicht
gucke ich mir das
irgendwann später nochmal an.

Ich habe jetzt eine mäßig elegante Lösung mit Hangabsätzen und hspaces (siehe meinen anderen Post). Nur die vielen \noindents stören mich etwas, aber wenigstens funktioniert’s :wink:
Vielleicht setz ich mich morgen nochmal 'dran, das etwas sauberer hinzubekommen (mit parindent). Ausserdem stört mich, dass am ende der \begin{…}-Anweisung kein Zeilenumbruch folgen darf (bzw ein % stehen muss). Wie ich das verbessern kann, und warum es überhaupt so ist, ist mir ein Rätsel.

\ ist eben in der tabbing-Umgebung der Weg, eine neue Zeile
anzufangen. Einen anderen kenne ich nicht.

Ist schon richtig. Aber Zeilenumbruch in der Tabbing-Umgebung
ist was anderes,
als Absätze machen :smile:

Habe ich probiert, das wirkt sich aber nur auf den Text
innerhalb der Boxen aus, nicht auf den Abstand zwischen den
Boxen, selbst wenn ich die Längen im Gültigkeitsbereich der
tabbing-Umgebung setze.

Ja, die Tabbing-Umgebung setzt keine Absätze, sondern Zeilen.
Sie ist selbst
ein Absatz.

Was mir auffällt ist, dass der Durchschuss hinter einzeiligen
parboxes durchaus vorhanden ist, aber nicht mehr, sobald in
den Boxen umgebrochen wird.

Einzeilige Parboxen sind sinnlos. Warum da ein „Durchschuss“
kommt, kann ich im
Moment nicht sagen. Das sind dann schon eher tiefer gehende
Fragen.

Einfacher wäre die ganze Sache, wenn man boxenlos den Text
komplett einrücken könnte. Dann könnte man einfach den eine
Einrückung von 1.5cm+1em festlegen und die erste Zeile um
-1.5cm-1em. Aber danach habe ich lange gesucht und nichts
gescheites gefunden.

Wie wäre es mit dem „titlesec“ Paket? Da kann man sowas
definieren:

http://ctan.wustl.edu/tex-archive/macros/latex/contr…

Beim Überfliegen der Doku scheint es mir als würde sich das Paket, wie der Name schon sagt, nur auf Überschriften beziehen. Für ein genaues Lesen bin ich jetzt einfach zu müde.

Komplett einrücken kannst Du einen Text doch aber nur, wenn Du
ihn in
einer „Box“ hast. Wie sollte das sonst gehen? Du könntest
Minipage-Umgebungen
nutzen und diese herumschieben. Aber all das ist im Grunde
Frickelei. In Deinem
Fall wäre mal wieder „plain TeX“ Makro schreiben angesagt, um
daraus das von
Dir benötigte Layout zu erzeugen. Evtl. in einem eigenen
Makropaket.

Davon habe ich nun überhaupt keine Ahnung. Alles was ich vor diesem Projekt mit Latex gemacht habe, waren Hausaufgaben - und da hat es gereicht, normale Absätze, Tabellen und Formeln zu setzen - was ja mit LaTeX auch wirklich schön einfach ist.

Viel Erfolg & Spaß weiterhin!

Danke :wink:
Jetzt funktioniert alles, auch wenn an einigen Stellen der Latex-Code ziemlich zusammengeflickt ist… naja, sieht ja am Ende keiner *g*

Grüße
Benjamin