ConTeXt 中的页面列后添加了空白页

ConTeXt 中的页面列后添加了空白页

这个问题出现在ConTeXt 中的脚注底部不齐;我已将这个问题报告给 ConTeXt 邮件列表,但目前还没有收到任何回复,所以我决定也在这里询问。如果我在这里或邮件列表中得到答案,我会在其他地方分享答案,以便其他遇到此问题的人更有可能找到解决方案。

我正在使用 pagecolumns 排版文档,以确保我的脚注在列中排列不齐。每当页面上的最后一列不完整时,我都会观察到一些意外行为:在文档末尾添加一个空白页。下面是一个最小的工作示例:

\starttext

\startpagecolumns[n=2]

\dorecurse{3}{\par\input zapf}

\stoppagecolumns

\stoptext

我使用与 TeXLive 2020 一起发布的 ConTeXt 版本 2020.03.10 排版此内容。值得注意的是,如果\dorecurse{3}将 更改为\dorecurse{2}\dorecurse{6}(以便文本以页面的第一列结束),则不会出现问题。该问题也不仅限于单页文档;如果\dorecurse{3}将 更改为,则通常为两页的文档将扩展为三页文档。我尝试通过在参数中 \dorecurse{8}指定来修复此问题(类似于修复部分块page=no\startpagecolumnshttps://www.contextgarden.net/Empty_page_at_the_end),但是它并没有改变任何东西。

在 pagecolumns 手册中找到的几个示例中(包括侧边浮动和脚注的示例)( http://www.pragma-ade.com/general/manuals/pagecolumns.pdf),环境结束后似乎也会添加空白页。那么,当手册中说“我们总是从新页面开始,并以新页面结束”时,这是否意味着空白页是 pagecolumns 的预期功能?如果是这样,有什么方法可以禁用它吗?在 pagecolumns 环境结束后添加分页符非常有意义,但额外的空白页是不必要的。我查看了 ConTeXT Garden Wiki 上有关该 \definepagecolumns命令的页面,以获取有关其接受的输入的更多信息,但似乎没有该命令的页面。

这个问题与ConTeXt:当文本到达列尾时抑制空白页,其中在列集环境之后添加了一个空白页。在这个问题中,建议的解决方案是重新定义 page-cst.mkiv 中的 \page_grd_stop 宏。不幸的是,这并不能解决我的 MWE 中的 pagecolumns 问题。pagecolumns 命令是否像 columnset 命令一样别名为 pagegrid 命令,还是在其他地方定义?我检查了 page-col.mkiv,但它似乎太短,不像是定义 pagecolumns 行为的文件。

有没有办法修复我遗漏的这个问题?

答案1

感谢 Wolfgang Schuster,我找到了答案。正如我在问题评论中提到的,pagecolumns 源代码位于page-pcl.mkiv。在该代码中,\stoppagecolumns宏有两种实现,\page_col_stop_yes\page_col_stop_nop。使用哪种实现取决于使用\startpagecolumns\page_col_start_yes\page_col_start_nop)两种实现中的哪一种。该选择又在\page_col_start宏中做出。选择取决于列数(即npagecolumns 环境的选项)是否大于一,则使用 start 和 stop 命令的“yes”实现;否则,使用“no”实现。

Wolfgang Schuster 提出的修复方法是修补宏,\page_col_stop_yes以便仅当环境没有在页面的最后一列结束时才添加一列:

\unprotect
\def\page_col_stop_yes
  {%Add a column only if this is not the last column on the page:
  \ifnum\c_page_col_current<\c_page_col_n_of_columns
    \column
  \fi
  \page
  \endgroup
  %\setupoutputroutine[\s!singlecolumn]%
  \page_otr_command_set_vsize
  \page_otr_command_set_hsize
  \page
  \endgroup}
\protect

也就是说,添加空白页似乎是代码中需要修复的问题,但与此同时,这个补丁应该可以起作用。

相关内容