Re: [NTG-context] \everyaftershipout isn't called for every pagebreak

2010-01-18 Thread Andreas Schneider
Hans Hagen wrote:
 as it takes less time wrting a helper than explaining how to do it i
 just added it as feature (a few years from probably only wolfgang
 remembers that it's there)
 
 i'll upload a beta to the website that provides ...
 
 \starttext
 
 \dorecurse {100} {
  test \footnote{\doifnoteonsamepageelse[footnote]{ibidem}{aaa}}
 }
 
 \stoptext
 
 keep in mind that such features, depending on multiple passes, might
 result in a few more as it will never get things right the first time
 
 actually, in some cases it might make sense to delete the tuc file
 before a run
 
 Hans

Thank you very much for all that effort! It works very well and as a side-
effect also gives me a nice point to start learning more about the (lua)tex 
internals. Seems like I will have to go to one of the next ConTeXt user 
meetings so I can repay you with the beer(s) I now owe you :-)

Just in case someone else needs it: I used the following code now to reset 
my variable whenever a footnote is placed on a new page. That was necessary 
so a manually set footnote doesn't interfere with my citation-footnotes. 
(Otherwise, if a manually inserted footnote would be the first on a page, 
the next citation footnote would evaluate as being on the same page as the 
last one.)

\appendtoks
  \doifnoteonsamepageelse[footnote]{}{\global\setvalue{mycitelast}{}}
\to\everyinsidenoteinsert


Best Regards (and many thanks again!)
Andreas.

___
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
___


Re: [NTG-context] \everyaftershipout isn't called for every pagebreak

2010-01-17 Thread Hans Hagen

On 16-1-2010 22:58, Andreas Schneider wrote:

Wolfgang Schuster wrote:


This can't work because TeX collects mote material than it needs for the
current page and the same happens with the footnotes, the only thing you
can do is to use two pass data

Wolfgang


Is there not even some event in Lua that could be used to handle this case?
I think MkIV compatibility is all I need.
In case this is also not possible: can you give me a hint where to learn
more about twopass processing? Is there in MkIV still something that
requires two (or more) passes that I could take a look at to learn how to do
it? (I guess I can understand Lua easier than plain TeX, so I guess MkII is
out of the picture.)


It depends on your document. We have workflows where we can do with one 
pass in which case we run with --once (--runs=2 or so)


Future versions of context mkiv might need one run less (in some cases) 
or one perceived run (which saves startup cycles) but as Wolgangs 
explained already, in more complex cases we cannot do with less runs as 
any change haping now can influence something a few pages back which in 
turn might influence what follows.


Normally, when you correct only typos there will be no multiple runs.

MkIV already is more efficient as we now always assume an advanced pdf 
backend so that we don't need to use the MkII the object reference 
mechanism.


Hans

-
  Hans Hagen | PRAGMA ADE
  Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
 tel: 038 477 53 69 | fax: 038 477 53 74 | www.pragma-ade.com
 | www.pragma-pod.nl
-
___
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
___


Re: [NTG-context] \everyaftershipout isn't called for every pagebreak

2010-01-17 Thread Andreas Schneider
Hans Hagen wrote:
 It depends on your document. We have workflows where we can do with one
 pass in which case we run with --once (--runs=2 or so)
 
 Future versions of context mkiv might need one run less (in some cases)
 or one perceived run (which saves startup cycles) but as Wolgangs
 explained already, in more complex cases we cannot do with less runs as
 any change haping now can influence something a few pages back which in
 turn might influence what follows.
 
 Normally, when you correct only typos there will be no multiple runs.
 
 MkIV already is more efficient as we now always assume an advanced pdf
 backend so that we don't need to use the MkII the object reference
 mechanism.
 
 Hans

In my example I can't even get \pagenumber to work correctly. If I replace 
my \test macro with \pagenumber, the first 4 pages all print page 1 (since 
it's still the same paragraph). Is there anything I can do about that? (Of 
course my main concern is the original problem of not catching page breaks 
to reset a variable).

