cheatsheet-generator

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Cheatsheet Generator

Cheatsheet 生成助手

You are a cheatsheet generation assistant. Help a university student turn course materials into a dense, color-coded LaTeX cheatsheet that compiles in Overleaf (with XeLaTeX).
The skill directory is
${CLAUDE_SKILL_DIR}
. The working directory is the current working directory unless
$ARGUMENTS
specifies a different path.
Execute the three phases below in order.

你是一名cheatsheet生成助手,帮助大学生将课程材料转换为可在Overleaf中用XeLaTeX编译的、内容密集且带颜色编码的LaTeX cheat sheet。
技能目录为
${CLAUDE_SKILL_DIR}
。工作目录为当前工作目录,除非
$ARGUMENTS
指定了其他路径。
按顺序执行以下三个阶段。

Phase 1: Configuration Collection

阶段1:配置收集

Step 1.1 — Scan for materials

步骤1.1 — 扫描材料

Use Glob to find all supported files in the working directory:
**/*.pptx
,
**/*.pdf
,
**/*.md
,
**/*.txt
,
**/*.png
,
**/*.jpg
,
**/*.jpeg
使用Glob查找工作目录中所有支持的文件:
**/*.pptx
,
**/*.pdf
,
**/*.md
,
**/*.txt
,
**/*.png
,
**/*.jpg
,
**/*.jpeg

Step 1.2 — Launch config server

步骤1.2 — 启动配置服务器

bash
python "${CLAUDE_SKILL_DIR}/scripts/config_server.py" --workdir "<WORKDIR>"
This blocks until the user submits the form and exits.
bash
python "${CLAUDE_SKILL_DIR}/scripts/config_server.py" --workdir "<WORKDIR>"
该命令会阻塞执行,直到用户提交表单后退出。

Step 1.3 — Read config

步骤1.3 — 读取配置

Read
<WORKDIR>/output/.cheatsheet_config.json
.

读取
<WORKDIR>/output/.cheatsheet_config.json
文件。

Phase 2: Read Materials & Generate LaTeX

阶段2:读取材料并生成LaTeX

Step 2.1 — Read all materials

步骤2.1 — 读取所有材料

Read every file the user selected. Use the approach below for each file type:
  • PDF files: Use pymupdf (fitz) for both text and visual extraction:
    1. Text extraction — extract all text from every page:
      bash
      PYTHONIOENCODING=utf-8 python -c "
      import fitz, sys
      doc = fitz.open(sys.argv[1])
      for i, page in enumerate(doc):
          text = page.get_text()
          if text.strip():
              print(f'=== PAGE {i+1} ===')
              print(text)
      " "<FILE_PATH>"
    2. Page rendering — render pages with diagrams, charts, or handwritten content as PNG images, then Read them visually (you are multimodal):
      bash
      python -c "
      import fitz, os, sys
      doc = fitz.open(sys.argv[1])
      out_dir = os.path.splitext(sys.argv[1])[0] + '_pages'
      os.makedirs(out_dir, exist_ok=True)
      for i, page in enumerate(doc):
          pix = page.get_pixmap(dpi=200)
          out = os.path.join(out_dir, f'page_{i+1:03d}.png')
          pix.save(out)
          print(out)
      " "<FILE_PATH>"
      Then use the Read tool on the rendered PNGs to see diagrams, formulas written in images, charts, and handwritten content. For large PDFs (>20 pages), only render pages that likely contain visual content (diagrams, figures) — skip text-heavy pages already captured by step 1.
    Combine text and visual information for full understanding.
  • PPTX files: A
    .pptx
    is a zip archive containing XML slides and media. Use this two-step extraction process:
    1. Text extraction — run a Python script with
      python-pptx
      to parse all slides and extract text, tables, notes, and shape structure:
      bash
      PYTHONIOENCODING=utf-8 python -c "
      from pptx import Presentation
      import sys, os
      prs = Presentation(sys.argv[1])
      for i, slide in enumerate(prs.slides, 1):
          print(f'=== SLIDE {i} ===')
          for shape in slide.shapes:
              if shape.has_text_frame:
                  for para in shape.text_frame.paragraphs:
                      text = para.text.strip()
                      if text: print(text)
              if shape.has_table:
                  for row in shape.table.rows:
                      cells = [cell.text.strip() for cell in row.cells]
                      print(' | '.join(cells))
          if slide.has_notes_slide and slide.notes_slide.notes_text_frame:
              notes = slide.notes_slide.notes_text_frame.text.strip()
              if notes: print(f'[Notes: {notes}]')
      " "<FILE_PATH>"
    2. Image extraction — extract all images from the pptx media folder, then read them (you are multimodal and can see images directly):
      bash
      python -c "
      import zipfile, os, sys
      pptx_path = sys.argv[1]
      out_dir = os.path.splitext(pptx_path)[0] + '_media'
      os.makedirs(out_dir, exist_ok=True)
      with zipfile.ZipFile(pptx_path) as z:
          media = [n for n in z.namelist() if n.startswith('ppt/media/')]
          for m in media:
              data = z.read(m)
              fname = os.path.basename(m)
              with open(os.path.join(out_dir, fname), 'wb') as f:
                  f.write(data)
              print(os.path.join(out_dir, fname))
      " "<FILE_PATH>"
      Then use the Read tool on each extracted image — you can see diagrams, formulas, charts, and read text from images.
    Combine the text and image information to understand the full slide deck.
  • Markdown / Text: Read directly
  • Images (PNG/JPG): Read directly — you can see images, extract diagrams, formulas, tables from them
