%20ausgeblendete%20Inhalte%20weiter%20erh%C3%B6hen%3F.png)
Ich habe ein Framework zum Erstellen von Übungen, bei dem der Inhalt der Lösung für jedes Teilproblem in ein \solution
-Makro eingespeist wird, das seinen Inhalt nur dann anzeigt, wenn ein globaler Boolescher Wert auf „True“ gesetzt ist.
Was mich interessiert, sind eindeutige Gleichungs-/Abbildungs-/Tabellen-/Auflistungsnummern sowohl für die Version mit als auch ohne Lösung. Insbesondere muss ich berücksichtigen, ob die Zähler in der Lösung erhöht werden. Der beabsichtigte Vorteil davon ist, dass Gleichungsnummern (und andere Dinge), auf die sich die Schüler in ihren Lösungen beziehen könnten, ihre Nummer nicht ändern, wenn die Lösung später veröffentlicht wird.
Mein erster Versuch hierzu bestand darin, alles in ein Feld zu setzen, das nicht gedruckt wird (z. B. von \sbox
oder durch die lrbox
-Umgebung) – in der Hoffnung, dass dies die Zähler tatsächlich erhöhen würde –, aber ich habe bereits Probleme mit equation
Umgebungen.
(3)
Unten sehen Sie ein MWE, bei dem die Euler-Formel für beide Einstellungen des Umschalters die Gleichungsnummer haben sollte with_solution
. Damit die Version ohne Lösung funktioniert, muss das dritte Argument (der Inhalt) von \iftoggle
in \solution
auskommentiert werden.
Bearbeiten:Eine Lösung, um das Problem zu umgehen, wäre, alle relevanten Zähler einem Teilproblem unterzuordnen, weil dann die Vorkommen in der Formulierung die ersten und daher notwendigerweise eindeutig sind (da die Formulierung in beiden Versionen vorkommt - mit und ohne Lösung). Das ist für mich jedoch keine interessante Lösung, weil in Wirklichkeit (im Vergleich zum abgespeckten MWE) meine Gleichungen (5.3.2)
für Gl. 2 von Prob. 3 von Übung 5 bereits so aussehen, während das Teilproblem wie "5.3a)", "5.3b)" usw. aussieht (was eine konsistente Notation - also (5.3a.2)
- für mich unattraktiv macht). Die Unterordnung der Zähler unter problem
hilft nicht, weil zwischen den verschiedenen Formulierungen für jedes Teilproblem die Lösungen unterschiedliche Zähler erhöhen können, die nicht durch den Aufruf von zurückgesetzt werden \subproblem
.
\documentclass{article}
\usepackage{etoolbox}
\usepackage{amsmath}
\usepackage{xparse}
\newtoggle{with_solution}
\newsavebox\tempbox
\NewDocumentCommand{\solution}{+m}{
\iftoggle{with_solution}{
\par\medskip\noindent\textbf{Solution:} #1
}
{
% \sbox\tempbox{#1}
\begin{lrbox}\tempbox
#1
\end{lrbox}
}
}
% \problem and \subproblem cut to bare bones for simplicity
\newcommand{\problem}[1]{\section{#1}}
\newcounter{subproblem}
\newcommand{\subproblem}{\par\medskip\noindent\stepcounter{subproblem}{\bfseries\alph{subproblem})}\quad}
\toggletrue{with_solution} % Set to true to include solution
%\togglefalse{with_solution} % Set to false to exclude solution
\begin{document}
\problem{A Problem}
\subproblem Problem Formulation
\solution{Solution}
\subproblem Problem Formulation with \eqref{eq:prb}
\begin{equation}\label{eq:prb}
a=b
\end{equation}
\solution{Solution with \eqref{eq:sol}
\begin{equation}\label{eq:sol}
x=y
\end{equation}
}
\subproblem Problem Formulation with \eqref{eq:prb2}, having the same number both with or without typesetting the solutions.
\begin{equation}\label{eq:prb2}
\mathrm{e}^{2\pi\mathrm{i}}=1
\end{equation}
\solution{The \texttt{$\backslash$solution}-macro should be able to handle \texttt{$\backslash$par}'s, figures, tables, listings (and also increase their counters accordingly, even when not typeset)...}
\end{document}
Antwort1
Ein anderer Weg
\NewDocumentCommand{\solution}{+m}{
\iftoggle{with_solution}
{\par\medskip\noindent\textbf{Solution:} #1\par}
%{\setbox\tempbox=\vbox{#1}}} % this line comes from egreg's comment
% The following line is my alternative
{\par\vbox to0cm{\vspace*{\paperheight}\medskip\noindent\textbf{Solution:} #1\vspace*{-\paperheight}}\par}}
Beachten Sie, dass Befehle wie \addtocontents
während der Ausgaberoutine ausgeführt werden. Daher \listoffigure
enthält in meiner Antwort alle Zahlen, unabhängig davon, ob sie angezeigt werden oder nicht. (Tatsächlich werden sie angezeigt...) Während egregs Antwort erzeugt\listofshownfigure
.
Für den Abstand
Der Umgang mit negativen Räumen macht keinen Spaß. Ich möchte es beiseite legen. Experimente zeigen, dass \par\marginpar{}\par
sich wie verhält \par
.
\NewDocumentCommand{\solution}{+m}{
\iftoggle{with_solution}
{\par\medskip\noindent\textbf{Solution:} #1\par}
%{\setbox\tempbox=\vbox{#1}}} % this line comes from egreg's comment
% The following line is my alternative
{\par\marginpar{\moveright\paperwidth\vbox to0cm{\medskip\noindent\textbf{Solution:} #1}}\par}}