简历软著/转化/教研改为全自动统计,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
% ① 在每个条目末尾标类别(不产生任何可见输出)
\item ...论文信息... \cvtagcount{SCI} % 显示 SCI,同时 SCI +1
\item ...论文信息... \cvmark{软著} % 只计数,不显示
% 软著章节
\sectionTitle{软件著作权}{\faTv}
\begin{cvlist}{软著} % ← 只改这一行(原来是 itemize)
\item 某某系统. 2024SR9999901. 软著登字第 9999901 号.
\item 另一个系统. 2023SR9999902. 软著登字第 9999902 号.
\end{cvlist} % ← 和这一行(原来是 \end{itemize})
% ② 概述里取数
发表论文 \cvnum*{SCI,EI,核心} 篇(SCI \cvnum{SCI} 篇、EI \cvnum{EI} 篇),
登记软件著作权 \cvnum{软著} 项
% 概述里
登记软件著作权 \cvnum{软著} 项 % → 自动印出「2」
```
`\cvnum{A,B}`(带星号)是多类求和;`\cvnum{A}`(不带星号)是单类取数。
**列几条就算几条**,不需要额外声明的总数。
**就这样。** 以后加一条只是多写一个 `\item ...`,数字自动从 2 变 3;
删一条自动变 1。不需要回来改概述,也不需要在条目里加任何标记。
空类别返回 `0` 而不是报错,所以可以先写 `\cvnum{EI}`,等真有了 EI 论文再加
`\cvtagcount{EI}`,中间不会有编译问题。
实测过的行为:
### 两个命令的分工
| 操作 | 概述里的数字 |
|---|---|
| 原始 5 条 | 5 |
| 加 1 条 | **6**(自动) |
| 删 2 条(剩 3 条) | **3**(自动) |
| 还原 | 5 |
| 命令 | 显示 | 计数 | 用在哪 |
|---|---|---|---|
| `\cvmark{类别}` | 不显示 | +1 | 软著、专利、项目、转化、教研这类本来就靠字段表达类别的条目 |
| `\cvtagcount{类别}` | 显示(加粗,与正文同号) | +1 | 论文的 SCI/EI/核心——原本就用 `\textbf{SCI}` 缀在末尾,一步到位 |
⚠️ `cvlist` 内部就是普通 `itemize`,**版面完全不变**(已逐行比对过,行数、
位置一字不差)。
`\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,核心}` |
| `专利` `第一发明人` | `section_05` 各条目末尾 `\cvmark{}` | `\cvnum{专利}` / `\cvnum{第一发明人}` |
| `软著` | `section_06` | `\cvnum{软著}` |
| `科研项目` `主持` `负责` | `section_07` 描述块内 | `\cvnum{主持}` / `\cvnum{负责}` |
| `转化` | `section_08` | `\cvnum{转化}` |
| `教研` | `section_09` | `\cvnum{教研}` |
| 类别 | 章节 | 写法 | 概述里的用法 |
|---|---|---|---|
| `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{教研}` |
⚠️ 增删条目时**标记要跟着走**。删掉一条论文但留下 `\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 余篇」这种总量表述,就把那处数字改回
手写,只在真正列全的章节(转化、教研这类)用 `\cvnum`。
手写,只在真正列全的章节(软著、转化、教研这类)用 `\cvnum`。
## 写的时候容易踩的三个坑