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

21 Feb '21, 09:28

cgnieder's gravatar image

cgnieder
22.1k253463

### Update Februar 2021 ### Meine ursprüngliche Antwort hat mit einem aktuellen `xsim` eigentlich keine Gültigkeit mehr. Hauptsächlich gilt sie nicht mehr, weil „goal“-Eigenschaften inzwischen grundsätzlich berechnet werden, um auch Punkte, die mit `\addpoints` vergeben werden korrekt zur Summe aufzuaddieren. Mit einem kleinen Umweg kann man die Eingabe bei `points=...` allerdings wieder erhalten: indem man eine zweite Eigenschaft definiert, die keine „goal“-Eigenschaft ist, und die dann ein Alias der `points` wird: \DeclareExerciseProperty{subpoints} \DeclareExercisePropertyAlias{subpoints}{points} Dieser Ansatz ist allerdings nicht mit oben erwähnten `\addpoints` kombinierbar. \documentclass{scrartcl} \usepackage[ngerman]{babel} \usepackage{xsim} \DeclareExerciseProperty{subpoints} \DeclareExercisePropertyAlias{subpoints}{points} \DeclareExerciseEnvironmentTemplate{custom}{% \subsection*{\XSIMmixedcase{\GetExerciseName}~\GetExerciseProperty{counter}% \GetExercisePropertyT{points}{% \quad \textnormal{% \XSIMifeqF{\GetExerciseProperty{subpoints}}{\PropertyValue} {$\GetExerciseProperty{subpoints} ={}$}% $\printgoal{\PropertyValue}$% }% }% }% }{\par} \xsimsetup{exercise/template=custom} \begin{document} \begin{exercise}[points=2+2+2] Diese Aufgabe soll drei Unteraufgaben haben, welche jeweils 2 Punkte bringen. \end{exercise} \begin{exercise}[points=4] Diese Aufgabe bringt nur 4 Punkte. \end{exercise} \end{document} [![alt text][1]][1] ### ursprüngliche Antwort ### Das machst Du quasi absichtlich, indem Du \GetExercisePropertyT{points}{ % (\printgoal{\PropertyValue}% \IfExerciseGoalSingularTF{points} { \XSIMtranslate{point}} { \XSIMtranslate{points}}% )}% verwendest. `\printgoal` verwendet intern nämlich `\ExerciseGoalValuePrint` und das berechnet den Wert. Wenn Du statt dessen einfach `\printgoal` weglässt, wird die Eingabe einfach so verwendet: \GetExercisePropertyT{points}{ % ($\PropertyValue$% \IfExerciseGoalSingularTF{points} {\,\XSIMtranslate{point}} {\,\XSIMtranslate{points}}% )}% Mit $\PropertyValue = \text{\points{\PropertyValue}}$ bekommst Du auch die Addition (`\text` benötigt `amsmath` oder `amstext`). ---------- Übrigens, Deine ursprüngliche Variante bekommst Du auch, indem Du einfach `\points{\PropertyValue}` verwendest. Die Definitionen von `\printgoal` und `\points` lauten nämlich: \NewDocumentCommand \printgoal {m} {\ExerciseGoalValuePrint{#1}{}{}} \NewDocumentCommand \points {m} {% \ExerciseGoalValuePrint{#1}{\,\XSIMtranslate{point}}{\,\XSIMtranslate{points}}% } Wenn nur gelegentlich Punkte durch `+` getrennt eingegeben werden, dann kann man auch darauf testen. Das richtige Werkzeug ist schnell definiert: \ExplSyntaxOn \NewDocumentCommand \XSIMifinstrTF {mmmm} { \tl_if_in:onTF {#1} {#2} {#3} {#4} } \ExplSyntaxOff Dann kann man das so einsetzen: \GetExercisePropertyT{points} {% \XSIMifinstrTF{\PropertyValue}{+} {$\PropertyValue = {}$}{}% \points{\PropertyValue}% }%}% [1]: https://texwelt.de/upfiles/test_511.png
Klicke auf Einblenden/Ausblenden von Überarbeitungen 4

17 Okt '17, 23:43

cgnieder's gravatar image

cgnieder
22.1k253463

Das machst Du quasi absichtlich, indem Du \GetExercisePropertyT{points}{ % (\printgoal{\PropertyValue}% \IfExerciseGoalSingularTF{points} { \XSIMtranslate{point}} { \XSIMtranslate{points}}% )}% verwendest. `\printgoal` verwendet intern nämlich `\ExerciseGoalValuePrint` und das berechnet den Wert. Wenn Du statt dessen einfach `\printgoal` weglässt, wird die Eingabe einfach so verwendet: \GetExercisePropertyT{points}{ % ($\PropertyValue$% \IfExerciseGoalSingularTF{points} {\,\XSIMtranslate{point}} {\,\XSIMtranslate{points}}% )}% Mit $\PropertyValue = \text{\points{\PropertyValue}}$ bekommst Du auch die Addition (`\text` benötigt `amsmath` oder `amstext`). ---------- Übrigens, Deine ursprüngliche Variante bekommst Du auch, indem Du einfach `\points{\PropertyValue}` verwendest. Die Definitionen von `\printgoal` und `\points` lauten nämlich: \NewDocumentCommand \printgoal {m} {\ExerciseGoalValuePrint{#1}{}{}} \NewDocumentCommand \points {m} {% \ExerciseGoalValuePrint{#1}{\,\XSIMtranslate{point}}{\,\XSIMtranslate{points}}% }} Wenn nur gelegentlich Punkte durch `+` getrennt eingegeben werden, dann kann man auch darauf testen. Das richtige Werkzeug ist schnell definiert: \ExplSyntaxOn \NewDocumentCommand \XSIMifinstrTF {mmmm} { \tl_if_in:onTF {#1} {#2} {#3} {#4} } \ExplSyntaxOff Dann kann man das so einsetzen: \GetExercisePropertyT{points} {% \XSIMifinstrTF{\PropertyValue}{+} {$\PropertyValue = {}$}{}% \points{\PropertyValue}% }%
Klicke auf Einblenden/Ausblenden von Überarbeitungen 3

17 Okt '17, 18:27

cgnieder's gravatar image

cgnieder
22.1k253463

Klicke auf Einblenden/Ausblenden von Überarbeitungen 2

17 Okt '17, 18:14

cgnieder's gravatar image

cgnieder
22.1k253463

Klicke auf Einblenden/Ausblenden von Überarbeitungen 1

17 Okt '17, 18:09

cgnieder's gravatar image

cgnieder
22.1k253463