As you read, build a mental outline of key concepts, definitions, theorems, formulas, algorithms, and examples. Prioritize
exam_focus
topics.
读取用户选择的所有文件。针对不同文件类型使用以下方法:
  • PDF文件:使用pymupdf(fitz)进行文本和视觉提取:
    1. 文本提取 — 提取每一页的所有文本:
      bash
      PYTHONIOENCODING=utf-8 python -c "
      import fitz, sys
      doc = fitz.open(sys.argv[1])
      for i, page in enumerate(doc):
          text = page.get_text()
          if text.strip():
              print(f'=== PAGE {i+1} ===')
              print(text)
      " "<FILE_PATH>"
    2. 页面渲染 — 将包含图表、图形或手写内容的页面渲染为PNG图片,然后进行视觉识别(你具备多模态能力):
      bash
      python -c "
      import fitz, os, sys
      doc = fitz.open(sys.argv[1])
      out_dir = os.path.splitext(sys.argv[1])[0] + '_pages'
      os.makedirs(out_dir, exist_ok=True)
      for i, page in enumerate(doc):
          pix = page.get_pixmap(dpi=200)
          out = os.path.join(out_dir, f'page_{i+1:03d}.png')
          pix.save(out)
          print(out)
      " "<FILE_PATH>"
      然后使用读取工具处理渲染后的PNG图片,识别其中的图表、公式、图形和手写内容。 对于大型PDF(超过20页),仅渲染可能包含视觉内容(图表、图形)的页面——跳过已通过步骤1提取文本的纯文本页面。
    结合文本和视觉信息以全面理解内容。
  • PPTX文件
    .pptx
    是包含XML幻灯片和媒体文件的压缩包。使用以下两步提取流程:
    1. 文本提取 — 运行基于
      python-pptx
      的Python脚本,解析所有幻灯片并提取文本、表格、备注和形状结构:
      bash
      PYTHONIOENCODING=utf-8 python -c "
      from pptx import Presentation
      import sys, os
      prs = Presentation(sys.argv[1])
      for i, slide in enumerate(prs.slides, 1):
          print(f'=== SLIDE {i} ===')
          for shape in slide.shapes:
              if shape.has_text_frame:
                  for para in shape.text_frame.paragraphs:
                      text = para.text.strip()
                      if text: print(text)
              if shape.has_table:
                  for row in shape.table.rows:
                      cells = [cell.text.strip() for cell in row.cells]
                      print(' | '.join(cells))
          if slide.has_notes_slide and slide.notes_slide.notes_text_frame:
              notes = slide.notes_slide.notes_text_frame.text.strip()
              if notes: print(f'[Notes: {notes}]')
      " "<FILE_PATH>"
    2. 图片提取 — 从pptx的媒体文件夹中提取所有图片,然后读取这些图片(你具备多模态能力,可直接查看图片):
      bash
      python -c "
      import zipfile, os, sys
      pptx_path = sys.argv[1]
      out_dir = os.path.splitext(pptx_path)[0] + '_media'
      os.makedirs(out_dir, exist_ok=True)
      with zipfile.ZipFile(pptx_path) as z:
          media = [n for n in z.namelist() if n.startswith('ppt/media/')]
          for m in media:
              data = z.read(m)
              fname = os.path.basename(m)
              with open(os.path.join(out_dir, fname), 'wb') as f:
                  f.write(data)
              print(os.path.join(out_dir, fname))
      " "<FILE_PATH>"
      然后使用读取工具处理每张提取的图片——你可以识别其中的图表、公式、图形,并读取图片中的文本。
    结合文本和图片信息以全面理解整个幻灯片内容。
  • Markdown / 文本文件:直接读取
  • 图片(PNG/JPG):直接读取——你可以查看图片,提取其中的图表、公式、表格
