Hallo TeXWelt-Gemeinde,

ich würde gerne bei einer Klassenarbeit mit exsheets die QuestionClass nach dem subtitle einer Frage rechtsbündig ausgeben.

Das reine Ausgeben ist kein Problem, nur das rechtsbündig bereitet mir noch Probleme.

Open in Online-Editor
\documentclass[paper=a4]{scrartcl}
\usepackage[ngerman]{babel}

\usepackage{exsheets}

\DeclareInstance{exsheets-heading}{mystyle}{default}{
    join = {
        title[r,B]number[l,B](.333em,0pt) ;
        title[r,B]subtitle[l,B](1em,0pt) ;
    } ,
    attach = {
        main[l,vc]title[l,vc](0pt,0pt) ;
        main[r,vc]points[l,vc](\marginparsep,0pt) ;
    } ,
    subtitle-post-code = {
        \PrintQuestionClassT{AFB}{Schwierigkeit: #1 }
    } ,
}

\SetupExSheets{%
    headings=mystyle
}

\DeclareQuestionClass{AFB}{}

\begin{document}

\begin{question}[type=exam,subtitle=Eine Frage, AFB=2]{3}
Das ist eine sehr tolle Frage.
\end{question}

\end{document}

Die Notiz im Beispiel "Schwierigkeit: 2)" soll nun rechtsbündig mit etwas Abstand vor den Punkten stehen. Leider zeigt \raggedleft keine Wirkung.

Bin für Ideen dankbar.

Grüße!

gefragt 05 Nov '15, 19:40

maphy-psd's gravatar image

maphy-psd
37141017
Akzeptiert-Rate: 25%


Hintergrund-Info: die Überschriften von exsheets werden aus mehreren Boxen gebastelt: main, number, title, subtitle und points. Auch wenn sie in expl3 »coffins« genannt werden, sind sie letztlich nichts anderes als vertikale oder horizontale Boxen. Abgesehen von der main-Box haben alle Boxen nur die Breite ihres Inhalts.

subtitle-post-code ist aus zwei Gründen keine gute Idee für die Platzierung der Zusatzinfo:

  1. die subtitle-Box wird nur ausgegeben, wenn es auch einen Untertitel gibt. Gleiches gilt für den »Post-Code«.
  2. die Breite der subtitle-Box hängt vom Inhalt der subtitle-Box ab. Das macht eine Positionierung, die unabhängig von dieser Breite geschehen soll, natürlich unnötig kompliziert.

Lösung für Versionen >=0.20

Ab v0.20 (2015/11/18) ist es möglich, einen eigenen statischen Container für Inhalte zu definieren, die einer Überschrift hinzugefügt werden sollen:

Open in Online-Editor
\DeclareQuestionClass{AFB}{AFBs}
\DeclareExSheetsHeadingContainer{AFB}
  {\PrintQuestionClassT{AFB}{Schwierigkeit: #1}}

Dieser kann dann beim Definieren einer neuen headings-Instanz verwendet werden:

Open in Online-Editor
\DeclareInstance{exsheets-heading}{mystyle}{default}{
  join = {
    title[r,B]number[l,B](.333em,0pt) ;
    title[r,B]subtitle[l,B](1em,0pt)
  } ,
  attach = {
    main[l,vc]title[l,vc](0pt,0pt) ;
    main[r,vc]points[l,vc](\marginparsep,0pt) ;
    main[r,vc]AFB[r,vc](0pt,0pt)
  }
}

Komplette Lösung:

Open in Online-Editor
\documentclass[paper=a4]{scrartcl}
\usepackage[ngerman]{babel}

\usepackage{exsheets}[2015/11/18]% v0.20

\DeclareQuestionClass{AFB}{AFBs}
\DeclareExSheetsHeadingContainer{AFB}
  {\PrintQuestionClassT{AFB}{Schwierigkeit: #1}}

\DeclareInstance{exsheets-heading}{mystyle}{default}{
  join = {
    title[r,B]number[l,B](.333em,0pt) ;
    title[r,B]subtitle[l,B](1em,0pt)
  } ,
  attach = {
    main[l,vc]title[l,vc](0pt,0pt) ;
    main[r,vc]points[l,vc](\marginparsep,0pt) ;
    main[r,vc]AFB[r,vc](0pt,0pt)
  }
}

\SetupExSheets{
  headings = mystyle ,
  question/type = exam
}

\begin{document}

\begin{question}[subtitle=Eine Frage, AFB=1]{3}
  Das ist eine sehr tolle Frage.
\end{question}

\begin{question}[AFB=2]{3}
  Das ist eine sehr tolle Frage.
\end{question}

\begin{question}[AFB=3]
  Das ist eine sehr tolle Frage.
\end{question}

\begin{question}[subtitle=Eine andere Frage, AFB=4]{3}
  Das ist eine sehr tolle Frage.
\end{question}

\begin{question}[subtitle=Eine Frage, AFB=2]
  Das ist eine sehr tolle Frage.
\end{question}

\end{document}

Lösung für Versionen <0.20

Da die Ausgabe relativ zu den Punkten erfolgen soll, wäre eigentlich die erste Idee, den points-pre-code zu verwenden. Allerdings hätte auch das das Problem, nicht ausgegeben zu werden, wenn keine Punkte angegeben werden. Am besten also hängt man die Ausgabe an etwas, was auf jeden Fall ausgegeben wird. Ich würde den title-pre-code verwenden. Dort kann man mit \rlap{...} den Inhalt einfach rechts überlappen lassen, in einer Box, deren Breite der Zeilenbreite entspricht und rechts ausgerichtet ist \makebox[\linewidth][r]{...}.

alt text

Open in Online-Editor
\documentclass[paper=a4]{scrartcl}
\usepackage[ngerman]{babel}

\usepackage{exsheets}

\DeclareInstance{exsheets-heading}{mystyle}{default}{
  join = {
    title[r,B]number[l,B](.333em,0pt) ;
    title[r,B]subtitle[l,B](1em,0pt) ;
  } ,
  attach = {
    main[l,vc]title[l,vc](0pt,0pt) ;
    main[r,vc]points[l,vc](\marginparsep,0pt) ;
  } ,
  title-pre-code = {%
    \PrintQuestionClassT{AFB}{\rlap{\makebox[\linewidth][r]{Schwierigkeit: #1}}}%
  }
}

\SetupExSheets{
  headings = mystyle ,
  question/type = exam
}

\DeclareQuestionClass{AFB}{}

\begin{document}

\begin{question}[subtitle=Eine Frage, AFB=2]{3}
  Das ist eine sehr tolle Frage.
\end{question}

\begin{question}[AFB=2]{3}
  Das ist eine sehr tolle Frage.
\end{question}

\begin{question}[AFB=2]
  Das ist eine sehr tolle Frage.
\end{question}

\begin{question}[subtitle=Eine andere Frage, AFB=2]{3}
  Das ist eine sehr tolle Frage.
\end{question}

\begin{question}[subtitle=Eine Frage, AFB=2]
  Das ist eine sehr tolle Frage.
\end{question}

\end{document}
Permanenter link

beantwortet 06 Nov '15, 10:33

cgnieder's gravatar image

cgnieder
22.1k243463
Akzeptiert-Rate: 60%

bearbeitet 18 Nov '15, 11:54

Danke für Antwort. Habe selbst grad mit points-pre-code herumprobiert. Aber die Antwort ist natürlich robuster.

Wäre es vielleicht möglich, dass DeclareInstance ebenfalls »coffins« erstellt, sodass sie mithilfe von join oder attach verwendet werden können? Wobei das eventuell die wenigsten benötigen.

(06 Nov '15, 10:38) maphy-psd

Das geht nicht ohne weiteres, weil exsheets dafür keine Schnittstelle bereitstellt…

(06 Nov '15, 10:50) cgnieder

@maphy-psd in wenigen Tagen wird v0.20 in TeX Live enthalten sein, mit der Du eine neue Möglichkeit hast, siehe überarbeitete Antwort.

(18 Nov '15, 11:55) cgnieder

@Clemens danke für die Info. Das macht das layouten einfacher.

(18 Nov '15, 12:56) maphy-psd
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×10
×1

gestellte Frage: 05 Nov '15, 19:40

Frage wurde gesehen: 6,996 Mal

zuletzt geändert: 18 Nov '15, 12:56