[NTG-context] Clickable question/answer numbers

Otared Kavian otared at gmail.com
Sun Nov 6 11:43:08 CET 2016


Hi Wolfgang,

Thanks for the solution you sent yesterday.
Your solutions solves the problem I was fighting with, but when I try to apply it to my real document there is an issue when some questions don’t have answers. This prevents the synchronization of Questions and Answers if one doesn't issue the commands
 
	\beginanswer
	\incrementcounter[answer]
	\endanswer

right after a question without an answer. And when the above commands are issued, the last Question does not show the link to its corresponding Answer.

Below is your modified example where one can see the problem (please see the fifth Question in the source below).

Best regards: OK
%%%% begin example-ws.tex

\setupinteraction[state=start]

\newcounter\QuestionCounter
\newcounter\AnswerCounter

\define[1]\QuestionTextCommand
  {\doglobal\increment\QuestionCounter
   \pagereference[question:\QuestionCounter]%
   \doifreferencefoundelse{answer:\QuestionCounter}
     {\goto{#1}[answer:\QuestionCounter]}
     {#1}}

\define[1]\AnswerTextCommand
  {\doglobal\increment\AnswerCounter
   \pagereference[answer:\AnswerCounter]%
   \doifreferencefoundelse{question:\AnswerCounter}
     {\goto{#1}[question:\AnswerCounter]}
     {#1}}

\defineenumeration[question]
	[text=Question,
	headcommand=\QuestionTextCommand,
	number=yes,
	prefix=yes,
	prefixsegments=chapter,
	coupling=answer]

\defineenumeration[answer]
	[text=Answer,
	headcommand=\AnswerTextCommand,
	number=yes,
	prefix=yes,
	prefixsegments=chapter,
	coupling=question]

\defineblock[answer]

%% Why this command generates an erreor?
\define\noanswer{%
	\beginanswer
		\incrementcounter[answer]
	\endanswer}

\define\PrintCounterValues{Here \type{\QuestionCounter = }\QuestionCounter.\par
Here \type{\AnswerCounter = }\AnswerCounter.\par
Here \type{\rawcountervalue[question] = }\rawcountervalue[question].\par
Here \type{\rawcountervalue[answer] = }\rawcountervalue[answer].
}


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

\PrintCounterValues
\stopquestion
    
\beginanswer
\startanswer
This is the answer to the first question (to \in{Question}[q:1]).

\PrintCounterValues
\stopanswer
\endanswer

\startquestion 
This is the second question, without its own reference.
    
\PrintCounterValues
\stopquestion
    
\beginanswer
\startanswer[a:2]
This is the answer to the second question.

\PrintCounterValues
\stopanswer
\endanswer

\startquestion
This is the third question, an easy one, without a given solution.

\PrintCounterValues
\stopquestion

%\noanswer\ % this generates an error…
\beginanswer
%\increment\AnswerCounter
%\incrementcounter[AnswerCounter]
%\increment\QuestionCounter
%\incrementcounter[QuestionCounter]
\incrementcounter[answer]
%\incrementcounter[question]
\endanswer

\startquestion[q:2]
This is the fourth question with its own reference.

\PrintCounterValues
\stopquestion

\beginanswer
\startanswer
This is the answer to the fourth question: use the result of \in{question}[q:1].

\PrintCounterValues
\stopanswer
\endanswer
    
\startquestion 
This is the fifth question, without its own reference. (This Question is not linked to its Answer).

\PrintCounterValues
\stopquestion
    
\beginanswer
\startanswer
This is the answer to the fifth question. Read again \in{Answer}[a:2].

\PrintCounterValues
\stopanswer
\endanswer  
    
\page

\stopchapter

\startchapter[ownnumber=1,title=Answers and solutions]
\useblocks[answer]
\stopchapter

\stoptext
%%%% end example

> On 5 Nov 2016, at 19:14, Wolfgang Schuster <schuster.wolfgang at gmail.com> wrote:
> 
>> Otared Kavian <mailto:otared at gmail.com> 5. November 2016 um 18:34
>> Hi Wolfgang, Hi Mikael,
>> 
>> Thank you both for your great inputs!
>> 
>> I tried to modify the code each of you sent yesterday in order to « couple » automatically each question with its answer, using the keyword « coupling=… », but somehow I am unable to create automatic references by extracting the number of each question or that of each answer, for example by using \rawcountervalue,
>> or \currentconstructionnumber. Strangely the latter gives the name of the construction and not a number: is it on purpose?
> The \currentconstructionnumber command contains the name of the counter but getting the counter value won’t help because it comes too late.
>> The solution Wolfgang proposes today, using the new keyword referenceprefix, is almost perfect: however would it possible to create a version of
>> « currentconstructionreference » which creates a reference named for instance
>> answer:NumberOfCurentConstruction
> The referenceprefix key is only usefull when you set the reference by hand.
>> The reason for which I need such a construction is that in a document with hundreds or more exercise —> hint —> solution, it would be handy to avoid creating each time a manual reference, and then one would navigate from a Question to its Hint and then  back to the Question or go to its Answer.
> When you always all three elements (question, hint and answer) you can increment
> a counter at the begin of each element and create a page reference which contains
> the value of the counter.
> 
> Below is a modified version of my previous example for this method.
> 
> %%%% begin example
> \setupinteraction[state=start]
> 
> \define[1]\QuestionTextCommand
>   {\doglobal\increment\QuestionCounter
>    \pagereference[question:\QuestionCounter]%
>    \doifreferencefoundelse{answer:\QuestionCounter}
>      {\goto{#1}[answer:\QuestionCounter]}
>      {#1}}
> 
> \define[1]\AnswerTextCommand
>   {\doglobal\increment\AnswerCounter
>    \pagereference[answer:\AnswerCounter]%
>    \doifreferencefoundelse{question:\AnswerCounter}
>      {\goto{#1}[question:\AnswerCounter]}
>      {#1}}
> 
> \defineenumeration
>   [question]
>   [text=Question,
>    headcommand=\QuestionTextCommand]
> 
> \defineenumeration
>   [answer]
>   [text=Answer,
>    headcommand=\AnswerTextCommand]
> 
> \defineblock[answer]
> 
> \startbuffer
>     %
>     \startquestion
>     \input knuth
>     \stopquestion
>     %
>     \beginanswer
>         \startanswer
>         \input knuth
>         \stopanswer
>     \endanswer
>     %
> \stopbuffer
> 
> \starttext
> 
> \dorecurse{10}{\getbuffer}
> 
> \page
> 
> \useblocks[answer]
> 
> \stoptext
> %%%% end example
> 
> Wolfgang
> ___________________________________________________________________________________
> If your question is of interest to others as well, please add an entry to the Wiki!
> 
> maillist : ntg-context at 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
> ___________________________________________________________________________________

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.ntg.nl/pipermail/ntg-context/attachments/20161106/8e59da5b/attachment-0001.html>


More information about the ntg-context mailing list