Two or three years ago Wolfgang helped me to solve an analogous question. Here is an example which works fine, and moreover one can navigate from a question to its hint (if there is one…) and then from the hint to its solution (if present…).
%%%% begin interactive-question-hint-answer.tex
%%%% Here, following Wolfgang Schuster's ideas,
%%%% we define some macros allowing to couple
%%%% Questions, Hints and Answers in an automatic way
%%%% Upon clicking on an interactive title for Question, Hint or Answer
%%%% one goes to the corresponding Hint, Answer or Question
\setupinteraction[state=start]
% We define two counters which follow the numbers
% appearing in Question and Answer
\newcounter\QuestionCounter
\newcounter\HintCounter
\newcounter\AnswerCounter
% We create two commands to be used in the
% enumeration environments
% Note that the check for trial typestting
% \doifnotmode{*trialtypesetting}
% is necessary in order to avoid unwanted incrementation
\define[1]\QuestionTextCommand
{\doifnotmode{*trialtypesetting}
{\doglobal\increment\QuestionCounter
\pagereference[question:\QuestionCounter]}%
\doifreferencefoundelse{hint:\QuestionCounter}
{\goto{#1}[hint:\QuestionCounter]}
{#1}}
\define[1]\HintTextCommand
{\doifnotmode{*trialtypesetting}
{\doglobal\increment\HintCounter
\pagereference[hint:\HintCounter]}%
\doifreferencefoundelse{answer:\QuestionCounter}
{\goto{#1}[answer:\QuestionCounter]}
{#1}}
\define[1]\AnswerTextCommand
{\doifnotmode{*trialtypesetting}
{\doglobal\increment\AnswerCounter
\pagereference[answer:\AnswerCounter]}%
\doifreferencefoundelse{question:\AnswerCounter}
{\goto{#1}[question:\AnswerCounter]}
{#1}}
% We define here two enumeration environments for
% Questions and Answers
\defineenumeration[question]
[text=Question,
headcommand=\QuestionTextCommand,
number=yes,
prefix=yes,
prefixsegments=chapter,
coupling=hint]
\defineenumeration[hint]
[text=Hint,
headcommand=\HintTextCommand,
number=yes,
prefix=yes,
prefixsegments=chapter,
coupling=answer]
\defineenumeration[answer]
[text=Answer,
headcommand=\AnswerTextCommand,
number=yes,
prefix=yes,
prefixsegments=chapter,
coupling=question]
% Each question is followed immediately by its answer.
% The answers are put in a block which will be used later
\defineblock[hint]
\hideblocks[hint]
\defineblock[answer]
\hideblocks[answer]
% We define a command used after a
% Question for which no Answer is provided
% Since the block commands
% \beginanswer ... \endanswer
% cannot be used directly in a macro definition
% we use a trick...
% In the buffer the two counters associated to Answer
% are incremented...
\startbuffer[noanswer]
\beginhint
\doglobal\increment\HintCounter
\incrementcounter[hint]
\endhint
\beginanswer
\doglobal\increment\AnswerCounter
\incrementcounter[answer]
\endanswer
\stopbuffer
% ...and then the above buffer is invoked
\define\noanswer
{\getbuffer[noanswer]}
% example of use:
\starttext
\startchapter[title=Questions]
\startquestion[q:1]
Prove that ${\rm e}\sim 2.73$ is irrational.
This is the first question, with its own reference, for later use.
\stopquestion
\beginhint
\starthint
Write ${\rm e}$ as a series.
\stophint
\endhint
\beginanswer
\startanswer
This is the answer to the first question (to \in{Question}[q:1]).
\stopanswer
\endanswer
\startquestion
This is the second question, without its own reference.
\stopquestion
\beginhint
\starthint
Do you really need a hint? :-)
\stophint
\endhint
\beginanswer
\startanswer[a:Test]
This is the answer to the second question.
(Note that this answer has a reference named \type{a:Test}).
\stopanswer
\endanswer
\startquestion[q:Obvious]
This is the third question, an easy one, without a given solution.
\stopquestion
% we increment here the counters for Answer
\noanswer
\startquestion[q:2]
This is the fourth question with its own reference.
\stopquestion
\beginhint
\starthint
Do you really need a hint? :-)
\stophint
\endhint
\beginanswer
\startanswer
This is the answer to the fourth question: use the result of \in{Question}[q:1].
\stopanswer
\endanswer
\startquestion
This is the fifth question, without its own reference.
({\it Hint:} look again at \in{Question}[q:Obvious]).
\stopquestion
\beginhint
\starthint
Do you really need a hint? :-)
\stophint
\endhint
\beginanswer
\startanswer
This is the answer to the fifth question. Read again \in{Answer}[a:Test].
\stopanswer
\endanswer
\stopchapter
% Here we say ownnumber=1, in order to match the prefix
% of numbers associated to Answer
\startchapter[ownnumber=1,title=Hints]
\useblocks[hint]
\stopchapter
\startchapter[ownnumber=1,title=Answers and solutions]
\useblocks[answer]
\stopchapter
\stoptext
%%%% end interactive-question-hint-answer.tex
Thank you, Matthias and Wolfgang, for the examples/solutions.
If I understand them right, there must be one solution for each exercise
(otherwise the solution numbering gets out of sync). Or do the
coupling= options in Matthias's example remove that restriction? In my
experiments with the examples, deleting the first solution
unsynchronized the exercise--solution numbering, no matter how I fiddled
with the coupling keys.
In the ideal pedagogical world, I'd write a solution for each exercise.
But reality might intervene, so I still wonder if the solutions can
automatically know and include the exercise number (perhaps by placing
\startanswer..\stopanswer inside \startexercise..\stopexercise and using
\getnumber[exercise]). If there is a clever way, that's great. But,
the nature of TeX as a macro language may preclude the \getnumber code
being evaluated just when one wants.
Regards,
-Sanjoy
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!
maillist :
ntg-context@ntg.nl /
http://www.ntg.nl/mailman/listinfo/ntg-contextwebpage :
http://www.pragma-ade.nl /
http://context.aanhet.netarchive :
https://bitbucket.org/phg/context-mirror/commits/wiki :
http://contextgarden.net___________________________________________________________________________________