ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
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
___________________________________________________________________________________

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