Files
ouc_latex_template/简历
laoyang ecfbcb8c67 简历软著/转化/教研改为全自动统计,README 补使用说明 #15
新增 cvlist 环境:进入环境后每个 \item 自动 +1,条目里一个标记都不用写。
三节各只改两行(itemize → cvlist{类别}),删掉全部 15 处 \cvmark。

  \begin{cvlist}{软著}
    \item 某某系统. 2024SR9999901. ...
  \end{cvlist}
  概述:登记软件著作权 \cvnum{软著} 项

实测:加 1 条 → 概述自动 5→6;删 2 条 → 自动 5→3;还原 → 回 5。
版面与基线逐行完全一致(66/75/34 行)——cvlist 内部就是普通 itemize。
普通 itemize 不受影响(实测 3 条子项未被误计)。

专利、科研项目仍用逐条 \cvmark:它们一条要算两个类别
(专利+第一发明人、科研项目+主持/负责),cvlist 一次只能管一类。

README 新增「先回答一个最常问的问题:它是全自动的吗?」用表格直接回答
三种写法的差别,并补「全自动写法」「半自动写法」「加一个全新的类别」
三个小节,含可直接抄的代码。

踩坑:\cvmark 内部用 \detokenize 处理类别名,传参前必须 \expandafter
展开 \cv@listcat,否则写进 .cvnum 的是字面串 "\cv@listcat"。

验证:0 error / 0 Overfull / 0 Underfull,3 页;全库回归与基线一致。
2026-10-27 15:04:48 +08:00
..

中国海洋大学个人简历 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/ 是相对当前工作目录的):

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 里加一行才出现:

\cvlogo{28mm}                    % 横式彩色校徽(默认)
\cvlogo{28mm}[ouc_logo_彩色]     % 换圆形校徽
\cvlogo{28mm}[ouc_横式_海大红]   % 换配色

位置默认距纸边左 10mm、上 6mm(不随页边距变),导言区可微调:

\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}{类别}, 其他一个字都不用动:

% 软著章节
\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 一次只能管一个类别,这时用逐条标记。

% 专利:一条既算「专利」又可能要算「第一发明人」
\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{教研}

概述里怎么取数

\cvnum{软著}               % 单类:印出数字,没这个类别就印 0
\cvnum*{SCI,EI,核心}       % 多类求和(注意是英文逗号)

列几条就算几条,不需要额外声明总数。空类别返回 0 而不是报错,所以可以先 写 \cvnum{EI},等真有了 EI 论文再加 \cvtagcount{EI},中间不会有编译问题。

加一个全新的类别

比如想统计「一区论文」,三步:

% ① 条目上标记(论文类用 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 原生的形状替换:

\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,全部允许免费商用与再分发。