feat: add reusable engineering skill collection
This commit is contained in:
@@ -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
|
||||
文档概述
|
||||
背景与目标
|
||||
核心概念
|
||||
方案或处理流程
|
||||
实现与操作说明
|
||||
关键参数
|
||||
问题与解决方法
|
||||
结论
|
||||
待确认事项
|
||||
后续计划
|
||||
```
|
||||
Reference in New Issue
Block a user