From: luigi scarso <luigi.scarso@gmail.com>
To: mailing list for ConTeXt users <ntg-context@ntg.nl>
Subject: Re: Pagereferences to more than one page
Date: Mon, 2 Jan 2012 19:28:16 +0100 [thread overview]
Message-ID: <CAG5iGsBFGW0MFn2oPJjuG_+FRafF7hRc36M7i3bqUo0enR301w@mail.gmail.com> (raw)
In-Reply-To: <CAG5iGsCpm+Vrq1CKmRfj-CHYAB91HpB+QrSTGOS_PEM-ezkRTQ@mail.gmail.com>
[-- Attachment #1.1: Type: text/plain, Size: 4135 bytes --]
On Mon, Jan 2, 2012 at 5:30 PM, luigi scarso <luigi.scarso@gmail.com> wrote:
> On Mon, Jan 2, 2012 at 5:21 PM, Jan Heinen <JaHeinen@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
[-- Attachment #1.2: Type: text/html, Size: 14027 bytes --]
[-- Attachment #2: Type: text/plain, Size: 485 bytes --]
___________________________________________________________________________________
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
___________________________________________________________________________________
next prev parent reply other threads:[~2012-01-02 18:28 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-12-31 14:33 Center (horizontal + vertical) an image in \setframed Jan Heinen
2011-12-31 14:44 ` luigi scarso
2011-12-31 17:48 ` Jan Heinen
2012-01-02 16:21 ` Pagereferences to more than one page Jan Heinen
2012-01-02 16:29 ` Hans Hagen
2012-01-02 16:30 ` luigi scarso
2012-01-02 18:28 ` luigi scarso [this message]
2012-01-01 9:23 ` Center (horizontal + vertical) an image in \setframed Wolfgang Schuster
2012-01-01 18:37 Pagereferences to more than one page Jan Heinen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAG5iGsBFGW0MFn2oPJjuG_+FRafF7hRc36M7i3bqUo0enR301w@mail.gmail.com \
--to=luigi.scarso@gmail.com \
--cc=ntg-context@ntg.nl \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).