You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在exams2nops不同试题分区配置强制/禁止分页规则

exams2nops 分区差异化分页实现方案

核心思路是按题目类型分组生成试卷片段,单独配置分页规则后合并输出,不需要魔改全局LaTeX环境,也不会出现不必要的纸张浪费,同时彻底解决图表、题干被分页截断的问题。

1. 前置准备:按分区整理题目文件

不要把三类题目混在同一个文件列表中传入exams2nops,先按分类单独存放:

  • 分区1(纯文本多选题、禁止分页):所有无图、篇幅短的多选题存入单独文件夹,单题内容高度控制在2/3页以内,避免触发同页约束导致的异常留白
  • 分区2(带图表多选题、强制分页):所有配图表、需要对照作答的多选题存入单独文件夹,编写题目时固定图片尺寸,不要留LaTeX浮动空间
  • 分区3(开放题、强制分页):所有开放题(无论是否带图)存入单独文件夹

2. 分区块生成试卷片段,单独配置分页规则

exams2nops本质是生成LaTeX代码后编译为PDF,给不同分区传入独立的header参数,就能实现互不干扰的分页规则:

分区1配置(禁分页、无强制换页)

用LaTeX原生samepage环境包裹单道题目,只要题目高度不超过单页,就不会出现题干、选项被分页截断的问题,同时题间不强制换页,节省纸张:

p1 <- exams2nops(
  file = list.files("q1_plain_mchoice/", full.names = TRUE),
  n = 1, # 替换为实际需要的试卷份数
  dir = "temp_parts/",
  header = c(
    "\\renewenvironment{question}{\\begin{samepage}\\item}{\\end{samepage}}"
  )
)

之前直接用\nopagebreak不生效,是因为该命令只对紧邻的内容生效,无法覆盖整个题目、选项的范围,用samepage包裹整个question环境才能实现完整的同页约束。

分区2、3配置(单题后强制分页)

这两类题目单题占用空间大,配置题后自动分页,保证图表、题干、答题区在同一页:

# 分区2:带图表多选题
p2 <- exams2nops(
  file = list.files("q2_plot_mchoice/", full.names = TRUE),
  n = 1,
  dir = "temp_parts/",
  header = "\\renewenvironment{question}{\\item}{\\clearpage}"
)

# 分区3:开放题
p3 <- exams2nops(
  file = list.files("q3_open/", full.names = TRUE),
  n = 1,
  dir = "temp_parts/",
  header = "\\renewenvironment{question}{\\item}{\\clearpage}"
)

这里用\clearpage代替\newpage,可以顺带处理浮动图片的位置,避免图片飘到分页处被截断。

3. 合并分区输出最终试卷

三个分区的试卷片段生成后,调用exams包内部的合并函数拼接内容,直接输出完整PDF即可:

# 合并三个分区的nops对象
final_exam <- exams:::nops_merge(list(p1, p2, p3))
# 编译输出最终PDF
exams:::nops_write_pdf(final_exam, dir = "final_output/")

优化提示

  • 带图表的题目编写时,直接在Rmd/Rnw代码块中固定图片宽高,比如设置fig.height=4, fig.width=6,不要让LaTeX自动调整图片尺寸,减少浮动错位概率
  • 分区1的纯文本题如果出现个别超长题,直接移到分区2即可,不需要调整全局配置
  • 不需要额外引入第三方LaTeX包,samepage是LaTeX原生环境,不会和nops的默认模板冲突

内容的提问来源于stack exchange,提问作者JSP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 19:03:50