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
___________________________________________________________________________________

Reply via email to