
answers
이 패키지를 사용하여 연습문제와 답변(문서의 다른 부분에 인쇄됨)을 만들고 싶습니다 . 연습에서는 여백 메모( 를 통해 marginnote
)와 그 반대의 솔루션을 참조해야 합니다. 아래 MWE는 이미 꽤 잘 작동하고 있지만 자체 솔루션 환경을 정의하는 방법을 알 수 없었습니다('FAILS' 참조). '운동' 대신 '솔루션'이라는 라벨만 붙인다면 운동 환경과 같아야 합니다.
\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}
최종 목표는 라벨과 여백 메모를 수동으로 설정할 필요가 없도록 하는 것입니다. 한 가지 아이디어는 연습 및 솔루션 환경을 수동으로 정의하고 각 환경에 동일한 '기본 레이블'을 인수로 전달하는 것입니다. 그런 다음 이 두 환경은 연습용 레이블과 솔루션용 레이블을 생성하고 서로를 참조합니다. 나는 다른 게시물에서 그것을 시도했습니다 (참조 페이지 번호 하이퍼링크(해결책 연습: 실패, 연습 해결 방법: 확인)) 그러나 아직까지는 성공하지 못했습니다.
업데이트
내가 아이디어를 얻은 정도는 다음과 같습니다.질문 자체에 하이퍼링크로 연결된 다른 답변 추가
\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}
답변1
내에서업데이트코드를 개선하려고 노력했습니다. 나는 세 가지 인수가 필요하다는 것을 깨달았고 그것들과 함께 작동할 수 Soln
있도록 모든 공식/필수 인수를 만들었습니다 answers
(이 부분은 원래 실패했습니다). 특별히 사용할 필요는 없었습니다 hyperlink
(링크가 올바르게 나타남). 이 MWE를 원본 문서로 변환하고 모든 것이 여전히 작동하는지 확인하겠습니다. 그렇지 않은 경우 다시 보고하겠습니다. 코드 개선 가능성에 대해 자유롭게 의견을 남겨주세요.
\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}