Hi Sanjoy, 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…). Best regards: OK %%%% 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
On 1 Feb 2019, at 04:10, Sanjoy Mahajan
wrote: 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-context webpage : http://www.pragma-ade.nl / http://context.aanhet.net archive : https://bitbucket.org/phg/context-mirror/commits/ wiki : http://contextgarden.net ___________________________________________________________________________________