Files
ouc_latex_template/成绩构成说明/成绩构成说明.tex
T
laoyang 8984b93ee7 模板内容填充:全库 × 占位换成完整虚构示例,README 表述同步 #11
把 11 个模板里满篇的 × 换成一套连贯的虚构数据,让样张能看出排版效果。

虚构设定(跨模板统一):
- 数字逻辑 / 2025 秋 / 张远航 / 计算机科学与技术学院,教学日历、成绩构成
  说明、试卷归档封面、试卷四份互相对得上
- 简历:张远航,1985.03,教授博导,论文/专利/项目/获奖全套虚构
- 年度考核:同一人的 2025 年度考核表,年度总结四段写满
- 执行大纲:刻意不套用上面那套(原件就是《信号与线性系统分析》的课,
  强行改课程名会让章节体系、学时分配、思政案例全对不上)

假数据都留肉眼可辨标记:DOI 统一 10.9999/、专利号 ZL209999…、
软著 2024SR99999…、手机 138 0000 0000、邮箱 example.net。
签字/日期/评语栏仍然留空——编了就分不清该改哪儿。

修掉一个既有 bug(填充时才暴露):
年度考核登记表「出生年月」的值从来不显示,连字符都不在 PDF 里。
根因是 tabularray 的 cell{r}{c}={c=n} 里那个 c 是数据行的单元序号、
不是视觉列号,表头三处 c=2 要求该行吃 15 个视觉列而表只有 11 列,
超出部分静默丢弃。迷惑点:写 12 格丢值,写 9 格反而正常。
正解是表头不写 cell{},改用行内 \SetCell[c=n]{c},每行照常写满 11 格。
同时 R0 行原件本就装不下(前六字段 115.76mm,剩 42.20mm 要放
19.68mm 标签 + 17.22mm 值,但列宽被切成 15.31/1.38/25.51),
把标签折两行「出生/年月」解决,列宽一个没改。

README 同步:根 README 与 8 个模板 README 里「一律用 × 占位」的说法
已不成立,统一改为「示例内容全部虚构」,并说明哪些位置仍必须留空。

验证:12 个模板零 error,4 处基线警告未新增;干净副本重编页数一致;
PDF 正文 × 清零;真实信息零泄漏。
2026-10-27 12:50:02 +08:00

