Umbrüche abhängig vom Content

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


Zwackelmann
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Sa 24. Apr 2010, 08:55

Umbrüche abhängig vom Content

Beitrag 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.

Code: Alles auswählen

\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:

Code: Alles auswählen

\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:

Code: Alles auswählen

%task
\newenvironment{task}[1][\empty]
	{	
		\begin{subsection}{Aufgabe \tasknum}%
			\ifthenelse{\equal{#1}{\empty}}%
			{}%
			{\textit{#1}\\\\}%
	}
	{
		\end{subsection}%
		\addtocounter{task}{1}%
		\setcounter{subtask}{1}%
	}

Code: Alles auswählen

\newenvironment{subtask}[1][\empty]
	{	
		\begin{paragraph}{\subtasknum}%
			\ifthenelse{\equal{#1}{\empty}}%
			{}%
			{\textit{#1}\\\\}%
	}
	{
		\end{paragraph}%
		\addtocounter{subtask}{1}%
	}
Dateianhänge
beispiel.tex
(770 Bytes) 643-mal heruntergeladen
beispiel.pdf
(55.46 KiB) 700-mal heruntergeladen

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2645
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Beitrag 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.

Zwackelmann
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Sa 24. Apr 2010, 08:55

Beitrag 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...

Zwackelmann
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Sa 24. Apr 2010, 08:55

Beitrag 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!

Antworten