简历软著/转化/教研改为全自动统计,并补写使用说明 #15

Closed
opened 2026-10-27 07:04:49 +00:00 by laoyang · 2 comments
Owner

诉求

  1. 软著、成果转化、教研项目这三个章节「也用同样的方法来统计」
  2. README 里详细说明使用方法:怎样才能让它统计这个数字,还是说它完全是自动的

现状核实(回应第 1 点)

这三处在 #14 里其实已经统计了(\cvmark{软著} / \cvmark{转化} /
\cvmark{教研} 逐条标记,数字正确:5 / 3 / 4)。

但用户追问「是不是完全自动」点到了真问题:逐条标记只是把手写数字换了个
地方
,仍然要人工维护 15 处标记,漏标就错。所以本轮把它做成真正全自动。

做法:新增 cvlist 环境

\begin{cvlist}{软著}       % 原来 \begin{itemize}
    \item 某某系统. 2024SR9999901. ...
\end{cvlist}               % 原来 \end{itemize}

进入环境后每个 \item 自动 +1,条目里一个标记都不用写。

三节各只改两行(环境名),删掉全部 15 处 \cvmark。

实现要点

  • cvlist 内部包普通 itemize,版面完全不变
  • 进入环境时 \let 保存原 \item,重定义为「先 \cvmark 再走原 \item」,
    退出环境自动恢复,不影响后面的普通 itemize
  • ⚠️ \cvmark 内部用 \detokenize 处理类别名,所以传参前必须
    \expandafter 展开 \cv@listcat,否则写进 .cvnum 的是字面串
    \cv@listcat(实测踩到)

为什么不把专利、项目也改成 cvlist

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

README 补写(回应第 2 点)

新增「先回答一个最常问的问题:它是全自动的吗?」作为该节开头,用表格直接回答:

写法 要手动做什么 章节
cvlist 环境 什么都不用做 软著、转化、教研
\cvmark 逐条标记 每条加一个标记 专利、项目
\cvtagcount 每条写 \cvtagcount{SCI} 论文

并加了「全自动写法」「半自动写法」「加一个全新的类别」三个小节,
含可直接抄的代码。

验收标准

  • 三节改为 cvlist,条目里零标记
  • 数字与改动前完全一致(软著 5 / 转化 3 / 教研 4)
  • 加 1 条软著 → 概述自动 5→6
  • 删 2 条 → 自动 5→3;还原 → 回 5
  • 普通 itemize 不受影响(实测 3 条子项未被误计)
  • 版面与基线逐行完全一致(66/75/34 行)
  • 0 error / 0 Overfull / 0 Underfull,3 页,× 残留 0
  • 全库其他模板回归与基线一致
  • README 明确回答「自动还是手动」
