![](https://secure.gravatar.com/avatar/386a116d129cdc597f2bb6210bbaff7a.jpg?s=120&d=mm&r=g)
On Mon, Jan 2, 2012 at 5:30 PM, luigi scarso
On Mon, Jan 2, 2012 at 5:21 PM, Jan Heinen
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