Files
ouc_latex_template/简历/README.md
T

374 lines
20 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 项……」。这些数字如果
手写,每增删一条论文就得回头改概述,非常容易漏改。本模板让它们**自动从正文条目
数出来**。
### 先回答一个最常问的问题:它是全自动的吗?
**分两种,取决于章节用哪种写法。**
| 写法 | 要手动做什么 | 适合什么章节 |
|---|---|---|
| **`cvlist` 环境**(全自动) | **什么都不用做**。写 `\item` 就自动算一条。 | 一条 = 一个成果的章节:软著、成果转化、教研项目 |
| **`\cvmark` 逐条标记**(半自动) | 每条末尾加一个 `\cvmark{类别}` | 一条要算进**多个类别**的章节:专利(要同时算「专利」和「第一发明人」)、科研项目(要同时算「科研项目」和「主持/负责」) |
| **`\cvtagcount`**(半自动) | 每条末尾写 `\cvtagcount{SCI}`,替代原来的 `\textbf{SCI}` | 论文(收录类型本来就要显示出来,顺手计数) |
也就是说:**三个你关心的章节(软著、成果转化、教研项目)已经是全自动的,不需要
任何标记。** 增删条目后重新编译,概述里的数字自己就变了。
### 全自动写法:`cvlist` 环境
这是最省事的方式。原来写 `\begin{itemize}`,现在改成 `\begin{cvlist}{类别}`,
其他一个字都不用动:
```latex
% 软著章节
\sectionTitle{软件著作权}{\faTv}
\begin{cvlist}{软著} % ← 只改这一行(原来是 itemize)
\item 某某系统. 2024SR9999901. 软著登字第 9999901 号.
\item 另一个系统. 2023SR9999902. 软著登字第 9999902 号.
\end{cvlist} % ← 和这一行(原来是 \end{itemize})
% 概述里
登记软件著作权 \cvnum{软著} 项 % → 自动印出「2」
```
**就这样。** 以后加一条只是多写一个 `\item ...`,数字自动从 2 变 3;
删一条自动变 1。不需要回来改概述,也不需要在条目里加任何标记。
实测过的行为:
| 操作 | 概述里的数字 |
|---|---|
| 原始 5 条 | 5 |
| 加 1 条 | **6**(自动) |
| 删 2 条(剩 3 条) | **3**(自动) |
| 还原 | 5 |
⚠️ `cvlist` 内部就是普通 `itemize`,**版面完全不变**(已逐行比对过,行数、
位置一字不差)。
⚠️ 不要在 `cvlist` 里再嵌套 `itemize` 写子项——子项的 `\item` 也会被算进去,
数字会偏大。需要子项就用普通 `itemize` + 手写 `\cvmark`。
### 半自动写法:`\cvmark` 与 `\cvtagcount`
有些章节一条要算进**两个**类别,`cvlist` 一次只能管一个类别,这时用逐条标记。
```latex
% 专利:一条既算「专利」又可能要算「第一发明人」
\item \textbf{张远航}, 李文博, 陈思远. 某某方法. ZL209999000001.9. 2024-05-14.
\cvmark{专利}\cvmark{第一发明人} % ← 加标记(不产生可见输出)
% 论文:收录类型本来就要显示,用 \cvtagcount 一步到位
\item \textbf{张远航}, 李文博. 某某论文. IEEE TGRS, 62, 1, (2024), 1--15.
DOI: 10.9999/TGRS.2024.0000001.\cvtagcount{SCI} % ← 显示 SCI 并计数
```
`\cvtagcount{SCI}` 等价于「印出加粗的 SCI」+「SCI 计数 +1」,所以**不要**写回
`\textbf{SCI}`——那样只显示不计数,概述会少算。
⚠️ 这种写法下,增删条目时**标记要跟着走**。删掉一条论文但留下 `\cvtagcount{SCI}`,
数字就会多算一个。这是它的代价;能用 `cvlist` 的章节就别用这种。
### 现有类别一览
| 类别 | 章节 | 写法 | 概述里的用法 |
|---|---|---|---|
| `SCI` `EI` `核心` | `section_04` 论文 | `\cvtagcount{}` 每条末尾 | `\cvnum*{SCI,EI,核心}` |
| `专利` `第一发明人` | `section_05` 专利 | `\cvmark{}` 每条末尾 | `\cvnum{专利}` / `\cvnum{第一发明人}` |
| `软著` | `section_06` 软著 | **`cvlist` 全自动** | `\cvnum{软著}` |
| `科研项目` `主持` `负责` | `section_07` 项目 | `\cvmark{}` 描述块内 | `\cvnum{主持}` / `\cvnum{负责}` |
| `转化` | `section_08` 成果转化 | **`cvlist` 全自动** | `\cvnum{转化}` |
| `教研` | `section_09` 教研项目 | **`cvlist` 全自动** | `\cvnum{教研}` |
### 概述里怎么取数
```latex
\cvnum{软著} % 单类:印出数字,没这个类别就印 0
\cvnum*{SCI,EI,核心} % 多类求和(注意是英文逗号)
```
**列几条就算几条**,不需要额外声明总数。空类别返回 `0` 而不是报错,所以可以先
写 `\cvnum{EI}`,等真有了 EI 论文再加 `\cvtagcount{EI}`,中间不会有编译问题。
### 加一个全新的类别
比如想统计「一区论文」,三步:
```latex
% ① 条目上标记(论文类用 cvtagcount,其他用 cvmark)
\item ...论文... \cvtagcount{一区}
% ② 概述里取数(不用任何注册,直接写)
其中一区论文 \cvnum{一区} 篇
% ③ 编译两遍
```
类别名是**随用随建**的,不需要预先声明。`\cvnum*{一区,SCI}` 这种求和也可以
直接用。
⚠️ 类别名不要含英文逗号(`,` 是 `\cvnum*` 的分隔符)、不要含 `@ % # \ { }`。
中文、英文、空格都可以。
### 三条必须知道的限制
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`,全部允许免费商用与再分发。