简历软著/转化/教研改为全自动统计,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
+58 -14
View File
@@ -639,23 +639,30 @@
% 问题:简历第一段概述通常写「发表论文 40 余篇、授权专利 12 项、成果转化
% 3 项……」。这些数字若手写,每增删一条论文就得回头改概述,极易漏改。
%
% 思路:给每条加一个**类别标记** \cvmark, 正文里自动累加计数,概述用
% \cvnum 取数。**列几条就算几条**,不去猜总数——你不列出来的成果
% 本来也不该出现在概述里。
% 思路:正文里计数,概述用 \cvnum 取数。**列几条就算几条**,不去猜总数——
% 你不列出来的成果本来也不该出现在概述里。
%
% 用法(两步):
% ① 每个条目末尾标类别:
% \item ...论文信息... \cvmark{SCI}
% \item ...论文信息... \cvmark{EI}
% \cvmark 不产生任何可见输出(就是个计数动作),放条目首尾都行。
% 一条属于两类就标两次;同名类别重复标会自动累加。
% 两种写法,按「一条算几类」选:
%
% ② 概述里取数:
% \cvnum{SCI} 篇、\cvnum{EI} 篇、合计 \cvnum*{SCI,EI} 篇
% \cvnum* 是「多类求和」,逗号分隔(注意:是英文逗号)。
% 【全自动】cvlist 环境 —— 一条 = 一个成果时用,**条目里什么都不用写**
% \begin{cvlist}{软著}
% \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:
% 实测中文键经 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,EI} 多类求和