为什么 \iow_shipout: 会引入排版空格(而 \iow_now: 不会)?

为什么 \iow_shipout: 会引入排版空格(而 \iow_now: 不会)?

对于我的简历,我有一个环境,它将信息分为两个小页面——一个用于显示职位/教育数据,一个用于显示环境内容。我编写的类还会产生纯文本输出(目前主要是为了好玩):

\cs_new:Nn \resume_maybe_write:n {
  \tl_if_empty:NF \g_resume_options_output_text_file_tl {
    \iow_now:Nx \g_resume_output_text_iow { #1 }
  }
}

这实际上是导致此处出现的间距问题的原因:

输出

\hrule您会注意到,在第二个环境的顶部和底部添加minipage可以解决问题。我不确定为什么——texdef hrule似乎表明它是一个原始的(!?)。

完整源代码可供查看在 GitHub 上 (写作地点为 [此处][github-ioq]),但我要强调的是,完全地已修复该问题这个


我的实际问题已经解决,但我非常好奇:这可能是什么原因造成的?这应该被视为 中的错误l3file,还是预期的行为?如果是后者,为什么会这样?

答案1

翻译回 TeX 原始名称:

\immediate\write...{...}不会创建节点,因此不太可能影响任何东西的间距,它只是写入指定的输出流。

\write...{..}确实会使一个节点坐在那里弄乱间距,直到您输出带有的页面\shipout

真的很难停下来那是什么节点弄乱间距。颜色支持也会出现同样的问题。尤其是将这样的节点放在垂直列表中会存在问题,而且通常很难避免将它们放在垂直列表中。

相关内容