简历软著/转化/教研改为全自动统计,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 页;全库回归与基线一致。
This commit is contained in:
2026-10-27 15:04:48 +08:00
parent eb3b53946c
commit ecfbcb8c67
6 changed files with 177 additions and 68 deletions
+95 -30
View File
@@ -204,49 +204,114 @@ Pagella / XCharter 宽 7~11%,会把全库的断行推着变。
手写,每增删一条论文就得回头改概述,非常容易漏改。本模板让它们**自动从正文条目 手写,每增删一条论文就得回头改概述,非常容易漏改。本模板让它们**自动从正文条目
数出来**。 数出来**。
### 怎么用 ### 先回答一个最常问的问题:它是全自动的吗?
两步: **分两种,取决于章节用哪种写法。**
| 写法 | 要手动做什么 | 适合什么章节 |
|---|---|---|
| **`cvlist` 环境**(全自动) | **什么都不用做**。写 `\item` 就自动算一条。 | 一条 = 一个成果的章节:软著、成果转化、教研项目 |
| **`\cvmark` 逐条标记**(半自动) | 每条末尾加一个 `\cvmark{类别}` | 一条要算进**多个类别**的章节:专利(要同时算"专利"和"第一发明人")、科研项目(要同时算"科研项目"和"主持/负责") |
| **`\cvtagcount`**(半自动) | 每条末尾写 `\cvtagcount{SCI}`,替代原来的 `\textbf{SCI}` | 论文(收录类型本来就要显示出来,顺手计数) |
也就是说:**三个你关心的章节(软著、成果转化、教研项目)已经是全自动的,不需要
任何标记。** 增删条目后重新编译,概述里的数字自己就变了。
### 全自动写法:`cvlist` 环境
这是最省事的方式。原来写 `\begin{itemize}`,现在改成 `\begin{cvlist}{类别}`,
其他一个字都不用动:
```latex ```latex
% ① 在每个条目末尾标类别(不产生任何可见输出) % 软著章节
\item ...论文信息... \cvtagcount{SCI} % 显示 SCI,同时 SCI +1 \sectionTitle{软件著作权}{\faTv}
\item ...论文信息... \cvmark{软著} % 只计数,不显示 \begin{cvlist}{软著} % ← 只改这一行(原来是 itemize)
\item 某某系统. 2024SR9999901. 软著登字第 9999901 号.
\item 另一个系统. 2023SR9999902. 软著登字第 9999902 号.
\end{cvlist} % ← 和这一行(原来是 \end{itemize})
% ② 概述里取数 % 概述里
发表论文 \cvnum*{SCI,EI,核心} 篇(SCI \cvnum{SCI} 篇、EI \cvnum{EI} 篇), 登记软件著作权 \cvnum{软著} 项 % → 自动印出「2」
登记软件著作权 \cvnum{软著} 项
``` ```
`\cvnum{A,B}`(带星号)是多类求和;`\cvnum{A}`(不带星号)是单类取数。 **就这样。** 以后加一条只是多写一个 `\item ...`,数字自动从 2 变 3;
**列几条就算几条**,不需要额外声明的总数。 删一条自动变 1。不需要回来改概述,也不需要在条目里加任何标记。
空类别返回 `0` 而不是报错,所以可以先写 `\cvnum{EI}`,等真有了 EI 论文再加 实测过的行为:
`\cvtagcount{EI}`,中间不会有编译问题。
### 两个命令的分工 | 操作 | 概述里的数字 |
|---|---|
| 原始 5 条 | 5 |
| 加 1 条 | **6**(自动) |
| 删 2 条(剩 3 条) | **3**(自动) |
| 还原 | 5 |
| 命令 | 显示 | 计数 | 用在哪 | ⚠️ `cvlist` 内部就是普通 `itemize`,**版面完全不变**(已逐行比对过,行数、
|---|---|---|---| 位置一字不差)。
| `\cvmark{类别}` | 不显示 | +1 | 软著、专利、项目、转化、教研这类本来就靠字段表达类别的条目 |
| `\cvtagcount{类别}` | 显示(加粗,与正文同号) | +1 | 论文的 SCI/EI/核心——原本就用 `\textbf{SCI}` 缀在末尾,一步到位 |
`\cvtagcount` 就是为论文设计的:显示和计数合成一个动作,不会出现「改了显示忘了 ⚠️ 不要在 `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,核心}` | | `SCI` `EI` `核心` | `section_04` 论文 | `\cvtagcount{}` 每条末尾 | `\cvnum*{SCI,EI,核心}` |
| `专利` `第一发明人` | `section_05` 各条目末尾 `\cvmark{}` | `\cvnum{专利}` / `\cvnum{第一发明人}` | | `专利` `第一发明人` | `section_05` 专利 | `\cvmark{}` 每条末尾 | `\cvnum{专利}` / `\cvnum{第一发明人}` |
| `软著` | `section_06` | `\cvnum{软著}` | | `软著` | `section_06` 软著 | **`cvlist` 全自动** | `\cvnum{软著}` |
| `科研项目` `主持` `负责` | `section_07` 描述块内 | `\cvnum{主持}` / `\cvnum{负责}` | | `科研项目` `主持` `负责` | `section_07` 项目 | `\cvmark{}` 描述块内 | `\cvnum{主持}` / `\cvnum{负责}` |
| `转化` | `section_08` | `\cvnum{转化}` | | `转化` | `section_08` 成果转化 | **`cvlist` 全自动** | `\cvnum{转化}` |
| `教研` | `section_09` | `\cvnum{教研}` | | `教研` | `section_09` 教研项目 | **`cvlist` 全自动** | `\cvnum{教研}` |
⚠️ 增删条目时**标记要跟着走**。删掉一条论文但留下 `\cvtagcount{SCI}`,数字就会 ### 概述里怎么取数
多算一个——这是这套机制唯一的代价,但比每次回头数一遍要可靠得多。
```latex
\cvnum{软著} % 单类:印出数字,没这个类别就印 0
\cvnum*{SCI,EI,核心} % 多类求和(注意是英文逗号)
```
**列几条就算几条**,不需要额外声明总数。空类别返回 `0` 而不是报错,所以可以先
写 `\cvnum{EI}`,等真有了 EI 论文再加 `\cvtagcount{EI}`,中间不会有编译问题。
### 加一个全新的类别
比如想统计「一区论文」,三步:
```latex
% ① 条目上标记(论文类用 cvtagcount,其他用 cvmark)
\item ...论文... \cvtagcount{一区}
% ② 概述里取数(不用任何注册,直接写)
其中一区论文 \cvnum{一区} 篇
% ③ 编译两遍
```
类别名是**随用随建**的,不需要预先声明。`\cvnum*{一区,SCI}` 这种求和也可以
直接用。
⚠️ 类别名不要含英文逗号(`,` 是 `\cvnum*` 的分隔符)、不要含 `@ % # \ { }`。
中文、英文、空格都可以。
### 三条必须知道的限制 ### 三条必须知道的限制
@@ -275,7 +340,7 @@ Pagella / XCharter 宽 7~11%,会把全库的断行推着变。
- 若你的正文就是全部成果,自动统计的数字才是真实总量 - 若你的正文就是全部成果,自动统计的数字才是真实总量
用之前先想清楚自己属于哪种。要保留「40 余篇」这种总量表述,就把那处数字改回 用之前先想清楚自己属于哪种。要保留「40 余篇」这种总量表述,就把那处数字改回
手写,只在真正列全的章节(转化、教研这类)用 `\cvnum`。 手写,只在真正列全的章节(软著、转化、教研这类)用 `\cvnum`。
## 写的时候容易踩的三个坑 ## 写的时候容易踩的三个坑
+58 -14
View File
@@ -639,23 +639,30 @@
% 问题:简历第一段概述通常写「发表论文 40 余篇、授权专利 12 项、成果转化 % 问题:简历第一段概述通常写「发表论文 40 余篇、授权专利 12 项、成果转化
% 3 项……」。这些数字若手写,每增删一条论文就得回头改概述,极易漏改。 % 3 项……」。这些数字若手写,每增删一条论文就得回头改概述,极易漏改。
% %
% 思路:给每条加一个**类别标记** \cvmark, 正文里自动累加计数,概述用 % 思路:正文里计数,概述用 \cvnum 取数。**列几条就算几条**,不去猜总数——
% \cvnum 取数。**列几条就算几条**,不去猜总数——你不列出来的成果 % 你不列出来的成果本来也不该出现在概述里。
% 本来也不该出现在概述里。
% %
% 用法(两步): % 两种写法,按「一条算几类」选:
% ① 每个条目末尾标类别:
% \item ...论文信息... \cvmark{SCI}
% \item ...论文信息... \cvmark{EI}
% \cvmark 不产生任何可见输出(就是个计数动作),放条目首尾都行。
% 一条属于两类就标两次;同名类别重复标会自动累加。
% %
% ② 概述里取数: % 【全自动】cvlist 环境 —— 一条 = 一个成果时用,**条目里什么都不用写**
% \cvnum{SCI} 篇、\cvnum{EI} 篇、合计 \cvnum*{SCI,EI} 篇 % \begin{cvlist}{软著}
% \cvnum* 是「多类求和」,逗号分隔(注意:是英文逗号)。 % \item 某某系统...登记号...
% \item 另一个系统...
% \end{cvlist}
% 每多一个 \item 自动 +1。增删条目完全不用管标记。
% 目前用于:软著(section_06)、成果转化(section_08)、教研(section_09)。
% %
% ③ 空类别返回 0,不会出现 ??。所以可以先写 \cvnum{EI}, % 【半自动】逐条标记 —— 一条要算进多个类别时用
% 等真有了 EI 论文再加 \cvmark{EI},中间不会编译报错。 % \cvmark{类别} 只计数,不显示(专利、科研项目用)
% \cvtagcount{类别} 显示加粗文字 + 计数(论文的 SCI/EI/核心用)
% 专利一条要同时算「专利」和「第一发明人」,项目要同时算
% 「科研项目」和「主持/负责」,cvlist 一次只能管一类,故用标记。
%
% 【概述取数】两种写法统一:
% \cvnum{类别} 单类
% \cvnum*{A,B} 多类求和(英文逗号)
% 空类别返回 0,不会出现 ??,所以可以先写 \cvnum{EI} 再加标记。
% 类别名随用随建,不需要预先注册。
% %
% ⚠️ 为什么用独立数据文件而不是 LaTeX 的 aux: % ⚠️ 为什么用独立数据文件而不是 LaTeX 的 aux:
% 实测中文键经 aux 往返后 \ifcsname 全部匹配不上(xeCJK 把汉字设为 % 实测中文键经 aux 往返后 \ifcsname 全部匹配不上(xeCJK 把汉字设为
@@ -708,6 +715,43 @@
{}% {}%
} }
% ---- 自动计数列表环境:cvlist --------------------------------------
% \begin{cvlist}{<类别>} ... \end{cvlist}
%
% 进入环境后,**每个 \item 自动 +1**,不需要在条目里写 \cvmark。
% 这是最省事也最不容易漏的方式:增删条目完全不用管标记。
%
% 适用于「一条就是一个成果、章节条目数就是总数」的章节:
% 软件著作权、成果转化、教研项目、专利(见下)、奖励……
% 不适用于「一条里含多个类别」的场景(比如论文一条要同时算 SCI 和总篇数),
% 那种仍用 \cvtagcount / \cvmark 逐条标。
%
% 用法:
% \begin{cvlist}{软著}
% \item 某系统...登记号...
% \item 另一个系统...
% \end{cvlist}
% 概述里写 \cvnum{软著} → 2
%
% ⚠️ 环境内部就是普通 itemize,版式完全不变(\begin{itemize} 包在里面)。
% ⚠️ 不能在 cvlist 里再嵌套 itemize 写子项——子项的 \item 也会被算进去。
% 需要子项就用普通 itemize + 手写 \cvmark。
\newenvironment{cvlist}[1]{%
\cvlistcat{#1}%
\begin{itemize}%
}{%
\end{itemize}%
}
% 记录当前 cvlist 的类别;\item 被重定义成「先计数再走原 \item」
% ⚠️ \cvmark 内部用 \detokenize 处理类别名,所以必须先把 \cv@listcat
% **展开成实际文字**再传进去;否则写进 .cvnum 的是字面串 "\cv@listcat"。
\newcommand\cvlistcat[1]{%
\def\cv@listcat{#1}%
\let\cv@origitem\item
\renewcommand\item{\expandafter\cvmark\expandafter{\cv@listcat}\cv@origitem}%
}
% ---- 输出 ---------------------------------------------------------- % ---- 输出 ----------------------------------------------------------
% \cvnum{SCI} 单类取数 % \cvnum{SCI} 单类取数
% \cvnum*{SCI,EI} 多类求和 % \cvnum*{SCI,EI} 多类求和
+9 -9
View File
@@ -8,17 +8,17 @@
% 示例统一用 999999 段,一眼可辨是假号。 % 示例统一用 999999 段,一眼可辨是假号。
% 开发人员多于 6 人时可以考虑只列前几位加「等」,避免单条过长折行。 % 开发人员多于 6 人时可以考虑只列前几位加「等」,避免单条过长折行。
% %
% ⚠️ 每条末尾的 \cvmark{软著} 是计数标记,不产生可见输出, % ⚠️ 用 cvlist 环境自动计数:每多一个 \item,概述里的 \cvnum{软著} 就自动 +1。
% 供概述的 \cvnum{软著} 取数。增删条目时标记要跟着走。 % 增删条目**什么都不用改**,数字自己会跟上。
\sectionTitle{软件著作权}{\faTv} \sectionTitle{软件著作权}{\faTv}
\begin{itemize} \begin{cvlist}{软著}
\item \textbf{张远航}, 李文博, 陈思远, 王海涛, 刘洋, 赵明轩, 孙悦, 周建华. \item \textbf{张远航}, 李文博, 陈思远, 王海涛, 刘洋, 赵明轩, 孙悦, 周建华.
近岸海域叶绿素浓度遥感反演系统. 2024. 2024SR9999901. 软著登字第 9999901 号.\cvmark{软著} 近岸海域叶绿素浓度遥感反演系统. 2024. 2024SR9999901. 软著登字第 9999901 号.
\item \textbf{张远航}, 陈思远, 王海涛, 李文博, 吴晓峰, 郑凯. \item \textbf{张远航}, 陈思远, 王海涛, 李文博, 吴晓峰, 郑凯.
多源海洋观测数据融合与质量控制检索系统. 2023. 2023SR9999902. 软著登字第 9999902 号.\cvmark{软著} 多源海洋观测数据融合与质量控制检索系统. 2023. 2023SR9999902. 软著登字第 9999902 号.
\item \textbf{张远航}, 刘洋, 赵明轩. 海洋要素智能订正与预报后处理平台. 2023. 2023SR9999903. 软著登字第 9999903 号.\cvmark{软著} \item \textbf{张远航}, 刘洋, 赵明轩. 海洋要素智能订正与预报后处理平台. 2023. 2023SR9999903. 软著登字第 9999903 号.
\item 李文博, \textbf{张远航}, 孙悦. 浮标观测序列异常检测与修复系统. 2022. 2022SR9999904. 软著登字第 9999904 号.\cvmark{软著} \item 李文博, \textbf{张远航}, 孙悦. 浮标观测序列异常检测与修复系统. 2022. 2022SR9999904. 软著登字第 9999904 号.
\item \textbf{张远航}, 周建华. 海洋卫星遥感影像云检测预处理系统. 2021. 2021SR9999905. 软著登字第 9999905 号.\cvmark{软著} \item \textbf{张远航}, 周建华. 海洋卫星遥感影像云检测预处理系统. 2021. 2021SR9999905. 软著登字第 9999905 号.
\end{itemize} \end{cvlist}
+7 -7
View File
@@ -8,16 +8,16 @@
% 转化方式写清「专利权实施普通许可 / 转让 / 作价入股」,评职称时这一栏 % 转化方式写清「专利权实施普通许可 / 转让 / 作价入股」,评职称时这一栏
% 比金额更被看重。 % 比金额更被看重。
% %
% ⚠️ 每条末尾的 \cvmark{转化} 是计数标记,不产生可见输出, % ⚠️ 用 cvlist 环境自动计数:每多一个 \item,概述里的 \cvnum{转化} 就自动 +1。
% 供概述的 \cvnum{转化} 取数。增删条目时标记要跟着走。 % 增删条目**什么都不用改**,数字自己会跟上。
\sectionTitle{成果转化}{\faAmericanSignLanguageInterpreting} \sectionTitle{成果转化}{\faAmericanSignLanguageInterpreting}
\begin{itemize} \begin{cvlist}{转化}
\item \textbf{张远航}. 一种赤潮发生概率的时序预报方法. 专利权实施普通许可. \item \textbf{张远航}. 一种赤潮发生概率的时序预报方法. 专利权实施普通许可.
青岛蓝湾海洋科技有限公司(示例). 2023年06月.\cvmark{转化} 青岛蓝湾海洋科技有限公司(示例). 2023年06月.
\item \textbf{张远航}. 基于物理约束神经网络的水质参数短期预测方法及系统. 专利权实施普通许可. \item \textbf{张远航}. 基于物理约束神经网络的水质参数短期预测方法及系统. 专利权实施普通许可.
山东海慧信息技术有限公司(示例). 2022年11月.\cvmark{转化} 山东海慧信息技术有限公司(示例). 2022年11月.
\item \textbf{张远航}. 面向近岸海域的遥感影像云检测与重建方法. 专利权实施普通许可. \item \textbf{张远航}. 面向近岸海域的遥感影像云检测与重建方法. 专利权实施普通许可.
青岛海图数据科技股份有限公司(示例). 2022年04月.\cvmark{转化} 青岛海图数据科技股份有限公司(示例). 2022年04月.
\end{itemize} \end{cvlist}
+8 -8
View File
@@ -6,16 +6,16 @@
% 每条格式:项目名称. 立项单位 + 项目类别. 起止时间. 本人角色. % 每条格式:项目名称. 立项单位 + 项目类别. 起止时间. 本人角色.
% 「主持 / 参与」不要省 —— 教学类项目主持人身份是评教学奖的硬指标。 % 「主持 / 参与」不要省 —— 教学类项目主持人身份是评教学奖的硬指标。
% %
% ⚠️ 每条末尾的 \cvmark{教研} 是计数标记,不产生可见输出, % ⚠️ 用 cvlist 环境自动计数:每多一个 \item,概述里的 \cvnum{教研} 就自动 +1。
% 供概述的 \cvnum{教研} 取数。增删条目时标记要跟着走。 % 增删条目**什么都不用改**,数字自己会跟上。
\sectionTitle{教研项目}{\faGroup} \sectionTitle{教研项目}{\faGroup}
\begin{itemize} \begin{cvlist}{教研}
\item 海洋大数据分析案例库建设. 中国海洋大学研究生科研创新能力提升计划 \item 海洋大数据分析案例库建设. 中国海洋大学研究生科研创新能力提升计划
专业学位研究生教学案例库建设项目. 2023.06 至今. 主持.\cvmark{教研} 专业学位研究生教学案例库建设项目. 2023.06 至今. 主持.
\item 机器学习与海洋应用. 中国海洋大学 2022 年度教材建设基金重点项目. 2022.03 至今. 主持.\cvmark{教研} \item 机器学习与海洋应用. 中国海洋大学 2022 年度教材建设基金重点项目. 2022.03 至今. 主持.
\item 面向新工科的海洋信息类课程混合式教学模式改革. 中国海洋大学本科 \item 面向新工科的海洋信息类课程混合式教学模式改革. 中国海洋大学本科
教育教学研究一般项目. 2021.09 至 2023.08. 主持.\cvmark{教研} 教育教学研究一般项目. 2021.09 至 2023.08. 主持.
\item 数据科学与海洋情怀. 信息科学与工程学部课程思政建设项目. 2021.03 至 2022.12. 主持.\cvmark{教研} \item 数据科学与海洋情怀. 信息科学与工程学部课程思政建设项目. 2021.03 至 2022.12. 主持.
\end{itemize} \end{cvlist}
BIN
View File
Binary file not shown.