Re: [NTG-context] repeat a page inside a document

2020-02-06 Thread Wolfgang Schuster
On Thu, 6 Feb 2020 22:04:47 +0100
Pablo Rodriguez  wrote:

> On 2/6/20 8:17 PM, Wolfgang Schuster wrote:
> > On Thu, 6 Feb 2020 19:02:08 +0100 Pablo Rodriguez wrote:
> >> [...]
> >> BTW, in my real-world document I use layers which are different for
> >> first and other pages.
> >
> > How many pages has your document, first you write is has only
> > one page but now you write about a document with many pages.
> 
> Sorry for the inaccuracies in my previous description, Wolfgang.
> 
> I use a single source combined with data read from CSV files to generate
> documents which may contain a single or more than one page.
> 
> I assumed that modes were persistent across runs. And maybe they aren’t
> or my approach is wrong.
> 
> >> Could you provide a minimal sample showing how a component may include a
> >> page twice?
> >
> > Can you provide a minimal example of your document because
> > there is no solution which works for all cases.
> 
> The sample that seems to work is the following (too tricky for my taste
> and I have to adapt it to Windows):
> 
> \installshipoutmethod{savepages}
>   {\dowithnextbox
>  {\invokepagehandler{normal}{\copy\nextbox}%
>   \putboxincache{savedpages}{\number\realpageno}\nextbox}
>\hbox}
> 
> \setuppaper[method=savepages]
> 
> \starttext
> 
> \scale[width=\textwidth]{a}
> \scale[width=\textwidth]{b}
> 
> \doifmode{*first}{\executesystemcommand{rm zikaasd.abh}}
> 
> \startnotmode[*first]
>   \ifnum\lastpagenumber<2
> \executesystemcommand{touch zikaasd.abh}
> \fi
> 
>   \doiffileexistselse{zikaasd.abh}{%
> \startlayout[page]
>   \directboxfromcache{savedpages}{1}
> \stoplayout}{}
> \stopnotmode
> 
> \stoptext
> 
> I wonder whether there is a better way of doing this.
> 
> At least, creating and removing empty files with Lua would be more
> portable. And not having to use an external file would be better.

Your example is still very confusing and I have no idea
what you're trying to achieve. They way to go depends also
what you try to achieve, when you need an exact copy of
the first page the above is the way to go.

Another way is to use a make file (or a ctx-file for ConTeXt)
to add a image of the first page to your document afterwards.

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://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki : http://contextgarden.net
___


Re: [NTG-context] repeat a page inside a document

2020-02-06 Thread Pablo Rodriguez
On 2/6/20 8:17 PM, Wolfgang Schuster wrote:
> On Thu, 6 Feb 2020 19:02:08 +0100 Pablo Rodriguez wrote:
>> [...]
>> BTW, in my real-world document I use layers which are different for
>> first and other pages.
>
> How many pages has your document, first you write is has only
> one page but now you write about a document with many pages.

Sorry for the inaccuracies in my previous description, Wolfgang.

I use a single source combined with data read from CSV files to generate
documents which may contain a single or more than one page.

I assumed that modes were persistent across runs. And maybe they aren’t
or my approach is wrong.

>> Could you provide a minimal sample showing how a component may include a
>> page twice?
>
> Can you provide a minimal example of your document because
> there is no solution which works for all cases.

The sample that seems to work is the following (too tricky for my taste
and I have to adapt it to Windows):

\installshipoutmethod{savepages}
  {\dowithnextbox
 {\invokepagehandler{normal}{\copy\nextbox}%
  \putboxincache{savedpages}{\number\realpageno}\nextbox}
   \hbox}

\setuppaper[method=savepages]

\starttext

\scale[width=\textwidth]{a}
\scale[width=\textwidth]{b}

\doifmode{*first}{\executesystemcommand{rm zikaasd.abh}}

\startnotmode[*first]
  \ifnum\lastpagenumber<2
