把 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 正文 × 清零;真实信息零泄漏。
208 lines
10 KiB
TeX
208 lines
10 KiB
TeX
%======================================================================
|
||
% 成绩构成说明.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} |