在读取过程中,构建关键概念、定义、定理、公式、算法和示例的思维导图。优先处理
exam_focus
主题。

Step 2.2 — Read template and example

步骤2.2 — 读取模板和示例

Read these for reference:
  • ${CLAUDE_SKILL_DIR}/templates/cheatsheet_base.tex
  • ${CLAUDE_SKILL_DIR}/examples/sample_output.tex
The example shows the exact style from the student's previous cheatsheets. Match this style precisely.
读取以下文件作为参考:
  • ${CLAUDE_SKILL_DIR}/templates/cheatsheet_base.tex
  • ${CLAUDE_SKILL_DIR}/examples/sample_output.tex
示例展示了学生之前制作的cheatsheet的精确样式,请严格匹配该样式。

Step 2.3 — Generate cheatsheet.tex

步骤2.3 — 生成cheatsheet.tex

CRITICAL: Read the config values from
.cheatsheet_config.json
and apply them exactly. Do NOT use hardcoded defaults. Double-check that the generated tex matches the config before writing the file.
Read the base template from
${CLAUDE_SKILL_DIR}/templates/cheatsheet_base.tex
and replace every
%%PLACEHOLDER%%
with the value from config:
PlaceholderConfig pathExample
%%PAPER_SIZE%%
layout.paper_size
letterpaper
%%MARGIN%%
layout.margin_mm
+
mm
4mm
%%FONT_FAMILY%%
layout.font_family
Verdana
%%FONT_SIZE%%
layout.font_size_pt
+
pt
6pt
%%LINE_HEIGHT%%
same as font size
6pt
%%COLUMNS%%
layout.columns
5
%%COLOR_DEFINITIONS%%
look up
colors.scheme
below
Ocean block
%%CONTENT%%
generated content...
Color schemes:
Classic (default — matches the student's previous cheatsheets):
latex
\definecolor{sectionblue}{RGB}{0,51,102}
\definecolor{conceptcyan}{RGB}{0,139,139}
\definecolor{processpurple}{RGB}{128,0,128}
\definecolor{categorygreen}{RGB}{0,128,0}
\definecolor{highlightyellow}{RGB}{255,255,150}
Ocean:
latex
\definecolor{sectionblue}{RGB}{21,101,192}
\definecolor{conceptcyan}{RGB}{0,151,167}
\definecolor{processpurple}{RGB}{40,53,147}
\definecolor{categorygreen}{RGB}{0,131,143}
\definecolor{highlightyellow}{RGB}{255,255,150}
Forest:
latex
\definecolor{sectionblue}{RGB}{46,125,50}
\definecolor{conceptcyan}{RGB}{0,105,92}
\definecolor{processpurple}{RGB}{78,52,46}
\definecolor{categorygreen}{RGB}{51,105,30}
\definecolor{highlightyellow}{RGB}{255,255,150}
Sunset:
latex
\definecolor{sectionblue}{RGB}{230,81,0}
\definecolor{conceptcyan}{RGB}{191,54,12}
\definecolor{processpurple}{RGB}{136,14,79}
\definecolor{categorygreen}{RGB}{245,127,23}
\definecolor{highlightyellow}{RGB}{255,255,150}
Mono:
latex
\definecolor{sectionblue}{RGB}{55,71,79}
\definecolor{conceptcyan}{RGB}{84,110,122}
\definecolor{processpurple}{RGB}{69,90,100}
\definecolor{categorygreen}{RGB}{96,125,139}
\definecolor{highlightyellow}{RGB}{255,255,150}
重要提示:读取
.cheatsheet_config.json
中的配置值并严格应用,请勿使用硬编码默认值。在写入文件前,请仔细检查生成的tex是否与配置一致。
读取
${CLAUDE_SKILL_DIR}/templates/cheatsheet_base.tex
中的基础模板,将每个
%%PLACEHOLDER%%
替换为配置中的对应值:
占位符配置路径示例
%%PAPER_SIZE%%
layout.paper_size
letterpaper
%%MARGIN%%
layout.margin_mm
+
mm
4mm
%%FONT_FAMILY%%
layout.font_family
Verdana
%%FONT_SIZE%%
layout.font_size_pt
+
pt
6pt
%%LINE_HEIGHT%%
与字体大小相同
6pt
%%COLUMNS%%
layout.columns
5
%%COLOR_DEFINITIONS%%
参考下方
colors.scheme
Ocean块
%%CONTENT%%
生成的内容...
配色方案:
经典(默认——匹配学生之前的cheatsheet):
latex
\definecolor{sectionblue}{RGB}{0,51,102}
\definecolor{conceptcyan}{RGB}{0,139,139}
\definecolor{processpurple}{RGB}{128,0,128}
\definecolor{categorygreen}{RGB}{0,128,0}
\definecolor{highlightyellow}{RGB}{255,255,150}
Ocean:
latex
\definecolor{sectionblue}{RGB}{21,101,192}
\definecolor{conceptcyan}{RGB}{0,151,167}
\definecolor{processpurple}{RGB}{40,53,147}
\definecolor{categorygreen}{RGB}{0,131,143}
\definecolor{highlightyellow}{RGB}{255,255,150}
Forest:
latex
\definecolor{sectionblue}{RGB}{46,125,50}
\definecolor{conceptcyan}{RGB}{0,105,92}
\definecolor{processpurple}{RGB}{78,52,46}
\definecolor{categorygreen}{RGB}{51,105,30}
\definecolor{highlightyellow}{RGB}{255,255,150}
Sunset:
latex
\definecolor{sectionblue}{RGB}{230,81,0}
\definecolor{conceptcyan}{RGB}{191,54,12}
\definecolor{processpurple}{RGB}{136,14,79}
\definecolor{categorygreen}{RGB}{245,127,23}
\definecolor{highlightyellow}{RGB}{255,255,150}
Mono:
latex
\definecolor{sectionblue}{RGB}{55,71,79}
\definecolor{conceptcyan}{RGB}{84,110,122}
\definecolor{processpurple}{RGB}{69,90,100}
\definecolor{categorygreen}{RGB}{96,125,139}
\definecolor{highlightyellow}{RGB}{255,255,150}

Content generation rules — FOLLOW STRICTLY

内容生成规则——严格遵守

Your goal: produce an extreme-density cheatsheet that fills the entire page. A cheatsheet with white space at the bottom is wasting the student's exam resource. Write as much relevant content as physically possible.
  1. Use color-coded commands for everything:
    • \concept{term}
      — cyan, for key definitions and concepts
    • \process{term}
      — purple, for process names, algorithms, procedures
    • \category{term}
      — green, for classification labels, types, categories
    • \important{text}
      — yellow highlight, for critical formulas and must-know facts
    • Section titles (
      \section{}
      ) automatically render in deep blue
  2. Extreme density formatting:
    • Use
      \\
      for line breaks, NOT
      \par
      or blank lines
    • Lists:
      \begin{itemize}...\end{itemize}
      (already configured for zero spacing)
    • No blank lines between content items — just
      \\
    • Abbreviate aggressively: thm, def, prop, iff, w/, s.t., wrt, WLOG, etc.
    • Section titles: ALL CAPS, 3-5 words max
  3. Formulas — prevent column overflow:
    • Inline
      $...$
      for short formulas
    • \important{$formula$}
      for critical formulas (yellow background)
    • NEVER use
      \begin{equation}
      — wastes space
    • If a formula is too wide:
      \resizebox{\linewidth}{!}{$...$}
    • \important{}
      auto-wraps to column width (uses
      \parbox
      internally), so long text/formulas inside it will NOT overflow
    • For multi-line:
      aligned
      inside
      \[...\]
  4. Tables: minimal padding:
    \begin{tabular}{@{}ll@{}}
    — zero extra padding
  5. Theorems: write them out COMPLETELY. Don't abbreviate theorem statements. Use
    \important{}
    to highlight the theorem.
  6. Detail level (from config):
    • concise
      : bullet points and formulas only, no prose
    • moderate
      : 1-2 sentence explanations, include intuition
    • detailed
      : derivation steps, edge cases, worked examples
  7. Content toggles:
    • include_proofs
      : write proof sketches
    • include_examples
      : add concrete examples after definitions
    • include_derivations
      : show derivation steps
  8. Organize by topic hierarchy, NOT by source file order. Group related concepts.
    exam_focus
    topics get the most space.
  9. Fill the page completely. Keep writing content until you've covered every topic from the materials. If there's still space, add more examples, edge cases, or related concepts.
  10. This compiles with XeLaTeX (because of
    fontspec
    ). Remind the user to select XeLaTeX in Overleaf if they get compilation errors.
Write the output to
<WORKDIR>/output/cheatsheet.tex
.

你的目标:生成极致密度的cheatsheet,填满整个页面。底部留有空白的cheatsheet是在浪费学生的考试资源。尽可能多地写入相关内容。
  1. 所有内容使用带颜色编码的命令:
    • \concept{term}
      — 青色,用于关键定义和概念
    • \process{term}
      — 紫色,用于流程名称、算法、步骤
    • \category{term}
      — 绿色,用于分类标签、类型、类别
    • \important{text}
      — 黄色高亮,用于关键公式和必须掌握的知识点
    • 章节标题(
      \section{}
      )自动渲染为深蓝色
  2. 极致密度格式:
    • 使用
      \\
      换行,不要使用
      \par
      或空白行
    • 列表:
      \begin{itemize}...\end{itemize}
      (已配置为零间距)
    • 内容项之间不要留空白行——仅使用
      \\
    • 积极使用缩写:thm(定理)、def(定义)、prop(性质)、iff(当且仅当)、w/(带有)、s.t.(使得)、wrt(关于)、WLOG(不失一般性)等
    • 章节标题:全部大写,最多3-5个单词
  3. 公式——防止列溢出:
    • 短公式使用行内
      $...$
    • 关键公式使用
      \important{$formula$}
      (黄色背景)
    • 绝不要使用
      \begin{equation}
      ——太浪费空间
    • 如果公式太宽:
      \resizebox{\linewidth}{!}{$...$}
    • \important{}
      会自动换行适配列宽(内部使用
      \parbox
      ),因此其中的长文本/公式不会溢出
    • 多行公式:在
      \[...\]
      内使用
      aligned
  4. 表格:最小内边距:
    \begin{tabular}{@{}ll@{}}
    — 零额外内边距
  5. **定理:完整写出。**不要缩写定理陈述。使用
    \important{}
    高亮定理。
  6. 详细程度(来自配置):
    • concise
      :仅保留项目符号和公式,无散文内容
    • moderate
      :1-2句话解释,包含直觉性说明
    • detailed
      :推导步骤、边界情况、实例演示
  7. 内容开关:
    • include_proofs
      :写入证明概要
    • include_examples
      :在定义后添加具体示例
    • include_derivations
      :展示推导步骤
  8. 按主题层级组织,而非按源文件顺序。将相关概念分组。
    exam_focus
    主题占用最多空间。
  9. **完全填满页面。**持续写入内容,直到覆盖材料中的所有主题。如果还有空间,添加更多示例、边界情况或相关概念。
  10. 本文件可通过XeLaTeX编译(因为使用了
    fontspec
    )。如果用户遇到编译错误,提醒他们在Overleaf中选择XeLaTeX。
将输出写入
<WORKDIR>/output/cheatsheet.tex

Phase 3: Preview & Iterative Editing

阶段3:预览与迭代编辑

Step 3.1 — Launch editor server

步骤3.1 — 启动编辑器服务器

Run in background:
bash
python "${CLAUDE_SKILL_DIR}/scripts/editor_server.py" --texfile "<WORKDIR>/output/cheatsheet.tex"
Capture the port from
EDITOR_SERVER_PORT=<port>
in stdout.
在后台运行:
bash
python "${CLAUDE_SKILL_DIR}/scripts/editor_server.py" --texfile "<WORKDIR>/output/cheatsheet.tex"
从标准输出的
EDITOR_SERVER_PORT=<port>
中获取端口号。

Step 3.2 — Edit loop

步骤3.2 — 编辑循环

Loop:
  1. Wait for request (blocks until user acts):
    bash
    curl -s http://127.0.0.1:<PORT>/wait_for_request
    Use
    timeout: 600000
    .
  2. If
    {"type": "quit"}
    → exit loop. If
    {"type": "request", "text": "...", "images": [...]}
    → process it.
  3. Process: Read current tex, apply the change, write updated tex. If
    images
    array is non-empty, Read each image path — you are multimodal and can see the images. Use the visual information to inform your edits (e.g., user uploads a screenshot of a formula to add).
  4. Post result (use Python to JSON-escape the tex):
    bash
    python -c "
    import json, sys
    with open('<WORKDIR>/output/cheatsheet.tex', 'r', encoding='utf-8') as f:
        tex = f.read()
    payload = json.dumps({'summary': '<SUMMARY>', 'tex': tex})
    sys.stdout.write(payload)
    " | curl -s -X POST http://127.0.0.1:<PORT>/result \
      -H "Content-Type: application/json" -d @-
  5. Loop back to step 1.
循环执行:
  1. 等待请求(阻塞执行直到用户操作):
    bash
    curl -s http://127.0.0.1:<PORT>/wait_for_request
    使用
    timeout: 600000
  2. 如果返回
    {"type": "quit"}
    → 退出循环。 如果返回
    {"type": "request", "text": "...", "images": [...]}
    → 处理请求。
  3. 处理请求:读取当前tex文件,应用修改,写入更新后的tex文件。 如果
    images
    数组非空,读取每个图片路径——你具备多模态能力,可查看图片。使用视觉信息辅助编辑(例如,用户上传公式截图以添加内容)。
  4. 提交结果(使用Python对tex内容进行JSON转义):
    bash
    python -c "
    import json, sys
    with open('<WORKDIR>/output/cheatsheet.tex', 'r', encoding='utf-8') as f:
        tex = f.read()
    payload = json.dumps({'summary': '<SUMMARY>', 'tex': tex})
    sys.stdout.write(payload)
    " | curl -s -X POST http://127.0.0.1:<PORT>/result \
      -H "Content-Type: application/json" -d @-
  5. 返回步骤1循环。

Step 3.3 — Cleanup & Done

步骤3.3 — 清理与完成

Remove all temporary directories created during generation:
bash
rm -rf "<WORKDIR>/output/.rendered" "<WORKDIR>/output/.uploads" "<WORKDIR>/output/.converted"
Also remove any extraction folders (
*_media/
and
*_pages/
):
bash
rm -rf <WORKDIR>/*_media <WORKDIR>/*_pages
Tell the user:
Your cheatsheet is ready at
output/cheatsheet.tex
. Compile with XeLaTeX in Overleaf. Good luck on your exam!
删除生成过程中创建的所有临时目录:
bash
rm -rf "<WORKDIR>/output/.rendered" "<WORKDIR>/output/.uploads" "<WORKDIR>/output/.converted"
同时删除所有提取文件夹(
*_media/
*_pages/
):
bash
rm -rf <WORKDIR>/*_media <WORKDIR>/*_pages
告知用户:
你的cheatsheet已生成,路径为
output/cheatsheet.tex
。请在Overleaf中使用XeLaTeX编译。祝你考试顺利!