Files
ouc_latex_template/简历/README.md
T
laoyang eb3b53946c 简历概述的成果数字改为自动统计(列几条算几条) #14
概述原来手写「论文 40 余篇、专利 20 余项」,每次增删条目都要回头改。
改为正文标记、概述取数:

  \item ...论文... \cvtagcount{SCI}     % 显示 SCI 并计数
  \item ...软著... \cvmark{软著}        % 只计数
  概述:论文 \cvnum*{SCI,EI,核心} 篇(SCI \cvnum{SCI} 篇)

共注册 11 类:SCI/EI/核心/专利/第一发明人/软著/科研项目/主持/负责/转化/教研。

关键技术:不用 aux,改独立数据文件 \jobname.cvnum。
中文键经 aux 往返后 \ifcsname 全部失效(xeCJK 把汉字设为活动字符,
键的 token 形态不一致;ASCII 键正常);独立文件里中文键完全正常。
累加与显示分离(cvacc@ 每遍从 0 起 / cvnum@ 读自上一遍),
否则概述在正文之前会让上一遍的值被本遍叠加,数字翻倍。

踩坑:\cvmark 不能放 \experience 的关键词参数(会被 \foreach 拆开,
报 Misplaced \omit),必须放描述参数内;也不能放 longtable 单元格之外。

验证:0 error / 0 Overfull / 0 Underfull,3 页;加标记后版面与基线
逐行一致;连续 5 次编译数字稳定;增删条目后数字自动跟随。

⚠️ 口径变化:自动统计只数列出来的条目。示例原来写「40 余篇」但正文
只列 9 篇代表作,改成自动后变「9 篇」。README 已写明这两种口径的区别。
项目总经费仍手填(\experience 无经费字段)。
2026-10-27 14:56:34 +08:00

