![控江数学组题库](http://wwylss.synology.me:48089/i/2024/02/08/65c4504d1fc58.png) #
题库使用指南2024版
**本教程中的默认文件夹是题库根目录/工具v2** ## 打开面板的方式 在配置好python的math环境, 在题库根目录运行过``pip install -r requirements.txt``, 并且编写过``conda_initiate.bat``之后, 在终端的题库根目录运行``conda_initiate.bat``, 随后在终端依次输入``cd 工具v2``回车, ``python 工具面板.py``回车, 会跳出一个``tkinter``做的GUI面板. ![1707404577237.png](http://wwylss.synology.me:48089/i/2024/02/08/65c4ed2046c2a.png) ## 在overleaf上协作编辑 我们**自己部署的本地overleaf服务器**的地址是[overleaf kongjiang](http://kjwangweiye.top:40388)(``kjwangweiye.top:40388``)或[overleaf kongjiang mirror](http://wwylss.synology.me:40388)(``wwylss.synology.me:40388``) 如果还未注册过, 请联系管理员, 提供一个邮箱(可以是真实的邮箱, 也可以不是)以新建账号(之后首次登录会要求设置密码, 请**不要忘记邮箱和密码**) 万一忘记了邮箱和密码就只能删除账号重新再开了, 服务器上属于该账号的所有工作就一并被删除了. 知道对方的邮箱的话, 可以在overleaf上邀请对方参加协作, 一起编辑同一个项目. ![overleaf邀请](http://wwylss.synology.me:48089/i/2024/02/08/65c4547710b33.png) ## 在gitlab上提交issue 我们**自己部署的本地gitlab服务器**的地址是[gitlab](http://wwylss.synology.me:30000)(``wwylss.synology.me:30000``) ![gitlab主界面](http://wwylss.synology.me:48089/i/2024/02/08/65c460bd07ab7.png) 如果还未注册过, 请在上述界面中注册, 并联系管理员以通过注册. 一个较大的项目的协作者之间的工作联系通常**不是**通过微信、电话这种*追溯历史不太方便的方式*实现的. gitlab提供了一个比较有效的方式: 提交issue(问题/事件) ![提交issue的按钮](http://wwylss.synology.me:48089/i/2024/02/08/65c462ec76194.png) 上图就是提交issue的按钮, 点击后选择``新建议题``, 会显示下面的界面 ![新建议题界面](http://wwylss.synology.me:48089/i/2024/02/08/65c463bd9aeef.png) 1. 用简略的文字描述issue 2. 详细描述issue的内容(可以使用markdown语法, 如果会markdown的话) 3. 按这个按钮可以添加附件(在提供一些文件例如metadata.txt等的时候十分有用) 4. **指派哪些人来跟进这个议题**, 一般有同备课组的负责人和管理员等 5. 前四项全填完之后, 点击``Create议题``以生成这个新的issue 之后就可以在这个issue中进行对话沟通, 完成后(或者完不成但是也不想留置)有权限的成员(提出者, 指派人, 管理员等)可以关闭议题. ## 收录新题 ***对于需要合并到主题库的题目, 在收录之前请务必和管理员协商确定起始题号, 避免不同使用者的题号出现冲突*** ***测试的时候请先拉取远程的tutorial分支, 在此基础上新建分支, 之后进行收录新题操作*** 收录新题前, 需要准备一个能够编译通过的LaTeX文件, 正文部分是一个``enumerate``环境, 其中每一个``\item``表示一道题目. 例如: ```latex \begin{enumerate} \item 设$x=1$, 则$x^2$的值为\blank{50}. \item $x=1$是$x>0$的\bracket{20}条件. \fourch{充分非必要}{必要非充分}{充要}{既非充分又非必要} \item 已知$f(x)=x^2+1$, 求$f(3)+f(5)$的值. \end{enumerate} ``` 这是一个由三道题目组成的``enumerate``环境(文件的其他部分可以在``模板文件/讲义模板.txt``中获取), 手动输入后, 可以通过面板收录到题库. 但是**更多时候这样一个LaTeX文件的来源是通过mathpix识别**得到的. ### 使用mathpix自动识别题目 mathpix是一个非常好用的数学文字和公式转换工具, 唯一的缺点是大量转换要花钱, 目前新账号的处理限额是每月10次(基本上不够用). 如果还没有注册过的话, 建议用一个邮箱注册一下. mathpix的网址是[mathpix](https://mathpix.com)(https://mathpix.com). 下载mathpix的桌面客户端: ![1707403096438.png](http://wwylss.synology.me:48089/i/2024/02/08/65c4e757d6999.png) ![1707403120358.png](http://wwylss.synology.me:48089/i/2024/02/08/65c4e76f8549a.png) 如果不想注册或者限额用完了, 以下几个账号可能可以用(限额应该会每月更新): - ``Nelly.Eugen@alumni.stanford.edu`` 密码: ``321aA@mathpix`` - ``fchavez46@student.mtsac.edu`` 密码: ``Ab@789789`` - ``fwhitsett@student.mtsac.edu`` 密码: ``Ab@789789`` - ``4552933337@student.cumtb.edu.cn`` 密码: ``Ab@789789`` - ``515625773@student.cumtb.edu.cn`` 密码: ``Ab@789789`` 以下以识别``tutorial``分支上的``../文档/教学材料/待收录.png``为例: 1. 在资源管理器中打开这个文件(肉眼可见其中的内容). 2. 启动mathpix客户端(一般会隐藏在右下角) ![mathpix客户端图标](http://wwylss.synology.me:48089/i/2024/02/08/65c4ea8669dcf.png) 3. 右键点击图标, 在弹出的菜单中选``GET LATEX``(后面跟着的是快捷键) 4. 屏幕会变成灰黑色, 并且有一个十字表示鼠标当前位置, 拖一个红色的矩形框圈住所有想要识别的文字(表会被识别, 图不会), 等待一会儿 ![截图识别界面](http://wwylss.synology.me:48089/i/2024/02/08/65c4eb8f7d4ef.png) 5. 在mathpix窗口中按图示方式点击, 将LaTeX代码复制到剪贴板 ![将源代码复制到剪贴板](http://wwylss.synology.me:48089/i/2024/02/08/65c4ebe832e56.png) ### 识别的内容复制到剪贴板之后的操作 #### 作一些预处理, 使风格和题库中的题目的风格一致, 并确保LaTeX代码没有语法错误 1. 在面板上点击``其他``-``mathpix识别文字预处理``, 点击绿色的``运行``, 这会预处理识别的结果, 预处理后的结果仍然在剪贴板中 ![mathpix识别文字预处理](http://wwylss.synology.me:48089/i/2024/02/08/65c4ed4ba5c77.png) 2. 在``vscode``中打开``模板文件/讲义模板.txt``, 另存为``临时文件``中任意一个以``.tex``结尾的文件, 例如``test01.tex`` ![文件另存为](http://wwylss.synology.me:48089/i/2024/02/08/65c4ee76a0db9.png) 3. 在该``.tex``文件中将图中的``<<待替换2>>``替换为如下代码(粘贴后如果有代码缩进, 全选按-可取消缩进) ```latex \begin{enumerate} <剪贴板中的代码> \end{enumerate} ``` ![原始文件](http://wwylss.synology.me:48089/i/2024/02/08/65c4f6ec27eb2.png) ![替换后的文件](http://wwylss.synology.me:48089/i/2024/02/08/65c4f7ad2739b.png) 4. 按``ctrl-alt-b``编译, 如果下方状态栏的圈转了之后显示勾, 说明编译成功, 这时可按``ctrl-alt-v``查看编译结果; 如果显示红色的叉, 说明文件有问题, 需要自己或有经验的同伴帮忙检查一下 5. 题目中或多或少会有一些问题, 这一步先不用修改. 6. 全选``.tex``文件的内容, 并复制到剪贴板. #### 和题库中已有的题目作比对并手动作一些标记 在导入新题到题库时, 我们一般关心每一道新题目是否和题库中已有的题目完全相同(可能描述会有细微的差别, 但不需要作较为精细的理解就能发现两道题目的含义一致, 并且题目类型[填空/选择/解答]也完全一致, 如果是选择题的话, 选项也一致), 或者明显相关联(未达到上述标准, 但是求解时所用的方法一致, 计算难度相当; 或者某一题是另一题的一部分等). 对于完全相同的题, 如果它不出现在一张规范的整卷(如一模二模卷, 高考卷等), 那事实上没有必要收录, 使用之前的题目即可; 如果它出现在一张规范的整卷中, 为了整卷的题号连续起见, 还是希望再收录一遍该题, 收录的同时作好``相同``的标记(``same``). 对于相关的题, 也希望能在收录时做好``相关``的标记(``related``). 1. **在上一步的``.tex``源代码全部被复制到剪贴板之后**, 紧接着用面板进行新题比对, 在面板的``录入``菜单中选择``新题比对``, 立即点击``运行``按钮 ![运行新题比对脚本](http://wwylss.synology.me:48089/i/2024/02/09/65c4fdc5d2b96.png) 2. 在``vscode``中会呈现一个名为``新题比对.tex``的LaTeX源文件, 在该窗口内按``ctrl-alt-b``进行编译, 如果编译通过的话按``ctrl-alt-v``在右侧预览 ![新题比对预览](http://wwylss.synology.me:48089/i/2024/02/09/65c56fed7d851.png) 3. 右侧pdf中的每一道题之后可能会有几个色块, 每一个色块表示一道*字符串意义下*和原题比较接近的题目(Levenshtein jaro算法), 源代码的``\item``后面有一个中括号, 中括号内是色块中题目的题号. 色块越红越表示越接近. 4. 如果在色块中的题目和打算导入的新题是相同的, 可以用原有的题目替代, 那么在中括号中的题号前加上``rep``字样(同时本题其他色块题号的标注都作为无效). ![rep的展示](http://wwylss.synology.me:48089/i/2024/02/09/65c5715d00f40.png) 5. 如果在色块中的题目和打算导入的新题是相同的, 但依然打算导入为新题, 那么在中括号中的题号前加上``s``字样(同时本题其他色块题号的``s``,``r``标注依然有效), 如下图 ![s和r的展示](http://wwylss.synology.me:48089/i/2024/02/09/65c572b47cdef.png) 6. 如果在色块中的题目和打算导入的新题是相关的, 那么在中括号中的题号前加上``r``字样(同时本题其他色块题号的``s``,``r``标注依然有效), 如上图 7. 在做标记时, 仔细检查欲导入的题目内容是否有明显问题, 图不会画的话在题目后方打上``缺图``字样, 后续管理员会跟进处理 8. 标记期间随时可以保存或编译(编译时会自动保存), **标记完成后记得**``ctrl-alt-b``**编译**, 确定没有语法错误 #### 将标记完成的题目及相关信息一并收录到题库 1. 在面板上选``录入``-``批量收录题目`` ![批量收录题目](http://wwylss.synology.me:48089/i/2024/02/09/65c5738d0e250.png) 2. 在``vscode``的``批量收录题目.py``窗口中修改以下信息: ![批量收录题目设置](http://wwylss.synology.me:48089/i/2024/02/09/65c5740c1ca84.png) 1. ``starting_id``表示起始题号(``int``类型), 如果起始题号被占用, 则会自动寻找之后的第一个空闲题号作为起始 2. ``raworigin``表示题目来源, 如果没有明确的出处建议使用``自拟题目``字符串 3. ``editor``表示收录者, 改为自己的名字 4. ``IndexDescription``是字符串, 默认留空; 如果新试题来自一张试卷, 将其改为``"试题"``, 效果是收录题目时会对题目的题号做标注, 类似``2023年上海秋季高考试题3`` 3. 编辑完成后保存, 关闭, 随后在面板上点击``运行``按钮 4. 终端会显示收录的进度, 收录完成后``vscode``会打开一个名为``新题收录列表.txt``的窗口, 最后两行就是本次收录的信息(日期, 题号等) ![新题收录列表](http://wwylss.synology.me:48089/i/2024/02/09/65c575590196c.png) 随后如果有必要, 可添加``Problems.json``及``新题收录列表.txt``至暂存区, 之后可以commit到本地的repository, 乃至push到远程的服务器. ## 添加关联题 1. 在题库中选择需要添加关联题的旧题目的题号(可用``:``和``,``进行分隔) 2. 在面板上选择``录入``-``添加关联题目`` ![面板添加关联题目](http://wwylss.synology.me:48089/i/2024/02/09/65c58dd36123c.png) 3. 对``vscode``中打开的``添加关联题目.py``进行编辑, 一般需要修改以下三处 ![编辑添加关联题目](http://wwylss.synology.me:48089/i/2024/02/09/65c58e9bf11f5.png) 1. 修改被关联的题号(可用``:``和``,``进行分隔) 2. 新题目的起始题号(``int``类型), 如果起始题号被占用, 则会自动寻找之后的第一个空闲题号作为起始 3. 编辑者姓名 4. 保存后关闭``添加关联题目.py``, 在面板上点击``运行`` 5. 在``vscode``中会打开一个``problems.json``的文件, 目前它将旧题目的信息复制了过来, 在``related``字段(黄色框)中自动建立了关联. ![编辑problems_edit.json](http://wwylss.synology.me:48089/i/2024/02/09/65c58fca9233f.png) 6. 在编辑时(见上图), ``id``字段**一定不要改动**, ``content``字段中保存的是raw格式的字符串, 和LaTeX代码主要的区别如下: |raw格式|LaTeX格式| |:---:|:---:| |``\\``|``\``| |``\n``|``<换行>``| |``\t``|````| ``genre``字段可能有变化(类型[填空题/选择题/解答题]可能变化了), ``ans``和``solution``字段中如果有内容可能需要修改或删去(题目改变了解答和答案可能有变化) 7. 编辑完成后保存, 关闭``problem_edit.json``文件后, 程序会自动添加新的题目, 添加完成后会对新题目进行试编译. 如果试编译失败, 则刚才的所有编辑将全部失效(所以每次建议少添加几个关联题), 题库文件将退回原状; 如果试编译成功, 则``Problems.json``中的相应位置会添加对应的关联题目 随后如果有必要, 可添加``Problems.json``至暂存区, 之后可以commit到本地的repository, 乃至push到远程的服务器. ## 导入metadata(各种数据与信息, 如答案, 解答, 备注, 使用记录, 标签等) 在``工具v2/文本文件``目录中有一个名为``metadata.txt``的文件, 其一般结构如下: ```txt ans 10235 $1$ 2235 真命题 usages 021146 20231222 2025届高二11班 1.000 021147 20231222 2025届高二11班 0.952 ``` 其中``ans``表示答案, ``usages``表示使用记录. 这个``metadata.txt``文件如果导入题库, 会 - 把第``10235``题的答案用``$1$``覆盖, - 把第``2235``题的答案用``真命题``覆盖, - 在``21146``的``usages``字段中添加``20231222 2025届高二11班 1.000``, - 在``021147``的``usages``字段中添加``20231222 2025届高二11班 0.952``. 每一个字段(如``ans``或``usages``等)及每一条记录之间都用多于一个换行符分隔(很多情况下换行之类的格式都是自动生成的), 其他``metadata.txt``可以接受的字段有: - ``content``: 题目内容(``str``类型), 导入时将**覆盖**原内容 - ``objs``: 课时目标(目标代码, ``list``类型), 导入时将**新增**项目 - ``tags``: 题目标签(``list``类型), 导入时将**新增**项目 - ``genre``: 题目类型(填空题/选择题/解答题), 导入时将**覆盖**原内容 - ``ans``: 答案(``str``类型), 导入时将**覆盖**原内容 - ``solution``: 解答或提示(``str``类型), 导入时将**覆盖**原内容 - ``duration``: 所需时间(单位为分钟, 暂时均赋值``-1``, ``int``类型), 导入时将**覆盖**原内容 - ``usages``: 使用记录(``yyyymmdd班级代号得分率``), 导入时将和之前的记录作比对, 如果确认是新的则**新增**项目 - ``edit``: 编辑记录(``list``类型), 导入时将**新增**项目 - ``same``: 相同题号(指内容和类型均相同的题目, ``list``类型), 导入时将**双向新增**项目(a与b相同当且仅当b与a相同, 导入时会在两道题的记录中同时添加题号) - ``related``: 相关题号(指题目和做法都基本一致或者某一题是另一题的一部分, ``list``类型), 导入时将**双向新增**项目(a与b相关当且仅当b与a相关, 导入时会在两道题的记录中同时添加题号) - ``unrelated``: 无关题号(指字符串意义上相近, 容易被自动找出, 但实际上无关的题目, ``list``类型), 导入时将**双向新增**项目(a与b无关当且仅当b与a无关, 导入时会在两道题的记录中同时添加题号) - ``remark``: 备注(``str``类型), 导入时将**新增**字符串 - ``space``: 题后的空间(单位一般为``em``, 大部分解答题默认为``4em``, ``str``类型), 导入时将**覆盖**原内容 准备好``metadata.txt``文件之后, 在工具面板上按``维护``-``批量添加字段数据`` ![批量添加字段数据](http://wwylss.synology.me:48089/i/2024/02/08/65c4dfc8bf93e.png) 在``vscode``界面会打开``文本文件/metadata.txt``, 编辑完成后**保存关闭**(重要, 不关闭的话面板会处于假死状态), 面板会生成一个绿色的``运行``按钮, 按动按钮, 系统会自动导入数据到``题库0.3/Problems.json``. ![运行按钮](http://wwylss.synology.me:48089/i/2024/02/08/65c4e0ba11e72.png) 随后如果有必要, 可保存``Problems.json``至暂存区, 之后可以commit到本地的repository, 乃至push到远程的服务器. ## 两种编辑题库中已有题目的方式 ###
$\LaTeX$方式(可编辑题目, 答案, 解答)
###
json方式(可编辑任何信息)
## 从$\LaTeX$源文件中提取答案 ## 题目和单元挂钩 ###
生成"未挂钩单元题目"的LaTeX源文件、pdf文件与数据文件(临时文件/单元对应.txt)
###
根据数据文件(临时文件/单元对应.txt)生成metadata.txt
## 小闲平台使用数据导入 ## 根据特定特征筛选题号 ## 根据题号表达式(可含:或,的字符串)生成讲义 ## 录入讲义结构与内容 ###
讲义首字母的通用规则
- E: 正式测验卷与考试卷 - I: 非正式的小测验 - W: 周末卷 - G: 高一高二的学案 - J: 高三的复习讲义 - F: 高三的赋能卷 - V: 假期作业 ###
录入新的讲义种类的结构(备课组之前未使用过的首字母)
###
录入新的讲义的题号ID等内容
## 对小闲平台的答题纸与数据库进行对应 ***对应的目的是能更方便地收录使用信息*** ## 系列讲义生成 ## 添加基础知识梳理 ***因可能有冲突, 故建议该项工作完全由管理员进行, 备课组负责人整理完成后在gitlab上提issue***