diff --git a/README.md b/README.md index e400792..4e646aa 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # 中国海洋大学 LaTeX 模板库 -16 个文档模板 + 一份公共字体。换机器、换系统、换 Overleaf,编译结果一致。 +17 个文档模板 + 一份公共字体。换机器、换系统、换 Overleaf,编译结果一致。 ## 目录结构 @@ -17,7 +17,7 @@ ouc_latex_template/ ├── 特殊事项说明表/ │ ├── 成绩构成说明/ │ ├── 试卷/ │ -├── 试卷归档封面/ │ 16 个模板 +├── 试卷归档封面/ │ 17 个模板 ├── 试卷归档目录/ │ 每个目录自成一体 ├── 课程大纲/ │ 各自带 README ├── 课程执行大纲/ │ @@ -25,7 +25,8 @@ ouc_latex_template/ ├── 教材/ │ ├── 科技报告/ │ ├── 幻灯片/ │ -└── 简历/ ┘ +├── 简历/ │ +└── 点名册/ ┘ ``` ## 模板清单 @@ -47,6 +48,7 @@ ouc_latex_template/ | `科技报告/` | 科技报告、实验讲义 | `report.tex` | | `幻灯片/` | Beamer 演示文稿(16:9) | `slides.tex` | | `简历/` | 个人简历 | `简历.tex` | +| `点名册/` | 课程点名册(A4 横向,18 周考勤) | `点名册.tex` | ## 编译 diff --git a/verify_all.sh b/verify_all.sh index 561c78c..cb0bbd5 100755 --- a/verify_all.sh +++ b/verify_all.sh @@ -38,6 +38,7 @@ TARGETS=( "课程大纲|课程大纲.tex" "会议预算表|会议预算表.tex" "教材|教材.tex" + "点名册|点名册.tex" ) filter="${1:-}" diff --git a/点名册/README.md b/点名册/README.md new file mode 100644 index 0000000..5e4f908 --- /dev/null +++ b/点名册/README.md @@ -0,0 +1,131 @@ +# 点名册 + +中国海洋大学课程点名册,A4 横向,20 列考勤表。 + +## 编译 + +```bash +cd 点名册 +xelatex 点名册.tex +``` + +或仓库根:`bash build.sh 点名册` + +## 文件 + +| 文件 | 说明 | +|---|---| +| `点名册.tex` | 主文件,课程信息与学生名单改这里 | +| `oucroll.sty` | 版式包,一般不改 | + +## 课程信息 + +```latex +\rollsetcourse{数字逻辑} % 课程名称 +\rollsetcno{080502101231} % 课程号 +\rollsetsno{25252029} % 选课号 +\rollsetcredit{2.5} % 学分 +\rollsetteacher{张远航} % 任课教师 +\rollsetterm{2025 学年 秋 季学期} % 学年学期 +``` + +| 命令 | 说明 | +|---|---| +| `\rollsetcourse{}` | 课程名称 | +| `\rollsetcno{}` | 课程号 | +| `\rollsetsno{}` | 选课号 | +| `\rollsetcredit{}` | 学分 | +| `\rollsetteacher{}` | 任课教师 | +| `\rollsetterm{}` | 学年学期 | + +设完后调 `\rollinfo` 印出信息区: + +```latex +\rolltitle{中国海洋大学点名册} +\rollsetcourse{数字逻辑} +... +\rollinfo +``` + +## 学生名单 + +每人一行,三列:序号、学号、姓名。后面 17 周留空手填。 + +```latex +\begin{rolltable} + \rollrow{1}{2525201001}{陈嘉禾} + \rollrow{2}{2525201002}{丁若彤} + ... +\end{rolltable} +``` + +| 参数 | 说明 | +|---|---| +| 第 1 个 | 序号 | +| 第 2 个 | 学号 | +| 第 3 个 | 姓名 | + +增删学生就增删 `\rollrow` 行。 + +## 一页能放多少行 + +A4 横向(297 × 210mm),上下边距 14/16mm,扣掉标题、课程信息、表头: + +| 行高 | 一页行数 | +|---|---| +| 5.0mm | 27 行 | +| 4.5mm(默认) | 30 行 | +| 4.2mm | 33 行 | + +超过这个数会溢出到第二页。要放更多学生,两个办法: + +1. 改 `oucroll.sty` 里 `row{2-Z}={ht=4.5mm}` 的行高 +2. 分两页,每页 30 人,第二页重复表头 + +## 表头 + +20 列表头依次是:序号、学号、姓名、1、2、3 …… 17。 + +周次列只写数字,不写「第 N 周」,因为横向空间有限。 + +改列宽或改周数,编辑 `oucroll.sty`: + +```latex +\newcommand{\rollwno}{9mm} % 序号 +\newcommand{\rollwid}{26mm} % 学号 +\newcommand{\rollwname}{20mm} % 姓名 +\newcommand{\rollwweek}{11.4734mm} % 每周 +``` + +**改列宽时必须重算**,让总和恰好等于版心宽: + +``` +版心 = 297 − 14×2 = 269mm +表宽 = Σwd + 2×0.4×20(colsep)+ 0.4pt×20(竖线) = Σwd + 18.82mm +∴ Σwd = 269 − 18.82 = 250.18mm +``` + +## 表尾说明 + +```latex +\rollfoot{标记方式自行约定(如「√」出席、「缺」缺席、「假」请假)。} +``` + +不要就删掉这一行。 + +## 版式 + +``` +A4 横向 297 × 210 mm +边距 左右 14mm,上 12mm,下 16mm +标题 20pt 黑体居中 +课程信息 10.5pt,两行三项 +表格 20 列 × (1 表头 + N 数据行) +表头行高 7.0mm,数据行高 4.5mm +正文 10.5pt,表头 8pt,表体 10pt +不排页码 +``` + +## 注意 + +示例学生名单是虚构数据,使用时全部替换。 \ No newline at end of file diff --git a/点名册/oucroll.sty b/点名册/oucroll.sty new file mode 100644 index 0000000..7fff70b --- /dev/null +++ b/点名册/oucroll.sty @@ -0,0 +1,187 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{oucroll}[2026/11/03 v1.0 OUC roll-call sheet] + +%====================================================================== +% oucroll.sty —— 点名册版式包 +% +% 横版 A4,20 列表格:序号 / 学号 / 姓名 / 第1~17周 +% 用法见同目录 README.md +%====================================================================== + +\RequirePackage{geometry} +\RequirePackage{fontspec} +\RequirePackage{xeCJK} +\RequirePackage{tabularray} +\RequirePackage{calc} + +%====================================================================== +% 一、页面:A4 横向 +%====================================================================== +\geometry{ + paperwidth = 297mm, + paperheight = 210mm, + left = 14mm, + right = 14mm, + top = 12mm, + bottom = 16mm, + headheight = 0pt, + headsep = 0pt, + footskip = 8mm, +} +\setlength{\parindent}{0pt} +\setlength{\parskip}{0pt} +\pagestyle{empty} % 点名册单页,不排页码 + +\input{../fonts.tex} + +%====================================================================== +% 二、字号 +%====================================================================== +\newcommand{\rollbasefont}{% + \linespread{1}\relax + \fontsize{10.5bp}{13bp}\selectfont} + +\newcommand{\rolltitlefont}{\linespread{1}\relax\fontsize{20bp}{24bp}\selectfont} +\newcommand{\rollinfofont} {\linespread{1}\relax\fontsize{10.5bp}{13bp}\selectfont} +\newcommand{\rollheadfont} {\linespread{1}\relax\fontsize{8bp}{9.5bp}\selectfont} +\newcommand{\rollcellfont} {\linespread{1}\relax\fontsize{10bp}{12.5bp}\selectfont} +\newcommand{\rollweekfont} {\linespread{1}\relax\fontsize{7.5bp}{9bp}\selectfont} + +%====================================================================== +% 三、列宽 +% +% 版心宽 269mm(297 − 14×2)。 +% tabularray 的实际表宽 = Σwd + 2×colsep×列数 + 竖线宽×列数 +% 20 列时:2×0.4×20 = 16.00mm,竖线 0.4pt×20 = 2.82mm,共 18.82mm +% 故 Σwd 只能取 269 − 18.82 = 250.18mm +% +% 序号 9 + 学号 26 + 姓名 20 = 55mm +% 余 195.18mm 分给 17 周,每周 11.4810mm +%====================================================================== +\newcommand{\rollrule}{0.4pt} +\newcommand{\rollcolsep}{0.4mm} + +\newcommand{\rollwno}{9mm} % 序号 +\newcommand{\rollwid}{26mm} % 学号 +\newcommand{\rollwname}{20mm} % 姓名 +\newcommand{\rollwweek}{11.4734mm} % 每周 + +%====================================================================== +% 四、课程信息 +% +% \rollinfo{课程名称}{数值} +% 信息行按「标签 + 值」成对排版,一行放三项。 +%====================================================================== +\newcommand{\rollcourse}{} % 课程名称 +\newcommand{\rollcno}{} % 课程号 +\newcommand{\rollsno}{} % 选课号 +\newcommand{\rollcredit}{} % 学分 +\newcommand{\rollteacher}{} % 任课教师 +\newcommand{\rollterm}{} % 学年学期 +\newcommand{\rolldept}{} % 开课单位 + +\newcommand{\rollsetcourse}[1]{\renewcommand{\rollcourse}{#1}} +\newcommand{\rollsetcno}[1]{\renewcommand{\rollcno}{#1}} +\newcommand{\rollsetsno}[1]{\renewcommand{\rollsno}{#1}} +\newcommand{\rollsetcredit}[1]{\renewcommand{\rollcredit}{#1}} +\newcommand{\rollsetteacher}[1]{\renewcommand{\rollteacher}{#1}} +\newcommand{\rollsetterm}[1]{\renewcommand{\rollterm}{#1}} +\newcommand{\rollsetdept}[1]{\renewcommand{\rolldept}{#1}} + +% 一项:标签(黑体) + 值 +\newcommand{\rollfield}[2]{% + {\heiti #1}:#2} + +%====================================================================== +% 五、标题 +%====================================================================== +\newcommand{\rolltitle}[1]{% + \par\begingroup\centering + {\heiti\rolltitlefont #1\par}% + \endgroup\vspace*{2mm}} + +%====================================================================== +% 六、课程信息区 +% +% 两行,每行三项,用 \hfill 撑开 +%====================================================================== +\newcommand{\rollinfo}{% + \begingroup\rollinfofont + \noindent + \rollfield{课程名称}{\rollcourse}\hfill + \rollfield{课程号}{\rollcno}\hfill + \rollfield{选课号}{\rollsno}\par\vspace*{1.2mm} + \noindent + \rollfield{学分}{\rollcredit}\hfill + \rollfield{任课教师}{\rollteacher}\hfill + \rollfield{学年学期}{\rollterm}\par + \endgroup\vspace*{2.5mm}} + +%====================================================================== +% 七、周次表头 +% +% 「第 1 周」写成「1」,表头下方一行标注「周次」,这样表头只占 +% 一行高度,横向也省空间 —— 20 列挤在一行里,竖排会撑高表头。 +%====================================================================== +\newcommand{\rollweekhead}[1]{% + {\heiti\rollheadfont #1}} + +%====================================================================== +% 八、表格环境 +% +% 20 列:3 固定 + 17 周 +% 表头单行:序号 / 学号 / 姓名 / 1 / 2 / … / 17 +%====================================================================== +\newcounter{rollrow} + +\newenvironment{rolltable}{% + \par\begingroup\rollcellfont + \begin{tblr}[label=none, expand=\rollrow]{ + colspec={ + Q[c,m,wd=\rollwno] + Q[c,m,wd=\rollwid] + Q[c,m,wd=\rollwname] + *{17}{Q[c,m,wd=\rollwweek]} + }, + colsep=\rollcolsep, rowsep=0pt, stretch=0, + hline{1-Z}={\rollrule}, vline{1-Z}={\rollrule}, + row{1}={ht=7.0mm}, + row{2-Z}={ht=4.5mm}, + }% + % ---- 表头 ---- + {\heiti\rollheadfont 序号} & + {\heiti\rollheadfont 学号} & + {\heiti\rollheadfont 姓名} & + \rollweekhead{1} & \rollweekhead{2} & \rollweekhead{3} & \rollweekhead{4} & + \rollweekhead{5} & \rollweekhead{6} & \rollweekhead{7} & \rollweekhead{8} & + \rollweekhead{9} & \rollweekhead{10} & \rollweekhead{11} & \rollweekhead{12} & + \rollweekhead{13} & \rollweekhead{14} & \rollweekhead{15} & \rollweekhead{16} & + \rollweekhead{17} \\ +}{% + \end{tblr}\par\endgroup} + +%====================================================================== +% 九、数据行 +% +% \rollrow{序号}{学号}{姓名} +% 后面 17 个空格留给手填考勤。 +% +% ⚠️ 必须用 \def 而不是 \newcommand:tblr 的 expand= 选项在读取 +% 环境体时就展开,\newcommand 生成的宏不可展开,& 会被当成 +% 「Misplaced alignment tab」报错。 +%====================================================================== +\def\rollrow#1#2#3{% + #1 & #2 & #3 & + & & & & & & & & & & & & & & & & \\ +} + +%====================================================================== +% 十、脚注(可选) +%====================================================================== +\newcommand{\rollfoot}[1]{% + \par\vspace*{2mm}% + \begingroup\rollinfofont{\heiti 说明:}#1\par\endgroup} + +\AtBeginDocument{\rollbasefont} + +\endinput \ No newline at end of file diff --git a/点名册/点名册.pdf b/点名册/点名册.pdf new file mode 100644 index 0000000..b5338d9 Binary files /dev/null and b/点名册/点名册.pdf differ diff --git a/点名册/点名册.tex b/点名册/点名册.tex new file mode 100644 index 0000000..321b509 --- /dev/null +++ b/点名册/点名册.tex @@ -0,0 +1,58 @@ +\documentclass[UTF8,fontset=none]{ctexart} +\usepackage{oucroll} + +%====================================================================== +% 点名册 +% +% 编译:在本文目录下 xelatex 点名册.tex +%====================================================================== + +\begin{document} + +\rolltitle{中国海洋大学点名册} + +\rollsetcourse{数字逻辑} +\rollsetcno{080502101231} +\rollsetsno{25252029} +\rollsetcredit{2.5} +\rollsetteacher{张远航} +\rollsetterm{2025 学年 秋 季学期} + +\rollinfo + +\begin{rolltable} + \rollrow{1}{2525201001}{陈嘉禾} + \rollrow{2}{2525201002}{丁若彤} + \rollrow{3}{2525201003}{方志远} + \rollrow{4}{2525201004}{高文轩} + \rollrow{5}{2525201005}{郭思远} + \rollrow{6}{2525201006}{韩雨桐} + \rollrow{7}{2525201007}{何书宁} + \rollrow{8}{2525201008}{胡锦程} + \rollrow{9}{2525201009}{黄语晨} + \rollrow{10}{2525201010}{蒋心怡} + \rollrow{11}{2525201011}{孔令仪} + \rollrow{12}{2525201012}{李明哲} + \rollrow{13}{2525201013}{林可欣} + \rollrow{14}{2525201014}{刘慕思} + \rollrow{15}{2525201015}{陆承宇} + \rollrow{16}{2525201016}{罗嘉懿} + \rollrow{17}{2525201017}{马雨欣} + \rollrow{18}{2525201018}{苗梓涵} + \rollrow{19}{2525201019}{倪瑞泽} + \rollrow{20}{2525201020}{潘书瑶} + \rollrow{21}{2525201021}{彭亦凡} + \rollrow{22}{2525201022}{钱家豪} + \rollrow{23}{2525201023}{秦若雯} + \rollrow{24}{2525201024}{沈靖宇} + \rollrow{25}{2525201025}{苏瑾瑜} + \rollrow{26}{2525201026}{孙牧之} + \rollrow{27}{2525201027}{谭心悦} + \rollrow{28}{2525201028}{汤子墨} + \rollrow{29}{2525201029}{汪雨桐} + \rollrow{30}{2525201030}{王浩然} +\end{rolltable} + +\rollfoot{标记方式自行约定(如「√」出席、「缺」缺席、「假」请假)。} + +\end{document} \ No newline at end of file