On Mon, Jan 2, 2012 at 5:30 PM, luigi scarso <luigi.sca...@gmail.com> wrote:
> On Mon, Jan 2, 2012 at 5:21 PM, Jan Heinen <jahei...@gmx.de> wrote: > > Though I searched a lot for the question in the bottom, > > - I could not find a parameter for \at which solves my problem > > - I could not find any other command which helps me > > > > Is this a limitation of ConText? I can't imagin that I am the only one > and > > first who wants to reference to more than one page. > I'm working on this > but the idea of reference is that there is exactly one label for an > object (which can be the same) > so that \pagereference[red]foo > \pagereference[red]boo > is wrong because the label red has more than one reference, while > \pagereference[red:1]foo > \pagereference[red:2]foo > is ok (as hans said). > Using this idea, and the two pass way, we can wrap \pagereference and \at with \PageReference and \At, wheret \PageReference[red] really means \pagereference[red:1], \pagereference[red:2] and so on, while \At{page:}[red] put \at{page:}[red:],\at{}[red:2] and so on. After the end of the first pass we store the multiple references into multiref.tuc, and we read this file at the beginning of every other pass; its data is used by \At to put the correct reference. This is not a good solution, because multiref.tuc must be keep in synch with the tuc file of the source, so context ---purgeall must be call to clean up temporary data and restart. The ideal solution store these data into the tuc file --- context has core-two.lua and core-two.mkiv for this, if I've time I will fix. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \startluacode document.jan = document.jan or {} document.jan.multiple_references = document.jan.multiple_references or {} document.jan.multiple_references_stored = document.jan.multiple_references_stored or {} \stopluacode \def\WriteToList{% \startluacode local f=io.open('multiref.tuc','r') if f==nil then f=io.open('multiref.tuc','w') f:write("local multiple_references= multiple_references or {}\n") f:write("multiple_references={\n") for k,v in pairs(document.jan.multiple_references) do f:write(string.format("['\%s']=\%s,\n",k,v)) end f:write("}\n") f:write("return multiple_references\n") end \stopluacode } \appendtoks\WriteToList\to\everystoptext \def\ReadList{% \startluacode local f=io.open('multiref.tuc','r') if f~=nil then f:close() document.jan.multiple_references_stored=dofile('multiref.tuc') end \stopluacode } \appendtoks\ReadList\to\everystarttext %% wrap \pagereference \def\PageReference[#1]{% \startluacode if document.jan.multiple_references['#1'] == nil then document.jan.multiple_references['#1'] = 1 else document.jan.multiple_references['#1'] = document.jan.multiple_references['#1'] +1 end context('\\pagereference[#1:\%d]',document.jan.multiple_references['#1']) \stopluacode% } %% wrap \at \def\At#1[#2]{% \startluacode print('>>>>> ',document.jan.multiple_references['#2']) if document.jan.multiple_references_stored['#2'] == nil then context('\\at{#1}[#2]') else for j=1,document.jan.multiple_references_stored['#2'] do local ref=string.format('#2:\%d',j) local comma = ',' if j==1 and document.jan.multiple_references_stored['#2']==1 then context('\\at{#1}[\%s]',ref) end if j==1 and document.jan.multiple_references_stored['#2']~=1 then context('\\at{#1}[\%s],',ref) elseif 1<j and j<document.jan.multiple_references_stored['#2'] then context('\\at{}[\%s],',ref) elseif j== document.jan.multiple_references_stored['#2'] and document.jan.multiple_references_stored['#2']>1 then context('\\at{}[\%s]',ref) end end end \stopluacode } \starttext You can find red vehicles on \At{page:}[red] You can find yellow vehicles on \At{page:}[yellow] Here I want to see: "You can find red vehicles on page 2,4" (only page 2 is wrong) \page \PageReference[red]Here is a red car. \page \PageReference[green]Here is a green car. \page \PageReference[red]Here is a red bus. \page \PageReference[green]Here is a green car. \page \PageReference[yellow]Here is a yellow car. \page \stoptext -- luigi
___________________________________________________________________________________ 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://tex.aanhet.net archive : http://foundry.supelec.fr/projects/contextrev/ wiki : http://contextgarden.net ___________________________________________________________________________________