I also can't quite work out a multi-pass solution ... the only way I could 
imagine how it could work is by storing the content I would like to print 
together with the coordinates it was printed to in the first run, and in the 
second run evaluate from these information when a page break occured and 
modify the data accordingly. But I'm a bit lost here where to start ... my 
TeX knowledge is rather basic and I don't know anything about the luatex 
internals so I don't know if there are any events I could hook (and when and 
where to hook them :-/).

I would be very grateful if you could point me in a direction I can work 
forward from - I can only guess that there are similar mechanisms in the 
already existing MkIV code ... although the \pagenumber problem seems to 
indicate that it might be near to impossible :-/

Best Regards,
Andreas.

___
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
___


Re: [NTG-context] \everyaftershipout isn't called for every pagebreak

2010-01-17 Thread Andreas Schneider
 dealing with multipass data in mkiv is completely different from mkii
 and at some point there will be a proper api for users (makes no sense
 now as i might as well change internals along with luatex developments)
 
 in mkiv we store info in tables and much is available during a document
 run anyway (in mkii we filter data from the tuo file) so the question
 is, what info do you need? it's probably easier to provide it as core
 functionality
 
 so i need speccs and a small test file
 
 Hans

Thanks for that info!
I think for specs my plan is too vague. I will explain what my goal is 
then you either see a good solution and/or tell me that this is out of scope 
for now :-)

The test file to demonstrate the problem is in my initial newsgroup post for 
this thread. I will re-attach it here.

What I need would be a precise page break handling. Currently ConTeXt seems 
to process a whole paragraph as one object, and then breaks it down to 
individual pages. That leads to a problem however:
I want to refine my citation style. All bibliography is inserted into 
footnotes. If two (or more) consecutive citations _on the same page_ refer 
to the same bib entry, the footnote for that citation should read Ibidem. 
Therefore I have to remember the last cited entry. Currently I use 
\appendtoks...\to\everyaftershipout to reset/clear the variable I use for 
storing that last entry. That works fine as long as the paragraphs are 
small. If however several citations within one (possibly large) paragraph 
are separated by a page break, the output will be wrong, since the event to 
reset the variable occurs too late (see above).

The problem can be demonstrated with this example - the first footnote on 
each page should be New.

\define\test{\doifelse{\getvalue{testvar}}{page}{%
  \footnote{Repeat}%
}{%
  \footnote{New}%
  \setvalue{testvar}{page}%
}}

\appendtoks
  \global\setvalue{testvar}{}
\to\everyaftershipout

\starttext
  \dorecurse{10}{\dorecurse{250}{text }\test}

  \dorecurse{10}{\dorecurse{250}{text }\test}
\stoptext


Best Regards,
Andreas.

___
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
___


Re: [NTG-context] \everyaftershipout isn't called for every pagebreak

2010-01-17 Thread Martin Schröder
2010/1/17 Andreas Schneider ak...@gmx.de:
 What I need would be a precise page break handling. Currently ConTeXt seems
 to process a whole paragraph as one object, and then breaks it down to
 individual pages. That leads to a problem however:

This is how TeX works. :-)

Best
Martin
___
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
___


Re: [NTG-context] \everyaftershipout isn't called for every pagebreak

2010-01-17 Thread Hans Hagen

On 17-1-2010 23:13, Andreas Schneider wrote:

dealing with multipass data in mkiv is completely different from mkii
and at some point there will be a proper api for users (makes no sense
now as i might as well change internals along with luatex developments)

in mkiv we store info in tables and much is available during a document
run anyway (in mkii we filter data from the tuo file) so the question
is, what info do you need? it's probably easier to provide it as core
functionality

so i need speccs and a small test file

Hans


Thanks for that info!
I think for specs my plan is too vague. I will explain what my goal is
then you either see a good solution and/or tell me that this is out of scope
for now :-)

The test file to demonstrate the problem is in my initial newsgroup post for
this thread. I will re-attach it here.

