我经常遇到嵌套的 itemize 环境,这些环境必须与嵌套在其下的项目显示在同一页面上,例如作业或考试中问题的一部分。我似乎无法找出在所有嵌套内容能够实际容纳在页面上的情况下强制此行为的正确选项。
\page[bigpreference]
我曾尝试在嵌套的 itemize 之后使用:
\usemodule[visual]
\setupitemize[2][after={\page[bigpreference]}]
\starttext
\startitemize
\dorecurse{20}{
\item This is an exam/assignment question item: \fakewords{10}{20}
\startitemize
\dorecurse{3}{
\item subquestion or multiple choice answer: \fakewords{10}{20}
}
\stopitemize
}
\stopitemize
\stoptext
但我在第一页就遇到了一个不想要的中断:
我找到了一个参考\c_strc_itemgroups_spacing_mode=0
在另一个问题中虽然这有帮助,但我仍然在第 3 页看到不需要的分页符。我也尝试过,\setupitemize[1][inbetween={\page[bigpreference]}]
但没有任何改善。
我不完全确定这种行为是否特定于嵌套的项目化环境,但是否有任何通用方法可以确保顶级项目内容永远不会跨页面拆分?
更新:
在尝试使用页面首选项选项时,我发现\page[no]
和的组合\page[bigpreference]
似乎效果最好,但由于它基于首选项,因此无法保证最终结果。将以下选项包含到上述代码中仍会导致第 6 页出现不必要的分页符:
\setupitemize[2][inbetween={\page[no]},
before={\page[no]},
after={\page[bigpreference]}]
也许某种框架解决方案是最好的,但我不确定如何以通用的方式实现它(无需手动定义框架)。
答案1
改变间距模式对你有用吗?
\usemodule[visual]
\unprotect
% 0 = before/after
% 1 = between unless before
% 2 = between
\c_strc_itemgroups_spacing_mode=0
\protect
\setupitemize[2][before={\blank[samepage]}]
\starttext
\startitemize
\dorecurse{20}{
\item This is an exam/assignment question item: \fakewords{10}{20}
\startitemize
\dorecurse{3}{
\item subquestion or multiple choice answer: \fakewords{10}{20}
}
\stopitemize
}
\stopitemize
\stoptext
点击放大图片: