Überarbeitungsverlauf[Zurück]
Klicke auf Einblenden/Ausblenden von Überarbeitungen 5

28 Jun '14, 18:15

cgnieder's gravatar image

cgnieder
22.1k253463

*editierte Antwort* Ab v0.14 (28.06.2014) hat `exsheets` die nötigen Mittel an Bord, um sich eine `\listofquestions` zu definieren. Der Clou dabei sind die sogenannten *question properties*, die man sich zum einen selbst definieren kann, und von denen es auch vordefinierte gibt. Eine der vordefinierten Properties ist (ab v0.14) `question-body`. Properties kann man abrufen mit \GetQuestionProperty{<eigenschaft>}{<ID>} `exsheets` hat außerdem den Befehl `\ForEachQuestion{ ... }`, bei dem man im Argument mit `#1` auf die ID der Fragen zugreifen kann. Verbinden wir das mit `\QuestionNumber{<ID>}`, das den interpretierten Zähler einer Frage ausgibt, und mit der Paketoption `auto-label`, die automatisch zu einer Frage ein `\label{qu:<ID>}` (=> Seitenzahlen) setzt, dann sind wir schon fast am Ziel. Es fehlt noch mit \ExSheetsHeading{<Stil>}{<Name>}{<Nummer>}{<Punkte>}{<Bonus>}{<ID>} ein Befehl, der zwar undokumentiert ist aber dennoch zur Verfügung steht, und mit dem es möglich ist, `exsheets`' Überschriftenmechanismus zu verwenden. Alles zusammengesetzt gibt das dann folgendes: \documentclass{article} \usepackage[ngerman]{babel} \usepackage[auto-label]{exsheets}[2014/06/28] \SetupExSheets{ counter-within = section , counter-format = se.qu , question/name = Aufgabe , } \NewDocumentCommand\listofquestions{}{% \ForEachQuestion {% \ExSheetsHeading {block} % Überschrifts-Stil {Aufgabe} % Name der Aufgabe {\QuestionNumber{##1} (Seite~\pageref{qu:##1})}% Nummer der Aufgabe {0} % Punkte der Aufgabe {0} % Bonuspunkte der Aufgabe {##1}% % ID der Aufgabe \GetQuestionProperty{question-body}{##1}% \par \medskip }% } \usepackage{multicol} \begin{document} \section{Erstes Kapitel} \begin{question} Eine erste Aufgabe \end{question} \begin{question} Eine zweite Aufgabe \end{question} \subsection{Erstes Unterkapitel} \begin{question} Eine Aufgabe in einem Unterkapitel \end{question} \begin{question} Noch eine Aufgabe in einem Unterkapitel \end{question} \subsubsection{Tiefer geschachteltes Unterkapitel} \begin{question} Noch eine Aufgabe \end{question} \subsubsection{Weiter geschachtelt} \begin{question} Eine weitere Aufgabe \end{question} \subsection{Zweites Unterkapitel} \begin{question} Und eine weitere Aufgabe \end{question} \clearpage \section{Zweites Kapitel} \begin{question} Eine Aufgabe in einem anderen Kapitel \end{question} \begin{multicols}{2}[\section{Aufgabenübersicht}] \listofquestions \end{multicols} \end{document} ![alt text][1] ![alt text][2] [1]: http://texwelt.de/wissen/upfiles/exsheets1_2.png [2]: http://texwelt.de/wissen/upfiles/exsheets2_1.png
Klicke auf Einblenden/Ausblenden von Überarbeitungen 4
Antwort überarbeitet

28 Jun '14, 18:10

cgnieder's gravatar image

cgnieder
22.1k253463