309 lines
17 KiB
Markdown
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.
# 中国海洋大学个人简历 LaTeX 模板
中文个人简历模板,A4 单页两栏式排版:左侧窄栏放时间与阶段,右侧宽栏放具体内容,抬头带圆形头像与联系方式图标行。
> 本目录的版式来自一份在用的中文简历(`awesome-source-cv` 系的衍生版)。**字体、占位内容、头像三处都已重做**,详见下文「与上游的差别」。
## 特性
- **字体全部取自仓库公共字体包**:中文 OUC Serif(宋体)/ OUC Sans(黑体)/ OUC Kai(楷体)/ Zhuque Fangsong(仿宋),西文 Cochineal,图标 FontAwesome —— 没有任何一个字体来自系统或 TeX Live 安装,**换机器编译结果一致**;
- **真粗体**:标题、姓名、区块头用的都是字体自带的粗体,不是算法描边;
- **分区可拆**:`section_01` ~ `section_10` 各自一个文件,不想要哪块就把对应 `\input` 注释掉;
- **圆形头像**:`\photo{2.5cm}{photo}` 自动裁成圆形,尺寸随参数走;
- **条目化排版**:论文、专利、项目、获奖等用 `\emptySeparator` 分条,时间栏自动对齐。
## 环境要求
- TeX Live 2022 及以上,**必须 XeLaTeX** 编译;
- 不需要安装任何字体,`fonts/` 里有全套。
## 编译
在**本目录**下编译(不要在仓库根调用,`fonts.tex` 里的 `Path=../fonts/` 是相对当前工作目录的):
```bash
cd 简历
xelatex 简历.tex
xelatex 简历.tex # 必须跑两遍,原因有二:
# ① 页码与交叉引用
# ② 概述的成果数字读自 简历.cvnum,第一遍是空的
```
用 `latexmk -xelatex 简历.tex` 也行,它自己会跑够遍数。
编译结果:3 页,日志零 error、零 Underfull、零 Overfull。嵌入字体只有 7 个,全部来自本仓库:
| 字体 | 用途 |
|---|---|
| `OUCSerif-Regular` / `OUCSerif-Bold` | 中文正文与标题 |
| `Cochineal-Roman` / `-Bold` / `-Italic` | 西文正文、标题与斜体 |
| `OUCKai-Regular` | 中文斜体(楷体代斜体,中文惯例) |
| `FontAwesome` | 联系方式行图标 |
## 改什么、在哪儿改
| 要改的内容 | 位置 |
|---|---|
| 姓名、职称、联系方式 | `简历.tex` 的 `\name` / `\tagline` / `\socialinfo` |
| 头像 | 替换 `photo.jpg`(正方形,400×400 以上,会自动裁圆) |
| 各区块正文 | `section_01_headline.tex` ~ `section_10_awards.tex` |
| 不想显示的区块 | 在 `简历.tex` 里把对应 `\input` 注释掉 |
| 左侧时间栏宽度 | `awesome-source-cv.cls` 的 `\setlength{\leftcolumn}{2.5cm}`,右侧栏宽会自动跟着算 |
| 主题色 | `awesome-source-cv.cls` 的 `accentcolor` |
## 与上游的差别(改动都在文件头注释里写明了原因)
### 1. 字体:三层依赖全部拆掉
上游那份简历的字体走三条路,每条都不能随仓库分发或不可复现:
| 上游做法 | 问题 | 本模板的处理 |
|---|---|---|
| `zh_cn-adobefonts_external.sty` 设 Adobe 宋/黑/楷/仿 | 56 MB 商业字体,无授权不可分发 | **删掉这两个文件**,改由 `../fonts.tex` 提供中文字体 |
| `awesome-source-cv.cls` 的 `localFont` 分支设 `SourceSansPro-*`(9 个 .otf) | 同上,且与仓库已有西文字体重复 | cls 里的 `\setmainfont` 整段删除,西文改走 `../fonts.tex` 提供的 Cochineal |
| `fontawesome.sty` 用字体名找系统 FontAwesome | 机器上没装就编不过 | 改成显式 `Path=../fonts/fontawesome/`,字体文件已入仓库 |
删掉的两个文件里还有个隐藏问题值得记一笔:原 `zh_cn-adobefonts_external.sty` 里
`BoldFont` / `ItalicFont` / `SmallCapsFont` **全部指向 `Regular` 那一档** ——
等于加粗不变、斜体不变,标题层次全靠字号撑。换成真粗体后版面明显立起来了。
### 2. 内容:真人信息全部换成一套完整虚构示例
模板必须能公开分发,所以原件里的真人姓名、手机、邮箱、住址、出生年月、论文题名与 DOI、
专利号、软著登记号、获奖名称**一个都没保留**。
替换方式**不是全打 `×××`**——满篇叉号的样张既看不出排版效果,也没法直接对着改,
一页纸全是 ×,读的人都不知道哪行该填什么。所以填的是**一整套自洽的虚构人物**:
| 项 | 虚构值 |
|---|---|
| 姓名 / 单位 | 张远航,中国海洋大学 信息科学与工程学部 计算机科学与技术学院 **教授、博导** |
| 出生 / 籍贯 | 1985.03,山东青岛 |
| 方向 | 海洋遥感信息处理、机器学习与海洋大数据 |
| 手机 / 邮箱 | `(+86) 138 0000 0000` / `yhzhang@ouc.edu.cn` |
| 学历 | 2002–2006 本科 → 2006–2009 硕士 → 2009–2013 博士(2011–2012 南安普顿大学联培) |
| 工作 | 2013.07 博士后 → 2016.09 副教授 → 2021.12 教授 |
正文十节(`section_01`~`section_10`)也一并填满:80 余字个人简介、3 段工作经历、
4 段学历、9 篇论文、9 项专利、5 项软著、5 个项目、3 项成果转化、4 项教研项目、16 项获奖。
**假数据都留了肉眼可辨的标记**,不会被人误当真的抄走:
- 论文 DOI 统一 `10.9999/…`(`.9999` 段是编造专用段,真实 DOI 不走这里)
- 专利号统一 `ZL20999900000N.x`,软著登记号统一 `2024SR999990N`
- 期刊名是真实的(IEEE TGRS、Remote Sensing 等),但**题名全是编的**
- 成果转化的受让单位一律带「(示例)」后缀
- 头像 `a.jpg` / `a.png`(2085×2085 的真人照)换成 PIL 生成的 400×400 中性剪影 `photo.jpg`
替换时把 `section_01`~`section_10` 整段换成自己的即可,版式不受影响;
字数变化会自动重排,不需要动 `.cls`。
### 3. 排版小修
- **项目经验不再「缩进一大截」**:这一节原来整块右移了约 3.4 cm,与其他章节的
日期列对不齐(145.1pt vs 48.5pt)。根因不是 `\hfill` 也不是竖线,而是
`\rightcolumnlength` **算早了**——`geometry` 的边距要到导言区结束才生效,
而 cls 里那句 `\setlength` 执行得更早,读到 article 默认的 345pt 文字宽,
算出 249.87pt,比应有的 417.02pt 少了 167.15pt;`longtable` 把这张窄表居中排,
于是整块右移 167.15/2 ≈ 83.6pt。修法两条:计算挪进 `\AtBeginDocument`
(并额外减去 `|` 竖线的 `\arrayrulewidth`=0.4pt);`R` 列由
`>{\hfill}m{2.5cm}`(固定宽右贴)改为 `>{\raggedright\arraybackslash}p{2.5cm}`。
改后日期左边缘 145.1 → **48.5pt**,与工作经历/教育经历/奖励与荣誉严格一致。
⚠️ 这类错误**零 error、零 warning**,只看日志发现不了,必须量 PDF 坐标。
- **左栏宽度改按版心反算**:原来 `\leftcolumn 2.5cm + \rightcolumnlength 14.8cm`
看着小于版心 18 cm,但两列共 4 个 `\tabcolsep`(≈0.85 cm)没算进去,实际 18.15 cm,
日志有 `Overfull 4.48pt`。改成由 `\textwidth` 减去左列、列间距与竖线宽度,
改页边距也不用再调数字。
- **中西文之间加断行弹性**:论文条目里「…Applications (ICIEA), 88--93. 中国青岛…」
这类「长英文名紧跟中文」的串,XeLaTeX 默认不在中英交界处断开,会把整串当
一个长单词硬冲出去(实测冲出 88.5pt,文字顶到纸边)。给 itemize 加
`\emergencystretch=3em` 解决,不动字体、不改内容、不影响其他环境。
- **抬头去掉两处空盒**:`\vspace*{0.3cm}\\` 和 `\smallskip\\` 会在换行前多产生一个
空 hbox(日志刷 `Underfull \hbox (badness 10000)`),改成 `\\[0.3cm]` /
`\\[\smallskipamount]`,间距效果不变。
- **`\socialinfo` 末尾不要留 `\\`**:`简历.tex` 里最后一行 `\address{...}` 后面加了
`\\` 同样会多一个空行。中间的 `\\` 是分行,必须保留。
### 4. 西文字体换成 Cochineal
中文用思源宋体(中等粗细),原先配的 **TeX Gyre Termes** 是 Times 的度量兼容替代,
笔画偏细偏紧,中英混排时西文那一段视觉上会「陷进去」。改用 **Cochineal**
(Michael Sharpe 据 Minion 设计,SIL OFL 1.1,920 KB 已入 `../fonts/cochineal/`)。
| 字体 | 同一句英文宽(10pt) | 相对 Termes | x 高 |
|---|---|---|---|
| TeX Gyre Termes(原) | 229.68pt | 100.0% | 0.450 |
| **Cochineal(现)** | 225.42pt | **98.1%** | 0.433 |
| Libertinus Serif | 234.62pt | 102.2% | 0.433 |
| XCharter | 246.69pt | 107.4% | 0.481 |
| TeX Gyre Pagella | 254.40pt | 110.8% | 0.472 |
选 Cochineal 的理由是**宽度几乎不变(窄 1.9%)**,断行位置和表格列宽基本不动;
Pagella / XCharter 宽 7~11%,会把全库的断行推着变。
⚠️ 三点务必注意:
1. **只影响简历**。切换命令 `\oucUseCochineal` 定义在 `../fonts.tex`,
但**不是**全局生效,只有本模板的 cls 调用。改全库请改 `\setmainfont` 本身。
2. **必须放在 `\AtBeginDocument` 里**。cls 执行时主文件还没 `\input{../fonts.tex}`,
那个命令尚未定义,直接调用会报 `Undefined control sequence`。
3. **换西文字体后必须复查 Overfull**。字体窄 1.9% 会让断点位置整体前移,
原本「刚好挤进去」的长串就会暴露成真溢出——本次换字体就是这样才发现
ICIEA 那条论文冲出 88.5pt 的。
### 5. 左上角校徽(可选)
默认**不印**校徽,`简历.tex` 里加一行才出现:
```latex
\cvlogo{28mm} % 横式彩色校徽(默认)
\cvlogo{28mm}[ouc_logo_彩色] % 换圆形校徽
\cvlogo{28mm}[ouc_横式_海大红] % 换配色
```
位置默认距**纸边**左 10mm、上 6mm(不随页边距变),导言区可微调:
```latex
\setlength{\cvlogox}{12mm}
\setlength{\cvlogoy}{8mm}
```
`简历/logos/` 下**只放实际用到的那一个**(横式彩色,377 KB)。想换款式从
`../科技报告/logos/` 复制过来——那边是全部官方 VI 素材:
| 文件 | 形状 | 像素 |
|---|---|---|
| `ouc_logo_{彩色,海大红,海大蓝,天蓝,专金,墨黑}.png` | 圆形 | 1200×1200 |
| `ouc_横式_{彩色,海大红,海大蓝,黑}.png` | 横式 | 2400×640 |
不预先全放进来,是因为每个 300~380 KB,用不到就是纯占体积。
⚠️ 四点务必注意:
1. **28mm 是这块空间的上限附近**。简历页边距只有 15mm,姓名墨迹顶在 17.2mm;
28mm 宽的横式 logo 高 7.06mm,放在距顶 6mm 处下沿到 13.1mm,距姓名仍有
11.6pt(4.1mm)。再大就会挤到姓名。
2. **距顶不能照搬科技报告的 20mm**。科技报告页边距 27mm,简历只有 15mm,
照抄会直接压到姓名上。同理距顶 8mm 只剩 2mm 间隙,视觉上贴着。
3. **必须用负 `\vspace*{-17pt}` 抵消**。`tikzpicture` 即使内容全是 `overlay`,
本身仍占一行高度(17pt),会把姓名整体往下推。`\smash`、`\hbox to 0pt`、
`\vbox to 0pt` 三种写法都消不掉——要断行就得有 `\par`,有 `\par` 就有行高。
这 17pt 与 logo 尺寸无关(18~30mm 五档实测一致),改 `\parskip` 或正文字号
后需重新量。
4. **位置偏小,专业印刷需上调**。距纸左 10mm 已接近 A4 裁切余量(一般
10~12mm),距顶 6mm 也偏紧。屏幕阅读和普通办公打印没问题(A4 不裁切),
若要印刷装订,把 `\cvlogoy` 改成 8mm 以上,并接受 logo 与姓名靠得近一点。
⚠️ 体积代价:PDF 从 158 KB 涨到 573 KB(内嵌 2400×605 的原图,实际只用到
28mm ≈ 660px,约 3.6 倍冗余)。保留原图是为了将来放大不糊;真要瘦身,
把 png 缩到 700px 宽即可。
## 概述里的成果数字自动统计
第一段概述通常要写「发表论文 N 篇、授权专利 M 项、转化 K 项……」。这些数字如果
手写,每增删一条论文就得回头改概述,非常容易漏改。本模板让它们**自动从正文条目
数出来**。
### 怎么用
两步:
```latex
% ① 在每个条目末尾标类别(不产生任何可见输出)
\item ...论文信息... \cvtagcount{SCI} % 显示 SCI,同时 SCI +1
\item ...论文信息... \cvmark{软著} % 只计数,不显示
% ② 概述里取数
发表论文 \cvnum*{SCI,EI,核心} 篇(SCI \cvnum{SCI} 篇、EI \cvnum{EI} 篇),
登记软件著作权 \cvnum{软著} 项
```
`\cvnum{A,B}`(带星号)是多类求和;`\cvnum{A}`(不带星号)是单类取数。
**列几条就算几条**,不需要额外声明的总数。
空类别返回 `0` 而不是报错,所以可以先写 `\cvnum{EI}`,等真有了 EI 论文再加
`\cvtagcount{EI}`,中间不会有编译问题。
### 两个命令的分工
| 命令 | 显示 | 计数 | 用在哪 |
|---|---|---|---|
| `\cvmark{类别}` | 不显示 | +1 | 软著、专利、项目、转化、教研这类本来就靠字段表达类别的条目 |
| `\cvtagcount{类别}` | 显示(加粗,与正文同号) | +1 | 论文的 SCI/EI/核心——原本就用 `\textbf{SCI}` 缀在末尾,一步到位 |
`\cvtagcount` 就是为论文设计的:显示和计数合成一个动作,不会出现「改了显示忘了
计数」的情况。
### 现有类别一览
| 类别 | 标记位置 | 概述里的用法 |
|---|---|---|
| `SCI` `EI` `核心` | `section_04` 各条目末尾 `\cvtagcount{}` | `\cvnum*{SCI,EI,核心}` |
| `专利` `第一发明人` | `section_05` 各条目末尾 `\cvmark{}` | `\cvnum{专利}` / `\cvnum{第一发明人}` |
| `软著` | `section_06` | `\cvnum{软著}` |
| `科研项目` `主持` `负责` | `section_07` 描述块内 | `\cvnum{主持}` / `\cvnum{负责}` |
| `转化` | `section_08` | `\cvnum{转化}` |
| `教研` | `section_09` | `\cvnum{教研}` |
⚠️ 增删条目时**标记要跟着走**。删掉一条论文但留下 `\cvtagcount{SCI}`,数字就会
多算一个——这是这套机制唯一的代价,但比每次回头数一遍要可靠得多。
### 三条必须知道的限制
1. **必须编译两遍**(`latexmk` 会自动跑够)。第一遍概述读到的是上一遍的统计,
首次编译会显示 `0`。日志末尾有 `CVSTATS:` 一行提示。
2. **`\jobname.cvnum` 是生成文件**,每次编译重写,已加进 `.gitignore`。
不要手改、不要提交。删掉它只会让数字从 0 重算一遍,下一遍即恢复。
3. **为什么不用 LaTeX 的 aux**:实测中文键经 aux 往返后 `\ifcsname` 全部匹配不上
(xeCJK 把汉字设为活动字符,键的 token 形态与写入时不一致;ASCII 键正常、
中文键失效)。所以改用独立的 `.cvnum` 文件,键原样保留。
### 为什么项目总经费仍是手填
`\experience` 的参数里没有经费字段,无法从条目自动求和。若真要做到自动,得给
`\experience` 增加一个经费参数(`{120万}` 之类),再由 `\cvnum` 累加。改动面较大,
超出本次范围,故保留手填 `1200 余万元`。
### ⚠️ 一个必须注意的语义变化
自动统计只数**你列出来的条目**,不数你没列的。示例简历原来写「论文 40 余篇、
专利 20 余项」,但正文只列了 9 篇代表作、9 项专利——改成自动统计后会变成
「论文 9 篇、专利 9 项」。
**这不是 bug,是两种口径**:
- 简历惯例是**只列代表作**,概述写总量(40 余篇)——此时总数不能从条目数出来
- 若你的正文就是全部成果,自动统计的数字才是真实总量
用之前先想清楚自己属于哪种。要保留「40 余篇」这种总量表述,就把那处数字改回
手写,只在真正列全的章节(转化、教研这类)用 `\cvnum`。
## 写的时候容易踩的三个坑
1. **`\newExperience` 的参数顺序是「结束在前、开始在后」** —— 上游定义就是先印
`#1`(结束时间)再印 `#5`(开始时间),第一次用极易写反,写反了两栏内容会错位。
2. **每条后面必须跟 `\emptySeparator`**,否则下一条会并进同一格,不换行。
3. **关键词用英文逗号 `,` 分隔**(`\foreach` 按 `,` 切分)。用中文逗号会把整串当成
一个标签,撑出一个超宽的大框。
## 字体换成 SmallCaps 时的坑(已在 `../fonts.tex` 里解决)
`\user` / `\resumetitle` / `\experience` 都用了 `\textsc`,而中文没有小型大写字形,
不处理会每页刷 6 条 `Font shape 'TU/OUCSerif(0)/m/sc' undefined`。
修的时候注意:`\setCJKmainfont` 里加 `SmallCapsFont` **与本仓库的 `ItalicFeatures`
互斥** —— 斜体那一档带跨目录 `Path`,会把小型大写的字体查找带偏,无论写
`*-Regular`、全名、还是带 `.otf` 全报
`The font "OUCSerif-Regular" cannot be found.`。
正解在 `../fonts.tex` 里用的是 LaTeX 原生的形状替换:
```latex
\DeclareFontShape{TU}{OUCSerif(0)}{m}{sc}{<->ssub * OUCSerif(0)/m/n}{}
\DeclareFontShape{TU}{OUCSerif(0)}{b}{sc}{<->ssub * OUCSerif(0)/b/n}{}
```
比 fontspec 的选项低一层,不受选项间相互作用影响,效果等价。
## 授权
`LICENSE` 沿用上游。字体授权见仓库根 `../fonts/README.md`,全部允许免费商用与再分发。