¿Cómo utilizar el paquete 'respuestas' con el propio entorno de solución?

¿Cómo utilizar el paquete 'respuestas' con el propio entorno de solución?

Me gustaría utilizar el answerspaquete para crear ejercicios y respuestas (impresos en diferentes partes del documento). Los ejercicios deben hacer referencia a las soluciones con una nota al margen (vía marginnote) y al revés. El MWE a continuación ya funciona bastante bien, pero no pude entender cómo definir mi propio entorno de soluciones (consulte 'FALLOS'). Debería ser como el entorno de ejercicio, sólo que con la etiqueta "Solución" en lugar de "Ejercicio".

\documentclass{scrreprt}
\usepackage[american]{babel}
\usepackage{mathtools}
\usepackage{amsthm}
\usepackage{thmtools}
\usepackage{etoolbox}
\usepackage{marginnote}
\usepackage{answers}
\usepackage{hyperref}

\declaretheoremstyle[%
  spaceabove=0.5em,
  spacebelow=0.5em,
  headfont=\sffamily\bfseries,
  notefont=\sffamily\bfseries,
  notebraces={(}{)},
  headpunct={},
  bodyfont=\normalfont%
]{mythmstyle}
\declaretheorem[style=mythmstyle, numberwithin=chapter]{exercise}
% \declaretheorem[style=mythmstyle, sibling=exercise]{solution}% => FAILS

\Newassociation{solution}{sol}{solutions}

\begin{document}
\Opensolutionfile{solutions}

\section{Section 1}
\begin{Filesave}{solutions}
  \clearpage
  \section{Solutions Section 1}
\end{Filesave}

\begin{exercise}[Header 1]\label{exlabel1}\marginnote{Sol.\ p.~\pageref{sollabel1}}\par\noindent
  First exercise
  \begin{solution}[Header 1]\label{sollabel1}\marginnote{Ex.\ p.~\pageref{exlabel1}}\par\noindent
    First solution.
  \end{solution}
\end{exercise}

\clearpage
\section{Section 2}
\begin{Filesave}{solutions}
  \clearpage
  \section{Solutions Section 2}
\end{Filesave}

\begin{exercise}[Header 2]\label{exlabel2}\marginnote{Sol.\ p.~\pageref{sollabel2}}\par\noindent
  \begin{enumerate}
  \item Part 1
  \item Part 2
  \end{enumerate}
  \begin{solution}[Header 2]\label{sollabel2}\marginnote{Ex.\ p.~\pageref{exlabel2}}
    \begin{enumerate}
    \item Solution Part 1
    \item Solution Part 2
    \end{enumerate}
  \end{solution}
\end{exercise}

\Closesolutionfile{solutions}

\clearpage

\input{solutions}

\end{document}

El objetivo final sería no tener que configurar las etiquetas y notas al margen manualmente. Una idea es definir manualmente los entornos de ejercicio y solución y pasar la misma 'etiqueta base' a cada uno de ellos como argumento. Estos dos entornos crean entonces una etiqueta para el ejercicio y otra para su solución y se refieren entre sí. Lo intenté en una publicación diferente (ver Hipervínculos de números de página (ejercicios para soluciones: fallan; soluciones a ejercicios: ok)) pero aún no tuvo mucho éxito.

Actualizar

Hasta aquí he llegado con las ideasAgregar otra respuesta con un hipervínculo a la pregunta misma

\documentclass{scrreprt}
\usepackage[american]{babel}
\usepackage{mathtools}
\usepackage{amsthm}
\usepackage{thmtools}
\usepackage{etoolbox}
\usepackage{marginnote}
\usepackage{answers}
\usepackage{hyperref}

