这个问题出现在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
\startpagecolumns
https://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
宏中做出。选择取决于列数(即n
pagecolumns 环境的选项)是否大于一,则使用 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
也就是说,添加空白页似乎是代码中需要修复的问题,但与此同时,这个补丁应该可以起作用。