#variant #questions #programming #generate #exam #multiple #different

bin+lib vmks-exam-generator

一个简单的 CLI 程序,用于伪随机生成嵌入式编程考试的多种变体

5 个版本 (3 个稳定版)

1.3.0 2024 年 1 月 15 日
1.0.1 2021 年 11 月 7 日
0.1.4 2021 年 1 月 5 日
0.1.3 2020 年 12 月 15 日

文本处理 中排名 139

AGPL-3.0-only

74KB
2K SLoC

VMKS 考试生成器

一个简单的 CLI 程序,用于伪随机生成嵌入式编程考试的不同变体。设计用于保加利亚索非亚的“电子系统”技术学校。

当生成新的变体时,会从题库中随机选择可调整的问题子集。多选题的问题和可能的答案都会打乱顺序。支持从预定义的可能值列表中随机选择问题文本的部分。这使得生成稍微不同的任务成为可能,例如
"编写一个打印正方形星号的程序"

"编写一个打印三角形井号的程序"。

默认情况下,生成的考试变体是 pdf 表单或纯文本文件,如果指定了,则是纯文本文件。生成 pdf 表单需要工作正常的 LaTeX 发行版和 latexmk

安装

目前,VMKS 考试生成器只能通过从源码编译来安装。这需要一个正常工作的 Rust 工具链。可以从您发行版的软件包管理器或从 rust-lang.org 获取它。安装 rustup 后,可以使用以下命令安装稳定工具链

rustup toolchain install stable

然后,要安装 VMKS 考试生成器,请运行

cargo install vmks-exam-generator

用法

Usage: vmks-exam-generator [OPTIONS]

Options:
  -n, --variants <VARIANTS>       Number of variants to generate
  -q, --question-bank <FILENAME>  XML file specifying the questions [default: questions.xml]
  -s, --num-seed <SEED>           Use the number SEED to seed the random number generator
  -S, --text-seed <SEED>          Use the hash-sum of the string SEED to seed the random number generator
  -t, --plain-text                Output plaintext instead of pdf forms
  -e, --no-escape                 Don't escape special characters
  -h, --help                      Print help information (use `--help` for more detail)
  -V, --version                   Print version information

如果没有为随机数生成器提供种子,则使用自 UNIX 纪元开始以来的秒数。默认的变体数量为 30,默认的题库文件名为 "questions.xml"。默认情况下,特殊字符会被转义,以避免 LaTeX 错误并方便在问题中缩进文本。

题库文件格式

用于生成不同考试变体的题库集以 XML 格式描述。示例在 example_questions.xml 中提供。

标题

作为一个XML文件,问题库文件自然必须以XML版本和编码声明开头,例如

<?xml version="1.0" encoding="UTF-8"?>

问题库

整个问题集被包含在一对开闭标签question_bank中。它可以选择包含title属性。如果指定了,它的值将在每个变体开始时作为标题出现。

question_bank可以选择包含一个description标签对。包含在内的任何文本将在变体开始时显示,但位于标题之后(如果指定了)。

<question_bank title="Very Difficult Exam">
    <description>
        This exam will test such and such skills. It requires that much time and the maximum points are X.
    </description>
    <question_group>...</question_group>
    <question_group>...</question_group>
    ...
</question_bank>

问题组

问题通过question_group标签分为不同的组。这些标签可以具有pick属性,它选择从给定组中选取多少个问题,shuffle属性决定组中的问题是否需要随机排序,以及与同一名称的question_bank属性相似的title属性,它在生成的考试变体相应部分之前显示。所有问题组属性都是可选的。shuffle属性可以是true(默认)或false。它决定组中问题的顺序是否需要随机排序。如果没有指定pick属性,则每个变体都将包含该组中的所有问题。每个问题可以是多项选择题或具有可变部分的题目。问题组还支持可选的description标签对。

<question_group title="Questions about some topic" pick="5" shuffle="false">
    <description>
        Each correct answer in this section is worth Y points. There is only one correct answer per question.
    </description>
    <question_mc>...</question_mc>
    <question_mc>...</question_mc>
    <question_var>...</question_var>
    ...
<question_group>

多项选择题

多项选择题由一对question_mc标签包围,并可以选择包含决定可能的答案是否需要随机排序的shuffle属性。它可以取true(默认)或false。每个question_mc包含一个question_text标签对,后面跟着answer_mc标签对。问题的实际文本放置在question_text标签之间。answer_mc标签对用于指定可能的答案选项。

<question_mc shuffle="false">
    <question_text>When?</question_text>
    <answer_mc>Now</answer_mc>
    <answer_mc>Later</answer_mc>
    <answer_mc>Whenever</answer_mc>
    <answer_mc>A long time ago</answer_mc>
    <answer_mc>Tuesday</answer_mc>
</question_mc>

具有可变部分的问题

具有可变部分的问题被question_var标签包围,并包含任意数量的question_textvar_text标签对。每个var_text标签对包含任意数量的option标签对,这些标签对又包含在此位置问题文本中可能出现的不同值。var_text还可以包含question_var以允许多级可变性。在变体之间不改变的问题文本部分放置在question_text标签对内。

生成的变体中,带有可变段的问题下方会显示文本框。question_var 标签可以有一个可选属性 - text_field_height。它的值必须是介于0和65535之间的整数(默认为5)。它决定了相应问题的文本框可以容纳多少行文本,无需滚动。设置为0以删除文本框。在 var_text 中嵌套 question_var 不会创建额外的文本框,并且对于嵌套问题,会忽略 text_field_height 属性。

<question_var text_field_height="5">
    <question_text>Build a </question_text>
    <var_text>
        <option>castle</option>
        <option>garage</option>
        <question_var>
            <question_text>house with a </question_text>
            <var_text>
                <option>chimney</option>
                <option>porch</option>
                <option>terrace</option>
                <option>fence</option>
            </var_text>
        </question_var>
    </var_text>
    <question_text> out of </question_text>
    <var_text>
        <option>hay</option>
        <option>planks</option>
        <option>bricks</option>
    </var_text>
    <question_text> in 5 minutes.</question_text>
</question_var>

注意

如果指定了相同的属性多次,其最后一个实例将覆盖之前的实例。同样适用于同一 question_bankquestion_group 内的多个 description 标签实例。

当在问题库文本中遇到 \n\t 序列时,它们将被分别替换为换行符和制表符。为了避免这种情况,当不需要时,可以使用如下方式转义斜杠:\\。在生成PDF文件时,字符 #$%_{} 也会用斜杠转义,因为它们在LaTeX中具有特殊含义。如果您不希望问题文本以任何方式改变,可以通过运行程序时使用 -e 标志来禁用此功能。这对于在生成变体时要评估的问题文本中添加LaTeX命令很有用。

标题、描述以及多项选择题和答案中的文本将去除首尾空白。构成可变文本问题的文本不会去除空白。

标签和属性简写形式

所有标签和一些属性都有简写形式

question_bank - qb
question_group - qg
question_mc - qmc
question_var - qv
question_text - qt
answer_mc - amc
var_text - vt
option - o
title - t
description - d
text_field_height - tfh

依赖关系

~1.5MB
~28K SLoC