\newcounter{counter}
\numberwithin{counter}{section}
\makeatletter
\newenvironment{exercise}[2][]{\refstepcounter{counter}\par% #1 = header; #2 = label
  \normalfont\topsep6\p@\@plus6\p@\relax
  \trivlist
  \labelsep 0pt
  \def\mysollabel{#2}
  \preto\mysollabel{sol:}
  \def\myexlabel{#2}
  \preto\myexlabel{ex:}
\item[\hskip\labelsep\sffamily\bfseries Exercise~\thecounter\ #1]\label{\myexlabel}% this '\label' correctly refers to the exercise
  \marginnote{Solution p.~\pageref{\mysollabel}}%
  \ignorespaces%
}{%
  \endtrivlist\@endpefalse
}
\makeatother

\Opensolutionfile{solutions}
\Newassociation{solution}{Soln}{solutions}

\begin{document}
\section{Section 1}
\begin{Filesave}{solutions}
  \clearpage
  \section{Solutions Section 1}
\end{Filesave}

\begin{exercise}[Header 1]{ex:1:label}
  First exercise
  \begin{solution}[Header 1]{ex:1:label}
    First solution.
  \end{solution}
\end{exercise}

\clearpage
\section{Section 2}
\begin{Filesave}{solutions}
  \clearpage
  \section{Solutions Section 2}
\end{Filesave}

\begin{exercise}[Header 2]{ex:2:label}
  \begin{enumerate}
  \item Part 1
  \item Part 2
  \end{enumerate}
  \begin{solution}[Header 2]{ex:2:label}
    \begin{enumerate}
    \item Solution Part 1
    \item Solution Part 2
    \end{enumerate}
  \end{solution}
\end{exercise}

\Closesolutionfile{solutions}

% Renew the solution environment so that it hyperlinks back to the exercise
\makeatletter
\renewenvironment{Soln}[2][]{\par% #1 = header; #2 = label
  \normalfont\topsep6\p@\@plus6\p@\relax
  \trivlist
  \labelsep 0pt
  \def\myexlabel{#2}
  \preto\myexlabel{ex:}
  \def\mysollabel{#2}
  \preto\mysollabel{sol:}
\item[\hskip\labelsep\sffamily\bfseries Solution~\ref{\myexlabel}\ #1]\hypertarget{\mysollabel}{}%
  \marginnote{\hyperlink{\myexlabel}{Exercise p.~\pageref{\myexlabel}}}%
  \ignorespaces%
}%
{%
  \popQED\endtrivlist\@endpefalse
}%
\makeatother

\clearpage
\IfFileExists{solutions.tex}{\input{solutions.tex}}{}

\end{document}

Respuesta1

De miActualizarIntenté mejorar el código. Me di cuenta de que Solnes necesario tener tres argumentos y los hice todos formales/requeridos para answerspoder trabajar con ellos (esta parte falló originalmente). No necesitaba usarlo hyperlinkespecíficamente (los enlaces aparecieron correctamente). Convertiré este MWE al documento original y veré si todo sigue funcionando (si no, informaré). No dudes en comentar posibles mejoras del código.

\documentclass{scrreprt}
\usepackage[american]{babel}
\usepackage{mathtools}
\usepackage{amsthm}
\usepackage{thmtools}
\usepackage{etoolbox}
\usepackage{marginnote}
\usepackage{answers}
\usepackage{hyperref}

\newcounter{counter}
\numberwithin{counter}{section}

\newenvironment{exercise}[2]{\refstepcounter{counter}\par% #1 = header; #2 = label
  \trivlist
  \labelsep 0pt
  \def\mysollabel{#2}
  \preto\mysollabel{sol:}
  \def\myexlabel{#2}
  \preto\myexlabel{ex:}
\item[\hskip\labelsep\sffamily\bfseries Exercise~\thecounter~(#1)]\label{\myexlabel}% this '\label' refers to the exercise
  \marginnote{Solution~p.~\pageref{\mysollabel}}%
  \ignorespaces%
}{%
  \endtrivlist
}

\Opensolutionfile{solutions}
\Newassociation{solution}{Soln}{solutions}

\begin{document}
\section{Exercises Section 1}
\begin{Filesave}{solutions}
  \clearpage
  \section{Solutions Section 1}
\end{Filesave}

\newcommand*{\headerOne}{Header 1}
\begin{exercise}{\headerOne}{ex:1:label}\\
  First exercise
  \begin{solution}{\headerOne}{ex:1:label}\\
    First solution.
  \end{solution}
\end{exercise}

\clearpage
\section{Exercises Section 2}
\begin{Filesave}{solutions}
  \clearpage
  \section{Solutions Section 2}
\end{Filesave}

\newcommand*{\headerTwo}{Header 2}
\begin{exercise}{\headerTwo}{ex:2:label}
  \begin{enumerate}
  \item Part 1
  \item Part 2
  \end{enumerate}
  \begin{solution}{\headerTwo}{ex:2:label}
    \begin{enumerate}
    \item Solution Part 1
    \item Solution Part 2
    \end{enumerate}
  \end{solution}
\end{exercise}

\Closesolutionfile{solutions}

\renewenvironment{Soln}[3]{% #1 = label (from 'answers'; #2 = header; #3 = label
  \pushQED{\qed}
  \trivlist
  \labelsep 0pt
  \def\myexlabel{#3}
  \preto\myexlabel{ex:}
  \def\mysollabel{#3}
  \preto\mysollabel{sol:}
\item[\hskip\labelsep\sffamily\bfseries Solution~#1~(#2)]\label{\mysollabel}%
    \marginnote{Exercise~p.~\pageref{\myexlabel}}%
    \ignorespaces%
}{%
  \popQED\endtrivlist
}

\clearpage
\IfFileExists{solutions.tex}{\input{solutions.tex}}{}

\end{document}

información relacionada