feat: add reusable engineering skill collection

This commit is contained in:
2026-08-15 23:24:17 +08:00
commit 480f5c321d
33 changed files with 2706 additions and 0 deletions
@@ -0,0 +1,70 @@
---
name: generate-latex-document
description: "使用内置 LaTeX 模板,将 Markdown、TXT 等零散资料整理成技术文档,或者分析代码库生成结构化代码说明文档。仅在用户显式调用 $generate-latex-document 时使用。"
---
# 生成 LaTeX 技术文档
使用 Skill 内置模板生成完整、独立、可直接上传 Overleaf 的 `.tex` 文档。
## 确定工作模式
根据用户请求选择一种模式:
- 笔记整理模式:处理 Markdown、TXT、会议记录、学习笔记和其他零散资料。
- 代码库说明模式:分析项目代码,生成模块、文件、类、函数和接口说明。
如果无法判断模式,先询问用户。
选择模式后只读取对应工作流:
- 笔记整理模式:读取 `references/notes-workflow.md`
- 代码库说明模式:读取 `references/codebase-workflow.md`
不要同时读取两个工作流,除非用户明确要求混合生成。
## 使用模板
读取 `assets/document-template.tex`,复制为新的输出文件,不修改原始模板。
替换以下占位符:
- `CODEXDOCUMENTTITLE`:文档标题;
- `CODEXDOCUMENTSUBTITLE`:文档副标题;
- `CODEXPROJECTNAME`:项目或主题名称;
- `CODEXDOCUMENTAUTHOR`:作者;
- `CODEXDOCUMENTVERSION`:文档版本;
- `CODEXDOCUMENTDESCRIPTION`:封面简介;
- `CODEXDOCUMENTBODY`:完整正文。
如果用户没有提供作者,使用“项目组”或沿用已有文档作者,不得猜测真实姓名。
如果用户没有提供版本,首次生成使用 `v1.0`;更新已有文档时沿用原版本,除非用户要求修改。
## 输出要求
只生成完整的 `.tex` 文件,不生成 PDF。
不调用本地 LaTeX、XeLaTeX、latexmk 或其他编译工具,也不检查本地是否安装 LaTeX。
输出文件必须:
- 包含完整导言区、封面、目录、正文和 `\end{document}`
- 能够独立上传 Overleaf
- 不依赖 Skill 目录中的模板;
- 不保留任何 `CODEX...` 占位符;
- 不保留 `XXXX`、示例数据或无意义空章节;
- 默认适配 Overleaf 的 XeLaTeX 编译器;
- 保留模板的主要视觉风格。
默认不要使用外部 `.sty``\input{}``\include{}`
如果文档需要图片,可以使用相对路径,并报告需要同时上传的图片文件。
## LaTeX 内容规则
正确处理 LaTeX 特殊字符:
```text
% _ & # $ { } ~ ^ \
```
@@ -0,0 +1,7 @@
interface:
display_name: "生成 LaTeX 技术文档"
short_description: "使用内置模板整理笔记或生成结构化代码库说明文档"
default_prompt: "使用 $generate-latex-document 根据输入资料或当前代码库生成完整的 LaTeX 技术文档。"
policy:
allow_implicit_invocation: false
@@ -0,0 +1,318 @@
\documentclass[12pt,a4paper]{article}
% ============================================================
% 中文技术文档模板
% 建议在 Overleaf 中使用 XeLaTeX 编译
% ============================================================
\usepackage[UTF8]{ctex}
\usepackage[margin=2.5cm]{geometry}
\usepackage{titlesec}
\usepackage{fancyhdr}
\usepackage{listings}
\usepackage{xcolor}
\usepackage{graphicx}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{booktabs}
\usepackage{longtable}
\usepackage{tabularx}
\usepackage{array}
\usepackage{enumitem}
\usepackage{tcolorbox}
\usepackage{setspace}
\usepackage{url}
\usepackage{hyperref}
\tcbuselibrary{skins,breakable}
% ============================================================
% 页面设置
% ============================================================
\geometry{
a4paper,
left=2.5cm,
right=2.5cm,
top=2.5cm,
bottom=2.5cm
}
\onehalfspacing
\setlength{\parindent}{2em}
\setlength{\parskip}{0.3em}
\setlength{\emergencystretch}{2em}
\setlist[itemize]{
itemsep=0.2em,
topsep=0.4em
}
\setlist[enumerate]{
itemsep=0.2em,
topsep=0.4em
}
\setcounter{tocdepth}{2}
\setcounter{secnumdepth}{3}
% ============================================================
% 文档信息占位符
% ============================================================
\newcommand{\doctitle}{CODEXDOCUMENTTITLE}
\newcommand{\docsubtitle}{CODEXDOCUMENTSUBTITLE}
\newcommand{\projectname}{CODEXPROJECTNAME}
\newcommand{\docauthor}{CODEXDOCUMENTAUTHOR}
\newcommand{\docversion}{CODEXDOCUMENTVERSION}
\newcommand{\docdescription}{CODEXDOCUMENTDESCRIPTION}
% ============================================================
% 颜色
% ============================================================
\definecolor{primaryblue}{RGB}{35,85,145}
\definecolor{secondaryblue}{RGB}{65,105,170}
\definecolor{codebg}{RGB}{247,248,250}
\definecolor{codeframe}{RGB}{205,210,218}
\definecolor{codegreen}{RGB}{40,130,80}
\definecolor{codegray}{RGB}{110,115,125}
\definecolor{codepurple}{RGB}{145,70,165}
\definecolor{warningorange}{RGB}{210,125,30}
\definecolor{softgray}{RGB}{245,245,245}
% ============================================================
% 页眉页脚
% ============================================================
\pagestyle{fancy}
\fancyhf{}
\fancyhead[L]{\small\doctitle}
\fancyhead[R]{\small\leftmark}
\fancyfoot[C]{\thepage}
\renewcommand{\headrulewidth}{0.4pt}
\renewcommand{\footrulewidth}{0pt}
% ============================================================
% 标题格式
% ============================================================
\titleformat{\section}
{\Large\bfseries\color{primaryblue}}
{\thesection}
{1em}
{}
[\titlerule]
\titleformat{\subsection}
{\large\bfseries\color{secondaryblue}}
{\thesubsection}
{1em}
{}
\titleformat{\subsubsection}
{\normalsize\bfseries}
{\thesubsubsection}
{1em}
{}
% ============================================================
% 表格
% ============================================================
\newcolumntype{Y}{>{\raggedright\arraybackslash}X}
\renewcommand{\arraystretch}{1.25}
% ============================================================
% 代码样式
% ============================================================
\lstdefinestyle{codestyle}{
backgroundcolor=\color{codebg},
commentstyle=\color{codegreen},
keywordstyle=\color{primaryblue}\bfseries,
numberstyle=\tiny\color{codegray},
stringstyle=\color{codepurple},
basicstyle=\ttfamily\footnotesize,
breakatwhitespace=false,
breaklines=true,
captionpos=b,
keepspaces=true,
numbers=left,
numbersep=8pt,
showspaces=false,
showstringspaces=false,
showtabs=false,
tabsize=4,
frame=single,
rulecolor=\color{codeframe},
columns=fullflexible
}
\lstdefinestyle{commandstyle}{
backgroundcolor=\color{codebg},
basicstyle=\ttfamily\footnotesize,
breaklines=true,
frame=single,
rulecolor=\color{codeframe},
numbers=none,
columns=fullflexible
}
\lstdefinelanguage{json}{
basicstyle=\ttfamily\footnotesize,
string=[s]{"}{"},
stringstyle=\color{codepurple},
comment=[l]{//},
commentstyle=\color{codegreen},
keywords={true,false,null},
keywordstyle=\color{primaryblue}\bfseries
}
\lstset{style=codestyle}
% ============================================================
% 信息框
% ============================================================
\newtcolorbox{infobox}[2][]{
enhanced,
breakable,
colback=blue!4!white,
colframe=primaryblue,
fonttitle=\bfseries,
title={#2},
#1
}
\newtcolorbox{warningbox}[2][]{
enhanced,
breakable,
colback=orange!5!white,
colframe=warningorange,
fonttitle=\bfseries,
title={#2},
#1
}
\newtcolorbox{filebox}[2][]{
enhanced,
breakable,
colback=softgray,
colframe=gray!65!black,
fonttitle=\bfseries\ttfamily,
title={文件:#2},
#1
}
\newtcolorbox{functionbox}[2][]{
enhanced,
breakable,
colback=blue!2!white,
colframe=secondaryblue,
fonttitle=\bfseries\ttfamily,
title={函数:#2},
#1
}
\newtcolorbox{qabox}[2][]{
enhanced,
breakable,
colback=blue!4!white,
colframe=primaryblue,
fonttitle=\bfseries,
title={问题:#2},
#1
}
\newtcolorbox{answerbox}[1][]{
enhanced,
breakable,
colback=green!4!white,
colframe=green!55!black,
leftrule=4pt,
#1
}
% ============================================================
% 行内代码
% ============================================================
\newcommand{\code}[1]{\texttt{\detokenize{#1}}}
% ============================================================
% 超链接
% ============================================================
\hypersetup{
colorlinks=true,
linkcolor=primaryblue,
urlcolor=primaryblue,
citecolor=green!50!black,
bookmarks=true,
bookmarksnumbered=true,
pdftitle={\doctitle},
pdfauthor={\docauthor}
}
% ============================================================
% 文档正文
% ============================================================
\begin{document}
% ============================================================
% 封面
% ============================================================
\begin{titlepage}
\centering
\vspace*{2.8cm}
{\Huge\bfseries\color{primaryblue}\doctitle\par}
\vspace{0.7cm}
{\Large\docsubtitle\par}
\vspace{2cm}
\rule{\linewidth}{0.6mm}
\vspace{1cm}
\begin{tabular}{rl}
\textbf{项目或主题:} & \projectname \\[0.6em]
\textbf{作者:} & \docauthor \\[0.6em]
\textbf{日期:} & \today \\[0.6em]
\textbf{版本:} & \docversion
\end{tabular}
\vspace{1cm}
\rule{\linewidth}{0.6mm}
\vfill
\begin{minipage}{0.85\textwidth}
\centering
\small
\docdescription
\end{minipage}
\end{titlepage}
% ============================================================
% 目录
% ============================================================
\tableofcontents
\newpage
% ============================================================
% 正文占位符
% ============================================================
CODEXDOCUMENTBODY
\end{document}
@@ -0,0 +1,107 @@
# 代码库说明工作流
分析代码库并生成面向开发、维护和使用人员的 LaTeX 代码参考文档。
## 定位代码库
如果用户指定了项目路径,优先使用该路径。
否则从当前目录识别 Git 仓库根目录。
如果当前目录不是 Git 仓库:
1. 在工作区内浅层查找 Git 仓库;
2. 只有一个仓库时使用该仓库;
3. 存在多个仓库时让用户选择;
4. 没有仓库时,将当前项目目录作为目标。
读取项目适用的 `AGENTS.md`、README 和主要设计文档。
## 确定分析范围
支持两种范围:
### `scope=core`
默认模式,只整理:
- 项目入口;
- 核心模块;
- 公共接口;
- 主要类;
- 关键算法;
- 外部可调用函数;
- 重要配置和数据结构。
不详细记录普通私有辅助函数、生成代码和测试辅助代码。
### `scope=all`
只有用户明确要求时使用,尽量整理全部可识别的代码文件、类和函数。
如果项目规模很大,应先统计文件和符号数量,并让用户选择模块或分批生成,不要一次读取整个大型代码库。
## 调研代码库
优先检查:
- README 和主要文档;
- 项目清单和依赖配置;
- 项目入口;
- 源码目录;
- 核心模块;
- 公共头文件和接口;
- 配置文件和配置类;
- 测试中体现的实际行为;
- Git 当前状态和最近相关提交。
使用 `rg --files` 和针对性符号搜索。
默认排除:
- `.git`
- `bin``obj``build``dist`
- 第三方依赖目录;
- 日志、缓存和编译产物;
- 自动生成代码;
- 大型数据文件;
- 与目标模块无关的参考项目。
## 识别项目结构
根据实际代码识别:
- 编程语言和技术栈;
- 项目入口;
- 目录职责;
- 模块边界;
- 核心数据结构;
- 模块依赖;
- 主要调用流程;
- 外部接口;
- 配置方式;
- 构建、运行和测试方法。
不要根据目录名或常见框架习惯编造系统行为。
## 组织代码文档
建议采用以下结构:
```text
文档概述
项目简介
技术栈与运行环境
目录结构
总体架构
主要运行流程
模块说明
文件说明
类与数据结构
函数与接口参考
配置参数
构建、运行与测试
常见问题
已知限制
```
@@ -0,0 +1,54 @@
# 笔记整理工作流
把 Markdown、TXT、会议记录、学习笔记和其他零散资料整理成结构化 LaTeX 文档。
## 确认输入
优先使用用户指定的文件或目录。
如果用户没有明确指定输入:
1. 检查当前任务中提到的 Markdown 和 TXT 文件;
2. 如果只有少量明显相关的文件,列出并使用;
3. 如果文件较多、主题不同或范围不明确,让用户选择;
4. 不默认读取整个工作区。
记录实际读取的文件,不能只根据文件名猜测内容。
## 分析内容
提取并区分:
- 主题和目标;
- 背景信息;
- 核心概念;
- 操作步骤;
- 技术结论;
- 问题和解决方法;
- 决策和原因;
- 待办事项;
- 代码、命令、公式和数据;
- 尚未确认的信息。
合并重复内容,但保留不同来源之间的重要差异。
发现矛盾时不要擅自选择结论,应明确标记冲突或“待确认”。
不要把聊天时间顺序直接当作文档结构。
## 组织文档
根据内容选择必要章节,可以采用:
```text
文档概述
背景与目标
核心概念
方案或处理流程
实现与操作说明
关键参数
问题与解决方法
结论
待确认事项
后续计划
```