运行时依赖
安装命令
点击复制技能文档
Paper Bilingual 将PDF论文转换为中英双语Markdown,保留原文格式和图片,逐段提供中文翻译。
触发条件 用户要求以下操作时使用此skill: "翻译这篇论文" "把PDF转成双语MD" "论文中英对照" "下载论文转Markdown带翻译" 提供PDF URL并要求翻译
输入 支持两种输入方式: URL输入:PDF的下载链接(http/https开头) 本地路径:本地PDF文件的绝对或相对路径
处理流程 步骤1:下载PDF 如果是URL,使用PowerShell下载: Invoke-WebRequest -Uri "URL" -OutFile "$env:TEMP\paper.pdf" 如果是本地路径,直接使用
步骤2:PDF转Markdown 使用Python + PyMuPDF将PDF转为Markdown并提取图片:
import fitz import os from PIL import Imagepdf_path = "paper.pdf" images_dir = "images" figures_dir = "figures" os.makedirs(images_dir, exist_ok=True) os.makedirs(figures_dir, exist_ok=True)
doc = fitz.open(pdf_path) pages = [] for page_num, page in enumerate(doc): # 提取文本 text = page.get_text("text") # 提取图片 images = [] for img_index, img in enumerate(page.get_images()): xref = img[0] pix = fitz.Pixmap(doc, xref) if pix.n - pix.alpha > 0: # 跳过透明图片 img_name = f"page{page_num + 1}_img{img_index}.png" pix.save(os.path.join(images_dir, img_name)) images.append(img_name) pix = None pages.append({'text': text, 'images': images})
步骤3:提取完整图表(推荐方法) 使用整页渲染+坐标裁剪提取完整图表:
import fitz from PIL import Imagepdf_path = "paper.pdf" OUTPUT_DIR = "figures" os.makedirs(OUTPUT_DIR, exist_ok=True)
doc = fitz.open(pdf_path) fig_count = 0 for page_num in range(len(doc)): page = doc[page_num] # 2x缩放渲染页面为高清图片 pix = page.get_pixmap(matrix=fitz.Matrix(2, 2)) img = Image.frombytes('RGB', [pix.width, pix.height], pix.samples) # 获取页面上的图片对象和位置 images = page.get_images() for img_index, img_info in enumerate(images): xref = img_info[0] rects = page.get_image_rects(xref) for rect in rects: # 缩放坐标 (2x) x0 = max(0, int(rect.x0 2) - 20) y0 = max(0, int(rect.y0 2) - 20) x1 = min(pix.width, int(rect.x1 2) + 20) y1 = min(pix.height, int(rect.y1 2) + 20) # 过滤太小的图片碎片 if x1 - x0 < 80 or y1 - y0 < 80: continue # 裁剪完整图表 cropped = img.crop((x0, y0, x1, y1)) fig_name = f'fig_p{page_num+1}_{img_index+1}.png' cropped.save(os.path.join(OUTPUT_DIR, fig_name)) fig_count += 1 print(f"Extracted {fig_count} figures")
关键点: PDF里的图表可能被拆成多个小图片块(tiles)压缩 直接提取会得到碎片,需要用坐标裁剪方法 先渲染整页,再按图片坐标裁剪,确保图表完整
步骤4:翻译并生成双语MD 输出目录结构: memory/paper-bilingual/ └── YYYY-MM-DD-paper-name/ ├── index.md # 双语Markdown ├── images/ # 整页截图(可选) └── figures/ # 裁剪后的图表
输出格式: # 主标题 中文主标题
Section 1
中文标题 原文段落... 中文翻译段落... !Figure 1 原文段落... 中文翻译段落...规则: 主标题(#):英文后换行加中文 二级标题(##):英文后换行加中文 普通段落:原文后直接加翻译 图片:使用裁剪后的图表 figures/
步骤5:翻译实现 使用当前会话的LLM翻译,逐段调用: 将以下英文翻译成中文,保持自然段落格式: [段落内容]
步骤6:保存输出 根据PDF文件名或URL生成输出目录名 保存到:memory/paper-bilingual/YYYY-MM-DD-[论文名]/ 清理临时文件
核心原则 每篇论文一个文件夹:避免不同论文文件冲突 原文完全保留:图片、代码、公式、表格等与源文件完全一致 逐段翻译:每段正文后插入该段的中文翻译 标题翻译:所有级别的标题都需要翻译 格式一致:翻译采用与原文相同的格式 完整图表:使用坐标裁剪方法提取完整图表,避免碎片
依赖 Python 3.8+ PyMuPDF (pip install pymupdf) Pillow (pip install pillow) LLM翻译(当前会话)
错误处理 URL无效:提示用户检查链接 PDF加密:提示需要解密 翻译失败:跳过该段,保留原文