diff --git a/工具/修改题目数据库.ipynb b/工具/修改题目数据库.ipynb index b45991cb..ffc5c511 100644 --- a/工具/修改题目数据库.ipynb +++ b/工具/修改题目数据库.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 4, + "execution_count": 1, "metadata": {}, "outputs": [ { @@ -11,7 +11,7 @@ "0" ] }, - "execution_count": 4, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -19,7 +19,9 @@ "source": [ "import os,re,json\n", "# 这里修改题目id, 可以不满6位\n", - "index = \"5956\".zfill(6)\n", + "id = 5900\n", + "\n", + "index = str(id).zfill(6)\n", "with open(r\"../题库0.3/Problems.json\",\"r\",encoding = \"utf8\") as f:\n", " database = f.read()\n", "line = '\"id\": \"'+index+'\",'\n", diff --git a/工具/批量题号选题pdf生成.ipynb b/工具/批量题号选题pdf生成.ipynb index 354135ee..4410ff19 100644 --- a/工具/批量题号选题pdf生成.ipynb +++ b/工具/批量题号选题pdf生成.ipynb @@ -2,44 +2,20 @@ "cells": [ { "cell_type": "code", - "execution_count": 3, + "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "开始编译教师版本pdf文件: 临时文件/批量生成题目/K0514006B_教师用_20220923.tex\n", + "开始编译教师版本pdf文件: 临时文件/批量生成题目/test1_教师用_20221007.tex\n", "0\n", - "开始编译学生版本pdf文件: 临时文件/批量生成题目/K0514006B_学生用_20220923.tex\n", + "开始编译学生版本pdf文件: 临时文件/批量生成题目/test1_学生用_20221007.tex\n", "0\n", - "开始编译教师版本pdf文件: 临时文件/批量生成题目/K0514007B_教师用_20220923.tex\n", + "开始编译教师版本pdf文件: 临时文件/批量生成题目/test2_教师用_20221007.tex\n", "0\n", - "开始编译学生版本pdf文件: 临时文件/批量生成题目/K0514007B_学生用_20220923.tex\n", - "0\n", - "开始编译教师版本pdf文件: 临时文件/批量生成题目/K0515002B_教师用_20220923.tex\n", - "0\n", - "开始编译学生版本pdf文件: 临时文件/批量生成题目/K0515002B_学生用_20220923.tex\n", - "0\n", - "开始编译教师版本pdf文件: 临时文件/批量生成题目/K0515003B_教师用_20220923.tex\n", - "0\n", - "开始编译学生版本pdf文件: 临时文件/批量生成题目/K0515003B_学生用_20220923.tex\n", - "0\n", - "开始编译教师版本pdf文件: 临时文件/批量生成题目/K0515004B_教师用_20220923.tex\n", - "0\n", - "开始编译学生版本pdf文件: 临时文件/批量生成题目/K0515004B_学生用_20220923.tex\n", - "0\n", - "开始编译教师版本pdf文件: 临时文件/批量生成题目/K0515005B_教师用_20220923.tex\n", - "0\n", - "开始编译学生版本pdf文件: 临时文件/批量生成题目/K0515005B_学生用_20220923.tex\n", - "0\n", - "开始编译教师版本pdf文件: 临时文件/批量生成题目/K0515006B_教师用_20220923.tex\n", - "0\n", - "开始编译学生版本pdf文件: 临时文件/批量生成题目/K0515006B_学生用_20220923.tex\n", - "0\n", - "开始编译教师版本pdf文件: 临时文件/批量生成题目/K0515007B_教师用_20220923.tex\n", - "0\n", - "开始编译学生版本pdf文件: 临时文件/批量生成题目/K0515007B_学生用_20220923.tex\n", + "开始编译学生版本pdf文件: 临时文件/批量生成题目/test2_学生用_20221007.tex\n", "0\n" ] } @@ -54,15 +30,8 @@ "\"\"\"---设置题目列表---\"\"\"\n", "#字典字段为文件名, 之后为内容的题号\n", "problems_dict = {\n", - "\"K0514006B\":\"002018\",\n", - "\"K0514007B\":\"000598,000831,002015,002016,002017,002018,002021,003521,003524,003527,003528,003530,003532,003533,003534\",\n", - "\"K0515002B\":\"002055,002057,003542\",\n", - "\"K0515003B\":\"000168,000763,002076,002078,002085,002086,002088,003541,003542,003544,003545,003551,003758,004167\",\n", - "\"K0515004B\":\"002079,003541,003542\",\n", - "\"K0515005B\":\"000172,000900,001998,002076,003542,003544,003545,003549,003551,004167\",\n", - "\"K0515006B\":\"003542\",\n", - "\"K0515007B\":\"000172,000763,000900,001279,001998,002080,002081,002086,003544,003545,003549,003551\",\n", - "\n", + "\"test1\":\"1:100\",\n", + "\"test2\":\"101:110\"\n", "\n", "}\n", "\n", @@ -140,7 +109,8 @@ " problemset = pro_dict[id]\n", " problem = problemset[\"content\"]\n", " solution = (problemset[\"solution\"] if problemset[\"solution\"] != \"\" else \"暂无解答与提示\")\n", - " answer = (problemset[\"ans\"] if problemset[\"ans\"] != \"\" else \"暂无答案\")\n", + " answer = \"\\\\textcolor{red}{\" + (problemset[\"ans\"] if problemset[\"ans\"] != \"\" else \"暂无答案\") + \"}\"\n", + " remarks = (problemset[\"remark\"] if problemset[\"remark\"] != \"\" else \"暂无备注\")\n", " usages_list = problemset[\"usages\"]\n", " if len(usages_list) > 0:\n", " usage = re.sub(\"\\\\t([\\d]\\.[\\d]{0,10})\",color_value,\"\\n\\n\".join(usages_list))\n", @@ -160,7 +130,7 @@ " objects_string = \"目标\" + obj + \"有误\\n\\n\"\n", " break\n", " else:\n", - " objects_string += obj + \"|\" + obj_dict[obj][\"content\"] + \"\\n\\n\"\n", + " objects_string += \"\\\\textcolor{blue}{\" + obj + \"|\" + obj_dict[obj][\"content\"] + \"}\\n\\n\"\n", " objects = objects_string\n", " space = (\"\" if problemset[\"space\"] == \"\" else r\"\\vspace*{\"+problemset[\"space\"]+\"}\\n\")\n", " tags = (\"|\".join(problemset[\"tags\"]) if len(problemset[\"origin\"])>0 else \"暂无标签\")\n", @@ -190,26 +160,6 @@ " print(os.system(\"xelatex -interaction=batchmode -output-directory=\" + directory + \" \"+ students_latex_file))\n" ] }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['3327', '139', '1851', '1848']" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "problems" - ] - }, { "cell_type": "code", "execution_count": null, @@ -220,7 +170,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3.9.7 ('base')", + "display_name": "Python 3.8.8 ('base')", "language": "python", "name": "python3" }, @@ -234,12 +184,12 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.7" + "version": "3.8.8" }, "orig_nbformat": 4, "vscode": { "interpreter": { - "hash": "e4cce46d6be9934fbd27f9ca0432556941ea5bdf741d4f4d64c6cd7f8dfa8fba" + "hash": "d311ffef239beb3b8f3764271728f3972d7b090c974f8e972fcdeedf230299ac" } } }, diff --git a/工具/讲义生成.ipynb b/工具/讲义生成.ipynb index fb9155d5..a8de4a32 100644 --- a/工具/讲义生成.ipynb +++ b/工具/讲义生成.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": {}, "outputs": [ { @@ -15,9 +15,9 @@ "题块 2 处理完毕.\n", "正在处理题块 3 .\n", "题块 3 处理完毕.\n", - "开始编译教师版本pdf文件: 临时文件/测验04预选_教师_20221003.tex\n", + "开始编译教师版本pdf文件: 临时文件/测验04预选_教师_20221007.tex\n", "0\n", - "开始编译学生版本pdf文件: 临时文件/测验04预选_学生_20221003.tex\n", + "开始编译学生版本pdf文件: 临时文件/测验04预选_学生_20221007.tex\n", "0\n" ] } @@ -144,7 +144,8 @@ " problemset = pro_dict[id]\n", " problem = problemset[\"content\"]\n", " solution = (problemset[\"solution\"] if problemset[\"solution\"] != \"\" else \"暂无解答与提示\")\n", - " answer = (problemset[\"ans\"] if problemset[\"ans\"] != \"\" else \"暂无答案\")\n", + " answer = \"\\\\textcolor{red}{\" + (problemset[\"ans\"] if problemset[\"ans\"] != \"\" else \"暂无答案\") + \"}\"\n", + " remarks = (problemset[\"remark\"] if problemset[\"remark\"] != \"\" else \"暂无备注\")\n", " usages_list = problemset[\"usages\"]\n", " if len(usages_list) > 0:\n", " usage = re.sub(\"\\\\t([\\d]\\.[\\d]{0,10})\",color_value,\"\\n\\n\".join(usages_list))\n", @@ -164,7 +165,7 @@ " objects_string = \"目标\" + obj + \"有误\\n\\n\"\n", " break\n", " else:\n", - " objects_string += obj + \"|\" + obj_dict[obj][\"content\"] + \"\\n\\n\"\n", + " objects_string += \"\\\\textcolor{blue}{\" + obj + \"|\" + obj_dict[obj][\"content\"] + \"}\\n\\n\"\n", " objects = objects_string\n", " space = (\"\" if problemset[\"space\"] == \"\" else \"\\n\"+r\"\\vspace*{\"+problemset[\"space\"]+\"}\\n\")\n", " tags = (\"|\".join(problemset[\"tags\"]) if len(problemset[\"origin\"])>0 else \"暂无标签\")\n", diff --git a/工具/课时目标及课时划分信息汇总.ipynb b/工具/课时目标及课时划分信息汇总.ipynb index 76c86062..5884dc43 100644 --- a/工具/课时目标及课时划分信息汇总.ipynb +++ b/工具/课时目标及课时划分信息汇总.ipynb @@ -9,8 +9,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "开始编译单元与课时目标信息pdf文件: 临时文件/课时目标及单元目标_20221004.tex\n", - "开始编译课时划分信息pdf文件: 临时文件/课时划分_20221004.tex\n" + "开始编译单元与课时目标信息pdf文件: 临时文件/课时目标及单元目标表_20221007.tex\n", + "开始编译课时划分信息pdf文件: 临时文件/按课时分类目标及题目清单_20221007.tex\n" ] }, { @@ -28,13 +28,13 @@ "import os,re,time,json\n", "\n", "\"\"\"\n", - "同目录下 课时划分.tex 与 课时目标及单元目标.tex 文件不能缺失\n", + "\"/模板文件\"目录下 课时划分.tex 与 课时目标及单元目标.tex 文件不能缺失\n", "\"\"\"\n", "\n", "\"\"\"---设置文件名---\"\"\"\n", "#目录和文件的分隔务必用/\n", - "lessoncut_file = \"临时文件/课时划分\" \n", - "lessonobj_file = \"临时文件/课时目标及单元目标\" \n", + "lessoncut_file = \"临时文件/按课时分类目标及题目清单\" \n", + "lessonobj_file = \"临时文件/课时目标及单元目标表\" \n", "\"\"\"---设置文件名结束---\"\"\"\n", "\n", "#读取系统日期\n", diff --git a/工具/题号选题pdf生成.ipynb b/工具/题号选题pdf生成.ipynb index f674d789..0e82cc93 100644 --- a/工具/题号选题pdf生成.ipynb +++ b/工具/题号选题pdf生成.ipynb @@ -2,22 +2,22 @@ "cells": [ { "cell_type": "code", - "execution_count": 2, + "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "开始编译教师版本pdf文件: 临时文件/数列未标注_教师用_20221004.tex\n", + "开始编译教师版本pdf文件: 临时文件/测试_教师用_20221007.tex\n", "0\n", - "开始编译学生版本pdf文件: 临时文件/数列未标注_学生用_20221004.tex\n", + "开始编译学生版本pdf文件: 临时文件/测试_学生用_20221007.tex\n", "0\n" ] } ], "source": [ - "import os,re,time,json\n", + "import os,re,time,json,sys\n", "\n", "\"\"\"\n", "模板文件目录下 题目清单.tex 文件不能缺失\n", @@ -26,20 +26,17 @@ "\"\"\"---设置题目列表---\"\"\"\n", "#留空为编译全题库, a为读取临时文件中的题号筛选.txt文件生成题库\n", "problems = r\"\"\"\n", - "003596,003600,003616,003630,003638,003651,003657,003661,003672,003682,003686,003687,003691,003696,003701,003713,003715,003737,003743,003749,003763,003782,003786,003802,003811,003813,003822,003832,003834,003843,003852,003859,003874,003882,003901,003906,003919,003924,003927,003934,003939,003954,004077,004082,004095,004100,004114,004121,004128,004142,004163,004166,004178,004183,004189,004205,004210,004216,004226,004245,004263,004268,004280,004294,004310,004321,004331,004334,004340,004342,004352,004472,004476,004488,004497,004507,004513,004519,004521,004528,004537,004545,004551,004553,004568,004571,004627,004632,004638,004651,004653,004660,004693,004695,004700,004716,004723,004732,004744,004748,004751,004765,006652,006653,006654,006655,006656,006657,006658,006659,006660,006661,006662,006663,006664,006665,006666,006667,006668,006669,006670,006671,006672,006673,006674,006675,006676,006677,006678,006679,006680,006681,006682,006683,006684,006685,006686,006687,006688,006689,006690,006691,006692,006693,006694,006695,006696,006697,006698,006699,006700\n", + "\n", "\n", "\"\"\"\n", "\"\"\"---设置题目列表结束---\"\"\"\n", "\n", "\"\"\"---设置文件名---\"\"\"\n", "#目录和文件的分隔务必用/\n", - "filename = \"临时文件/数列未标注\"\n", + "filename = \"临时文件/测试\"\n", "\"\"\"---设置文件名结束---\"\"\"\n", "\n", "\n", - "if problems.strip()[0] == \"a\":\n", - " with open(\"临时文件/题号筛选.txt\",\"r\",encoding = \"utf8\") as f:\n", - " problems = f.read()\n", "\n", "#读取系统日期\n", "current_time = time.localtime()\n", @@ -90,6 +87,9 @@ "#生成题目列表\n", "if problems.strip() == \"\":\n", " problem_list = list(pro_dict.keys())\n", + "elif problems.strip()[0] == \"a\":\n", + " with open(\"临时文件/题号筛选.txt\",\"r\",encoding = \"utf8\") as f:\n", + " problems = f.read()\n", "else:\n", " problem_list = [id for id in generate_number_set(problems.strip(),pro_dict) if id in pro_dict]\n", "\n", @@ -102,7 +102,7 @@ " problemset = pro_dict[id]\n", " problem = problemset[\"content\"]\n", " solution = (problemset[\"solution\"] if problemset[\"solution\"] != \"\" else \"暂无解答与提示\")\n", - " answer = (problemset[\"ans\"] if problemset[\"ans\"] != \"\" else \"暂无答案\")\n", + " answer = \"\\\\textcolor{red}{\" + (problemset[\"ans\"] if problemset[\"ans\"] != \"\" else \"暂无答案\") + \"}\"\n", " remarks = (problemset[\"remark\"] if problemset[\"remark\"] != \"\" else \"暂无备注\")\n", " usages_list = problemset[\"usages\"]\n", " if len(usages_list) > 0:\n", @@ -123,7 +123,7 @@ " objects_string = \"目标\" + obj + \"有误\\n\\n\"\n", " break\n", " else:\n", - " objects_string += obj + \"|\" + obj_dict[obj][\"content\"] + \"\\n\\n\"\n", + " objects_string += \"\\\\textcolor{blue}{\" + obj + \"|\" + obj_dict[obj][\"content\"] + \"}\\n\\n\"\n", " objects = objects_string\n", " space = (\"\" if problemset[\"space\"] == \"\" else \"\\n\"+r\"\\vspace*{\"+problemset[\"space\"]+\"}\\n\")\n", " tags = (\"|\".join(problemset[\"tags\"]) if len(problemset[\"origin\"])>0 else \"暂无标签\")\n", @@ -138,6 +138,12 @@ "#替换latex文件的内容并编译\n", "with open(\"模板文件/题目清单.tex\",\"r\",encoding = \"utf8\") as f:\n", " latex_raw = f.read()\n", + "\n", + "#识别操作系统\n", + "if sys.platform != \"win32\":\n", + " latex_raw = re.sub(r\"fontset[\\s]*=[\\s]*windows\",\"fontset = fandol\",latex_raw)\n", + " latex_raw = re.sub(r\"\\\\setCJKmainfont\",r\"% \\\\setCJKmainfont\",latex_raw)\n", + "\n", "latex_teachers = latex_raw.replace(\"编译模板\",data_teachers)\n", "with open(teachers_latex_file,\"w\",encoding = \"utf8\") as f:\n", " f.write(latex_teachers)\n", diff --git a/文档/工具基本功能及用法介绍.md b/文档/工具基本功能及用法介绍.md index 55df3a6c..efc02064 100644 --- a/文档/工具基本功能及用法介绍.md +++ b/文档/工具基本功能及用法介绍.md @@ -8,7 +8,7 @@ ## 用法 -第一个单元格中需要设置四个位置: +### 第一个单元格中需要设置四个位置 - ``starting_id``: 整数. 起始id号, 这个号码注意不要和已有的id重复, 可在``Problems.json``中查询空闲id. 处理中如果有重复id的话程序会报重复, 并且不会写入新题目到数据库 @@ -16,4 +16,103 @@ - ``filename``: 字符串. .tex文件的文件名(含路径) -- ``editor``: 字符串. 编辑及收录者姓名, 用"\t"分隔日期(yyyymmdd)及姓名, 例如"20221007\t张三" \ No newline at end of file +- ``editor``: 字符串. 编辑及收录者姓名, 用"\t"分隔日期(yyyymmdd)及姓名, 例如"20221007\t张三" + +### 随后运行第二个单元格 +即可看到``Problems.json``文件的变化 + +# 在vscode中编辑数据库中的单题 + +## 工具文件 +``修改题目数据库.ipynb`` + +## 功能简介 +自动定位, 简单编辑(非可见即所得)题目数据库中的题目 + +## 用法 +第一个单元格中设置id, 至多六位的整数, 随后运行. vscode将会打开``Problems.json``文件, 并自动定位到指定题目处. + +# 按照单元/课时/课时目标对题库中的题目作清点并分类 + +## 工具文件 +``单元课时目标题目数据清点.ipynb`` + +## 功能简介 +按照 单元/课时/课时目标 三种不同的分类方式清点题库中的题目, 并生成分类结果. + +## 用法 +运行第一个单元格后, 会在工具相应的目录中的"临时文件"子目录下生成一个``单元课时目标题目数据清点结果.txt``的文本文件 + +# 汇总课时目标及课时划分信息, 并编译为两个.pdf文件 + +## 工具文件 +``课时目标及课时划分信息汇总.ipynb`` + +## 功能简介 +- 依据``UnitObj.json``文件中的数据以及``LessonObj.json``中的数据进行整理, 形成单元-课时学习目标表, 并编译为.pdf + +- 依据``LessonObj.json``, ``LessonsCut.josn``以及``Problems.json``文件中的数据进行整理, 形成每一课时的相关目标, 题目的清单, 并编译为.pdf + +## 依赖文件 +项目目录下``题库0.3``子目录中的 + +- ``LessonObj.json``数据库文件 + +- ``LessonsCut.json``数据库文件 + +- ``UnitObj.json``数据库文件 + +- ``Problems.json``数据库文件 + +工具文件目录下``模板文件``子目录中的 + +- ``课时划分.tex``模板文件 + +- ``课时目标及单元目标.tex``模板文件 + +## 用法 +在第一个单元格中设置输出的文件名, 最终的文件名会在设置的文件名后加上日期(yyyymmdd). + +运行第一个单元格即可得到两个.tex文件与两个.pdf文件. + +# 将指定题号的题目从数据库中取出, 并编译成"只含题目的pdf"与"包含更多信息的pdf"两个文件 + +## 工具文件 +``题号选题pdf生成.ipynb`` + +## 功能简介 +指定一个题号列表(字符串格式, 用"m:n"表示"m到n", 用","分隔), 将列表中的包含在题库中的id对应的题目取出, 并编译成"只含题目的pdf"文件与"包含更多信息的pdf"文件. + +## 依赖文件 +项目目录下``题库0.3``子目录中的 + +- ``Problems.json``数据库文件 + +- ``LessonObj.json``数据库文件 + +工具文件目录下``模板文件``子目录中的 + +- ``题目清单.tex``模板文件 + +(可选择)工具文件目录下``临时文件``子目录中的 + +- ``题号筛选.txt``题号列表文件 + +## 用法 + +### 设置需要生成pdf的题目范围 + +- 方法1: 编译全题库, 只需将``problems``字符串变量留空 + +- 方法2: 编译``临时文件/题号筛选.txt``文本文件中的题号列表对应的题目, 只需将``problems``字符串设为"a", 前后可以有空格 + +- 方法3: 编译指定的题号列表, 只需将``problems``变量编辑为需要编译的题目列表字符串即可, 用"m:n"表示"m到n", 用","分隔. +例如"2:5,101"表示需要id为000002,000003,000004,000005,000101的五道题目. + +### 设置输出文件的文件名 + +修改``filename``变量中的字符串, 建议"临时文件"不要改动, 后面的文件名可以改动. 生成的两个pdf会加上"_学生用_yyyymmdd.pdf"的后缀(只含题目)与"_教师用_yyyymmdd.pdf"的后缀(含有更多信息, 答案为红色, 目标为蓝色, 便于区分) + +### 设置完成之后执行第一个单元格 + +等候一小段时间, 返回值为0表明编译成功. diff --git a/题库0.3/Problems.json b/题库0.3/Problems.json index c33dee52..8300ec81 100644 --- a/题库0.3/Problems.json +++ b/题库0.3/Problems.json @@ -22286,7 +22286,7 @@ }, "000883": { "id": "000883", - "content": "已知$\\overrightarrow{AB}=3\\overrightarrow{AP}$, 设$\\overrightarrow{BP}=\\lambda \\overrightarrow{PA}$, 则实数$\\lambda=$\\blank{50}.", + "content": "已知$A,B,P$三点两两不重合, 且$\\overrightarrow{AB}=3\\overrightarrow{AP}$, 设$\\overrightarrow{BP}=\\lambda \\overrightarrow{PA}$, 则实数$\\lambda=$\\blank{50}.", "objs": [ "K0503001B" ],