PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Synchronisierte enumerate-Umgebung



DieterH
28-05-2010, 12:01
Für die Erstellung der Arbeitsaufträge einer Deutsch-Aufgabe verwende ich die enumerate-Umgebung. Soweit kein Problem.

Zusätzlich möchte zu jedem Listenpunkt (\item) die maximal erreichbare Punktzahl angeben. Die Angabe der Punktzahl soll auf Höhe der ersten Zeile des betreffenden Listenpunkts liegen.

Ich würde gerne mit "enumerate" arbeiten, weil ich bei manchen Listenpunkt eine Unterstruktur a), b), c) usw. benötige, die ich mit einer geschachelten itemize-Umgebung erzeuge.

Lässt sich das Geforderte überhaupt mit einer enumerate-Umgebung abbilden?
Wenn ja, wie?

Wenn nein, ist es zweckmäßiger mit einer Tabelle, oder mit horizontal angeordneten \parbox zu arbeiten. Pro Listenpunkt (Zeile) wären es drei Zellen.

Vielen Dank im voraus.

Gruss
Dieter

Xenara
28-05-2010, 12:16
Meinst du sowas in die Richtung?



\documentclass{scrreprt}
\usepackage[ngerman]{babel}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{blindtext}

\newcommand{\myitem}[2]{\item\parbox[t]{.9\linewidth}{#1}\hfill #2}

\begin{document}

\begin{enumerate}
\myitem{Aufgabentext der Aufgabe 1, der mehrere Zeilen lang ist, obwohl eigentlich nichts drinsteht.\\Deswegen gehts noch weiter.}{2}
\myitem{Nächste Aufgabe}{10}
\begin{enumerate}
\myitem{Erste Teilaufgabe mit viel blabla sollen unlösbare Aufgaben auf möglichst komplizierte Weise irgendwie auf vielen Blättern Papier so unlogisch wie möglich dargelegt werden.}{5}
\myitem{Beantworten Sie die Frage: Wozu?}{100}
\begin{enumerate}
\myitem{Noch eine Unterteilung der unterteilten Teilaufgabe mit wundervollen Ausführungen dazu, wie man noch mehr Arbeit und Aufgaben verteilen kann. Hauptsache, der Text ist mehrere Zeilen lang, was er hiermit jetzt definitiv ist.}{3}
\end{enumerate}
\end{enumerate}
\myitem{Und noch eine weitere Frage.}{12}
\end{enumerate}


\end{document}

DieterH
28-05-2010, 13:22
Hallo Xenara,

vielen Dank für Deinen grundsätzlichen Lösungsvorschlag. Ich kann ihn erst heute abend ausprobieren (auf meinem privaten Rechner); ich denke, dass er praktibal ist und ich ihn einsetzen werde. Mit war nicht bewusst, dass man \parbox auch in Verbindung mit \item benutzen kann.

Danke!

Gruss
Dieter

lockstep
28-05-2010, 13:27
@Xenara: Dein Setzen der parbox-Breite als Bruchteil von \linewidth führt dazu, dass sich der rechte Rand von Aufgaben- und Unteraufgabentext unterscheidet. (Um den Effekt deutlicher zu machen, ersetze in deinem Beispiel .9\linewidth durch .5\linewidth.)

lockstep

Xenara
28-05-2010, 13:38
@lockstep: Mist, du hast recht :(
Hatte extra darauf geachtet, es aber nur mit 0.8 und 0.9 getestet. Da sahs ok aus.

Was für einen Wert müsste man dann statt \linewidth nehmen? \textwidth und \columnwidth sinds auch nicht, und einfach ein \itemsep abziehen scheitert natürlich bei der zweiten Einrückung.
Also welche Länge sagt LaTeX, wieviel Platz er aktuell für die eingerückte Zeile hat? Könnte man das auslesen?

lockstep
28-05-2010, 13:51
Die Breite der aktuellen Zeile hängt meines Wissens nach von der Tiefe der Listenumgebung ab. Beim Start der ersten enumerate-Umgebung wird die Zeile um \leftmargini verringert, beim Start der zweiten um \leftmarginii usw. (bis zu \leftmarginvi). Ich denke, es braucht entweder eine umfangreichere Berechnung oder einen anderen Ansatz.

lockstep

Xenara
28-05-2010, 13:59
Hab eben nochmal nachgelesen und x Sachen ausprobiert:
\linewidth müsste eigentlich tatsächlich der richtige Parameter sein, denn er gibt den Platz der aktuellen Zeile.

ABER: Mir ist aufgefallen, ich definiere ja 90% der aktuellen Zeile, und wenn die länger oder kürzer ist, ergeben sich andere Verhältnisse.

Wenn von \linewidth ein Absolutwert (z.B. 5cm) für den Platz der Punktezahl abgezogen wird, sollte es stimmen.
Würdest du es mal mit folgender Definition testen? Das sah bei mir eben stimmig aus.


\newcommand{\myitem}[2]{\item\parbox[t]{\linewidth-20ex}{#1}\hfill #2}

mechanicus
28-05-2010, 13:59
[QUOTE=lockstep;314455]Ich denke, es braucht entweder eine umfangreichere Berechnung oder einen anderen Ansatz./QUOTE]
Bevor man sich aber an diese Rechnung macht, sollte Dieter erstmal sagen, ob das ungefähr sein Ziel ist. Ich bin ehrlich und gebe zu, dass ich die Beschreibung nicht wirklich verstanden habe.

Gruß
Marco

DieterH
28-05-2010, 14:08
Ich möchte rechts an eine enumerate-Umgebung eine schmale "Spalte" anflanschen, in der ich für jeden Listenpunkt die jeweilige Punktzahl eintrage. Die Punktzahl (max. 3-stellig) soll in die gleiche Zeile gesetzt werden wie die erste Zeile des Listenpunkts.

Bei eurer Diskussion kam mir der Gedanke, zwei horizontale \parbox in \myitem zu definieren, die rechte (für die Punktzahl) hat z.B. die Breite 1cm, die linke hat die Breite "\linewidth - 1cm". Geht das überhaupt so?

Mein Verständnis ist, dass \linewidth IMMER die jeweilige Zeilenbreite angibt, d.h., wenn man sich in der dritten Verschachtelung befindet, ist \linewidth eben "automatisch" kürzer als in der zweiten Verschachtelung.

Zum Ausprobieren komme ich erst heute abend.

Gruss
Dieter

Xenara
28-05-2010, 14:11
Eine zweite Parbox kannst du in mein Makro locker einbauen, einfach ums zweite Argument rum. In der bestehenden Variante sind die Zahlen dann automatisch immer am rechten Rand bündig. Ist die Frage, wie du es willst.

Danke für deine Bestätigung zu \linewidth. Jetzt müsste nur mal noch jemand (ungleich ich selbst) das MB mit dem neuen Vorschlag in #7 testen :D

lockstep
28-05-2010, 14:14
@Xenara: Mit \linewidth-20ex kann LaTeX (bzw. TeX) nicht viel anfangen.



\newlength{\myboxwidth}
\newcommand{\myitem}[2]{%
\myboxwidth \linewidth
\advance\myboxwidth -4em
\item\parbox[t]{\myboxwidth}{#1}\hfill #2
}


lockstep

mechanicus
28-05-2010, 14:16
@Xenara: Mit \linewidth-20ex kann LaTeX (bzw. TeX) nicht viel anfangen.

Musst doch nur calc laden ;)

Xenara
28-05-2010, 14:17
Sorry, \usepackage{calc} fehlte. Jetzt sollte es aber laufen.



\documentclass{scrreprt}
\usepackage[ngerman]{babel}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{calc}

\newcommand{\myitem}[2]{\item\parbox[t]{\linewidth-20ex}{#1}\hfill #2}

\begin{document}

\begin{enumerate}
\myitem{Aufgabentext der Aufgabe 1, der mehrere Zeilen lang ist, obwohl eigentlich nichts drinsteht.\\Deswegen gehts noch weiter.}{2}
\myitem{Nächste Aufgabe}{10}
\begin{enumerate}
\myitem{Erste Teilaufgabe mit viel blabla sollen unlösbare Aufgaben auf möglichst komplizierte Weise irgendwie auf vielen Blättern Papier so unlogisch wie möglich dargelegt werden.}{5}
\myitem{Beantworten Sie die Frage: Wozu?}{100}
\begin{enumerate}
\myitem{Noch eine Unterteilung der unterteilten Teilaufgabe mit wundervollen Ausführungen dazu, wie man noch mehr Arbeit und Aufgaben verteilen kann. Hauptsache, der Text ist mehrere Zeilen lang, was er hiermit jetzt definitiv ist.}{5}
\end{enumerate}
\end{enumerate}
\myitem{Und noch eine weitere Frage.}{12}
\end{enumerate}


\end{document}

lockstep
28-05-2010, 14:21
Musst doch nur calc laden ;)

Genau dafür gibt es Minimalbeispiele. (Und es war eine gute Übung in TeX-Syntax für Anfänger. :))

lockstep

rais
28-05-2010, 21:39
Moin moin,
eine Alternative wäre vllt, die Punkte in Randnotizen zu packen, da braucht man sich um den in der entsprechenden Zeile zur Verfügund stehenden Platz nicht weiter zu kümmern ... aufbauend auf Xenaras Beispiel etwa


\documentclass{scrreprt}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\newcounter{gesamtpunkte}
\newcommand*\punkte[1]{%
\marginpar{\parbox{2em}{\hfill#1}}%
\addtocounter{gesamtpunkte}{#1}%
}
\newcommand*\gesamtpunkte{%
\vfill
\hfill mögliche Punkte:\marginpar{\parbox{2em}{\hfill\textbf{\theg esamtpunkte}}}%
}
\begin{document}

\begin{enumerate}
\item Aufgabentext\punkte{2} der Aufgabe 1, der mehrere Zeilen lang ist, obwohl eigentlich nichts drinsteht.\\Deswegen gehts noch weiter.
\item Nächste Aufgabe\punkte{10}
\begin{enumerate}
\item Erste Teilaufgabe\punkte{5} mit viel blabla sollen unlösbare Aufgaben auf möglichst komplizierte Weise irgendwie auf vielen Blättern Papier so unlogisch wie möglich dargelegt werden.
\item Beantworten Sie die Frage: Wozu?\punkte{100}
\begin{enumerate}
\item Noch eine Unterteilung\punkte{5} der unterteilten Teilaufgabe mit wundervollen Ausführungen dazu, wie man noch mehr Arbeit und Aufgaben verteilen kann. Hauptsache, der Text ist mehrere Zeilen lang, was er hiermit jetzt definitiv ist.
\end{enumerate}
\end{enumerate}
\item Und noch eine weitere Frage.\punkte{12}
\end{enumerate}
\gesamtpunkte
\end{document}

MfG

mechanicus
28-05-2010, 21:52
@rais: Wollen wir hoffen, dass keiner halbe Punkt vergibt :D:D:D

Gruß
Marco

rais
28-05-2010, 22:35
@mechanicus: stimmt :D Otoh bewahrheitet es mal wieder Axels Regel Nr. 1 (http://www.mrunix.de/forums/showpost.php?p=310208&postcount=7) ;)

MfG

rais
30-05-2010, 11:13
halbe Punkte lassen sich auch erschlagen ...


\documentclass{scrreprt}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\newcounter{gesamtpunkte}
\newcounter{nenner}
\setcounter{nenner}{8}%<--bei der Vergabe von \punkte{n} zu beachten (n/nenner)
\newcounter{pzi}%
\newcounter{pzr}%
\newcounter{pzn}%
\newcounter{pzni}%
\newcounter{pznii}%
\newcounter{pzri}%
\newcounter{pzrii}%
\makeatletter
\newcommand*\teile[4]{%Teile #1/#2, übergebe ganzzahligen Anteil in #3 und Rest in #4
\@ifundefined{c@#3}{\@nocountererr{#3}}{%
\@ifundefined{c@#4}{\@nocountererr{#4}}{%
\begingroup
\setcounter{#3}{#1}%
\setcounter{#4}{#1}%
\global\divide\csname c@#3\endcsname #2\relax
\multiply\csname c@#3\endcsname #2\relax
\global\advance\csname c@#4\endcsname -\csname c@#3\endcsname
\endgroup
}%
}%
}
\makeatother
\newcommand*\pz[1]{%
\setcounter{pzi}{#1}% Integeranteil
\setcounter{pzr}{#1}% und Rest
\teile{#1}{\value{nenner}}{pzi}{pzr}%
\ifnum\value{pzi}>0 \makebox[0pt][r]{\thepzi\,}\fi% nur ausgeben, wenn nicht Null
\ifnum\value{pzr}>0% wenn es einen Rest gibt
%Kürzen: Test, ob Nenner durch Zähler teilbar ist:
\teile{\value{nenner}}{\value{pzr}}{pzni}{pzri}%
\ifnum\value{pzri} = 0
\setcounter{pzn}{\value{pzni}}%
\setcounter{pzr}{1}%
\else% Nenner war nicht durch Zähler teilbar, also
%Kürzen: Test, ob Nenner durch 2 teilbar ist:
\setcounter{pzn}{\value{nenner}}%
\teile{\value{nenner}}{2}{pzni}{pzri}%
\ifnum\value{pzri} = 0
%Nenner ist durch 2 teilbar, ist es der Zähler?
\teile{\value{pzr}}{2}{pznii}{pzrii}%
\ifnum\value{pzrii} = 0
\setcounter{pzn}{\value{pzni}}%
\setcounter{pzr}{\value{pznii}}%
\fi
\fi
\teile{\value{nenner}}{3}{pzni}{pzri}%
\ifnum\value{pzri} = 0
%Nenner ist durch 3 teilbar, ist es der Zähler?
\teile{\value{pzr}}{3}{pznii}{pzrii}%
\ifnum\value{pzrii} = 0
\setcounter{pzn}{\value{pzni}}%
\setcounter{pzr}{\value{pznii}}%
\fi% Zähler durch 3 teilbar
\fi% Nenner durch 3 teilbar
% hier ggf. weiter versuchen zu kürzen, wenn man es denn so weit damit treiben will ...
\fi%Nenner war nicht durch Zähler teilbar
$\frac{\thepzr}{\thepzn}$% den (un)gekürzten (Rest-)Bruch ausgeben
\else% wenn es nur einen ganzzahligen Anteil gibt:
$\phantom{\frac{1}{\thenenner}}$% damit die ganzzahligen Anteile auch untereinander stehen
\fi
}
\newcommand*\punkte[1]{%
\marginpar{\parbox{2em}{\hfill\pz{#1}}}%
\addtocounter{gesamtpunkte}{#1}%
}
\newcommand*\gesamtpunkte{%
\vfill
\hfill mögliche Punkte:\marginpar{\parbox{2em}{\hfill\pz{\thegesam tpunkte}}}%
}
\begin{document}

\begin{enumerate}
\item Aufgabentext\punkte{2} der Aufgabe 1, der mehrere Zeilen lang ist, obwohl eigentlich nichts drinsteht.\\Deswegen gehts noch weiter.
\item Nächste Aufgabe\punkte{10}
\begin{enumerate}
\item Erste Teilaufgabe\punkte{5} mit viel blabla sollen unlösbare Aufgaben auf möglichst komplizierte Weise irgendwie auf vielen Blättern Papier so unlogisch wie möglich dargelegt werden.
\item Beantworten Sie die Frage: Wozu?\punkte{100}
\begin{enumerate}
\item Noch eine Unterteilung\punkte{5} der unterteilten Teilaufgabe mit wundervollen Ausführungen dazu, wie man noch mehr Arbeit und Aufgaben verteilen kann. Hauptsache, der Text ist mehrere Zeilen lang, was er hiermit jetzt definitiv ist.
\end{enumerate}
\end{enumerate}
\item Und noch eine weitere Frage.\punkte{12}
\end{enumerate}
\gesamtpunkte
\end{document}

Disclaimer: Anwendung auf eigene Gefahr ... meine letzte Bruchrechnung vor diesem Teil ist schon etwas her.:D

MfG

DieterH
31-05-2010, 13:05
@Alle:
Danke für eure Vorschläge

@rais:
An halbe Punkte dachte ich nicht. Deine Erweiterungen waren für lehrreich.
Dabei fiel mir mein früherer Chef ein: "Das numerische Verfahren zur Lösung einer partiellen Differentialgleichung 2. Ordnung in COBOL programmieren" :lol:

Frage: Kann man dies in LaTeX tun? :lol:

Danke nochmals

Gruss
Dieter

rais
03-06-2010, 23:53
An halbe Punkte dachte ich nicht.
na, ich ja anfangs auch nich ...


Dabei fiel mir mein früherer Chef ein: "Das numerische Verfahren zur Lösung einer partiellen Differentialgleichung 2. Ordnung in COBOL programmieren" :lol:

Ich kenn' COBOL nicht, aber wenn man den geschäftlichen Teil weglässt, wird daraus COOL;-)


Frage: Kann man dies in LaTeX tun? :lol:

k.A. (nie versucht), schau Dir vllt Sprachen wie Ook! an -- wenn Du damit Dein Problem realisieren kannst (und keinen Nervenzusammenbruch erleidest), kannst Du imho Dein Problem -- bzw dessen Lösung -- auf *jede* andere Sprache übertragen.:D

MfG