¿Cómo seguir aumentando los contadores de contenido que está (opcionalmente) oculto?

¿Cómo seguir aumentando los contadores de contenido que está (opcionalmente) oculto?

Tengo un marco para crear ejercicios, donde el contenido de la solución a cada subproblema se introduce en una \solutionmacro, que solo muestra su contenido si un booleano global se establece en verdadero.

Lo que me interesa es tener números únicos de ecuaciones/figuras/tablas/listados tanto para la versión con como sin la solución. En particular, debo tener en cuenta si los contadores aumentan en la solución. El beneficio previsto de esto es que los números de ecuaciones (y otras cosas) a las que los estudiantes podrían hacer referencia en sus soluciones no cambian su número una vez que la solución se publica más adelante.

Mi primer intento de hacer esto fue intentar componer todo en un cuadro que no esté impreso (por ejemplo, por \sboxo por el lrboxentorno), con la esperanza de que esto realmente aumentara los contadores, pero ya tengo problemas con equationlos entornos.

A continuación se muestra un MWE, donde la fórmula de Euler debe tener un número de ecuación (3)para ambas configuraciones del interruptor with_solution. Para que funcione la versión sin solución, el (contenido del) tercer argumento de \iftogglein \solutiondebe estar comentado.

Editar:Una solución para sortear el problema sería subordinar todos los contadores relevantes al subproblema, porque entonces las ocurrencias en la formulación son las primeras y, por lo tanto, necesariamente únicas (ya que la formulación aparece en ambas versiones, con y sin la solución). Sin embargo, esta no es una solución interesante para mí, porque en realidad (frente al MWE reducido), mis ecuaciones ya se parecen (5.3.2)a la ecuación. 2 del problema. 3 del ejercicio 5, mientras que el subproblema parece "5.3a)", "5.3b)", etc. (haciendo una notación consistente, es decir (5.3a.2), poco atractiva para mí). Subordinar los contadores a problemno ayuda, porque entre las diferentes formulaciones para cada subproblema, las soluciones pueden incrementar diferentes contadores que no se restablecen llamando a \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}

Respuesta1

Otra manera de ir

\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}}

Observe que comandos como \addtocontentsse ejecutan durante la rutina de salida. Por lo tanto, en mi respuesta \listoffigurecontiene todas las figuras, sin importar si se muestran o no. (De hecho se muestran...) Si bien la respuesta de egreg produce\listofshownfigure.

Para espaciar

Lidiar con espacios negativos no es divertido. Me gustaría dejarlo de lado. Los experimentos muestran que \par\marginpar{}\parse comporta como \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}}

información relacionada