Hier *editierte Antwort* Ab v0.14 (28.06.2014) hat `exsheets` die nötigen Mittel an Bord, um sich eine `\listofquestions` zu definieren. Der Clou dabei sind die sogenannten *question properties*, die man sich zum einen selbst definieren kann, und von denen es auch vordefinierte gibt. Eine der vordefinierten Properties ist ein *proof of concept*, dass es mit dem Paket `exsheets` ohne riesigen Aufwand möglich ist. Ich verwende dafür nicht-dokumentierte Interna. `exsheets` ist in expl3 geschrieben (der Programmierschicht eines zukünftigen LaTeX3), weshalb das für damit unvertraute vielleicht etwas seltsamer Code ist... Am Anfang jeder Aufgabe von `exsheets` steht \tl_use:N \l__exsheets_questions_pre_hook_tl und am Ende \tl_use:N \l__exsheets_questions_post_hook_tl Das (ab v0.14) `question-body`. Properties kann man man zusammen mit `exsheets`' *question properties* verwenden, um abrufen mit \GetQuestionProperty{<eigenschaft>}{<ID>} `exsheets` hat außerdem den Aufgabentext zu speichern und später wieder aufzurufen. In der Liste `\listofquestions` verwende ich außerdem `\__exsheets_use_heading:nnnnnn`, ein nicht-öffentlicher Befehl<sup>1</sup>, mit Befehl `\ForEachQuestion{ ... }`, bei dem man im Argument mit `#1` auf die ID der Fragen zugreifen kann. Verbinden wir das mit `\QuestionNumber{<ID>}`, das den interpretierten Zähler einer Frage ausgibt, und mit der Paketoption `auto-label`, die automatisch zu einer Frage ein `\label{qu:<ID>}` (=> Seitenzahlen) setzt, dann sind wir schon fast am Ziel. Es fehlt noch mit \ExSheetsHeading{<Stil>}{<Name>}{<Nummer>}{<Punkte>}{<Bonus>}{<ID>} ein Befehl, der zwar undokumentiert ist aber dennoch zur Verfügung steht, und mit es möglich ist, `exsheets`' Überschriften-Mechanismus verwenden kann: Der benötigte Code ist Überschriftenmechanismus zu verwenden. Alles zusammengesetzt gibt das dann gar nicht so lang: \ExplSyntaxOn \DeclareQuestionProperty {question-body} \cs_new_protected:Npn \lorek_save_question_and_print:w #1 \tl_use:N \l__exsheets_questions_post_hook_tl { \SetQuestionProperties{ question-body = {#1} } #1 } \tl_set:Nn \l__exsheets_questions_pre_hook_tl { \lorek_save_question_and_print:w } \cs_new_protected:Npn \lorek_list_of_questions: { \ForEachQuestion { \__exsheets_use_heading:nnnnnn {block} {Aufgabe} {\QuestionNumber {##1}} {0} {0} {##1} \GetQuestionProperty {question-body} {##1} \par \medskip } } \NewDocumentCommand \listofquestions {} { \lorek_list_of_questions: } \ExplSyntaxOff Ein komplettes Beispiel: ![alt text][1] ![alt text][2] folgendes: \documentclass{article} \usepackage[ngerman]{babel} \usepackage{exsheets} \usepackage[auto-label]{exsheets}[2014/06/28] \SetupExSheets{ counter-within = section , counter-format = se.qu , question/name = Aufgabe Aufgabe , } \ExplSyntaxOn \DeclareQuestionProperty {question-body} \cs_new_protected:Npn \lorek_save_question_and_print:w #1 \tl_use:N \l__exsheets_questions_post_hook_tl { \SetQuestionProperties{ question-body = {#1} } #1 \NewDocumentCommand\listofquestions{}{% \ForEachQuestion {% \ExSheetsHeading {block} % Überschrifts-Stil {Aufgabe} % Name der Aufgabe {\QuestionNumber{##1} (Seite~\pageref{qu:##1})}% Nummer der Aufgabe {0} % Punkte der Aufgabe {0} % Bonuspunkte der Aufgabe {##1}% % ID der Aufgabe \GetQuestionProperty{question-body}{##1}% \par \medskip }% } \tl_set:Nn \l__exsheets_questions_pre_hook_tl { \lorek_save_question_and_print:w } \cs_new_protected:Npn \lorek_list_of_questions: { \ForEachQuestion { \__exsheets_use_heading:nnnnnn {block} {Aufgabe} {\QuestionNumber {##1}} {0} {0} {##1} \GetQuestionProperty {question-body} {##1} \par \medskip } } \NewDocumentCommand \listofquestions {} { \lorek_list_of_questions: } \ExplSyntaxOff \usepackage{multicol} \begin{document} \section{Erstes Kapitel} \begin{question} Eine erste Aufgabe \end{question} \begin{question} Eine zweite Aufgabe \end{question} \subsection{Erstes Unterkapitel} \begin{question} Eine Aufgabe in einem Unterkapitel \end{question} \begin{question} Noch eine Aufgabe in einem Unterkapitel \end{question} \subsubsection{Tiefer geschachteltes Unterkapitel} \begin{question} Noch eine Aufgabe \end{question} \subsubsection{Weiter geschachtelt} \begin{question} Eine weitere Aufgabe \end{question} \subsection{Zweites Unterkapitel} \begin{question} Und eine weitere Aufgabe \end{question} \clearpage \section{Zweites Kapitel} \begin{question} Eine Aufgabe in einem anderen Kapitel \end{question} \clearpage \begin{multicols}{2}[\section{Aufgabenübersicht}] \listofquestions \end{multicols} \end{document} ---------- 1. Den ich aber genauso gut öffentlich machen könnte, da er sich nicht mehr ändern wird. ![alt text][1] ![alt text][2] [1]: http://texwelt.de/wissen/upfiles/exsheets1_1.png http://texwelt.de/wissen/upfiles/exsheets1_2.png [2]: http://texwelt.de/wissen/upfiles/exsheets2.pnghttp://texwelt.de/wissen/upfiles/exsheets2_1.png
Klicke auf Einblenden/Ausblenden von Überarbeitungen 3

26 Jun '14, 12:04

cgnieder's gravatar image

cgnieder
22.1k253463

Klicke auf Einblenden/Ausblenden von Überarbeitungen 2

26 Jun '14, 11:10

cgnieder's gravatar image

cgnieder
22.1k253463

Klicke auf Einblenden/Ausblenden von Überarbeitungen 1

26 Jun '14, 11:08

cgnieder's gravatar image

cgnieder
22.1k253463