\executesystemcommand{touch zikaasd.abh}
\fi

  \doiffileexistselse{zikaasd.abh}{%
\startlayout[page]
  \directboxfromcache{savedpages}{1}
\stoplayout}{}
\stopnotmode

\stoptext

I wonder whether there is a better way of doing this.

At least, creating and removing empty files with Lua would be more
portable. And not having to use an external file would be better.

Many thanks for your help,

Pablo
--
http://www.ousia.tk
___
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://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki : http://contextgarden.net
___


Re: [NTG-context] repeat a page inside a document

2020-02-06 Thread Pablo Rodriguez
On 2/6/20 7:14 PM, Wolfgang Schuster wrote:
> On Thu, 6 Feb 2020 16:28:04 +0100 Pablo Rodriguez wrote:
>> [...]
>> My question is how to get a page from the document you‘re compiling
>> repeated inside the same document.
>>
>> I have tried to search both i-context.pdf and the wiki, but “mirror” and
>> “repeat” seem to be bad options.
>
> You can store each finished page in a box and access the content
> of the stored box afterwards.

Huge thanks for your reply and the code, Wolfgang.

I have just checked “TeX for the Impatient” to understand what shipout
methods and boxes were. I think I can barely grasp their meaning.

Which are other usages for shipouts and boxes? I guess they are used to
add pages in the final PDF document, but I don’t see which other uses
they may have.

BTW, “invokepagehandler” reads “invokepageheandler” in the following
files from the ConTeXt Suite (I don’t know whether the first is the real
source of the rest of them):

* texmf-context/tex/context/interface/mkiv/i-imposition.xml
* texmf-context/tex/context/interface/mkiv/context-en.xml
*
texmf-context/context/data/vscode/extensions/context/syntaxes/context-syntax-tex.json
*
texmf-context/context/data/textadept/context/data/scite-context-data-interfaces.lua
*
texmf-context/context/data/scite/context/lexers/data/scite-context-data-interfaces.lua
*
texmf-context/context/data/scite/context/scite-context-data-interfaces.properties

Many thanks again for your help,

Pablo


> \installshipoutmethod{savepages}
>   {\dowithnextbox
>  {\invokepagehandler{normal}{\copy\nextbox}%
>   \putboxincache{savedpages}{\number\realpageno}\nextbox}
>\hbox}
>
> \setuppaper[method=savepages]
>
> \starttext
>
> \dorecurse{8}
>   {\expanded{\chapter{Chapter \recurselevel}}
>\dorecurse{\recurselevel}{\samplefile{weisman}}}
>
> \startlayout[page]
> \directboxfromcache{savedpages}{5}
> \page
> \directboxfromcache{savedpages}{2}
> \stoplayout
>
> \stoptext

--
http://www.ousia.tk
___
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://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki : http://contextgarden.net
___


Re: [NTG-context] repeat a page inside a document

2020-02-06 Thread Wolfgang Schuster
On Thu, 6 Feb 2020 16:28:04 +0100
Pablo Rodriguez  wrote:

> Dear list,
> 
> I have the following sample:
> 
> \starttext
> \input knuth
> \page[right]
> \setuplayout[page]
> \externalfigure[\jobname.pdf][page=1]
> \stoptext
> 
> My question is how to get a page from the document you‘re compiling
> repeated inside the same document.
> 
> I have tried to search both i-context.pdf and the wiki, but “mirror” and
> “repeat” seem to be bad options.

You can store each finished page in a box and access the content
of the stored box afterwards.

\installshipoutmethod{savepages}
  {\dowithnextbox
 {\invokepagehandler{normal}{\copy\nextbox}%
  \putboxincache{savedpages}{\number\realpageno}\nextbox}
   \hbox}

\setuppaper[method=savepages]

\starttext

\dorecurse{8}
  {\expanded{\chapter{Chapter \recurselevel}}
   \dorecurse{\recurselevel}{\samplefile{weisman}}}

\startlayout[page]
\directboxfromcache{savedpages}{5}
\page
\directboxfromcache{savedpages}{2}
\stoplayout

\stoptext

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://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki : http://contextgarden.net
___