R/exams:防止exams2nops中两段之间的分页

R/exams: prevent page breaks between two paragraphs in exams2nops

我目前正在使用 R/exams 包,特别是使用 exams2nops 功能创建考试,问题的顺序是随机的。除一个细节外,一切正常:samepage = TRUE 选项仅防止段落内的分页符。然而,为了我的目的,有必要不要拆分任何练习。在一个文本中,仍然可以只写一个段落(尽管这对清晰度没有帮助)。不幸的是,每当我需要包含 table 时,我都被迫开始一个新段落,该段落不受分页符的“保护”。由于随机化,总有一些副本的文本和 tables 被拆分到多个页面。我尝试了 .Rmd 和 .Rnw 文件,还尝试集成一些 LaTeX 函数,例如 \nopagebreak\needspace 但没有成功。到目前为止,我对 LaTeX 不太熟悉,而且在 Google 的帮助下我没有找到解决方案。

这里是我所谈论的练习类型的一个最小示例:

.Rmd

Question
========
Some kind of question:

| A | B | C |
|:-:|:-:|:-:|
| 1 | 2 | 3 |
| 1 | 2 | 3 |
| 1 | 2 | 3 |
| 1 | 2 | 3 |
| 1 | 2 | 3 |

Answerlist
----------
* First option
* Second option
* Third option

Some further informational text.

.Rnw

\begin{question}
Some kind of question:
\begin{center}
\begin{tabular}{ccccccr}
$\text{A}$ & $\text{B}$ & $\text{C}$ \
$\text{1}$ & $\text{2}$ & $\text{3}$ \
$\text{1}$ & $\text{2}$ & $\text{3}$ \
$\text{1}$ & $\text{2}$ & $\text{3}$ \
$\text{1}$ & $\text{2}$ & $\text{3}$ \
$\text{1}$ & $\text{2}$ & $\text{3}$ \
\end{tabular}
\end{center}
Some further informational text.
\begin{answerlist}
  \item First option
  \item Second option
  \item Third option
\end{answerlist}
\end{question}

我不确定要尝试什么。

samepage = TRUE 选项仅强制 {answerlist}{samepage} 环境中 - 但不是整个 {question}.

完成您想做的事情的最简单的选择似乎是 re-define {question} 参数中的 header = 环境。您可以尝试通过

将所有内容放入 {samepage} 环境中
exams2nops(...,
  header = "\renewenvironment{question}{\item \begin{samepage}}{\end{samepage}}")

不过,这可能需要与段落之间的一些 \nopagebreak 命令相结合。 (参见:Make an unbreakable block in TeX

一个更简单的解决方案可能是通过在每个练习的末尾包含一个分页符将每个练习放在自己的页面上:

exams2nops(...,
  header = "\renewenvironment{question}{\item}{\newpage}")

如果您不熟悉上面的 LaTeX 语法:

  • \renewenvironment{foo}{...}{...} re-define 环境“foo”。
  • 第一个...是环境开始执行的
  • 第二个...在最后执行。
  • 默认只在开始时执行\item以增加练习的枚举计数器
  • R 中需要双反斜杠(例如 \item)来转义反斜杠,因为它们是特殊字符。