208 lines
10 KiB
TeX
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
%======================================================================
% 成绩构成说明.tex — 中国海洋大学《成绩构成说明》
%
% 编译:在本目录下 xelatex 成绩构成说明.tex
% (不要从仓库根目录调用,fonts.tex 用的是相对路径)
%
% ------------------------------------------------------------------
% ⚠️ 本文件里所有课程信息、比例、日期**全是虚构占位符**,
% 不得把真实课程数据留在模板里提交。
% ------------------------------------------------------------------
%
% 填表只需改下面第 1 节的 5 个宏,正文不用动。
%======================================================================
\documentclass[UTF8,fontset=none,zihao=-4,a4paper]{ctexart}
\usepackage{oucgrade}
%======================================================================
% 【第 1 节】课程信息(改这里就够了)
%
% ⚠️ 比例必须**自洽**,正文里有一处自动校验会检查:
% 理论课比例 + 实验课比例 = 100%
% 平时成绩比例 + 期末成绩比例 = 理论课比例
% 作业比例 + 点名比例(+ 其它) = 平时成绩比例
% 若填错,编译时会在 log 里打出警告,并在 PDF 上印一个醒目的
% 「⚠ 比例不自洽」提示,防止带着算术错误归档。
%======================================================================
\newcommand{\grdcourse}{数字逻辑} % 课程名称
\newcommand{\grdyear}{2025} % 学年
\newcommand{\grdseason}{秋} % 季学期(春 / 秋)
\newcommand{\grdteacher}{张远航} % 任课教师
% ---- 总成绩构成(百分数,只填数字,不要带 %)----
\newcommand{\grdtheory}{80} % 理论课占总成绩
\newcommand{\grdlab}{20} % 实验课占总成绩
% ---- 理论课内部构成 ----
\newcommand{\grddaily}{30} % 平时成绩占理论课
\newcommand{\grdfinal}{70} % 期末考试成绩占理论课
% ---- 平时成绩内部构成(合计应等于 \grddaily)----
\newcommand{\grdhw}{20} % 作业占理论课
\newcommand{\grdattend}{10} % 点名占理论课
% ---- 实验课说明(一句话,写清由谁评定)----
\newcommand{\grdlabnote}{由实验课教师根据实验报告与实验操作评定。}
%======================================================================
% 比例自洽校验
%
% 模板会检查三组加法是否成立(校验代码在 oucgrade.sty §9):
% 理论课 + 实验课 = 100
% 平时 + 期末 = 理论课
% 作业 + 点名 = 平时
% 不通过时 log 里打 *** oucgrade: 比例不自洽 ***,文末印红字提示。
%
% 为什么值得做:成绩构成说明是要归档、要被教务抽查的文件,
% 比例加不起来是最常见也最难被自己发现的错误 —— 原件那句
% 「平时成绩占30%(作业占20%,点名占10%)」正是靠心算才看得出 20+10=30。
%======================================================================
\AtBeginDocument{\grdcheck
{\grdtheory}{\grdlab}{\grddaily}{\grdfinal}{\grdhw}{\grdattend}}
%======================================================================
\begin{document}
%======================================================================
% 【第 2 节】标题区
%======================================================================
\grdmaintitle{成绩构成说明}
\vspace{1.2mm}
\grdsubtitleline{\grdcourse\quad \grdyear~学年~\grdseason~季学期期末考试}
% 比例不平衡的警告印在这里(标题正下方),而不是文末 ——
% 文末会被签字栏挤到第 2 页,没人翻就等于没提示。
% 正常情况下这几行什么都不输出。
\grdwarnifbad
\vspace{2.0mm}
{\centering\rule{\textwidth}{0.5pt}\par}
\vspace{3.0mm}
%======================================================================
% 【第 3 节】总述
%
% 原件第一段是「理论课成绩占总成绩的80%。理论课成绩包括平时成绩、
% 期末考试成绩。……实验成绩占总成绩的20%。由实验课教师提供。」
% —— 一段里塞了四层比例关系,读起来要在脑子里做三次加减。
%
% 改写策略:总述只讲「几块、各占多少」,具体细分交给下面的表格。
% 这样总述是一句话,表格负责分解,各司其职。
%======================================================================
\grdpara{本课程成绩由\textbf{理论课}与\textbf{实验课}两部分构成,
分别占总成绩的 \grdtheory\% 与 \grdlab\%。两部分的具体构成与评定依据
见下表。}
%======================================================================
% 【第 4 节】成绩构成表
%
% 这是本模板相对原件最大的改进。
%
% 原件那句「理论课占80%。平时占30%(作业20%,点名10%),期末占70%」
% 藏着三层不同基准的百分数:
% 80% → 基准是总成绩
% 30% / 70% → 基准是**理论课**(不是总成绩)
% 20% / 10% → 基准也是理论课
% 于是实际占总成绩是 80×30% = 24%、80×20% = 16%……学生要心算三轮
% 才知道「作业到底折总成绩几分」。教务检查时这里也是最常被挑错的地方。
%
% 表格设计:左半给「占理论课」的原比例(老师填表时的口径),
% 右半用 \grdcalc 自动算出「占总成绩」的真实权重。两者并排,
% 不用做任何心算,也杜绝了算错的可能。
%======================================================================
\grdsec{一、成绩构成}
\begin{grdtable}
%------------------- 表头 -------------------
\grdth{项目} & \grdth{占本类} & \grdth{细分项目} &
\grdth{占本类} & \grdth{占总成绩} & \grdth{评定依据} \\
%------------------- 理论课(跨 2 行)-------------------
% ⚠️ 每行必须是**恰好 6 个格**。&\& 多一个就会多出一列,
% 整表撑破版心报 Overfull(实测多一个 & 后冲出 122pt)。
% ⚠️ 分项比例写在「评定依据」列、**不写在「细分项目」列**,是刻意的:
% 「细分项目」列可用宽只有 26mm(62.9bp),而「平时成绩(作业 20%、
% 点名 10%)」累计约 155bp,按中文避头尾规则必然折 **3 行**(56.2pt)。
% 但「理论课」是跨 2 行(r=2)的格,格高只有 2×7.5mm = 54.73pt,
% 而 **tabularray 的跨行格不会自己长高,只会让内容溢出格线** ——
% 实测第 3 行「10%)」的墨迹底离行线只剩 0.90pt(0.32mm),
% 同一张表其他行的间距是 4.97pt(1.75mm),一眼看得出挤。
% 仅画外框时那里本来没有线,缺陷被完全掩盖;画满全格线后才暴露。
% 「评定依据」列 29.4mm(74.17bp)放「作业 20% / 点名 10%」只折 2 行
% (34bp),进 54.73pt 的格绰绰有余。信息一点没少,只是换了格。
\SetCell[r=2]{c} \grdtd{理论课}
& \SetCell[r=2]{c} \grdtd{\grdtheory\%}
& \grdtd{平时成绩(作业 \grdhw\%、点名 \grdattend\%)}
& \grdtd{\grddaily\%}
& \grdtd{\grdcalc{\grdtheory}{\grddaily}\%}
& \grdtd{作业 + 出勤} \\
& & \grdtd{期末} & \grdtd{\grdfinal\%}
& \grdtd{\grdcalc{\grdtheory}{\grdfinal}\%}
& \grdtd{闭卷考试} \\
%------------------- 实验课 -------------------
\grdtd{实验课} & \grdtd{\grdlab\%}
& \grdtd{实验环节} & \grdtd{100\%}
& \grdtd{\grdlab\%} & \grdtd{实验教师评定} \\
%------------------- 合计 -------------------
% ⚠️ 跨 6 列时必须显式给 wd,否则用自然宽度不折行,报 Overfull。
% wd = 表宽 − 2×colsep = 146.5 − 2×1.905 = 142.69mm
% (跨列格的 colsep 只算首尾各一个,不按每列算)
\SetCell[c=6]{m,wd=142.34mm}
\grdtd{\textbf{合计占总成绩 100\%:}理论课 \grdtheory\%
(平时 \grdcalc{\grdtheory}{\grddaily}\% +
期末 \grdcalc{\grdtheory}{\grdfinal}\%)+ 实验课 \grdlab\%} \\
\end{grdtable}
%======================================================================
% 【第 5 节】分项说明
%
% 表格给数字,这一节给「怎么算」。原件缺这一层——学生看到
% 「作业占20%」并不知道是按几次作业平均、缺交怎么算。
% 这里留成占位文字,任课教师按自己课程的规则填写。
%======================================================================
\grdsec{二、分项说明}
\grdpara{\textbf{平时成绩}(占理论课 \grddaily\%)由以下各项累计:}
\begin{grdlist}
\grditem{作业(\grdhw\%)}{:按章布置,取各次作业成绩的算术平均;
缺交一次扣该次成绩的 20\%,抄袭该次作业按 0 分计。}
\grditem{点名(\grdattend\%)}{:随机抽查出勤,缺席一次扣 5 分,
累计缺席达 3 次者该项记 0 分。}
\end{grdlist}
\grdpara{\textbf{期末考试成绩}(占理论课 \grdfinal\%):闭卷笔试,
卷面 100 分,按 \grdfinal\% 折算计入总成绩。}
\grdpara{\textbf{实验成绩}(占总成绩 \grdlab\%):\grdlabnote}
%======================================================================
% 【第 6 节】成绩评定与异议
%
% 这一节原件没有,是本模板新增的。理由:成绩构成说明作为归档材料,
% 除了"怎么算"还应当说明"有异议怎么办",否则学生申诉时无据可依。
%
% 若你所在院系不要求,或需要压到一页,整节删掉即可
% (用 \grdomit 开关控制,不必删代码)。
%======================================================================
\def\grdwithini{1} % 1=印这一节,0=不印
\ifnum\grdwithini=1
\grdsec{三、成绩评定与异议}
\grdpara{总成绩按上述各项加权求和后,按学校规定的成绩记载办法取整记入。
学生对成绩有异议的,可在成绩公布后 5 个工作日内向开课单位提出书面复核
申请,逾期不再受理。}
\fi
%======================================================================
% 【第 7 节】签字栏
%
% ⚠️ 原件**没有**这一栏,是用户要求补的。
% 没有任课教师签字的成绩构成说明,在教务归档时不被认作有效文件,
% 所以这一节是必需的,不是装饰。
%======================================================================
\grdsignblock
\end{document}