ConTeXt:推迟带来的麻烦

ConTeXt:推迟带来的麻烦

我的书有:

  • 某些页面有整页图片和标题
  • 正文流经其他页面。我的文档分为几个部分,每个部分都从新的一页开始。

我尝试将整页图像和标题放在图层上,方法是将它们推迟到分节之前。典型的一个部分有 2 页正文和 3 张整页图像。我尝试使用浮动,但很难在正文中找到放置浮动的位置。

它大部分情况下运行良好,只是整页图像有时会推迟到错误的页面上。我怀疑推迟命令中的 \page 会造成混淆。以下是显示该问题的 MWE。

在我的 MWE 中,\startpostponing[+2]应该将单词放在POSTPONED CONTENT第 3 页,但单词却放在第 4 页。当我将推迟 +2 更改为 +1 或 +3 时,它可以正常工作。

有人能检查一下他们的计算机上是否也是这样吗?

推迟

\setuppapersize[A6, portrait][A3, landscape]
\setuppaper[nx=3,ny=2]
\setuparranging[XY]

\starttext

\startpostponing[+2] 
POSTPONED CONTENT
\page
\stoppostponing

ON PAGE 1
\page
\dorecurse{3}{\input tufte}
\stoptext

答案1

一种不同的解决方案,使用浮点数而不是\startpostponing来实现编辑中描述的目标:

\setuppapersize[A6, portrait][A3, landscape]
\setuppaper[nx=4,ny=2]
\setuparranging[XY]

\definefloat[endofsection][figure][
    default={somewhere:endofsection},
    minheight=\dimexpr\textheight-2\baselineskip,
    frame=on,
]

\setupfloat[ntop=100]

\setuphead[section][
    before={\page\placenamedfloat[endofsection][endofsection]\page}
]

\starttext

\section{Section One}

\dorecurse{2}{\samplefile{knuth}\par}

\placeendofsection{Caption One}{Content One}

\placeendofsection{Caption Two}{Content Two}

\section{Section Two}

\dorecurse{3}{\samplefile{bryson}\par}

\placeendofsection{Caption Three}{Content Three}

\placeendofsection{Caption Four}{Content Four}

\placeendofsection{Caption Five}{Content Five}

\section{Section Three}

\dorecurse{6}{\samplefile{zapf}\par}

\stoptext

在此处输入图片描述 在此处输入图片描述

这有点黑客行为,所以请将其作为起点而不是完成的解决方案:)

(如果使用层是一项硬性要求,那么您可能可以使用 Lua + 缓冲区来做一些事情,但这最适合另一个问题)

答案2

在我看来,这看起来像是一个错误。设置\c_page_postponed_mode0似乎可以解决问题,尽管这可能会产生其他意想不到的后果:

\unprotect
\c_page_postponed_mode=0
\protect

\setuppapersize[A6, portrait][A3, landscape]
\setuppaper[nx=3,ny=2]
\setuparranging[XY]

\starttext

\startpostponing[+2]
POSTPONED CONTENT
\page
\stoppostponing

ON PAGE 1
\page
\dorecurse{3}{\input tufte}
\stoptext

在此处输入图片描述

我怀疑这个问题\aftergroup\page_otr_construct_and_shipoutpage-ini.mkxl:170-175):

     % this is tricky! we need to make sure we are in the output group
     \ifnum\c_page_postponed_mode=\plusone
       \aftergroup\page_postponed_blocks_flush
     \else
       \page_postponed_blocks_flush
     \fi

相关内容