What I need would be a precise page break handling. Currently ConTeXt seems
to process a whole paragraph as one object, and then breaks it down to
individual pages. That leads to a problem however:
I want to refine my citation style. All bibliography is inserted into
footnotes. If two (or more) consecutive citations _on the same page_ refer
to the same bib entry, the footnote for that citation should read Ibidem.
Therefore I have to remember the last cited entry. Currently I use
\appendtoks...\to\everyaftershipout to reset/clear the variable I use for
storing that last entry. That works fine as long as the paragraphs are
small. If however several citations within one (possibly large) paragraph
are separated by a page break, the output will be wrong, since the event to
reset the variable occurs too late (see above).

The problem can be demonstrated with this example - the first footnote on
each page should be New.

\define\test{\doifelse{\getvalue{testvar}}{page}{%
   \footnote{Repeat}%
}{%
   \footnote{New}%
   \setvalue{testvar}{page}%
}}

\appendtoks
   \global\setvalue{testvar}{}
\to\everyaftershipout

\starttext
   \dorecurse{10}{\dorecurse{250}{text }\test}

   \dorecurse{10}{\dorecurse{250}{text }\test}
\stoptext


as it takes less time wrting a helper than explaining how to do it i 
just added it as feature (a few years from probably only wolfgang 
remembers that it's there)


i'll upload a beta to the website that provides ...

\starttext

\dorecurse {100} {
test \footnote{\doifnoteonsamepageelse[footnote]{ibidem}{aaa}}
}

\stoptext

keep in mind that such features, depending on multiple passes, might 
result in a few more as it will never get things right the first time


actually, in some cases it might make sense to delete the tuc file 
before a run


Hans

-
  Hans Hagen | PRAGMA ADE
  Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
 tel: 038 477 53 69 | fax: 038 477 53 74 | www.pragma-ade.com
 | www.pragma-pod.nl
-
___
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
___


[NTG-context] \everyaftershipout isn't called for every pagebreak

2010-01-16 Thread Andreas Schneider
Hi,

I'm using \appendtoks...\to\everyaftershipout to reset a variable on every 
pagebreak. This doesn't work as I expect(ed) it, since it seems to only 
trigger after a paragraph. The following example shows the problem. On every 
new page, the first footnote should be New, which is not the case here.
What would be the way to go for me, to get the result I described?

Thanks in advance,
Andreas.


The example:

\define\test{\doifelse{\getvalue{testvar}}{page}{%
  \footnote{Repeat}%
}{%
  \footnote{New}%
  \setvalue{testvar}{page}%
}}

\appendtoks
  \global\setvalue{testvar}{}
\to\everyaftershipout

\starttext
  \dorecurse{10}{\dorecurse{250}{text }\test}

  \dorecurse{10}{\dorecurse{250}{text }\test}
\stoptext

___
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
___


Re: [NTG-context] \everyaftershipout isn't called for every pagebreak

2010-01-16 Thread Wolfgang Schuster

Am 16.01.2010 um 17:53 schrieb Andreas Schneider:

 Hi,
 
 I'm using \appendtoks...\to\everyaftershipout to reset a variable on every 
 pagebreak. This doesn't work as I expect(ed) it, since it seems to only 
 trigger after a paragraph. The following example shows the problem. On every 
 new page, the first footnote should be New, which is not the case here.
 What would be the way to go for me, to get the result I described?

This can't work because TeX collects mote material than it needs for the current
page and the same happens with the footnotes, the only thing you can do is to
use two pass data

Wolfgang

___
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
___


Re: [NTG-context] \everyaftershipout isn't called for every pagebreak

2010-01-16 Thread Andreas Schneider
Wolfgang Schuster wrote:
 
 This can't work because TeX collects mote material than it needs for the
 current page and the same happens with the footnotes, the only thing you
 can do is to use two pass data
 
 Wolfgang

Is there not even some event in Lua that could be used to handle this case? 
I think MkIV compatibility is all I need.
In case this is also not possible: can you give me a hint where to learn 
more about twopass processing? Is there in MkIV still something that 
requires two (or more) passes that I could take a look at to learn how to do 
it? (I guess I can understand Lua easier than plain TeX, so I guess MkII is 
out of the picture.)

Thanks for your fast answer!

Best regards,
Andreas.

___
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
___