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
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_text
和var_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_bank
或 question_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