## 诉求 1. 软著、成果转化、教研项目这三个章节「也用同样的方法来统计」 2. README 里详细说明使用方法:**怎样才能让它统计这个数字,还是说它完全是自动的** ## 现状核实(回应第 1 点) 这三处在 **#14** 里其实已经统计了(`\cvmark{软著}` / `\cvmark{转化}` / `\cvmark{教研}` 逐条标记,数字正确:5 / 3 / 4)。 但用户追问「是不是完全自动」点到了真问题:**逐条标记只是把手写数字换了个 地方**,仍然要人工维护 15 处标记,漏标就错。所以本轮把它做成**真正全自动**。 ## 做法:新增 cvlist 环境 ```latex \begin{cvlist}{软著} % 原来 \begin{itemize} \item 某某系统. 2024SR9999901. ... \end{cvlist} % 原来 \end{itemize} ``` 进入环境后每个 `\item` 自动 +1,**条目里一个标记都不用写**。 三节各只改两行(环境名),删掉全部 15 处 `\cvmark`。 ### 实现要点 - `cvlist` 内部包普通 `itemize`,版面完全不变 - 进入环境时 `\let` 保存原 `\item`,重定义为「先 `\cvmark` 再走原 `\item`」, 退出环境自动恢复,不影响后面的普通 `itemize` - ⚠️ `\cvmark` 内部用 `\detokenize` 处理类别名,所以传参前必须 `\expandafter` 展开 `\cv@listcat`,否则写进 `.cvnum` 的是字面串 `\cv@listcat`(实测踩到) ### 为什么不把专利、项目也改成 cvlist 它们一条要算**两个**类别(专利 + 第一发明人、科研项目 + 主持/负责), `cvlist` 一次只能管一类。所以保留逐条 `\cvmark`。 ## README 补写(回应第 2 点) 新增「先回答一个最常问的问题:它是全自动的吗?」作为该节开头,用表格直接回答: | 写法 | 要手动做什么 | 章节 | |---|---|---| | `cvlist` 环境 | **什么都不用做** | 软著、转化、教研 | | `\cvmark` 逐条标记 | 每条加一个标记 | 专利、项目 | | `\cvtagcount` | 每条写 `\cvtagcount{SCI}` | 论文 | 并加了「全自动写法」「半自动写法」「加一个全新的类别」三个小节, 含可直接抄的代码。 ## 验收标准 - [x] 三节改为 `cvlist`,条目里零标记 - [x] 数字与改动前完全一致(软著 5 / 转化 3 / 教研 4) - [x] **加 1 条软著 → 概述自动 5→6** - [x] **删 2 条 → 自动 5→3**;还原 → 回 5 - [x] 普通 `itemize` 不受影响(实测 3 条子项未被误计) - [x] 版面与基线**逐行完全一致**(66/75/34 行) - [x] 0 error / 0 Overfull / 0 Underfull,3 页,`×` 残留 0 - [x] 全库其他模板回归与基线一致 - [x] README 明确回答「自动还是手动」
Author
Owner

已完成并推送

commit ecfbcb8,已推到 main。

回答第 1 点:这三处现在全自动

