Files

224 lines
13 KiB
TeX
Raw Permalink Normal View History

%======================================================================
% 中国海洋大学 课程教学日历(理论课程)
%
% 编译: xelatex 课程教学日历.tex
%
% 这是学校下发的**通用空白表**(附件3),本模板只复刻版式。
%
% ⚠️ 模板里的课程信息、周次、日期、教学内容**全部是虚构占位**,
2026-11-01 09:29:00 +08:00
% 与里的真实课程无关。填自己的课时请改【第 1 节】与表格。
%
% 版式来源:学校下发的《附件3:中国海洋大学课程教学日历(理论课程)》.doc
%
2026-11-01 09:29:00 +08:00
% 与的差异(有意为之):
% · 原字体「宋体 + Times New Roman」换成 OUC Serif + TeX Gyre Termes
% (全部开源可商用,字宽逐字相同)
% · 纸张、页边距、表宽、列宽、字号、行距、对齐一律照原值
% (详见 oucal.sty 的注释,每一项都附了换算过程)
% · 表格跨页位置不复刻(断点取决于行高取整,不可靠,见 sty §10)
%======================================================================
\documentclass[UTF8,fontset=none]{ctexart}
\usepackage{oucal}
%======================================================================
% 【第 1 节】课程信息 —— 换成你自己的
%
% ⚠️ 下面全部是虚构值,请逐项替换。不要把真实信息留在模板里提交。
%======================================================================
\newcommand{\calcno}{附件3} % 附件编号
\newcommand{\calcname}{数字逻辑} % 课程名称(4 字示例)
\newcommand{\calyear}{2025} % 学年
\newcommand{\calseason}{秋} % 季学期(春/秋)
\newcommand{\caldept}{计算机科学与技术学院(系)} % 开课单位
\newcommand{\calcodenum}{080502101231} % 开课号(12 位数字)
\newcommand{\calteacher}{张远航} % 任课教师
\newcommand{\calcredit}{4.0} % 课程学分
\newcommand{\calhour}{64} % 总学时
\newcommand{\calstudent}{86} % 学生人数
\newcommand{\calassess}{闭卷考试} % 考核方式
% 注:签字栏的「年 月 日」不设宏 —— 那是**手写**填空位,模板里保持空白。
\begin{document}
%======================================================================
% 【第 2 节】表格上方的抬头
%
2026-11-01 09:29:00 +08:00
% ⚠️ 下面每个 \calskip{} 的数值都是标定值。
%
2026-11-01 09:29:00 +08:00
% 正文用 460 twips 固定行距,段与段之间没有段前/段后间距,段距完全
% 由行盒的 ascent/descent 堆出来。TeX 的行盒模型与之不同(同样单行
% 段落,TeX 的盒子更矮),故逐段补差。
%
% 调整方法:导出 PDF 后读每行基线 y,与目标位置逐段比对,把差值加到
% 对应的 \calskip 上。响应是线性的,一轮即收敛。
%======================================================================
\begin{caloutside}
2026-11-01 09:29:00 +08:00
\calskip{-4.330mm} % 顶端补偿:首行基线距版心顶 20.69pt
\calfontA\bfseries \calcno:\par
\calskip{2.894mm}
{\calfontA\bfseries \centering 中国海洋大学 \calcname 课程教学日历(理论课程)\par}
\calskip{1.243mm}
{\calfontB\bfseries \centering \calyear~学年~\calseason~季学期\par}
\calskip{6.493mm}
%---- 课程信息:两行 ----
% ⚠️ 原件这两段带 w:ind left="-540"(−9.525mm) firstLine="210"(+3.704mm),
% 相对原版心 31.75mm 的净起点 = 31.75 − 9.525 + 3.704 = 25.929mm
2026-11-01 09:29:00 +08:00
% = 73.48pt,与实际x=73.44pt 吻合。
% caloutside 已把段落起点放回 31.75mm,故此处只需再左移 5.821mm。
%
% ⚠️ 两行之间用 \newline 而不是 \par —— 这是关键。
% 原件的两行是 460 twips 固定行距、段距 0,基线相差 23.04pt。
% 若用 \par 分成两段,**\baselineskip 不跨段落**,两段的间距变成
% 「上段末行深度 + \parskip(0) + 下段首行高度」≈ 20.9pt,短 2.1pt,
2026-11-01 09:29:00 +08:00
% 而且这个缺口**补不上**:实际\vspace*{-2.11pt} 与 \calskip{-0.734mm}
% 都会被 TeX 在 \par 处丢弃(负的垂直胶不能压缩已有间距)。
% \newline 让两行落在同一段落里,\baselineskip = 23bp 直接生效。
\calfontC
% 用一个段落 + \newline 排两行,缩进用 \leftskip 负值 + \parindent 补偿:
% \newline 后的行是"段中行",不吃 \parindent,只认 \leftskip。
% 故把缩进整体前移 5.821mm 后,第二行会自动跟着走。
\setlength{\leftskip}{\dimexpr\caloutsideskip-5.821mm\relax}
\setlength{\parindent}{0pt}
【开课单位】~\caldept\hfill 【开课号】~\calcodenum\hfill 【任课教师】~\calteacher\newline
【课程学分】~\calcredit\hfill 【总学时】~\calhour\hfill 【学生人数】~\calstudent\hfill 【考核方式】~\calassess\par
\setlength{\leftskip}{\caloutsideskip}
\calskip{2.873mm} % 课程信息第 2 行到表格顶线
\end{caloutside}
%======================================================================
% 【第 3 节】教学日历表
%
% 每行格式:
% \calweek{第X周} & \caldate{日期} & \calhourn{学时} & 教学内容 & 教学方式 & 课堂讨论/其它环节 & 课下作业/必读章节 \\
%
% · 周次列前 10 行原件是左对齐、第 11 行起居中 —— 照抄原件这个不一致
2026-11-01 09:29:00 +08:00
% (见 README「已知差异」)。若想全列统一,把 \calctr 换 \calcell。
% · 空格用 \\ 前的最后一个 & 结束;内容为空就留空。
%======================================================================
\begin{caltable}
%------------------- 表头 -------------------
\calctr{周次} & \calctr{日期} & \calctr{学时} & \calctr{教学内容} &
\calctr{教学方式} & \calctr{课堂讨论内容及其它教学环节} &
\calctr{课下作业及课后必读教材或参考书章节} \\
%------------------- 16 周(示例内容全为虚构)-------------------
% ⚠️ 关于第一周行距 15.6pt:原件只有这一行的段落没写 w:spacing,随
% docGrid(linePitch=312 twips)排,行距 15.6pt,而其余 17 行都是
% 23pt。**本模板不复制这个不一致**,全表统一 23pt。
%
2026-11-01 09:29:00 +08:00
% 后果:这一行比常规高 22.2pt(69.5 → 46.5),总高多 22pt,表格
% 从 2 页变 3 页。这是有意取舍 —— 保真版式的同时不复制原件的疏漏,
2026-11-01 09:29:00 +08:00
% 理由记在 README「已知差异」第 1 条。
% (若你确实要 2 页,把这一行改成 \calfall 系列宏、并把 sty 里
% row{2} 的 ht 改回 24.30pt。注意 \calfall 对 \par 分段无效,
% 只对自动折行有效,改之前先读 sty §6 的说明。)
\calcell{第一周} & \calcell{9.1—9.7} & \calcell{4} &
\calcell{课程基本情况介绍\par 引例\par 补充知识} &
\calcell{多媒体讲课} & & \\
\calcell{第二周} & \calcell{9.8—9.14} & \calcell{4} &
\calcell{第一章,数制与编码\par 第一节,数制的基本概念} &
\calcell{多媒体讲课} & & \\
\calcell{第三周} & \calcell{9.15—9.21} & \calcell{4} &
\calcell{第一章,数制与编码\par 数制的三种表现形式,常用编码,常见的几个定理。} &
\calcell{多媒体讲课} & & \\
\calcell{第四周} & \calcell{9.22—9.28} & \calcell{4} &
\calcell{第一章,数制与编码\par 常用的公式、逻辑代数法化简、卡诺图化简。\par 第二章,组合逻辑分析} &
\calcell{多媒体讲课} & & \calcell{作业1.1—1.6} \\
\calcell{第五周} & \calcell{9.29—10.5} & \calcell{4} &
\calcell{第二章,组合逻辑分析\par 组合逻辑分析方法、常见的组合逻辑电路} &
\calcell{多媒体讲课} & \calcell{国庆假期调课} & \calcell{作业1.7—1.10} \\
\calcell{第六周} & \calcell{10.6—10.12} & \calcell{4} &
\calcell{第三章,组合逻辑设计\par 组合逻辑设计方法、任意项} &
\calcell{多媒体讲课} & & \\
\calcell{第七周} & \calcell{10.13—10.19} & \calcell{4} &
\calcell{第三章,组合逻辑设计\par 无反变量设计,考虑多个输出的设计,使用数据选择器进行设计} &
\calcell{多媒体讲课} & & \calcell{作业2.1,2.3,2.5} \\
\calcell{第八周} & \calcell{10.20—10.26} & \calcell{4} &
\calcell{第四章,时序逻辑分析,时序逻辑的基本内容} &
\calcell{多媒体讲课} & & \\
\calcell{第九周} & \calcell{10.27—11.2} & \calcell{4} &
\calcell{第四章,时序逻辑分析\par 时序逻辑分析基本方法} &
\calcell{多媒体讲课} & & \\
\calcell{第十周} & \calcell{11.3—11.9} & \calcell{4} &
\calcell{第四章,时序逻辑分析\par 常见的时序逻辑电路} &
\calcell{多媒体讲课} & & \calcell{作业3.1—3.4} \\
\calctr{第十一周} & \calctr{11.10—11.16} & \calcell{4} &
\calcell{第五章,时序逻辑设计,状态表} &
\calctr{多媒体讲课} & \calcell{期中测验} & \\
\calctr{第十二周} & \calctr{11.17—11.23} & \calcell{4} &
\calcell{第五章,时序逻辑设计,状态表化简} &
\calctr{多媒体讲课} & & \\
\calctr{第十三周} & \calctr{11.24—11.30} & \calcell{4} &
\calcell{第五章,时序逻辑设计,状态转移表} &
\calctr{多媒体讲课} & & \\
\calctr{第十四周} & \calctr{12.1—12.7} & \calcell{4} &
\calcell{第五章,时序逻辑设计,状态图、状态表} &
\calctr{多媒体讲课} & & \calcell{作业4.1} \\
\calctr{第十五周} & \calctr{12.8—12.14} & \calcell{4} &
\calcell{复习、答疑} &
\calctr{多媒体讲课} & & \\
\calctr{第十六周} & \calctr{12.15—12.21} & \calcell{4} &
\calcell{复习、答疑} &
\calctr{多媒体讲课} & & \\
\end{caltable}
%----------------------------------------------------------------------
% 表格到此为止,共 17 行(表头 + 16 周)。
%
% ⚠️ 原件表格末尾还有一行跨 7 列的「课程考核及评价方式:」大格
% (原 18 行)。**本模板已删除这一行**,因为学校另有单独的
% 《成绩构成说明》文件详细说明考核构成,教学日历里重复一遍既
% 冗余又容易与说明文件不一致。考核方式改在表头上方的课程信息里
% 用一个字段(\calassess)点到即可。
%
% 若你要恢复那一行:在 sty 的 colspec 之后补回
% row{18}={ht=69.00pt},
% 并在上方 \\ 之后加:
% \SetCell[c=7]{m,wd=170.638mm}
% \calcell{课程考核及评价方式:}\par
% \calcell{...说明文字...} \\
% (跨列格必须显式给 wd,否则报 Overfull —— 原因见下)
%----------------------------------------------------------------------
%======================================================================
% 【第 4 节】签字栏
%
2026-11-01 09:29:00 +08:00
% 的这两段(P008/P009):
% 「院(系)负责人签字:」 w:ind firstLine=4515 firstLineChars=2150
% 「××××年 月 日」 无 ind,用空格顶到位置
%
% firstLine = 4515 twips = 4515/1440×25.4 = 79.6396 mm
% ⇒ 相对原版心左边界 31.75mm,起点 = 31.75 + 79.6396 = 111.3896 mm = 315.75 pt
2026-11-01 09:29:00 +08:00
% 实际x = 321.00pt —— 差 5.25pt,因为第一个字「院」的左边界
% 与盒子起点之间还有字形的左边距(word 的 4515 是"首行缩进",量的
2026-11-01 09:29:00 +08:00
% 是盒子起点,不是字形起点)。故按实际321.00pt 反解:
% 缩进 = 321.00 − (31.75mm→89.999pt) = 231.00 pt = 81.49 mm
%
% ⚠️ 两行的水平位置**不一样**:
% 「院(系)」x=321.00 年份 x=352.50
% 原件第二行是用空格顶的(不是缩进),照抄即可。
%
2026-11-01 09:29:00 +08:00
% ⚠️ 第二行的三个锚点(逐字符实际原件 PDF,10.45pt 宋体):
% 年字形 x = 355.08 月 x = 376.08 日 x = 397.08
% 年→月 21.00pt,月→日 21.00pt(都是一个全角字 + 10.55pt 空档)
%
% 原件被填过,年份位印着 4 个半角数字(x=331.44~352.50),
% 后面跟一个空格,再是「年」。**本模板不写年份**,那一段留白给
% 老师手写签日期 —— 这是空白模板该有的样子。
%
% 但「年 月 日」三个字仍留在原件的印刷位置上(355.08 起),
% 这样打出来的表格与学校原表逐字对齐,手写填空处一目了然。
%
% ⚠️ 不要用负 \hspace 去挪:它只能压缩后续间距,减到负数就是重叠。
% 结果三个字叠成一个墨团。现已彻底去掉年份占位符,问题不存在了。)
%======================================================================
\begin{caloutside}
\calskip{5.60mm}
\hspace*{81.49mm}\calfontC 院(系)负责人签字:\par
\calskip{1.10mm}
\hspace*{93.517mm}\calfontC 年\hspace*{10.55pt}月\hspace*{10.55pt}日\par
\end{caloutside}
\end{document}