Hello, I would like to have the whole (sub)section on a single page unless it doesn't fit on one page (in this case I don't mind if it starts on a new page or simply continues on the old one, but it should break somewhere, that's why putting the content into a \vbox doesn't solve the problem). This is perhaps already described somewhere in the documentation, but I don't know where to look for it (well, I could start reading the source code for split=yes; perhaps \vsplit could help, but don't know how exactly to apply it). I can solve the problem temporary by manually placing page breaks, but I guess that there exists some really short, simple & elegant solutions for it. It doesn't need to automatically determine the subsection boundaries automatically (although this would be great), so I can write something like this: \startmaterialforonepage \subsection{split only if too long for one page} \dorecurse{10}{whatever comes here \dots } \stopmaterialforonepage Thank you, Mojca
Mojca Miklavec wrote:
It doesn't need to automatically determine the subsection boundaries automatically (although this would be great), so I can write something like this:
\startmaterialforonepage \subsection{split only if too long for one page} \dorecurse{10}{whatever comes here \dots } \stopmaterialforonepage
Do you want something like this? \long\def\startmaterialforonepage#1\stopmaterialforonepage% {\setbox0\vbox{#1}\ifdim\ht0<\textheight \page\fi #1} Taco
Taco Hoekwater wrote:
Mojca Miklavec wrote:
It doesn't need to automatically determine the subsection boundaries automatically (although this would be great), so I can write something like this:
\startmaterialforonepage \subsection{split only if too long for one page} \dorecurse{10}{whatever comes here \dots } \stopmaterialforonepage
Do you want something like this?
\long\def\startmaterialforonepage#1\stopmaterialforonepage% {\setbox0\vbox{#1}\ifdim\ht0<\textheight \page\fi #1}
Thak you, Taco. Yes, this is almost exactly what I wanted to do, except that I would substitute \ifdim\ht0<\textheight with \ifdim\ht0<\theremainingpageheight How/where can I get \theremainingpageheight? I saw some strange "keywords" like \pagegoal, \pagetotal spread through the source, ... but I have no clue what they are for and if they have anyting to do with what I'm looking for. Thans a lot, Mojca
Mojca Miklavec wrote:
Taco Hoekwater wrote:
Mojca Miklavec wrote:
It doesn't need to automatically determine the subsection boundaries automatically (although this would be great), so I can write something like this:
\startmaterialforonepage \subsection{split only if too long for one page} \dorecurse{10}{whatever comes here \dots } \stopmaterialforonepage
Do you want something like this?
\long\def\startmaterialforonepage#1\stopmaterialforonepage% {\setbox0\vbox{#1}\ifdim\ht0<\textheight \page\fi #1}
Thak you, Taco. Yes, this is almost exactly what I wanted to do, except that I would substitute \ifdim\ht0<\textheight with \ifdim\ht0<\theremainingpageheight
How/where can I get \theremainingpageheight? I saw some strange "keywords" like \pagegoal, \pagetotal spread through the source, ... but I have no clue what they are for and if they have anyting to do with what I'm looking for.
that's always tricky, because it's not really possible to determine the rest of the available space without entering the output routing, which then spoils spacing (there is \testpage[n] with n being a minimal number of lines, so, \testpage[10] will move to the next page if there are less than 10 lines) Hans
Hans Hagen wrote:
Mojca Miklavec wrote:
Taco Hoekwater wrote:
Mojca Miklavec wrote:
It doesn't need to automatically determine the subsection boundaries automatically (although this would be great), so I can write something like this:
\startmaterialforonepage \subsection{split only if too long for one page} \dorecurse{10}{whatever comes here \dots } \stopmaterialforonepage
Do you want something like this?
\long\def\startmaterialforonepage#1\stopmaterialforonepage% {\setbox0\vbox{#1}\ifdim\ht0<\textheight \page\fi #1}
Thak you, Taco. Yes, this is almost exactly what I wanted to do, except that I would substitute \ifdim\ht0<\textheight with \ifdim\ht0<\theremainingpageheight
How/where can I get \theremainingpageheight? I saw some strange "keywords" like \pagegoal, \pagetotal spread through the source, ... but I have no clue what they are for and if they have anyting to do with what I'm looking for.
that's always tricky, because it's not really possible to determine the rest of the available space without entering the output routing, which then spoils spacing
(there is \testpage[n] with n being a minimal number of lines, so, \testpage[10] will move to the next page if there are less than 10 lines)
Thank you, Hans. I have to refresh my knowledge about the syntax and I'll try it out. Making \setbox0\vbox{#1} and then executing the \testpage with "ceil(ht0 / lineheight)" should then work OK, I hope. I understand the problem of the approach that I asked for: as soon as someone enters a \vfill(l) or \vss, it's approximately impossible to determine where the text on the page ends. But in the first approximation I would be satisfied with the empty space that would remain if the document ended at that specific place. That information is also very valuable when trying to put pictures on slides, where picture has to be as big as possible, but still has to fit on the space under the title (I tuned them manually, which was OK for just a couple of slides). Thank you, Mojca
Mojca Miklavec wrote:
Hans Hagen wrote:
Mojca Miklavec wrote:
Taco Hoekwater wrote:
Mojca Miklavec wrote:
It doesn't need to automatically determine the subsection boundaries automatically (although this would be great), so I can write something like this:
\startmaterialforonepage \subsection{split only if too long for one page} \dorecurse{10}{whatever comes here \dots } \stopmaterialforonepage
Do you want something like this?
\long\def\startmaterialforonepage#1\stopmaterialforonepage% {\setbox0\vbox{#1}\ifdim\ht0<\textheight \page\fi #1}
Thak you, Taco. Yes, this is almost exactly what I wanted to do, except that I would substitute \ifdim\ht0<\textheight with \ifdim\ht0<\theremainingpageheight
How/where can I get \theremainingpageheight? I saw some strange "keywords" like \pagegoal, \pagetotal spread through the source, ... but I have no clue what they are for and if they have anyting to do with what I'm looking for.
that's always tricky, because it's not really possible to determine the rest of the available space without entering the output routing, which then spoils spacing
(there is \testpage[n] with n being a minimal number of lines, so, \testpage[10] will move to the next page if there are less than 10 lines)
Thank you, Hans. I have to refresh my knowledge about the syntax and I'll try it out. Making \setbox0\vbox{#1} and then executing the \testpage with "ceil(ht0 / lineheight)" should then work OK, I hope.
even that is tricky, imagine your method (along the lines):
- \setbox0\vbox{\startitemize ... \stopitemize}
- measure and decide if \page is needed
- \unvbox0
putting something in a box prevents for instance \blank looking back and getting the
spacing right (context goes to a large extent to get spacing right)
I understand the problem of the approach that I asked for: as soon as someone enters a \vfill(l) or \vss, it's approximately impossible to determine where the text on the page ends. But in the first approximation I would be satisfied with the empty space that would remain if the document ended at that specific place.
That information is also very valuable when trying to put pictures on slides, where picture has to be as big as possible, but still has to fit on the space under the title (I tuned them manually, which was OK for just a couple of slides).
Thank you, Mojca _______________________________________________ ntg-context mailing list ntg-context@ntg.nl http://www.ntg.nl/mailman/listinfo/ntg-context
Hans Hagen wrote:
How/where can I get \theremainingpageheight? I saw some strange "keywords" like \pagegoal, \pagetotal spread through the source, ... but I have no clue what they are for and if they have anyting to do with what I'm looking for.
that's always tricky, because it's not really possible to determine the rest of the available space without entering the output routing, which
The standard trick would be not to explicitly check some numbers but to do what in low-level looks like \!!dimena=\ht0\advance\!!dimena\dp0% \penalty10000\vskip\!!dimena\penalty10\vskip-\!!dimena Is there any nice ConTeXt way of doing the above? regards, Christopher
Christopher Creutzig wrote:
Hans Hagen wrote:
How/where can I get \theremainingpageheight? I saw some strange "keywords" like \pagegoal, \pagetotal spread through the source, ... but I have no clue what they are for and if they have anyting to do with what I'm looking for.
that's always tricky, because it's not really possible to determine the rest of the available space without entering the output routing, which
The standard trick would be not to explicitly check some numbers but to do what in low-level looks like
\!!dimena=\ht0\advance\!!dimena\dp0% \penalty10000\vskip\!!dimena\penalty10\vskip-\!!dimena
Is there any nice ConTeXt way of doing the above?
\testpage[1] % one line, [3] three lines Hans
Hans Hagen wrote:
Christopher Creutzig wrote:
The standard trick would be not to explicitly check some numbers but to do what in low-level looks like
\!!dimena=\ht0\advance\!!dimena\dp0% \penalty10000\vskip\!!dimena\penalty10\vskip-\!!dimena
Is there any nice ConTeXt way of doing the above?
\testpage[1] % one line, [3] three lines
Sure, but I'm not asking for n lines, but for a dimension. Oh, if I read the source correctly, \testpage[0][\dimexpr\dp0+\ht0\relax] should work, right? Regards, Christopher
participants (5)
-
Christopher Creutzig
-
Hans Hagen
-
Mojca Miklavec
-
Mojca Miklavec
-
Taco Hoekwater