diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f3980d8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,27 @@ +# LaTeX 编译中间文件 +*.aux +*.log +*.out +*.toc +*.lof +*.lot +*.fls +*.fdb_latexmk +*.synctex.gz +*.synctex(busy) +*.xdv +*.bbl +*.blg +*.nav +*.snm +*.vrb + +# 编辑器 +.vscode/ +.idea/ +*.swp +*~ + +# 系统 +.DS_Store +Thumbs.db \ No newline at end of file diff --git a/README.md b/README.md index 58fd1e4..e835fa6 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,16 @@ # ouc_latex_template -中国海洋大学各类文件latex模板 \ No newline at end of file +中国海洋大学各类文件 LaTeX 模板。 + +## 目录 + +| 目录 | 内容 | +|---|---| +| [`exam/`](exam/) | 期末考试**试卷**与**参考答案及评分标准**模板(XeLaTeX) | + +## 说明 + +本仓库下每个子目录是一类文档的独立模板,各自自包含、可单独编译。 +子目录内的 `README.md` 写明该模板的用法、参数与书写注意事项。 + +模板均不含真题,示例内容为占位,按实际课程替换即可。 \ No newline at end of file diff --git a/exam/README.md b/exam/README.md new file mode 100644 index 0000000..c1b9084 --- /dev/null +++ b/exam/README.md @@ -0,0 +1,85 @@ +# exam —— 试卷与参考答案 LaTeX 模板 + +中国海洋大学期末考试**试卷**与**参考答案及评分标准**的 XeLaTeX 模板。 +两份模板均不含真题,题目与分值都是示意,按教学大纲替换即可。 + +## 文件 + +| 文件 | 说明 | +|---|---| +| `oucexam.sty` | 试卷版式包。纸张 195×270mm(学校专用试卷纸),含装订栏、成绩表、页脚 | +| `ouckey.sty` | 答案与评分标准版式包。默认 A4;加 `exampaper` 选项则与试卷同纸同边距 | +| `试卷题型示例.tex` | 试卷范例,16 类题型,6 页 | +| `参考答案与评分标准示例.tex` | 答案范例,8 大题 / 满分 100,3 页 | + +## 编译 + +```bash +xelatex 试卷题型示例.tex +xelatex 试卷题型示例.tex # 跑两遍,第二遍才能取到正确总页数(lastpage) +``` + +必须用 **XeLaTeX**(fontspec + xeCJK),pdflatex 编译不过。 +两份 .tex 都在本目录内自包含,不依赖任何图片文件(示例配图是 TikZ 内联画的)。 + +## 试卷模板要点 + +纸张、页边距、行距、装订栏位置、页脚样式都已在 `oucexam.sty` 里按原卷实测值定好, +一般**只改 `\examsetup` 那一块**: + +```latex +\examsetup{ + year = {2025}, % 学年(会自动印成 2025—2026) + term = {秋}, % 秋 / 春 + course = {课程名称}, + college = {××学院}, + type = {A}, % 卷头「试卷类型:A 卷」 + foottype = {}, % 页脚课程名后是否再印类型字母,空=不印 + proposer = {}, % 命题人 + reviewer = {}, % 审核人 + mode = {闭卷}, + allowed = {无}, % 允许携带的物品 + nsec = {16}, % 大题数,成绩表自动按 nsec+1 栏等分 +} +``` + +- `type` 与 `foottype` 互不影响:前者只管卷头,后者只管页脚。 + 原卷 A 卷页脚没印字母、B 卷印了 B,这是出卷人手工差异,不是规则。 +- 大题数变了必须同步改 `nsec`,否则成绩表格子会错位。 + +## 答案模板要点 + +```latex +\keysetup{ + year = {2025}, term = {秋}, course = {课程名称}, type = {A}, + dept = {××学院}, college = {××学院}, + major = {××专业 \TNR{2024} 级}, + teacher = {×××}, examiner = {×××}, + mode = {闭卷、笔试}, total = {100}, +} +``` + +如实现在试卷同一张纸上印,把 `\usepackage{ouckey}` 改成 `\usepackage[exampaper]{ouckey}`。 + +体例四条(学校没有统一模板,按国内高校通行做法拟定): + +1. 抬头信息齐全,留空的项自动不印、不留空横线 +2. 客观题答案集中列(`\objkeys{C,B,A,...}`,每行 6 个自动换行),附统一给分规则 +3. 主观题**内嵌**分步分值(`\pt{2}`),阅卷时批到哪里看到哪里 +4. 每个大题末尾给【评分标准】`\scoring{...}` + +主观题内嵌分值是有意为之:阅卷是流水作业,分值必须和答案文字贴在一起, +集中写在末尾会让批卷人来回翻页。 + +文末 `\keytotal{20,10,12,12,12,16,8,10}` 是分值汇总表,用于阅卷前核对 +「各大题相加 = 满分」。签名栏 `\keysign` 只留命题人一处。 + +## 书写注意 + +- 题干内部换行用 `\\*`,**不要用裸 `\\`**。裸 `\\` 语义是"允许在此断页", + 题干会被切到上下两页,学生看到半句话。 +- 数字、英文用 `\TNR{...}` 包起来(内部显式 `\normalfont` 收尾)。 + 裸用字体切换命令会让字体状态泄漏到后续段落。 +- `\keyitem{题号}{分值}{答案正文}` 的参数里**不要嵌 `tabular` / `tikzpicture`**—— + 这些环境的 `&` 与 `\\` 会被当成参数分隔符,报 `File ended while scanning`。 + 表格和图写在 `\keyitem` 之后。 \ No newline at end of file diff --git a/exam/oucexam.sty b/exam/oucexam.sty new file mode 100644 index 0000000..2892213 --- /dev/null +++ b/exam/oucexam.sty @@ -0,0 +1,700 @@ +%====================================================================== +% oucexam.sty — 中国海洋大学 期末考试试卷 版式包 +% 依据:数字逻辑 2025 秋 B 卷(195mm × 270mm 专用试卷纸) +% 所有尺寸单位 bp(PDF 点,1bp = 1/72in),与原卷 PDF 逐项对齐 +% +% 用法见同目录 example-数字逻辑B卷.tex +%====================================================================== +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{oucexam}[2026/10/21 v1.0 OUC exam paper layout] + +\RequirePackage{geometry} +\RequirePackage{fontspec} +\RequirePackage{xeCJK} +\RequirePackage{tikz} +\RequirePackage{graphicx} +\RequirePackage{eso-pic} +\RequirePackage{lastpage} +\RequirePackage{keyval} +\RequirePackage{ragged2e} % \justifying:原卷第3页设计题是两端对齐 +\usetikzlibrary{calc} + +%====================================================================== +% 1. 页面版心 +% 195mm × 270mm;左边距 29mm(装订侧),版心宽 154mm +% 版心上边界 34.13bp;首行基线落在 46.13bp +%====================================================================== +\geometry{ + paperwidth = 195mm, + paperheight = 270mm, + left = 82.2bp, + textwidth = 436.55bp, + top = 34.13bp, + textheight = 665.87bp, + headheight = 0pt, + headsep = 0pt, + footskip = 0pt, +} +\setlength{\parindent}{0pt} +\setlength{\parskip}{0pt} +\setlength{\topskip}{12bp} % 首行基线 = 34.13 + 12 = 46.13bp +\pagestyle{empty} +\raggedright % 左对齐,右端不拉伸(与原卷一致) +% 注意:ctexart 会在 \begin{document} 时把 \linespread 设为 1.3, +% 必须用同一钩子(后注册者后执行)压回 1,否则基线网格全乱。 +\AtBeginDocument{\linespread{1}\Fivhao\selectfont} + +%====================================================================== +% 2. 字体 +% SimSun 宋体(标题/大题用 AutoFakeBold 模拟原卷描边加粗) +% KaiTi 楷体(卷头) SimHei 黑体(装订栏“专业年级”) +% Times New Roman 西文数字 +%====================================================================== +% 正文西文默认用 SimSun 的等宽西文字形(原卷正文 Mealy / 2026 / RS 等 +% 实测每个 ASCII 字符步距恒为 5.28bp 且 font 名为 SimSun,即为宋体西文)。 +% 需要真正 Times 的地方(化简题、页脚、卷头年份)显式 \tnr / \tnrb。 +\setmainfont{SimSun} +\setCJKmainfont{SimSun}[AutoFakeBold=2.86] +\newCJKfontfamily\songti{SimSun}[AutoFakeBold=2.86] +\newCJKfontfamily\heiti{SimHei} +\newCJKfontfamily\kaiti{KaiTi} +\newfontfamily\tnr{Times New Roman} +\newfontfamily\tnrb{Times New Roman Bold} +\newfontfamily\sunfont{SimSun} + +%---------------------------------------------------------------------- +% ⚠️ xeCJK 陷阱:字体切换命令若紧邻 \par(或位于段落末尾), +% 该段结束时的字体状态会"溢出"到后续段落,导致后面的 ASCII +% 字符全部被排成 Times(实测:\tnr{ABC}\par 会让下一段的 "3" 变 Times)。 +% 故所有局部字体切换一律走下面两个包装:内部显式 \normalfont 收尾。 +% ⇒ 正文中请用 \TNR{...} / \TNRB{...} / \SUN{...},不要裸用 \tnr。 +%---------------------------------------------------------------------- +\newcommand{\TNR}[1]{{\tnr #1\normalfont}} +\newcommand{\TNRB}[1]{{\tnrb #1\normalfont}} +\newcommand{\SUN}[1]{{\sunfont #1\normalfont}} + +% Word「字符间距展开」模拟:逐字之间插入固定胶 +% \spreadtext{0.30}{文字} —— 0.30bp 即 10.50→10.80bp 的步距 +% 实现:先输出首字,再对余下每个字"先插空隙、后出字"(首字前不插,否则整体右移) +\newcommand{\spreadtext}[2]{% + \begingroup\spread@amt=#1bp\relax + \expandafter\@spreadtext#2\@nil\endgroup} +\newdimen\spread@amt +\def\@spreadtext#1#2\@nil{#1\@spreadeach#2\@nil} +\def\@spreadeach#1{% + \ifx#1\@nil\else\hspace*{\spread@amt}#1\expandafter\@spreadeach\fi} + +% 中文与西文间自动间距:原卷实测固定 2.70bp(不随字号缩放, +% 故用绝对 bp 而非 em;原卷 10.5bp 与 12bp 处均为 2.7bp) +\xeCJKsetup{CJKecglue={\hskip 2.70bp\relax},PunctStyle=plain} + +%====================================================================== +% 3. 字号(bp,直接对应原卷) +%====================================================================== +\newcommand{\Fivhao}{\fontsize{10.5bp}{15.6bp}\selectfont} % 五号 正文(原卷 10.5bp) +\newcommand{\Sihao}{\fontsize{12bp}{15bp}\selectfont} % 小四 大题 +\newcommand{\DaSihao}{\fontsize{14.05bp}{16bp}\selectfont} % 四号 卷头 +\newcommand{\Xiaowu}{\fontsize{9bp}{11bp}\selectfont} % 小五 图题 +\AtBeginDocument{\Fivhao} + +%====================================================================== +% 4. 卷头参数 +%====================================================================== +\def\ouc@year{}\def\ouc@term{}\def\ouc@course{}\def\ouc@college{} +\def\ouc@type{}\def\ouc@proposer{}\def\ouc@reviewer{} +\def\ouc@mode{}\def\ouc@allowed{} +\define@key{ouc}{year}{\def\ouc@year{#1}} +\define@key{ouc}{term}{\def\ouc@term{#1}} +\define@key{ouc}{course}{\def\ouc@course{#1}} +\define@key{ouc}{college}{\def\ouc@college{#1}} +\define@key{ouc}{type}{\def\ouc@type{#1}} +\define@key{ouc}{proposer}{\def\ouc@proposer{#1}} +\define@key{ouc}{reviewer}{\def\ouc@reviewer{#1}} +\define@key{ouc}{mode}{\def\ouc@mode{#1}} +\define@key{ouc}{allowed}{\def\ouc@allowed{#1}} +\newcommand{\examsetup}[1]{\setkeys{ouc}{#1}} + +%---------------------------------------------------------------------- +% 页脚是否印"试卷类型字母"(课程名之后那个 A / B) +% +% ★ 原卷实测:A 卷页脚【没有】字母(数字逻辑 + 一串短横线), +% B 卷页脚【有】B(392.48 处)。 +% 即:这是出卷人手工敲的,不是规则。故默认不印,需要时显式打开: +% \examsetup{foottype = {B}} → 页脚印 B +% \examsetup{foottype = {}} → 页脚不印(默认) +%---------------------------------------------------------------------- +\def\ouc@foottype{} +\define@key{ouc}{foottype}{\def\ouc@foottype{#1}} + +%====================================================================== +% 5. 页脚:+…………………………课程名称 X……… 第 N 页 共 M 页 + 基线 713.33bp +% +% 本地实测(原卷字符级): +% 82.20 '+' | 91.20~343.20 连续 29 个 '…'(每个步距 9.00) +% 352.20 起课程名(长度不定)| 类型字母在 390.48 +% 396.48 起 3 个 '…' | 432.48 '第' | 443.64 页码 | 448.20 '页' +% 461.64 '共' | 472.92 总页 | 477.48 '页' | 499.92 '+' +% +% ★ 课程名长度可变,前面那串圆点必须"自动伸缩": +% · 课程名 ≤ 36bp(4 个汉字)→ 左锚保持 352.20,点区 29 个点(与原卷一致) +% · 课程名更长 → 左锚左移,点区自动缩短(这就是用户要的"按名称长度缩减") +% 点区终点固定在左锚前 3bp,绝不与课程名重叠。 +%====================================================================== +\newbox\ouc@dotbox +\newdimen\ouc@cnw +\newdimen\ouc@cstart +\newdimen\ouc@fw +\newdimen\ouc@tstart +\newdimen\ouc@tfw + +% 测课程名宽度 -> 定左锚 -> 定点区宽度(shipout 时执行,读的是 \ouc@course) +\newcommand{\ouc@prepfooter}{% + \setbox\ouc@dotbox\hbox{\fontsize{9bp}{9bp}\selectfont\ouc@course}% + \ouc@cnw=\wd\ouc@dotbox + \ifdim\ouc@cnw>36bp + % 偏长:右端钉在 388.20,向左生长(点区自动变短) + \ouc@cstart=\dimexpr 388.20bp-\ouc@cnw\relax + \else + % 不长:用原卷锚点(此时点区正好 29 个点) + \ouc@cstart=352.20bp + \fi + % 点区宽度 = 左锚 - 起点 91.20 + % ★ 不减空隙:\leaders 按整步距铺,最后一点的右缘正好落在左锚上 + % (原卷正是这样:点占 91.20~352.20,课程名紧接 352.20 起) + \ouc@fw=\dimexpr\ouc@cstart-91.20bp\relax + \ifdim\ouc@fw<9bp \ouc@fw=9bp \fi + % ---- 无字母模式:三点从课程名右缘 +4bp 起,铺到"第"(432.48) 之前 ---- + \ifx\ouc@foottype\@empty + \ouc@tstart=\dimexpr\ouc@cstart+\ouc@cnw+4bp\relax + \ouc@tfw=\dimexpr 432.48bp-\ouc@tstart\relax + \ifdim\ouc@tfw<9bp \ouc@tfw=9bp \fi + \fi} + +% 点区:\leaders 按 9bp 步距自动铺满(个数自动取整) +\newcommand{\ouc@dotsfill}{% + \hbox to \ouc@fw{\leaders\hbox{\makebox[9bp][c]{…}}\hfill}} + +% 无字母模式下课程名之后的点区(步距 9bp,铺到"第"之前) +\newcommand{\ouc@taildots}{% + \hbox to \ouc@tfw{\leaders\hbox{\makebox[9bp][c]{…}}\hfill}} + +\newcommand{\ouc@makefooter}{% + \ouc@prepfooter + \begin{tikzpicture}[remember picture,overlay] + \coordinate (F) at ([yshift=-713.33bp]current page.north west); + % 左端 + + \node[anchor=base west,inner sep=0pt,font=\fontsize{9bp}{9bp}\selectfont] + at ([xshift=82.20bp]F) {+}; + % 伸缩圆点区(\leaders 自动铺满,步距 9bp) + \node[anchor=base west,inner sep=0pt,font=\fontsize{9bp}{9bp}\selectfont] + at ([xshift=91.20bp]F) {\ouc@dotsfill}; + % 课程名(左锚随长度自动左移) + \node[anchor=base west,inner sep=0pt,font=\fontsize{9bp}{9bp}\selectfont] + at ([xshift=\ouc@cstart]F) {\ouc@course}; + % 类型字母(可选)+ 后随 3 点 + % ★ 原卷 A 卷无字母、B 卷有 B,属手工差异 ⇒ 由 foottype 开关控制, + % 默认空(不印)。印字母时字母在 390.48、三点从 396.48 起; + % 不印时三点紧接课程名右侧 4bp 处(与原卷 A 卷一致)。 + \ifx\ouc@foottype\@empty + \node[anchor=base west,inner sep=0pt,font=\fontsize{9bp}{9bp}\selectfont] + at ([xshift=\ouc@tstart]F) {\ouc@taildots}; + \else + \node[anchor=base west,inner sep=0pt,font=\fontsize{9bp}{9bp}\selectfont] + at ([xshift=390.48bp]F) {\ouc@foottype}; + \node[anchor=base west,inner sep=0pt,font=\fontsize{9bp}{9bp}\selectfont] + at ([xshift=396.48bp]F) {\makebox[27bp][l]{………}}; + \fi + % 逐段定位,避开 xeCJK 在中西文之间自动加的间距 + \node[anchor=base west,inner sep=0pt,font=\fontsize{9bp}{9bp}\selectfont] + at ([xshift=432.48bp]F) {第}; + \node[anchor=base west,inner sep=0pt,font=\fontsize{9bp}{9bp}\selectfont] + at ([xshift=443.64bp]F) {\thepage}; + \node[anchor=base west,inner sep=0pt,font=\fontsize{9bp}{9bp}\selectfont] + at ([xshift=448.20bp]F) {页}; + \node[anchor=base west,inner sep=0pt,font=\fontsize{9bp}{9bp}\selectfont] + at ([xshift=461.64bp]F) {共}; + \node[anchor=base west,inner sep=0pt,font=\fontsize{9bp}{9bp}\selectfont] + at ([xshift=472.92bp]F) {\pageref{LastPage}}; + \node[anchor=base west,inner sep=0pt,font=\fontsize{9bp}{9bp}\selectfont] + at ([xshift=477.48bp]F) {页}; + % 右端 + + \node[anchor=base west,inner sep=0pt,font=\fontsize{9bp}{9bp}\selectfont] + at ([xshift=499.92bp]F) {+}; + \end{tikzpicture}% +} +% ★ 挂到 shipout 钩子:每页自动出页脚,\ouc@prepfooter 在 shipout 时机测宽度 +\AddToShipoutPictureFG{\ouc@makefooter} +%====================================================================== +% 6. 装订线(左侧竖栏) +% +% ★ 印张规则:试卷用大纸双面印刷,偶数页拼在奇数页背面(同一张纸)。 +% "装订线 + 学号/姓名/…" 只印在**奇数页**(右页,即正面); +% 偶数页是它的背面,不能再印一遍,否则折进去看不见、还浪费。 +% ⇒ 默认自动判断:本页是奇数页才画(用 \ifodd\value{page})。 +% +% 用法: +% \bindstrip → 自动(奇数页画、偶数页不画)★推荐 +% \bindstrip[on] → 强制画(比如检查偶数页效果) +% \bindstrip[off] → 强制不画 +% \bindstrip[1.3] → 自动 + 纵向整体下移 1.3bp(复刻原卷该页瑕疵) +% \bindstrip[1.3,on] → 强制画 + 下移 +% 局部覆盖单页:\ouc@bindforce 置 1/0 +% +% 本地实测(原卷 p1,x 坐标全部 bp): +% 竖虚线 x=33.8,5 段:101.1~148.5 / 222.4~290.8 / 359.4~427.9 +% 489.3~557.8 / 600.0~668.6 +% 18bp Times 连字符串 x=55.69("装/订/线"三字压在上面,白底遮断) +% 栏目名 x=32.65(竖排,自下而上);冒号单列在 x=32.89 +% ★ 竖线每段 = 对应栏目的"填写区"(冒号之后向上延伸),共 6 段。 +% 第 6 段 37.6~69.4 是"座号"的填写区——原 B 卷 PDF 里漏画了这一段, +% 看起来就是"座号后面没横线",学生无处可填。此处按 A 卷补齐。 +% 另有一圈细边框(x=17.4 / 60.2 两条竖线 + 上下横封)。 +%====================================================================== +\newdimen\ouc@bindshift + +%-------------------------------------------------------------------- +% 开关:\bindstriptrue / \bindstripfalse(全局是否启用装订线) +% \bindstripoddfalse(默认 false = 只在奇数页画) +% \bindstripoffset{1.3bp}(整体纵向偏移,复刻原卷瑕疵) +%-------------------------------------------------------------------- +\newif\ifouc@bindon \ouc@bindontrue +\newif\ifouc@bindodd \ouc@bindoddfalse % false: 只画奇数页 +\newcommand{\ouc@bindshiftdimen}{0bp} +\newcommand{\bindstripoffset}[1]{\setlength{\ouc@bindshift}{#1}} +\setlength{\ouc@bindshift}{0pt} + +% \bindstrip:保留兼容。现在只在需要"本页强制"时才用它; +% 正常情况装订线由 shipout 钩子自动画(见文件末尾),无需逐页调用。 +\newcommand{\bindstrip}[1][]{% + \ifx\relax#1\relax\else + \ifx\@empty#1\@empty\else \setlength{\ouc@bindshift}{#1bp}\fi + \fi} + +\newcommand{\ouc@dobindstrip}{% + \begin{tikzpicture}[remember picture,overlay] + \coordinate (B) at ([yshift=-\ouc@bindshift]current page.north west); + % ---- ★ 原卷此处【没有】外框 ---- + % 曾误把 PDF 里 x=17.4/18.12/60.15/60.87 那组线当成黑色外框, + % 实测它们是 fill=(1,1,1) 的**白色遮挡块**(Word 里盖住页眉页脚 + % 的底色块),可见黑线只有 x=33.80 那 6 段竖虚线。 + % 故此处不画任何竖线/封口线。 + % ---- 竖虚线:每段 = 对应栏目的"填写区"(紧接栏目名冒号之后,向上延伸)---- + % 原卷 6 段,逐段对应: + % 600.05~668.60 ← 学号(冒号止于 668.6) + % 489.30~557.80 ← 姓名(止于 557.8) + % 359.35~427.85 ← 专业年级(止于 427.8) + % 222.40~290.80 ← 授课教师 + % 101.10~148.50 ← 考场教室号(止于 148.5) + % 37.60~ 69.40 ← 座号(冒号止于 69.6)★ 原 B 卷 PDF 漏画,此处补上 + % —— 这就是"座号后面那条线",缺了学生没法填座号。 + \foreach \a/\b in {37.60/69.40, 101.10/148.50, 222.40/290.80, + 359.35/427.85, 489.30/557.80, 600.05/668.60}{% + \draw[line width=0.48bp,line cap=butt] + ([xshift=33.8bp,yshift=-\a bp]B) -- ([xshift=33.8bp,yshift=-\b bp]B);} + % ---- 虚线段(原卷用 18bp Times 连字符排成,不是画线)---- + % 四段的连字符个数原卷各不相同(16 / 30 / 28 / 24),逐段复刻 + \foreach \s/\pos in {----------------/677.32, + ---------------- -------------/571.00, + --- ------------------------/382.12, + ------------------------/205.36}{% + \node[anchor=base west,rotate=90,inner sep=0pt, + font=\fontsize{18bp}{18bp}\selectfont\tnr] + at ([xshift=55.69bp,yshift=-\pos bp]B) {\s};} + % ---- 竖排栏目名(自下而上读)---- + % 原卷只有"姓名:""授课教师:"把冒号连排,其余冒号单独一行 + \foreach \lab/\pos in {学号/694.06, 姓名:/585.10, 专业年级/474.46, + 授课教师:/349.78, 考场教室号/207.46, 座号/96.70}{% + \node[anchor=base west,rotate=90,inner sep=0pt,fill=white,inner xsep=0.7bp, + font=\fontsize{10.45bp}{12bp}\selectfont] + at ([xshift=32.65bp,yshift=-\pos bp]B) {\lab};} + % ---- 单独的冒号行:学号 / 专业年级 / 考场教室号 / 座号 ---- + \foreach \pos in {672.94, 432.22, 154.66, 75.70}{% + \node[anchor=base west,rotate=90,inner sep=0pt,fill=white,inner xsep=0.7bp, + font=\fontsize{10.45bp}{12bp}\selectfont] + at ([xshift=32.89bp,yshift=-\pos bp]B) {:};} + % ---- 装 / 订 / 线 ---- + \foreach \lab/\pos in {装/581.44, 订/392.68, 线/215.80}{% + \node[anchor=base west,rotate=90,inner sep=0pt,fill=white,inner xsep=1.2bp, + font=\fontsize{10.45bp}{12bp}\selectfont] + at ([xshift=52.69bp,yshift=-\pos bp]B) {\lab};} + \end{tikzpicture}% +} + +%====================================================================== +% 7. 成绩表(题号 / 得分) +% 默认 8 个题号 + 总分共 9 栏,与原卷逐项对齐(栏宽 44.05bp)。 +% 大题数不是 8 时,用 \examsetup{nsec = 11} 指定,自动按等宽重算。 +%====================================================================== +\def\ouc@nsec{8} +\define@key{ouc}{nsec}{\def\ouc@nsec{#1}} + +% 题号汉字(支持到十六) +\newcommand{\ouc@cnnum}[1]{% + \ifcase\numexpr#1\relax\or 一\or 二\or 三\or 四\or 五\or 六% + \or 七\or 八\or 九\or 十\or 十一\or 十二% + \or 十三\or 十四\or 十五\or 十六\fi} + +\newcommand{\scoretable}{% + \begin{tikzpicture}[remember picture,overlay] + \coordinate (S) at (current page.north west); + \ifnum\ouc@nsec=8 + % ---- 原卷版:坐标逐项硬对齐 ---- + \foreach \y in {159.04,181.99,212.44}{% + \draw[line width=0.48bp,line cap=butt] + ([xshift=122.81bp,yshift=-\y bp]S) -- ([xshift=478.24bp,yshift=-\y bp]S);} + \foreach \x in {123.05,167.10,201.10,235.10,269.10,303.10,337.10, + 371.10,405.10,439.10,478.00}{% + \draw[line width=0.48bp,line cap=butt] + ([xshift=\x bp,yshift=-158.80bp]S) -- ([xshift=\x bp,yshift=-212.20bp]S);} + \node[anchor=base,inner sep=0pt,font=\fontsize{12bp}{12bp}\selectfont\kaiti] + at ([xshift=145.075bp,yshift=-174.89bp]S) {题号}; + \node[anchor=base,inner sep=0pt,font=\fontsize{12bp}{12bp}\selectfont\kaiti] + at ([xshift=145.075bp,yshift=-201.53bp]S) {得分}; + \foreach \name/\cx in {一/184.10, 二/218.10, 三/252.10, 四/286.10, + 五/320.10, 六/354.10, 七/388.10, 八/422.10, + 总分/458.55}{% + \node[anchor=base,inner sep=0pt,font=\fontsize{12bp}{12bp}\selectfont\kaiti] + at ([xshift=\cx bp,yshift=-174.89bp]S) {\name};} + \else + % ---- 自适应版:标签栏 + nsec 格 + 总分格 ---- + % 横向:标签栏 123.05~163.05(宽 40),其后 nsec+1 格等分到 478.00 + % 12 个大题时每格 (478-163.05)/13 = 24.2bp,正好容得下"十一"(12bp×2=24) + \pgfmathsetmacro{\ouc@cwl}{163.05} + \pgfmathsetmacro{\ouc@cw}{(478.00-\ouc@cwl)/(\ouc@nsec+1)} + % 题号字号自适应:两字题号(如“十一”)需 2×字号 ≤ 格宽 - 2bp 余量 + % 12 题 → 格宽 24.2bp → 字号 11.1bp(仍按 12bp 上限,视觉不变) + % 16 题 → 格宽 18.5bp → 字号 8.3bp(自动缩小,不溢出) + \pgfmathsetlengthmacro{\ouc@fs}{min(12,(\ouc@cw-2)/2)*1bp} + % 三条横线(原卷 159.04 / 181.99 / 212.44) + \foreach \y in {159.04,181.99,212.44}{% + \draw[line width=0.48bp,line cap=butt] + ([xshift=123.05bp,yshift=-\y bp]S) -- ([xshift=478.00bp,yshift=-\y bp]S);} + % 内容区竖线(标签栏右界即第一格左界,一并画上) + \foreach \i in {0,...,\the\numexpr\ouc@nsec+1\relax}{% + \pgfmathsetmacro{\ouc@xx}{\ouc@cwl+\i*\ouc@cw}% + \draw[line width=0.48bp,line cap=butt] + ([xshift=\ouc@xx bp,yshift=-158.80bp]S) -- + ([xshift=\ouc@xx bp,yshift=-212.20bp]S);} + % 标签栏左侧那条竖线(原卷 123.05) + \draw[line width=0.48bp,line cap=butt] + ([xshift=123.05bp,yshift=-158.80bp]S) -- + ([xshift=123.05bp,yshift=-212.20bp]S); + % 标签栏文字 + \node[anchor=base,inner sep=0pt,font=\fontsize{\ouc@fs}{\ouc@fs}\selectfont\kaiti] + at ([xshift=143.05bp,yshift=-174.89bp]S) {题号}; + \node[anchor=base,inner sep=0pt,font=\fontsize{\ouc@fs}{\ouc@fs}\selectfont\kaiti] + at ([xshift=143.05bp,yshift=-201.53bp]S) {得分}; + % 题号 一…十二(居中于各自格子) + \foreach \i in {0,...,\the\numexpr\ouc@nsec-1\relax}{% + \pgfmathsetmacro{\ouc@xx}{\ouc@cwl+(\i+0.5)*\ouc@cw}% + \node[anchor=base,inner sep=0pt,font=\fontsize{\ouc@fs}{\ouc@fs}\selectfont\kaiti] + at ([xshift=\ouc@xx bp,yshift=-174.89bp]S) + {\ouc@cnnum{\numexpr\i+1\relax}};} + % 总分 + \pgfmathsetmacro{\ouc@xx}{\ouc@cwl+(\ouc@nsec+0.5)*\ouc@cw}% + \node[anchor=base,inner sep=0pt,font=\fontsize{\ouc@fs}{\ouc@fs}\selectfont\kaiti] + at ([xshift=\ouc@xx bp,yshift=-174.89bp]S) {总分}; + \fi + \end{tikzpicture}% +} + +%====================================================================== +% 8. 卷头 +% 标题 + 三行填空 + 成绩表;随后补足垂直空白, +% 使正文首行基线正好落在 240.41bp +%====================================================================== +\newcommand{\kh}[1]{\node[anchor=base west,inner sep=0pt, + font=\fontsize{10.45bp}{12bp}\selectfont\kaiti] at ([xshift=#1]H)} +\newcommand{\examhead}[1][184.39bp]{% + \begin{tikzpicture}[remember picture,overlay] + \coordinate (H) at (current page.north west); + % ---- 标题 ---- + \node[anchor=base west,inner sep=0pt, + font=\fontsize{14.05bp}{16bp}\selectfont\bfseries] + at ([xshift=151.92bp,yshift=-54.65bp]H) {中国海洋大学全日制本科课程期末考试试卷}; + + % ---- 第 1 行 ---- + \kh{113.52bp,yshift=-96.29bp} {\ouc@year}; + \kh{139.80bp,yshift=-96.29bp} {年}; + \kh{160.80bp,yshift=-96.29bp} {\ouc@term}; + \kh{181.80bp,yshift=-96.29bp} {季学期}; + \kh{224.04bp,yshift=-96.29bp} {考试科目:}; + \kh{287.16bp,yshift=-96.29bp} {\ouc@course}; + \kh{360.84bp,yshift=-96.29bp} {学院:}; + \kh{402.96bp,yshift=-96.29bp} {\ouc@college}; + \draw[line width=0.96bp,line cap=butt] + ([xshift=113.50bp,yshift=-97.80bp]H) -- ([xshift=139.80bp,yshift=-97.80bp]H); + \draw[line width=0.96bp,line cap=butt] + ([xshift=150.20bp,yshift=-97.80bp]H) -- ([xshift=181.80bp,yshift=-97.80bp]H); + \draw[line width=0.96bp,line cap=butt] + ([xshift=276.70bp,yshift=-97.80bp]H) -- ([xshift=360.80bp,yshift=-97.80bp]H); + \draw[line width=0.48bp,line cap=butt] + ([xshift=402.95bp,yshift=-97.40bp]H) -- ([xshift=508.40bp,yshift=-97.40bp]H); + + % ---- 第 2 行 ---- + \kh{116.40bp,yshift=-119.69bp} {试卷类型:}; + \kh{184.92bp,yshift=-119.69bp} {\ouc@type}; + \kh{207.60bp,yshift=-119.69bp} {卷}; + \kh{228.60bp,yshift=-119.69bp} {命题人:}; + \kh{276.00bp,yshift=-119.69bp} {\ouc@proposer}; + \kh{363.60bp,yshift=-119.69bp} {审核人:}; + \kh{410.00bp,yshift=-119.69bp} {\ouc@reviewer}; + \draw[line width=0.96bp,line cap=butt] + ([xshift=169.20bp,yshift=-121.20bp]H) -- ([xshift=207.60bp,yshift=-121.20bp]H); + \draw[line width=0.96bp,line cap=butt] + ([xshift=269.00bp,yshift=-121.20bp]H) -- ([xshift=358.30bp,yshift=-121.20bp]H); + \draw[line width=0.96bp,line cap=butt] + ([xshift=405.70bp,yshift=-121.20bp]H) -- ([xshift=495.00bp,yshift=-121.20bp]H); + + % ---- 第 3 行:考试说明 ---- + \kh{108.48bp,yshift=-154.73bp} {考试说明:本课程为\ouc@mode 考试,共}; + \kh{264.84bp,yshift=-154.73bp} {\pageref{LastPage}}; + \kh{275.40bp,yshift=-154.73bp} {页,除考场规定的必需用品外还可携带的文具有}; + \kh{497.90bp,yshift=-154.73bp} {\ouc@allowed。}; + \draw[line width=0.48bp,line cap=butt] + ([xshift=259.55bp,yshift=-156.10bp]H) -- ([xshift=275.40bp,yshift=-156.10bp]H); + \draw[line width=0.48bp,line cap=butt] + ([xshift=492.60bp,yshift=-156.10bp]H) -- ([xshift=513.60bp,yshift=-156.10bp]H); + \end{tikzpicture}% + \scoretable + \par\vspace*{#1}\nointerlineskip +} + +%====================================================================== +% 9. 正文构件 +%====================================================================== + +% 大题标题:宋体小四伪粗;与下一行基线距 15.0bp(正文 15.6bp) +% 标题内数字/括号用 Times Bold,中文与它们之间是固定 bp 空隙(原卷如此), +% 故局部关掉 xeCJK 自动间距,空隙一律显式给:\oucsp{6} +\newcommand{\oucsp}[1]{\hspace*{#1bp}} +\newcommand{\examheading}[2][0bp]{% + \par\ifdim#1>0bp\vspace*{#1}\fi + \noindent{\xeCJKsetup{CJKecglue={}}\fontsize{12bp}{15bp}\selectfont\bfseries #2}\par + \vspace*{\ouc@headgap}} + +% 小题:\qi[题号栏宽]{题号}{题干} +% 原卷第 1 页题号用宋体半角("1." 占 10.44bp)+ 5.28bp 空隙 = 栏宽 15.72bp +% 第 2/3 页题号用 Times("1." 占 8.16bp)+ 空格,栏宽 13.08bp +% 少数题(如 3. 6.)题号后不留空,栏宽 10.44bp +\newcommand{\qnum}[1]{\makebox[15.72bp][l]{\sunfont #1.}} +\newcommand{\qi}[3][15.72bp]{\par\noindent\makebox[#1][l]{\sunfont #2.}#3\par} +% 注意:\tnr 只包住题号本身,必须用 {\tnr #2.} 关掉,否则 Times 泄到正文 +% ★ 题干内部换行一律用 \\*(禁止分页),不要用裸 \\: +% 裸 \\ 是"允许在此断页",题干会被切到上下两页,学生看到半句话。 +\newcommand{\qiT}[3][13.08bp]{\par\noindent\makebox[#1][l]{{\tnr #2.}}\ignorespaces#3\par} +% 宋体题号版(第 3 页设计题:原卷 "1." 是 SimSun 10.45,且题号后无空格) +\newcommand{\qiS}[3][15.72bp]{\par\noindent\makebox[#1][l]{{\sunfont #2.}}\ignorespaces#3\par} + +% 选项:每栏 84bp,标签栏 15.72bp(与原卷逐字对齐) +\newcommand{\opt}[2]{\makebox[84bp][l]{\qnum{#1}#2}} +\newcommand{\choices}[4]{% + \par\noindent\opt{A}{#1}\opt{B}{#2}\opt{C}{#3}\opt{D}{#4}\par} +\newcommand{\optone}[2]{\par\noindent\opt{#1}{#2}\par} + +% 图题:小五,居中于版心 +\newcommand{\examfigcaption}[1]{% + \par\nointerlineskip\centerline{\Xiaowu #1}\par\nointerlineskip} + +% 图题(五号):原卷第 3 页 "图3" 实测 10.45bp +\newcommand{\examfigcaptioniii}[1]{% + \par\nointerlineskip\centerline{\Fivhao #1}\par\nointerlineskip\vspace*{5.40bp}} + +% 插图:\examfig[水平偏移]{宽度}{文件} +% 用 \vspace* 精确控制与上一基线的距离,偏移以版心左边界为基准 +\newcommand{\examfig}[3][0bp]{% + \par\nointerlineskip\vspace*{\ouc@figskip}% + \noindent\hspace*{#1}\includegraphics[width=#2]{#3}% + \par\nointerlineskip\vspace*{\ouc@figtail}} +\def\ouc@headgap{-0.6bp} +\def\ouc@figskip{0bp} +\def\ouc@figtail{0bp} +\newcommand{\figskip}[1]{\def\ouc@figskip{#1}} +\newcommand{\figtail}[1]{\def\ouc@figtail{#1}} + +% 逻辑表达式:按原卷用宋体直排文本,不用数学模式(字距才对得上) +\newcommand{\logicexpr}[1]{{\sunfont #1}} +% 求和符号 Σ / 带 Φ 的 Σ,跟正文同高(原卷是混排文本,不是数学符号) +\newcommand{\sumsig}{\hbox{\sunfont ∑}} +\newcommand{\sumphisig}{\hbox{\sunfont ∑Φ}} + +% 下标(原卷 M_L / M_S) +% 实测:L/S 字号 5.30bp(SimSun),基线相对正文下移 1.56bp; +% M(210.00) → L(215.16) 步距 5.16bp(M 的半角宽), +% L → 和 3.96bp,故 M 起点到"和"共 9.12bp。 +% 用宽度 3.87bp 的盒接管下标宽度,使 5.25 + 3.87 = 9.12 对齐原卷。 +\newcommand{\ssub}[1]{% + \raisebox{-1.56bp}{\makebox[3.87bp][l]{\fontsize{5.30bp}{5.30bp}\selectfont #1}}} + +%====================================================================== +% 10. 题型构件(通用) +% 设计原则:不依赖任何具体课程,只提供"骨架", +% 题目内容由正文填写。所有题型都沿用本卷实测的版面参数: +% · 正文 10.5bp / 行距 15.6bp +% · 中英之间 2.70bp(ecglue) +% · 题号栏 15.72bp(宋体题号,题号后空 5.28bp) +%====================================================================== + +%---------------------------------------------------------------------- +% 10.1 分值标注(题号右侧、行尾右对齐) +% \qscore{5} → 在当前位置右对齐显示 "(5分)" +% 单独成行右对齐:\scorerow{5} +%---------------------------------------------------------------------- +\newcommand{\qscore}[1]{{\Fivhao\hfill(#1分)}} +\newcommand{\scorerow}[1]{\par\noindent\hfill{\Fivhao(#1分)}\par} + +%---------------------------------------------------------------------- +% 10.2 填空横线 +% \blank → 5 个下划线的短空(约 3 个汉字宽) +% \blank[8] → 指定字宽的横线(8 个字宽) +% \lblank → 通栏长横线(整行) +% 用 \rule 画,落在基线下方,与 Word 的下划线观感一致 +%---------------------------------------------------------------------- +\newlength\ouc@blw +\newcommand{\blank}[1][5]{% + \settowidth{\ouc@blw}{\Fivhao 国}% + \setlength{\ouc@blw}{\dimexpr\ouc@blw*#1\relax}% + \hspace*{0.6bp}\rule[0.35bp]{\ouc@blw}{0.5bp}\hspace*{0.6bp}} +\newcommand{\lblank}{\par\noindent\rule[0.35bp]{\linewidth}{0.5bp}\par} + +%---------------------------------------------------------------------- +% 10.3 括号填空(\tk 在括号内留出可写空间) +% \tk → 3 个字宽的括号空:\tk 写成 (\hspace.. ) +%---------------------------------------------------------------------- +\newcommand{\tk}{\makebox[2.4em]{\dotfill}} + +%---------------------------------------------------------------------- +% 10.4 选项:两种版式 +% \choices{...}{...}{...}{...} 一行四栏(3 个汉字以内的短选项) +% \choicesII{...}{...}{...}{...} 两行两栏(长选项,每栏半行宽) +% \optgrid{...}{...} 任意栏数,自动按半行宽排 +%---------------------------------------------------------------------- +% 长选项:每栏半行宽(含标签栏) +\newlength\ouc@halfw +\newcommand{\optII}[2]{% + \setlength{\ouc@halfw}{\dimexpr\linewidth/2\relax}% + \makebox[\ouc@halfw][l]{\qnum{#1}#2}} +\newcommand{\choicesII}[4]{% + \par\noindent\optII{A}{#1}\optII{B}{#2}\par + \noindent\optII{C}{#3}\optII{D}{#4}\par} +% 任意栏数(每行 #1 栏) +% \optgrid{3}{甲,乙,丙,丁} → 每行 3 栏,逗号分隔 +% ⚠️ 两个坑: +% (1) 不能用 LaTeX2e 的 \@for 遍历:它对每个元素做 \edef 展开, +% 中文(xeCJK 活动字符)会被提前展开,选项内容直接丢失。 +% (2) expl3 里 @ 不是字母,控制序列名不能再含 @(\ouc@foo 会被读成 +% \ouc + "@foo"),故 expl3 侧一律用 \__ouc_ 前缀。 +\ExplSyntaxOn +\seq_new:N \l__ouc_opt_seq +\int_new:N \l__ouc_opt_i +\cs_new_protected:Npn \__ouc_optgrid:nn #1#2 + { + \seq_set_split:Nnn \l__ouc_opt_seq {,} {#2} + \int_zero:N \l__ouc_opt_i + \seq_map_inline:Nn \l__ouc_opt_seq + { + \makebox[\dim_eval:n {\linewidth/#1}][l]{##1} + \int_incr:N \l__ouc_opt_i + \int_compare:nT { \l__ouc_opt_i = #1 } + { \par \noindent \int_zero:N \l__ouc_opt_i } + } + \par + } +\NewDocumentCommand \optgrid { m m } { \par \noindent \__ouc_optgrid:nn {#1} {#2} } +\ExplSyntaxOff + +%---------------------------------------------------------------------- +% 10.5 判断题:括号在题首(原卷常见写法) +% \judge{序号}{题干} → "( )1. 题干",括号默认 3 字宽 +% \judge[5]{序号}{题干} → 括号 5 字宽(长答案用) +% 括号用 \makebox + \hfill 撑开,"("居左、")"居右,中间留答题位。 +% 括号在行尾的写法直接用 \qi{1}{题干(\hspace{1.67em})} 即可。 +%---------------------------------------------------------------------- +\newlength\ouc@jdw +\newlength\ouc@juw +\newcommand{\judge}[3][3]{% + \par\noindent + \settowidth{\ouc@juw}{\Fivhao 国}% + \setlength{\ouc@jdw}{\dimexpr\ouc@juw*#1\relax}% + \makebox[\ouc@jdw][l]{(\hfill )}% + \hspace*{2bp}\SUN{#2.}\hspace*{5.28bp}#3\par} + +%---------------------------------------------------------------------- +% 10.6 答题横线 +% \answerlines[行数] → 在当前位置下方排 n 条等距横线(每条占 1 行距 15.6bp) +% 注意:不能用 \vbox 整体打包 —— 那样它会成为一个不可分割的原子块, +% 页面剩余空间不够时整块被推到下一页,页脚会留出大片空白。 +% 改为逐条 "\par\nointerlineskip\vspace*{..}\hrule" 输出,允许跨页断开。 +%---------------------------------------------------------------------- +\newcommand{\answerlines}[1][3]{% + \par + \@tempcnta=0 + \loop\ifnum\@tempcnta<#1 + \nointerlineskip\vspace*{15.0bp}% + \noindent\hrule height 0.4bp width \linewidth + \par + \advance\@tempcnta by 1 + \repeat + \nointerlineskip\vspace*{3bp}} + +%---------------------------------------------------------------------- +% 10.7 大题标题的"带分值"简写 +% \bigsection{一}{填空题}{3 小题,每题 4 分,共 12 分} +% 中间的"共"字由宏自己补,第三个参数不要再写"共" +%---------------------------------------------------------------------- +\newcommand{\bigsection}[3]{% + \examheading{#1、#2\TNRB{(}共\oucsp{6}#3\TNRB{)}}} + +%---------------------------------------------------------------------- +% 10.8 答题方框 +% \answerbox{高度bp} → 通栏、指定高度的矩形框(作图 / 计算作答用) +%---------------------------------------------------------------------- +\newcommand{\answerbox}[1]{% + \par\nointerlineskip\vspace*{4bp}\noindent + \framebox[\linewidth]{\rule{0pt}{#1}}% + \par\nointerlineskip\vspace*{6bp}} + +%---------------------------------------------------------------------- +% 10.10 配伍题(连线匹配) +% \mtpair{左侧内容}{右侧内容} → 左 44% | 中 12% 空白(供连线)| 右 44% +% 逐行写即可,行列自动对齐: +% \mtpair{\qnum{1} 甲}{A. 子} +% \mtpair{\qnum{2} 乙}{B. 丑} +% 中间空白留给学生画连线,不需要画虚线。 +%---------------------------------------------------------------------- +\newcommand{\mtpair}[2]{% + \par\noindent + \makebox[0.44\linewidth][l]{#1}% + \makebox[0.12\linewidth][c]{}% + \makebox[0.44\linewidth][l]{#2}\par} +% 配伍题整体上下留白 +\newcommand{\matchinggap}{\par\vspace*{3bp}} + +%---------------------------------------------------------------------- +% 10.11 表格(成绩表 / 数据表):等宽 tabular,自动加横线 +% \datatable{列格式}{表体} +% 表内数字请用 \TNR{},不要用 $...$(数学模式基线偏低,会与中文错行) +%---------------------------------------------------------------------- +\newcommand{\datatable}[2]{% + \par\vspace*{5bp}% + \centerline{\begin{tabular}{@{}#1@{}}#2\end{tabular}}% + \par\vspace*{5bp}} + +%====================================================================== +% 11. 自动装订线钩子 +% ★ 印张规则:试卷用大纸双面印,偶数页拼在奇数页背面(同一张纸)。 +% "装订线 + 学号/姓名/专业年级/授课教师/考场教室号/座号"只印正面, +% 即**只画奇数页**;偶数页是背面,再画一遍折进去也看不见。 +% ⇒ 钩到这里,按 \value{page} 自动判断,.tex 里不必逐页调用。 +% ⚠️ 必须放在最后:\ouc@dobindstrip 依赖前面定义的 \ouc@bindshift 等。 +%====================================================================== +\AddToShipoutPictureFG{% + \ifouc@bindon + \ifouc@bindodd + \ouc@dobindstrip % 每页都画(nup 拼版等特殊需要) + \else + \ifodd\value{page}\ouc@dobindstrip\fi % 默认:只画奇数页 + \fi + \fi} + +\endinput \ No newline at end of file diff --git a/exam/ouckey.sty b/exam/ouckey.sty new file mode 100644 index 0000000..8d61c88 --- /dev/null +++ b/exam/ouckey.sty @@ -0,0 +1,392 @@ +%====================================================================== +% ouckey.sty — 中国海洋大学 期末考试 参考答案及评分标准 版式包 +% +% 设计依据:学校无统一模板,本包按国内高校通行体例提炼,要点四条—— +% ① 抬头须有:学年学期、课程名、试卷类型、学院/年级/专业、 +% 开课学院、任课教师、考试方式、(可选)满分与考试日期; +% ② 客观题(填空/选择/判断)答案集中列出,附统一给分规则; +% ③ 主观题(名词解释/简答/论述/分析/计算/作图…)答案内嵌 +% "分步给分"标记,每个得分点后直接标(X 分); +% ④ 每个大题末尾给【评分标准】,写清"答错/多选/漏选/未答"如何计分。 +% +% 与 oucexam.sty(试卷版式)配套使用,字号字体同名同义: +% \Fivhao 五号正文 / \Sihao 小四 / \Xiaowu 小五 +% \TNR{} Times / \TNRB{} Times Bold / \SUN{} 宋体 / \heiti 黑体 +% +% 纸张:默认 A4(阅卷、归档、打印都按 A4 走)。 +% 需要与试卷同尺寸(195mm×270mm 专用试卷纸)时加选项 exampaper: +% \usepackage[exampaper]{ouckey} +% +% 用法见同目录 参考答案与评分标准示例.tex +%====================================================================== +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{ouckey}[2026/10/22 v1.0 OUC answer key & marking scheme] + +% 本包大量使用 \ouckey@xxx 私有名,@ 必须当字母 +\makeatletter + +\RequirePackage{fontspec} +\RequirePackage{xeCJK} +\RequirePackage{graphicx} +\RequirePackage{lastpage} +\RequirePackage{keyval} +\RequirePackage{array} +\RequirePackage{tikz} % 作图题的参考答案要配图 +\usetikzlibrary{calc,positioning} + +%---------------------------------------------------------------------- +% 纸张选项 +% exampaper → 195mm × 270mm(与试卷同纸,便于和试卷一起装订归档) +% 默认 → A4(阅卷现场用,字大好认) +%---------------------------------------------------------------------- +\newif\ifouckey@exampaper \ouckey@exampaperfalse +\DeclareOption{exampaper}{\ouckey@exampapertrue} +\ProcessOptions\relax + +\ifouckey@exampaper + \RequirePackage[paperwidth=195mm,paperheight=270mm, + left=82.2bp,textwidth=436.55bp, + top=46bp,textheight=650bp, + headheight=0pt,headsep=0pt,footskip=30bp]{geometry} +\else + \RequirePackage[paperwidth=210mm,paperheight=297mm, + left=25mm,right=25mm,top=25mm,bottom=25mm, + headheight=0pt,headsep=0pt,footskip=28bp]{geometry} +\fi + +\setlength{\parindent}{0pt} +\setlength{\parskip}{0pt} +\pagestyle{empty} + +%---------------------------------------------------------------------- +% 字体(与 oucexam.sty 保持一致) +%---------------------------------------------------------------------- +\setmainfont{Times New Roman} +\setCJKmainfont{SimSun}[AutoFakeBold=2.86] +% ctexart 已定义 \songti / \heiti,重名会报 "Control sequence already defined" +% 只在未定义时才建(\provideCJKfontfamily 并不存在,必须自己判) +\ifdefined\songti\else\newCJKfontfamily\songti{SimSun}[AutoFakeBold=2.86]\fi +\ifdefined\heiti\else\newCJKfontfamily\heiti{SimHei}\fi +\newCJKfontfamily\kaiti{KaiTi} +\newfontfamily\tnr{Times New Roman} +\newfontfamily\tnrb{Times New Roman Bold} +\newfontfamily\sunfont{SimSun} + +% 局部字体切换必须显式收尾,否则 xeCJK 字体会"溢出"到后一段 +\newcommand{\TNR}[1]{{\tnr #1\normalfont}} +\newcommand{\TNRB}[1]{{\tnrb #1\normalfont}} +\newcommand{\SUN}[1]{{\sunfont #1\normalfont}} + +\xeCJKsetup{CJKecglue={\hskip 2.70bp\relax},PunctStyle=plain} + +\newcommand{\Fivhao}{\fontsize{10.5bp}{16bp}\selectfont} +\newcommand{\Sihao}{\fontsize{12bp}{18bp}\selectfont} +\newcommand{\Xiaowu}{\fontsize{9bp}{13bp}\selectfont} +\AtBeginDocument{\Fivhao\selectfont} + +%====================================================================== +% 1. 抬头信息 +% \keysetup{ ... } 里填;留空的项自动不印(不留空横线) +%====================================================================== +\def\ouckey@year{}\def\ouckey@term{}\def\ouckey@course{} +\def\ouckey@type{}\def\ouckey@college{}\def\ouckey@grade{} +\def\ouckey@major{}\def\ouckey@dept{}\def\ouckey@teacher{} +\def\ouckey@examiner{}\def\ouckey@mode{}\def\ouckey@date{} +\def\ouckey@total{} +\define@key{ouckey}{year}{\def\ouckey@year{#1}} +\define@key{ouckey}{term}{\def\ouckey@term{#1}} +\define@key{ouckey}{course}{\def\ouckey@course{#1}} +\define@key{ouckey}{type}{\def\ouckey@type{#1}} +\define@key{ouckey}{college}{\def\ouckey@college{#1}} +\define@key{ouckey}{grade}{\def\ouckey@grade{#1}} +\define@key{ouckey}{major}{\def\ouckey@major{#1}} +\define@key{ouckey}{dept}{\def\ouckey@dept{#1}} +\define@key{ouckey}{teacher}{\def\ouckey@teacher{#1}} +\define@key{ouckey}{examiner}{\def\ouckey@examiner{#1}} +\define@key{ouckey}{mode}{\def\ouckey@mode{#1}} +\define@key{ouckey}{date}{\def\ouckey@date{#1}} +\define@key{ouckey}{total}{\def\ouckey@total{#1}} +\newcommand{\keysetup}[1]{\setkeys{ouckey}{#1}} + +% 判空:\ifx 比不了多 token 参数,用 \detokenize 展成字符串再比 +\newcommand{\ouckey@ifempty}[1]{% + \if\relax\detokenize{#1}\relax + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} + +% 一格信息:标签加粗,值用宋体;值为空则整格不出 +\newcommand{\ouckey@cell}[2]{% + \ouckey@ifempty{#2}{}{\textbf{#1:}#2}} +% 一行三格,等宽 +\newcommand{\ouckey@inforow}[6]{% + \par\noindent + \makebox[0.3333\linewidth][l]{\ouckey@cell{#1}{#2}}% + \makebox[0.3333\linewidth][l]{\ouckey@cell{#3}{#4}}% + \makebox[0.3333\linewidth][l]{\ouckey@cell{#5}{#6}}\par} + +%---------------------------------------------------------------------- +% 抬头:标题 + 信息栏 + 一条分隔线 +% 标题 = 学年学期 + 课程名 + 试卷类型 +「参考答案及评分标准」 +%---------------------------------------------------------------------- +\newcommand{\makekeyhead}{% + \par\noindent + \begin{minipage}{\linewidth}\centering + {\fontsize{16bp}{24bp}\selectfont\heiti + 中国海洋大学% + \ouckey@ifempty{\ouckey@year}{}{\quad\TNR{\ouckey@year}—\TNR{\the\numexpr\ouckey@year+1\relax}~学年}% + \ouckey@ifempty{\ouckey@term}{}{\ouckey@term 学期}\par} + \vspace*{6bp} + {\fontsize{15bp}{22bp}\selectfont\heiti + 《\ouckey@course》期末考试% + \ouckey@ifempty{\ouckey@type}{}{(\ouckey@type~卷)}% + 参考答案及评分标准\par} + \end{minipage}\par + \vspace*{10bp} + \hrule height 1.2bp + \vspace*{8bp} + \ouckey@inforow{开课学院}{\ouckey@dept}% + {课程名称}{\ouckey@course}% + {试卷类型}{\ouckey@ifempty{\ouckey@type}{}{\ouckey@type~卷}} + \ouckey@inforow{学生学院}{\ouckey@college}% + {年级专业}{\ouckey@major}% + {考试方式}{\ouckey@mode} + \ouckey@inforow{任课教师}{\ouckey@teacher}% + {命题人}{\ouckey@examiner}% + {满分}{\ouckey@ifempty{\ouckey@total}{}{\TNR{\ouckey@total}~分}} + % ★ 抬头【不印考试日期】。 + % date 这个键仍保留(老文件写了 date= 不会报 unknown key), + % 但不再渲染,对话框里也不显示,避免抬头行数随日期有无而浮动。 + \vspace*{6bp} + \hrule height 0.6bp + \vspace*{10bp}} + +%====================================================================== +% 2. 分值标记 +% \pt{2} → 「(2 分)」——嵌在答案文字中间,标"这一点值 2 分" +% \ptline{2}{要点} → 要点靠左、分值靠右对齐(长要点更清爽) +%====================================================================== +\newcommand{\pt}[1]{{\small(\TNR{#1}~分)}} +\newcommand{\ptline}[2]{% + \par\noindent #2\unskip\par\nobreak + \vspace*{-1.2\baselineskip}% + \par\noindent\hfill{\small(\TNR{#1}~分)}\par\vspace*{2bp}} + +% 阿拉伯数字 → 中文(1..16)★必须在使用之前定义 +\newcommand{\ouckey@cnnum}[1]{% + \ifcase\numexpr#1\relax\or 一\or 二\or 三\or 四\or 五\or 六% + \or 七\or 八\or 九\or 十\or 十一\or 十二% + \or 十三\or 十四\or 十五\or 十六\fi} + +%====================================================================== +% 3. 大题标题 +% \keysection{一}{单项选择题}{10}{2} +% → 一、单项选择题(本题共 10 题,每小题 2 分,共 20 分) +% 小计自动算,不用手填。 +% \keysectionfree{二}{填空题}{共 10 空,每空 1 分} +% → 二、填空题(共 10 空,每空 1 分) —— 分值不整齐时用这个 +%====================================================================== +\newcommand{\keysection}[4]{% + \par\addvspace{10bp}% + {\Sihao\heiti + #1、#2(本题共~\TNR{#3}~题,每小题~\TNR{#4}~分,共~\TNR{\the\numexpr#3*#4\relax}~分)\par}% + \addvspace{5bp}} +\newcommand{\keysectionfree}[3]{% + \par\addvspace{10bp}% + {\Sihao\heiti #1、#2(#3)\par}% + \addvspace{5bp}} + +%====================================================================== +% 4. 客观题答案 +% \objkeys{C,B,A,B,C,A,C,A,C,A} → 每行 6 个,自动换行 +% \objkeys[5]{...} → 每行 5 个 +% 答案串逗号分隔;题号自动递增。 +% +% ★ 这个宏反复改过很多次,下面几条是实测结论,动之前先看清: +% +% 【不能用 \par 分行】 +% 在 \@for 循环体里写 "\hbox to \textwidth{...}\par\noindent", +% 整段放进文档正文是好的,但一旦包进宏体就失效—— +% 十几项全排在同一个基线(pdftotext -bbox 的 yMin 完全相同), +% 后续直接溢出纸边。\@for 先把循环体抓成参数,\par 的展开时机不对。 +% +% 【不能用 \unvbox + \prevdepth 思路】 +% \unvbox 执行完寄存器即被清空,紧跟的 \ifdim\ht...>0pt 恒为假; +% 而且 \unvbox 后 TeX 把 \prevdepth 设成 -1000pt 抑制行间胶水, +% 各行会叠在一起(实测间距只有一个行高)。 +% +% 【不能用 \makebox[<变宽>]】 +% 在 \@for 循环里 \makebox[\dimexpr\textwidth/\perrow\relax] 或 +% \makebox[\cw] 会**静默吞掉内容**(PDF 里整行消失,且不报错, +% 只在 log 里留 Undefined control sequence / Missing number)。 +% → 用 \hbox to <定宽> 代替,定宽预先算进 \dimen 寄存器。 +% +% 可靠做法(本实现): +% 逐项往 \ouckey@cellbox 塞一个 "\hbox to \ouckey@cellw" 单元格; +% 攒满 \\ouckey@perrow 个就整理成一行,追加进 \ouckey@allbox(\vbox); +% 行与行之间自己补胶水 = \baselineskip - \ht(行) - \dp(行); +% 最后 \unvbox 一次性铺出。全程不碰 \par、不碰 \makebox。 +%====================================================================== +\newbox\ouckey@cellbox +\newbox\ouckey@linebox +\newbox\ouckey@allbox +\newcount\ouckey@objn +\newcount\ouckey@objrow +\newcount\ouckey@perrow +\newcount\ouckey@rowsdone +\newdimen\ouckey@cellw +\newdimen\ouckey@textw +\newdimen\ouckey@gap + +\newcommand{\ouckey@flushline}{% + \setbox\ouckey@linebox\hbox to \ouckey@textw{\unhbox\ouckey@linebox\hss}% + \ouckey@gap=\dimexpr\baselineskip-\ht\ouckey@linebox + -\dp\ouckey@linebox\relax + \ifnum\ouckey@rowsdone>0 + \setbox\ouckey@allbox\vbox{\unvbox\ouckey@allbox + \vskip\ouckey@gap \box\ouckey@linebox}% + \else + \setbox\ouckey@allbox\vbox{\unvbox\ouckey@allbox + \box\ouckey@linebox}% + \fi + \advance\ouckey@rowsdone by 1 + \setbox\ouckey@linebox\hbox{}} + +\newcommand{\ouckey@addcell}[1]{% + \advance\ouckey@objn by 1 + \setbox\ouckey@cellbox\hbox to \ouckey@cellw{% + \TNR{\the\ouckey@objn}.#1\hss}% + \setbox\ouckey@linebox\hbox{\unhbox\ouckey@linebox + \box\ouckey@cellbox}% + \ouckey@objrow=\ouckey@objn + \divide\ouckey@objrow by \ouckey@perrow + \multiply\ouckey@objrow by \ouckey@perrow + \ifnum\ouckey@objn=\ouckey@objrow \ouckey@flushline\fi} + +\newcommand{\objkeys}[2][6]{% + \par\addvspace{4bp}% + \begingroup + \ouckey@textw=\textwidth + \ouckey@perrow=#1 + \ouckey@cellw=\dimexpr\ouckey@textw/\ouckey@perrow\relax + \ouckey@objn=0 + \ouckey@rowsdone=0 + \setbox\ouckey@linebox\hbox{}% + \@for\ouckey@item:=#2\do{\expandafter\ouckey@addcell\expandafter{\ouckey@item}}% + \ouckey@flushline + \noindent\unvbox\ouckey@allbox + \par + \endgroup + \addvspace{4bp}} + +%====================================================================== +% 5. 主观题 +% \keyitem{1}{8}{答案正文……} → 「1.(8 分)答案正文……」 +% \keyitemstar{2}{答案} → 只出题号+答案,不印分值 +% +% ★ 注意:参数正文里可以正常用 \\ 换行与 \pt{..}; +% 但**不要在里面嵌 tabular/tikzpicture 环境**——那些环境的 & 与 \\ +% 会被当成参数分隔符,导致 "File ended while scanning"。 +% 表格/图请写在 \keyitem 之后(先写完文字,再另起环境)。 +%====================================================================== +\newcommand{\keyitem}[3]{% + \par\addvspace{5bp}\noindent + {\bfseries \TNR{#1}.}\pt{#2}\hspace*{3bp}#3\relax\par} +\newcommand{\keyitemstar}[2]{% + \par\addvspace{5bp}\noindent + {\bfseries \TNR{#1}.}\hspace*{3bp}#2\relax\par} + +%====================================================================== +% 6. 【评分标准】块 +% 左侧一条 2bp 竖线 + 灰底标题,视觉上和"答案正文"分开,但不抢眼 +% \scoring{内容} +% \scoring*{内容} → 不带左侧竖线(行内短说明用) +%====================================================================== +\newcommand{\scoring}{% + \@ifstar{\ouckey@scoring@plain}{\ouckey@scoring@rule}} +\newcommand{\ouckey@scoring@rule}[1]{% + \par\addvspace{4bp}% + \noindent + \begin{minipage}{\linewidth}% + \hspace*{2bp}% + \vrule width 2bp \hspace*{6bp}% + \begin{minipage}{\dimexpr\linewidth-10bp\relax}% + {\bfseries【评分标准】}#1% + \end{minipage}% + \end{minipage}% + \par\addvspace{4bp}} +\newcommand{\ouckey@scoring@plain}[1]{% + \par\addvspace{2bp}\noindent{\bfseries【评分标准】}#1\par\addvspace{2bp}} + +% 备注 / 说明(比评分标准低一级,用于"其他解法同等给分"这类话) +\newcommand{\keynote}[1]{% + \par\addvspace{3bp}\noindent + {\small\bfseries 说明:}#1\par\addvspace{3bp}} + +%====================================================================== +% 7. 分值汇总表 +% \keytotal{20,20,15,10,15,20} +% → 自动画"题号 / 一 二 三 … / 合计"三行表,合计自动求和 +% 用于阅卷前核对"各大题分值相加是否等于满分"。 +%====================================================================== +\newcount\ouckey@sum +\newcount\ouckey@cnt +%---------------------------------------------------------------------- +% ★ 这里踩过三个坑,都记下: +% +% 坑1 \edef\head{\head&...} 自引用 → 无限展开,parameter stack 爆掉。 +% 坑2 \g@addto@macro / \toks 存 token 序列 → 存进去的是 \ouckey@cur +% 这个"宏名",等表格排版时循环早走完,16 格全变成最后一个值。 +% 坑3 本想用 \xdef 拼,但在里面包 \TNR{...}(内含 \normalfont, +% 不可展开)→ 又撞栈。 +% +% 正解:\xdef 拼装,且**只拼纯字符**,字体命令留到表格里再加。 +% 数字用 Times 是题号行的既有风格,直接靠正文西文字体即可。 +%---------------------------------------------------------------------- +\newcommand{\keytotal}[1]{% + \par\addvspace{12bp}% + \ouckey@sum=0 \ouckey@cnt=0 + \def\ouckey@head{}\def\ouckey@body{}% + \@for\ouckey@v:=#1\do{% + \edef\ouckey@cur{\ouckey@v}% + \advance\ouckey@cnt by 1 + \advance\ouckey@sum by \ouckey@cur\relax + \edef\ouckey@cn{\ouckey@cnnum{\the\ouckey@cnt}}% + \xdef\ouckey@head{\ouckey@head&\ouckey@cn}% + \xdef\ouckey@body{\ouckey@body&\ouckey@cur}}% + \noindent + \begin{tabular}{|c|*{\the\ouckey@cnt}{c|}|c|} + \hline + \textbf{题号}\ouckey@head&\textbf{合计}\\ + \hline + \textbf{满分}\ouckey@body&\the\ouckey@sum\\ + \hline + \end{tabular}% + \par\addvspace{12bp}} + + +%====================================================================== +% 8. 结尾签署栏 +% ★ 只保留命题人一行。审核人、系(教研室)主任、日期都不印—— +% 这三个位置是纸质归档时由相应人员手签,答案稿本身不预印。 +% 换标签就直接改下面这行文字;想整栏不要,删掉 tex 里的 \keysign 即可。 +%====================================================================== +\newcommand{\keysign}{% + \par\addvspace{18bp}% + \noindent + \makebox[0.5\linewidth][l]{命题人(签字):\hrulefill}\par} + +%====================================================================== +% 9. 页脚:第 X 页 共 Y 页(居中) +%====================================================================== +\def\ps@ouckeypage{% + \def\@oddfoot{\hfill{\small 第\,\thepage\,页\quad 共\,\pageref{LastPage}\,页}\hfill}% + \let\@evenfoot\@oddfoot + \def\@oddhead{}\let\@evenhead\@oddhead} +\pagestyle{ouckeypage} + +% 包结尾必须恢复,否则会污染文档类里 @ 的处理 +\makeatother + +\endinput \ No newline at end of file diff --git a/exam/参考答案与评分标准示例.pdf b/exam/参考答案与评分标准示例.pdf new file mode 100644 index 0000000..eff765d Binary files /dev/null and b/exam/参考答案与评分标准示例.pdf differ diff --git a/exam/参考答案与评分标准示例.tex b/exam/参考答案与评分标准示例.tex new file mode 100644 index 0000000..b62286d --- /dev/null +++ b/exam/参考答案与评分标准示例.tex @@ -0,0 +1,254 @@ +%====================================================================== +% 参考答案及评分标准(示例) +% +% 用途:演示 ouckey.sty 的用法。题目与答案均为示意,不含任何真题。 +% 编译: xelatex 参考答案与评分标准示例.tex (跑两遍,第二遍取总页数) +% +% 学校没有统一模板,本文件按国内高校通行体例组织,四条规矩: +% ① 抬头信息齐全(学年学期 / 课程 / 类型 / 学院 / 专业 / 教师 / 方式 / 满分) +% ② 客观题答案集中列,附统一给分规则(答错怎么算、多选漏选怎么算) +% ③ 主观题答案里**内嵌**分步分值:写到哪个得分点,就标(X 分) +% ④ 每个大题末尾给【评分标准】,写清扣分规则与"其他正确解法同等给分" +% +% 为什么主观题要内嵌分值而不是只在末尾写总分: +% 阅卷是流水作业,批卷人手上只有这份文件。分值必须和答案文字 +% 贴在一起,批到哪里看到哪里;集中写在末尾,批卷人要来回翻。 +% +% 纸张选择: +% 默认 A4(阅卷现场用,字大好认) +% 要与试卷同纸一起装订归档,把下一行换成 +% \usepackage[exampaper]{ouckey} +% 即 195mm×270mm,页边距与试卷完全对齐。 +% +% 本示例为 8 个大题、满分 100 分,分值分布见文末 \keytotal 汇总表。 +%====================================================================== +\documentclass[UTF8]{ctexart} +\usepackage{ouckey} +\usepackage{amsmath} +\usepackage{amssymb} % \square(证明题结尾的证毕号) + +%---------------------------------------------------------------------- +% 抬头参数:留空的项自动不印,不会留空横线 +%---------------------------------------------------------------------- +\keysetup{ + year = {2025}, + term = {秋}, + course = {课程名称}, + type = {A}, + dept = {××学院}, + college = {××学院}, + major = {××专业 \TNR{2024} 级}, + teacher = {×××}, + examiner = {×××}, + mode = {闭卷、笔试}, + total = {100}, +} + +\begin{document} + +\makekeyhead + +%====================================================================== +% 一、单项选择(20 分) +%====================================================================== +\keysection{一}{单项选择题}{10}{2} + +\objkeys{C,B,A,B,C,A,C,A,C,A} + +\scoring{每小题 \TNR{2} 分,共 \TNR{20} 分。选对得满分;多选、错选、 +未选均不得分,不设部分分。} + +%====================================================================== +% 二、填空题(10 分) +% 多空答案用「;」分隔。顺序不可调换的,要在评分标准里写明。 +%====================================================================== +\keysection{二}{填空题}{5}{2} + +\keyitemstar{1}{结构;组织;控制} +\keyitemstar{2}{输入;处理;输出} +\keyitemstar{3}{准确性;完整性;及时性} +\keyitemstar{4}{分组;抽样} +\keyitemstar{5}{实验报告} + +\scoring{每小题 \TNR{2} 分,共 \TNR{10} 分。多空的题按空平分 +(两空各 \TNR{1} 分,三空各约 \TNR{0.7} 分,四舍五入到 \TNR{0.5} 分)。 +答案须与所填空格一一对应,顺序错位不得分; +同义表述(如"及时性"写作"时效性")同等给分; +出现错别字但字义可辨,不扣分。} + +%====================================================================== +% 三、判断改错(12 分) +% 判断与改正分开给分——这是最容易和学生对分的地方,必须写死。 +%====================================================================== +\keysection{三}{判断改错题}{4}{3} + +\keyitem{1}{3}{% + 判断:\textbf{×}\pt{1}。\\ + 改正:"只由期末卷面成绩决定"错误,应为"由平时成绩与期末成绩 + 按比例综合评定"\pt{2}。} + +\keyitem{2}{3}{% + 判断:\textbf{√}\pt{1}。\\ + 改正:无需改正。} + +\keyitem{3}{3}{% + 判断:\textbf{×}\pt{1}。\\ + 改正:实验数据记录应做到"准确、完整、及时"三项, + 缺"客观性"表述不完整\pt{2}。} + +\keyitem{4}{3}{% + 判断:\textbf{×}\pt{1}。\\ + 改正:缺勤达总学时三分之一者,取消期末考试资格\pt{2}。} + +\scoring{每小题 \TNR{3} 分,共 \TNR{12} 分。判断正确得 \TNR{1} 分, +改正正确得 \TNR{2} 分。只判断不改错的,最多得 \TNR{1} 分; +判断错误但改正部分指出正确说法的,给 \TNR{1} 分。} + +%====================================================================== +% 四、名词解释(12 分) +% 关键是"一个得分点 = 一个可核对的短句",不要写成一大段。 +%====================================================================== +\keysection{四}{名词解释}{3}{4} + +\keyitem{1}{4}{% + \textbf{学习效果评价}:指依据一定标准,对学习活动及其结果 + 作出价值判断的过程\pt{2}。其核心是"标准 + 证据 + 判断"三要素\pt{1}, + 目的是改进教与学,而非仅给出等级\pt{1}。} + +\keyitem{2}{4}{% + \textbf{形成性评价}:指在教学过程中进行、以改进教学为目的的评价\pt{2}。 + 与终结性评价相对,强调及时反馈\pt{1},常用课堂提问、随堂练习、 + 作业批改等方式实施\pt{1}。} + +\keyitem{3}{4}{% + \textbf{学习迁移}:指一种学习对另一种学习的影响\pt{2}。 + 按方向分正迁移与负迁移\pt{1},其发生依赖于共同要素与概括水平\pt{1}。} + +\scoring{每小题 \TNR{4} 分,共 \TNR{12} 分。按上述得分点累加给分, +不倒扣。答出同义表述即给分;只写出术语名称、未作任何解释的, +得 \TNR{0} 分。} + +%====================================================================== +% 五、简答题(12 分) +%====================================================================== +\keysection{五}{简答题}{2}{6} + +\keyitem{1}{6}{% + 影响学习效果的主要因素有:\\ + (\TNR{1})学习者自身因素,包括原有知识基础、学习动机与 + 元认知水平\pt{2};\\ + (\TNR{2})教学因素,包括内容组织、方法选择与反馈质量\pt{2};\\ + (\TNR{3})环境因素,包括学习时间、资源条件与同伴影响\pt{2}。} + +\keyitem{2}{6}{% + 课堂学习与自主学习的区别:\\ + (\TNR{1})组织方式不同:课堂学习由教师组织、时间固定; + 自主学习由学习者自行安排\pt{2};\\ + (\TNR{2})内容来源不同:课堂学习以教材与讲授为主; + 自主学习可跨出教材\pt{2};\\ + (\TNR{3})二者互补,缺一不可\pt{2}。} + +\scoring{每小题 \TNR{6} 分,共 \TNR{12} 分。按得分点给分, +每点说法基本正确即给满分,不必与参考答案逐字一致。 +答题要点齐全但表述混乱的,扣 \TNR{1} 分; +只答对一两个要点的,按点累加,不倒扣。} + +%====================================================================== +% 六、计算题(16 分) +% ★ 步骤分是重点,必须写清"哪一步值几分"。 +% ★ 数学公式用 $...$,不要用 unicode 上下标。 +%====================================================================== +\keysection{六}{计算题}{2}{8} + +\keyitem{1}{8}{% + 解:设平时成绩为 $x$,期末成绩为 $y$,总评 $S$。\\ + (\TNR{1})写出计算式\pt{2}: + \[ S = 0.3x + 0.7y \] + (\TNR{2})代入数据\pt{3}: + \[ S = 0.3\times 85 + 0.7\times 78 = 25.5 + 54.6 \] + (\TNR{3})计算结果并作答\pt{3}: + \[ S = 80.1 \] + 该生总评成绩为 \TNR{80.1} 分。} + +\keyitem{2}{8}{% + 解:(\TNR{1})列频数分布表并求组中值\pt{3};\\ + (\TNR{2})计算平均分 + $\bar{x}=\dfrac{1}{45}\sum f_i x_i = 75.7$\pt{3};\\ + (\TNR{3})及格率 $=\dfrac{40}{45}=88.9\%$\pt{2}。} + +\scoring{每小题 \TNR{8} 分,共 \TNR{16} 分。\textbf{按步骤给分}: +只写结果不写过程的,即使结果正确也只给结果分(\TNR{1} 分); +过程中间步算错但后续方法正确的,不重复扣分, +只在算错那一步扣该步分值。结果未按要求保留小数位的,扣 \TNR{1} 分。} + +%====================================================================== +% 七、分析题(8 分) +% 配图的参考答案:图放在 \keyitem 之后,不要塞进参数里。 +% (塞进去的话,tabular/tikz 的 & 与 \\ 会被当成参数分隔符) +%====================================================================== +\keysection{七}{分析题}{2}{4} + +\keyitem{1}{4}{% + (\TNR{1})四个环节依次为输入、处理、输出、反馈\pt{1};\\ + (\TNR{2})各环节作用:输入提供原始信息\pt{1},处理完成转换\pt{1}, + 输出呈现结果、反馈用于修正\pt{1}。} + +\vspace*{4bp} +\begin{center} +\begin{tikzpicture}[ + box/.style={draw,semithick,minimum width=62bp,minimum height=22bp, + inner sep=1bp,font=\Fivhao}, + arr/.style={->,>=stealth,semithick}] + \node[box] (a) {输入}; + \node[box,right=14bp of a] (b) {处理}; + \node[box,right=14bp of b] (c) {输出}; + \node[box,below=16bp of b] (d) {反馈}; + \draw[arr] (a) -- (b); + \draw[arr] (b) -- (c); + \draw[arr] (c.south) |- (d.east); + \draw[arr] (d.west) -| (a.south); +\end{tikzpicture} +\end{center} +\vspace*{4bp} + +\keyitem{2}{4}{% + (\TNR{1})缺失"反馈"环节的直接影响:错误无法被及时发现和纠正\pt{2};\\ + (\TNR{2})进一步说明:系统失去自校正能力,偏差会逐级累积\pt{2}。} + +\scoring{每小题 \TNR{4} 分,共 \TNR{8} 分。分析能结合材料具体内容、 +不是照抄定义的,按点给满分;只复述概念未结合材料的,最多给 \TNR{2} 分。 +用其他合理框架分析的,只要逻辑自洽、覆盖上述要点,同样给分。} + +%====================================================================== +% 八、论述题(10 分) +% 论述题给"分数段"而不是"精确点",这是通行做法。 +%====================================================================== +\keysection{八}{论述题}{1}{10} + +\keyitem{1}{10}{% + (\TNR{1})\textbf{明确观点}\pt{3}:课堂学习与自主练习是相互支撑 + 而非相互替代的关系。\\ + (\TNR{2})\textbf{论证课堂学习的作用}\pt{3}:提供系统框架、 + 及时纠偏、形成学习节奏。\\ + (\TNR{3})\textbf{论证自主练习的作用}\pt{2}:把"听懂"转化为 + "会做",形成个人化的理解与技能。\\ + (\TNR{4})\textbf{举例并结合自身体会}\pt{2}:须为具体事例, + 不能只作笼统表态。} + +\scoring{共 \TNR{10} 分。观点明确、论证有层次、举例贴切者给 +\TNR{9}~\TNR{10} 分;观点正确、论证较完整但举例笼统者给 +\TNR{7}~\TNR{8} 分;仅罗列要点、缺乏论证者给 \TNR{4}~\TNR{6} 分; +观点错误或严重偏离题意者给 \TNR{0}~\TNR{3} 分。 +\textbf{字数不足题目要求 \TNR{2/3} 的,在所得分数基础上扣 \TNR{2} 分。}} + +%====================================================================== +% 分值汇总表:阅卷前核对"各大题相加 = 满分" +%====================================================================== +\keytotal{20,10,12,12,12,16,8,10} + +\keynote{本表用于阅卷前核对分值。若相加不等于卷面满分(\TNR{100} 分), +说明某一大题的分值统计有误,须回到原卷核对,不要在此处直接改动数字。} + +\keysign + +\end{document} \ No newline at end of file diff --git a/exam/试卷题型示例.pdf b/exam/试卷题型示例.pdf new file mode 100644 index 0000000..3ff1a6d Binary files /dev/null and b/exam/试卷题型示例.pdf differ diff --git a/exam/试卷题型示例.tex b/exam/试卷题型示例.tex new file mode 100644 index 0000000..84cd700 --- /dev/null +++ b/exam/试卷题型示例.tex @@ -0,0 +1,320 @@ +%====================================================================== +% 试卷题型全览(示例卷) +% 用途:演示 oucexam.sty 支持的各类题型,不含任何真题。 +% 题目内容、分值均为示意,实际使用时按教学大纲替换。 +% 编译: xelatex 试卷题型示例.tex (跑两遍,第二遍取总页数) +% 换课程 / 学期只改下面的 \examsetup +% +% 题型索引(共 16 类): +% 一、填空题 \blank[n] 按字宽画横线 / \lblank 通栏横线 +% 二、判断题 \judge 括号在题首 +% 三、单项选择题 \choices 一行四栏(短选项) +% 四、多项选择题 \choicesII 两行两栏(长选项) +% 五、名词解释 \answerlines[n] 答题横线 +% 六、简答题 题号改 Times(\qiT) +% 七、判断改错题 \judge + 改错横线 +% 八、计算题 表格 + \answerbox 作答框 +% 九、作图题 大方框作答 +% 十、配伍题 \mtpair 左右两栏,中间留连线 +% 十一、表格填写题 \datatable + 空格 +% 十二、术语翻译题 英译中 / 中译英 +% 十三、证明题 逻辑推演,大作答区 +% 十四、分析题 配图(TikZ 示意,可换 \examfig) +% 十五、实验设计题 方案要素 + 大作答区 +% 十六、论述题 大段作答区 +%====================================================================== +\documentclass[UTF8,fontset=none]{ctexart} +\usepackage{oucexam} +\usetikzlibrary{positioning} + +%---------------------------------------------------------------------- +% 卷头参数 +%---------------------------------------------------------------------- +\examsetup{ + year = {2025}, + term = {秋}, + course = {课程名称}, + college = {××学院}, + type = {A}, % 卷头"试卷类型:A 卷"用这个 + foottype = {}, % 页脚课程名后是否再印类型字母。默认空(原卷 A 卷就不印) + % 若要与 B 卷一致,写 foottype = {B} + proposer = {}, + reviewer = {}, + mode = {闭卷}, + allowed = {无}, + nsec = {16}, % 本示例共 16 个大题,成绩表自动按 17 栏等分 +} + +%---------------------------------------------------------------------- +% 示例插图:用 TikZ 画一个通用框图占位,不依赖任何图片文件。 +% 实际使用时换成自己的图: +% \examfig[水平偏移]{宽度}{figs/xxx.jpg} +% 或需要精确定位时: +% \pinnedfig{x}{y}{宽度}{图后留白}{figs/xxx.jpg} +%---------------------------------------------------------------------- +\newcommand{\pinnedfig}[5]{% + \begin{tikzpicture}[remember picture,overlay] + \node[anchor=north west,inner sep=0pt] + at ([xshift=#1,yshift=-#2]current page.north west) + {\includegraphics[width=#3]{#5}}; + \end{tikzpicture}% + \par\nointerlineskip\vspace*{#4}} + +\newcommand{\demoflow}{% + \par\nointerlineskip\vspace*{10bp}% + \centerline{% + \begin{tikzpicture}[node distance=34bp, + box/.style={draw,semithick,minimum width=64bp,minimum height=24bp, + inner sep=1bp,font=\Fivhao}, + arr/.style={->,>=stealth,semithick}] + \node[box] (a) {环节一}; + \node[box,right=of a] (b) {环节二}; + \node[box,right=of b] (c) {环节三}; + \node[box,right=of c] (d) {环节四}; + \draw[arr] (a.north east) to[out=40,in=140] (b.north west); + \draw[arr] (b.north east) to[out=40,in=140] (c.north west); + \draw[arr] (c.north east) to[out=40,in=140] (d.north west); + \draw[arr] (d.south west) to[out=220,in=320] (a.south east); + \end{tikzpicture}}% + \par\nointerlineskip\vspace*{10bp}} + +\begin{document} + +%====================================================================== +% 第 1 页:卷头 + 客观题(填空 / 判断 / 单选 / 多选) +%====================================================================== +\examhead + +%---------------------------------------------------------------------- +% 一、填空题 —— \blank[n] 按字宽画填空横线 +%---------------------------------------------------------------------- +\bigsection{一}{填空题}{\TNRB{5}\oucsp{6}小题,每题\oucsp{6}\TNRB{2}\oucsp{6}分,共\oucsp{6}\TNRB{10}\oucsp{6}分} + +\qi{1}{本课程教材共分为\blank[2]章,其中第\blank[1]章为本学期重点。} +\qi{2}{一个完整的系统通常由输入、处理、\blank[4]和输出四部分组成。} +\qi{3}{实验数据记录应当做到\blank[3]、准确、\blank[2]三项基本要求。} +\qi{4}{若某班共有\TNR{45}名学生,按每组\TNR{5}人分组,可分为\blank[1]组。} +\qi{5}{按考核方式划分,本课程属于\blank[3]考核,总评成绩由\blank[3]和期末成绩构成。} + +%---------------------------------------------------------------------- +% 二、判断题 —— 括号在行尾(原卷写法);\judge 为括号在题首的写法 +%---------------------------------------------------------------------- +\bigsection{二}{判断题}{\TNRB{5}\oucsp{6}小题,每题\oucsp{6}\TNRB{2}\oucsp{6}分,共\oucsp{6}\TNRB{10}\oucsp{6}分} + +\qi{1}{课程考核成绩由平时成绩和期末成绩两部分构成。(\hspace{1.67em})} +\qi{2}{实验报告可以由多人共用同一份原始数据。(\hspace{1.67em})} +\qi{3}{课堂讨论的发言内容应当提前准备提纲。(\hspace{1.67em})} +\qi{4}{所有章节的学时分配完全相同。(\hspace{1.67em})} +\qi{5}{课程结束后不再安排集中答疑。(\hspace{1.67em})} + +%---------------------------------------------------------------------- +% 三、单项选择题 —— \choices 一行四栏(短选项) +%---------------------------------------------------------------------- +\bigsection{三}{单项选择题}{\TNRB{4}\oucsp{6}题,每题\oucsp{6}\TNRB{3}\oucsp{6}分,共\oucsp{6}\TNRB{12}\oucsp{6}分} + +\qi{1}{下列各项中,属于本课程必修环节的是(\hspace{1.33em})。} +\choices{课堂讲授}{课程实验}{课后作业}{期末考核} + +\qi{2}{一份规范的实验报告一般不包括(\hspace{1.33em})。} +\choices{实验目的}{实验步骤}{个人日记}{结果分析} + +\qi{3}{关于课程学时的说法,正确的是(\hspace{1.33em})。} +\choices{可随意增减}{按计划执行}{由学生定}{无需公布} + +\qi{4}{下列做法中,符合学术规范的是(\hspace{1.33em})。} +\choices{如实引注}{改写不给源}{代写作业}{重复投稿} + +%---------------------------------------------------------------------- +% 四、多项选择题 —— \choicesII 两行两栏(长选项) +%---------------------------------------------------------------------- +\bigsection{四}{多项选择题}{\TNRB{2}\oucsp{6}题,每题\oucsp{6}\TNRB{4}\oucsp{6}分,共\oucsp{6}\TNRB{8}\oucsp{6}分} + +\qi{1}{下列属于过程性考核方式的有(\hspace{1.33em})。} +\choicesII{课堂随堂测验}{阶段性小组汇报}{期末闭卷笔试}{实验操作考核} + +\qi{2}{撰写课程论文时应当遵守的学术规范包括(\hspace{1.33em})。} +\choicesII{如实标注引用来源}{独立完成规定部分}{直接复制他人成果}{按规定格式著录文献} + +\newpage + +%====================================================================== +% 第 2 页:主观题(名词解释 / 简答 / 判断改错) +%====================================================================== + +%---------------------------------------------------------------------- +% 五、名词解释 —— \answerlines[n] 给 n 条答题横线 +%---------------------------------------------------------------------- +\bigsection{五}{名词解释}{\TNRB{3}\oucsp{6}题,每题\oucsp{6}\TNRB{3}\oucsp{6}分,共\oucsp{6}\TNRB{9}\oucsp{6}分} + +\qi{1}{课程大纲} +\answerlines[5] + +\qi{2}{过程性评价} +\answerlines[5] + +\qi{3}{实验预习} +\answerlines[5] + +%---------------------------------------------------------------------- +% 六、简答题 —— 题号用 Times(\qiT),与真题第 2、3 页一致 +%---------------------------------------------------------------------- +\bigsection{六}{简答题}{\TNRB{2}\oucsp{6}题,每题\oucsp{6}\TNRB{5}\oucsp{6}分,共\oucsp{6}\TNRB{10}\oucsp{6}分} + +\qiT{1}{简述本课程成绩评定的基本构成,并说明各部分所占比例。} +\answerlines[5] + +\qiT{2}{说明实验数据记录的规范要求,并列举至少三条。} +\answerlines[5] + +%---------------------------------------------------------------------- +% 七、判断改错题 —— 判断题的进阶形式:\judge(括号在题首) +%---------------------------------------------------------------------- +\bigsection{七}{判断改错题}{\TNRB{2}\oucsp{6}题,每题\oucsp{6}\TNRB{3}\oucsp{6}分,共\oucsp{6}\TNRB{6}\oucsp{6}分} + +\judge{1}{课程总评成绩只由期末卷面成绩决定,平时成绩不计入。} +\answerlines[3] + +\judge{2}{实验课缺勤达到总学时三分之一者,可正常参加期末考试。} +\answerlines[3] + +\newpage + +%====================================================================== +% 第 3 页:计算题 / 作图题 +%====================================================================== + +%---------------------------------------------------------------------- +% 八、计算题 —— 表格 + \answerbox 作答区 +% 表格内数字用 \TNR{},不要用 $...$ —— 数学模式的基线比正文低, +% 与相邻中文字列不在同一基线上,视觉上会"错行"。 +%---------------------------------------------------------------------- +\bigsection{八}{计算题}{\TNRB{2}\oucsp{6}题,每题\oucsp{6}\TNRB{8}\oucsp{6}分,共\oucsp{6}\TNRB{16}\oucsp{6}分} + +\qiT{1}{某课程总评成绩按“平时\TNR{30\%}+期末\TNR{70\%}”计算。已知某学生平时成绩\TNR{85}分、期末成绩\TNR{78}分,求其总评成绩(保留一位小数)。} + +\answerbox{220bp} + +\qiT{2}{某班\TNR{45}名学生参加测验,成绩分布如下表,试求平均分与及格率(\TNR{60}分及以上为及格)。} + +\par\vspace*{5bp} +\centerline{% +\begin{tabular}{@{}cccc@{}} +\hline +分数段 & 人数 & 组中值 & 累计人数 \\ +\hline +\TNR{[50,60)} & \TNR{5} & \TNR{55} & \TNR{5} \\ +\TNR{[60,70)} & \TNR{12} & \TNR{65} & \TNR{17} \\ +\TNR{[70,80)} & \TNR{15} & \TNR{75} & \TNR{32} \\ +\TNR{[80,90)} & \TNR{9} & \TNR{85} & \TNR{41} \\ +\TNR{[90,100]} & \TNR{4} & \TNR{95} & \TNR{45} \\ +\hline +\end{tabular}} +\par\vspace*{5bp} + +\answerbox{205bp} + + + +%====================================================================== +% 第 4 页:作图题 / 配伍题 / 分析题 / 论述题 +%====================================================================== + +%---------------------------------------------------------------------- +% 九、作图题 —— 大方框作答 +%---------------------------------------------------------------------- +\bigsection{九}{作图题}{\TNRB{1}\oucsp{6}题,每题\oucsp{6}\TNRB{6}\oucsp{6}分,共\oucsp{6}\TNRB{6}\oucsp{6}分} + +\qiT{1}{请在下方方框内绘制本课程的学习流程图,要求包含“预习—听课—复习—作业”四个环节,并标明先后顺序。} + +\answerbox{96bp} + +%---------------------------------------------------------------------- +% 十、配伍题 —— \mtpair 左内容 / 右内容,中间留给学生连线 +%---------------------------------------------------------------------- +\bigsection{十}{配伍题}{\TNRB{1}\oucsp{6}题,每题\oucsp{6}\TNRB{4}\oucsp{6}分,共\oucsp{6}\TNRB{4}\oucsp{6}分} + +\qiT{1}{请将下列左侧的教学环节与右侧的主要作用一一连线对应。} + +\matchinggap +\mtpair{\qnum{1}~课堂讲授}{A.~巩固与检验} +\mtpair{\qnum{2}~课程实验}{B.~系统传授知识} +\mtpair{\qnum{3}~课后作业}{C.~动手验证原理} +\mtpair{\qnum{4}~期末考试}{D.~综合评定成绩} +\matchinggap + +%---------------------------------------------------------------------- +% 十一、表格填写题 —— \datatable{列格式}{表体} +% 作答格用 \blank[1] 或留空,适合"填写对比表 / 归纳表 / 数据表" +%---------------------------------------------------------------------- +\bigsection{十一}{表格填写题}{\TNRB{1}\oucsp{6}题,每题\oucsp{6}\TNRB{6}\oucsp{6}分,共\oucsp{6}\TNRB{6}\oucsp{6}分} + +\qiT{1}{请完成下表,比较三种学习方式的优缺点与适用场合。} + +\datatable{@{}p{60bp}p{88bp}p{88bp}p{88bp}p{40bp}@{}} +{ 学习方式 & 主要优点 & 主要不足 & 适用场合 & 备注 \\ + \hline + 课堂学习 & \blank[4] & \blank[4] & \blank[4] & \blank[1] \\ + \hline + 自主阅读 & \blank[4] & \blank[4] & \blank[4] & \blank[1] \\ + \hline + 小组讨论 & \blank[4] & \blank[4] & \blank[4] & \blank[1] \\ + \hline} + +%---------------------------------------------------------------------- +% 十二、术语翻译题 —— 英译中 / 中译英,两栏对照排 +%---------------------------------------------------------------------- +\bigsection{十二}{术语翻译题}{\TNRB{5}\oucsp{6}小题,每题\oucsp{6}\TNRB{1}\oucsp{6}分,共\oucsp{6}\TNRB{5}\oucsp{6}分} + +\qiT{1}{请将下列英文术语译为中文,填在括号内。} + +\mtpair{\TNR{1.}\ \textbf{learning outcome}\quad(\hspace*{60bp})}% + {\TNR{2.}\ \textbf{formative assessment}\quad(\hspace*{60bp})} +\mtpair{\TNR{3.}\ \textbf{curriculum design}\quad(\hspace*{60bp})}% + {\TNR{4.}\ \textbf{academic integrity}\quad(\hspace*{60bp})} +\mtpair{\TNR{5.}\ \textbf{peer review}\quad(\hspace*{60bp})}% + {\mbox{}} + +%---------------------------------------------------------------------- +% 十三、证明题 —— 逻辑推演,作答区按需加高 +%---------------------------------------------------------------------- +\bigsection{十三}{证明题}{\TNRB{1}\oucsp{6}题,每题\oucsp{6}\TNRB{6}\oucsp{6}分,共\oucsp{6}\TNRB{6}\oucsp{6}分} + +\qiT{1}{已知“所有参加实验的学生都提交了报告”,“甲同学参加了实验”。\\* + 试证明:甲同学提交了报告。(要求写出推理过程与依据)} + +\answerbox{150bp} + +%---------------------------------------------------------------------- +% 十四、分析题 —— 配图;正式使用时建议用 \examfig{宽度}{文件} +%---------------------------------------------------------------------- +\bigsection{十四}{分析题}{\TNRB{2}\oucsp{6}题,每题\oucsp{6}\TNRB{3}\oucsp{6}分,共\oucsp{6}\TNRB{6}\oucsp{6}分} + +\qiT{1}{观察下方示意图,说明该流程中各个环节的作用。} + +\demoflow + +\examfigcaption{图 1\quad 某流程示意图} + +\qiT{2}{结合图\TNR{1},分析若缺少其中某一环节可能产生的影响。} +\answerlines[2] + +%---------------------------------------------------------------------- +% 十五、实验设计题 —— 分要素设问 + 方案作答区 +%---------------------------------------------------------------------- +\bigsection{十五}{实验设计题}{\TNRB{1}\oucsp{6}题,每题\oucsp{6}\TNRB{10}\oucsp{6}分,共\oucsp{6}\TNRB{10}\oucsp{6}分} + +\qiT{1}{某小组拟探究“复习间隔对记忆保持量的影响”。请完成实验设计:\\* + (\TNR{1})写出实验假设;(\TNR{2})说明自变量、因变量与控制变量;\\* + (\TNR{3})简述实验分组与操作步骤;(\TNR{4})指出可能影响结论的一处干扰因素。} + +\answerbox{230bp} + +%---------------------------------------------------------------------- +% 十六、论述题 —— 大段作答区 +%---------------------------------------------------------------------- +\bigsection{十六}{论述题}{\TNRB{1}\oucsp{6}题,每题\oucsp{6}\TNRB{10}\oucsp{6}分,共\oucsp{6}\TNRB{10}\oucsp{6}分} + +\qiT{1}{结合本课程的学习体会,论述“课堂学习”与“自主练习”之间的关系,并举例说明。} +\answerlines[7] + +\end{document} \ No newline at end of file