之前(#14)它们是「逐条标记」——数字虽然对,但仍要人工维护 15 处标记,
漏标就错。本轮改成真正自动:

\begin{cvlist}{软著}       % ← 原来 \begin{itemize}
    \item 某某系统. 2024SR9999901. 软著登字第 9999901 号.
    \item 另一个系统. 2023SR9999902. 软著登字第 9999902 号.
\end{cvlist}               % ← 原来 \end{itemize}

条目里一个标记都不写。 三节各只改两行(环境名),删掉全部 15 处 \cvmark。

实测增删效果

操作 概述里的数字
原始 5 条 5
加 1 条 6(自动)
删 2 条 3(自动)
还原 5

为什么专利、项目没改

它们一条要算两个类别:专利要同时算「专利」和「第一发明人」,
项目要同时算「科研项目」和「主持/负责」。cvlist 一次只能管一类,
所以这两节保留逐条 \cvmark。

回答第 2 点:README 写清了「自动还是手动」

在该节开头新增「先回答一个最常问的问题:它是全自动的吗?」,
用表格直接讲三种写法的差别:

写法 要手动做什么 用在哪
cvlist 环境 什么都不用做 软著、成果转化、教研项目
\cvmark{类别} 每条加一个标记 专利、科研项目
\cvtagcount{SCI} 每条写这个替代 \textbf{SCI} 论文

另补三个小节,都带可直接抄的代码:

  • 全自动写法:cvlist 环境 —— 含增删实测对照表
  • 半自动写法:\cvmark 与 \cvtagcount —— 说明何时必须用它
  • 加一个全新的类别 —— 三步走示例(想统计「一区论文」之类)

验证

项 结果
编译 0 error / 0 Overfull / 0 Underfull,3 页,× 残留 0
数字 与改动前完全一致(软著 5 / 转化 3 / 教研 4)
版面 与基线逐行完全一致(66/75/34 行)——cvlist 内部就是普通 itemize
副作用 普通 itemize 不受影响(实测 3 条子项未被误计)
全库回归 与基线一致(执行大纲 Over 1 为原有)
服务器 远端 PDF sha256=62f241d3… 与本地逐字节相同

踩坑

\cvmark 内部用 \detokenize 处理类别名,所以传参前必须
\expandafter 展开 \cv@listcat,否则写进 .cvnum 的是字面串
\cv@listcat(实测踩到,.cvnum 里出现 \cvSetNum{\cv@listcat}{0})。

## 已完成并推送 commit `ecfbcb8`,已推到 `main`。 ### 回答第 1 点:这三处现在**全自动** 之前(#14)它们是「逐条标记」——数字虽然对,但仍要人工维护 15 处标记, 漏标就错。本轮改成真正自动: ```latex \begin{cvlist}{软著} % ← 原来 \begin{itemize} \item 某某系统. 2024SR9999901. 软著登字第 9999901 号. \item 另一个系统. 2023SR9999902. 软著登字第 9999902 号. \end{cvlist} % ← 原来 \end{itemize} ``` **条目里一个标记都不写。** 三节各只改两行(环境名),删掉全部 15 处 `\cvmark`。 ### 实测增删效果 | 操作 | 概述里的数字 | |---|---| | 原始 5 条 | 5 | | **加 1 条** | **6**(自动) | | **删 2 条** | **3**(自动) | | 还原 | 5 | ### 为什么专利、项目没改 它们一条要算**两个**类别:专利要同时算「专利」和「第一发明人」, 项目要同时算「科研项目」和「主持/负责」。`cvlist` 一次只能管一类, 所以这两节保留逐条 `\cvmark`。 ### 回答第 2 点:README 写清了「自动还是手动」 在该节开头新增「**先回答一个最常问的问题:它是全自动的吗?**」, 用表格直接讲三种写法的差别: | 写法 | 要手动做什么 | 用在哪 | |---|---|---| | `cvlist` 环境 | **什么都不用做** | 软著、成果转化、教研项目 | | `\cvmark{类别}` | 每条加一个标记 | 专利、科研项目 | | `\cvtagcount{SCI}` | 每条写这个替代 `\textbf{SCI}` | 论文 | 另补三个小节,都带可直接抄的代码: - **全自动写法:`cvlist` 环境** —— 含增删实测对照表 - **半自动写法:`\cvmark` 与 `\cvtagcount`** —— 说明何时必须用它 - **加一个全新的类别** —— 三步走示例(想统计「一区论文」之类) ### 验证 | 项 | 结果 | |---|---| | 编译 | 0 error / 0 Overfull / 0 Underfull,3 页,`×` 残留 0 | | 数字 | 与改动前**完全一致**(软著 5 / 转化 3 / 教研 4) | | 版面 | 与基线**逐行完全一致**(66/75/34 行)——`cvlist` 内部就是普通 `itemize` | | 副作用 | 普通 `itemize` 不受影响(实测 3 条子项未被误计) | | 全库回归 | 与基线一致(执行大纲 Over 1 为原有) | | 服务器 | 远端 PDF `sha256=62f241d3…` 与本地逐字节相同 | ### 踩坑 `\cvmark` 内部用 `\detokenize` 处理类别名,所以传参前必须 `\expandafter` 展开 `\cv@listcat`,否则写进 `.cvnum` 的是字面串 `\cv@listcat`(实测踩到,`.cvnum` 里出现 `\cvSetNum{\cv@listcat}{0}`)。
Author
Owner

三节已改为全自动统计(cvlist 环境,条目里零标记),README 已明确写清三种写法
「要手动做什么」,服务器端 PDF 已从 API 下载逐字节验证一致,关闭本工单。

若之后想把专利/科研项目也统一成更简洁的写法,或给 \experience 加经费字段
做经费自动求和,请在本单继续评论。

三节已改为全自动统计(`cvlist` 环境,条目里零标记),README 已明确写清三种写法 「要手动做什么」,服务器端 PDF 已从 API 下载逐字节验证一致,关闭本工单。 若之后想把专利/科研项目也统一成更简洁的写法,或给 `\experience` 加经费字段 做经费自动求和,请在本单继续评论。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: laoyang/ouc_latex_template#15