Seite 1 von 1

Umbrüche abhängig vom Content

Verfasst: Sa 24. Apr 2010, 09:45
von Zwackelmann
Hallo,
ich habe vor eine Klasse für meine Hausaufgaben zu erstellen. Dafür habe ich zwei Umgebungen task und subtask erstellt (also Aufgabe und Unteraufgabe).
Beiden Umgebungen kann über einen optionalen Parameter eine Aufgabenstellung übergeben werden. z.B.
\begin{task}[Aufgabenstellung für die Aufgabe]
	Lösung zu der Aufgaben
\end{task}
Die Aufgabenstellung wird dann kursiv geschrieben und wird gefolgt von zwei Umbrüchen.

Bei Unteraufgaben sind allerdings die beiden Umbrüche unerwünscht:
\begin{task}[Aufgabenstellung]
	\begin{subtask}[Aufgabenstellung]
		Lösung der Unteraufgabe.
	\end{subtask}
\end{task}
Zusammenfassend brauche ich also ein Makro, welches die beiden Umbrüche hinter die Aufgabenstellung von task nur hinzufügt, wenn der Content von task nicht mit \begin{subtask} anfängt.

Im Anhang sieht man den zu großen Abstand bei der Aufgabe 2, weil die Aufgabe sofort in eine Unteraufgabe übergeht.


Hier noch meine Umgebungen task und subtask:
%task
\newenvironment{task}[1][\empty]
	{	
		\begin{subsection}{Aufgabe \tasknum}%
			\ifthenelse{\equal{#1}{\empty}}%
			{}%
			{\textit{#1}\\\\}%
	}
	{
		\end{subsection}%
		\addtocounter{task}{1}%
		\setcounter{subtask}{1}%
	}
\newenvironment{subtask}[1][\empty]
	{	
		\begin{paragraph}{\subtasknum}%
			\ifthenelse{\equal{#1}{\empty}}%
			{}%
			{\textit{#1}\\\\}%
	}
	{
		\end{paragraph}%
		\addtocounter{subtask}{1}%
	}

Verfasst: Sa 24. Apr 2010, 14:37
von KOMA
Hier sieht man mal wieder, wie ungünstig es ist, wenn man harte Umbrüche verwendet. Wenn man nämlich stattdessen einen vertikalen Abstand einbaut, dann kann man die Größe von selbigem eventuell am Anfang der Unterumgebung abfragen und ggf. anders reagieren. Also schlage ich vor, dass Du Dich mit Anweisungen wie \addvspace, \vspace, \vskip, \ifvmode und Registern wie \lastskip beschäftigst. Hilfreich dabei ist das frei verfügbare »TeX by Topic«.

Da mein Akku gleich leer ist, muss ich hier leider abbrechen.

Verfasst: Sa 24. Apr 2010, 15:43
von Zwackelmann
Hi, danke für die Antwort.
Aber um mein Problem mit \vspace oÄ. zu lösen, muss ich doch auch auf irgendeine Art und Weise abgragen können, ob das erste was im Content von task steht ein "\begin{subtask}" ist...

Verfasst: Sa 24. Apr 2010, 16:54
von Zwackelmann
Okay - ich hab das Problem jetzt gelöst, indem ich statt einem Doppelumbruch ein "\par\addvspace{5mm}" nach dem Aufgabentext benutzt habe.

Ich nehme an, dass das funktioniert, weil \par einen Absatz erzwingt und damit in den vertical mode wechselt, dort den vspace von 5mm erzeugt und dann aber keinen zusätzlichen vspace erzeugt, wenn ich einen neuen Absatz mit deim subtask anfange (weil ich ja schon im vertical mode bin)

Danke für die Hilfe!