360 Secure SkillHub
360 安全技能中心

easypaper

该 Skill 说明如何安装 EasyPaper Python SDK 与 LaTeX/Poppler 工具链,并通过 generate 或 generate_stream 从元数据生成结构化论文,支持会场格式、流式进度和最终 PDF 选择。

pinkgranite
pinkgranite
热度 80.56
最近更新 2026-05-11 17:34:16
分类:创作依赖:代码执行 / 读写文件 / 第三方 API应用场景:研究 / 报告撰写 / 模板

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add easypaper
Metadata
name
easypaper
description
Generate academic papers from metadata using EasyPaper Python SDK. Use when user wants to create structured LaTeX papers programmatically. References the EasyPaper repository, especially plugins/easypaper/ directory for detailed workflows, commands, and skills.

EasyPaper Skill

Generate structured academic papers from metadata using the EasyPaper multi-agent system via Python SDK.

Repository

Source: https://github.com/PinkGranite/EasyPaper

Primary Reference Directory: plugins/easypaper/

This directory contains comprehensive guidance for OpenClaw agents:

  • Commands: Workflow execution contracts in plugins/easypaper/commands/
  • Skills: Domain-specific skills in plugins/easypaper/skills/
  • Plugin Documentation: Setup and usage in plugins/easypaper/.claude-plugin/README.md

Installation

Python Package

Important: Install EasyPaper in an isolated environment (recommended for dependency management).

Using venv:

python -m venv easypaper-env
source easypaper-env/bin/activate  # On Windows: easypaper-env\Scripts\activate
pip install easypaper

Using conda:

conda create -n easypaper python=3.11
conda activate easypaper
pip install easypaper

Direct install (not recommended):

pip install easypaper

LaTeX Toolchain

EasyPaper requires LaTeX toolchain (pdflatex + bibtex) for PDF compilation. Install based on your system:

macOS:

# Using Homebrew (recommended)
brew install --cask mactex

# Or minimal installation
brew install basictex
sudo tlmgr update --self
sudo tlmgr install collection-basic collection-latex collection-bibtexextra

Linux (Ubuntu/Debian):

sudo apt-get update
sudo apt-get install texlive-latex-base texlive-bibtex-extra texlive-latex-extra

Linux (Fedora/RHEL):

sudo dnf install texlive-scheme-basic texlive-bibtex texlive-latex

Windows:

  • Download and install MiKTeX (full installer recommended)
  • Or use TeX Live
  • Ensure pdflatex and bibtex are in your PATH

Poppler (for PDF-to-image conversion)

macOS:

brew install poppler

Linux (Ubuntu/Debian):

sudo apt-get install poppler-utils

Linux (Fedora/RHEL):

sudo dnf install poppler-utils

Windows:

  • Download from Poppler for Windows
  • Extract and add bin directory to PATH
  • Or use conda: conda install -c conda-forge poppler

Quick Start

Recommended workflow: Prepare a metadata.json (see examples/meta.json), parse it as PaperGenerationRequest, then run with to_metadata() + to_generate_options().

Typesetter behavior (SDK + Server): PDF compilation prefers in-process Typesetter when available (SDK self-contained). If no local peer is available, EasyPaper falls back to the HTTP Typesetter endpoint (AGENTSYS_SELF_URL).

Load from file and generate

import asyncio
from pathlib import Path
from easypaper import EasyPaper, PaperGenerationRequest

async def main():
    ep = EasyPaper(config_path=str(Path("configs/dev.yaml").resolve()))
    
    request = PaperGenerationRequest.model_validate_json_file("metadata.json")
    metadata = request.to_metadata()
    options = request.to_generate_options()

    result = await ep.generate(metadata, **options)
    print(f"Status: {result.status}, Words: {result.total_word_count}")

asyncio.run(main())

Inline metadata

import asyncio
from easypaper import EasyPaper, PaperMetaData

async def main():
    ep = EasyPaper(config_path="configs/dev.yaml")
    
    metadata = PaperMetaData(
        title="My Paper Title",
        idea_hypothesis="...",
        method="...",
        data="...",
        experiments="...",
        references=["@article{...}"],
    )
    
    result = await ep.generate(metadata)
    print(f"Status: {result.status}, Words: {result.total_word_count}")

asyncio.run(main())

Key Reference Files

When working with EasyPaper, refer to these files in the repository:

Commands (Workflow Execution)

Skills (Domain Guidance)

Configuration and Examples

PaperMetaData Fields

Required:

  • title, idea_hypothesis, method, data, experiments, references

Optional:

  • style_guide (venue name), target_pages, template_path, figures, tables, code_repository, export_prompt_traces

See examples/meta.json and economist_example/metadata.json for full examples. Treat examples/meta.json as a full PaperGenerationRequest sample: use request = PaperGenerationRequest.model_validate_json_file(...), then request.to_metadata() and request.to_generate_options() for SDK generation.

Final PDF Selection

When review loop is enabled, multiple iteration PDFs can exist. Always report the final artifact using this priority:

  1. result.pdf_path (authoritative final output)
  2. Under result.output_path: iteration_*_final/**/*.pdf
  3. Under result.output_path: latest iteration_* directory PDF
  4. result.output_path/paper.pdf (last fallback)

If no PDF is found, report that final PDF is unavailable and include recent compile errors.

Streaming Generation

from easypaper import EasyPaper, PaperMetaData, EventType

async for event in ep.generate_stream(metadata):
    if event.event_type == EventType.PHASE_START:
        print(f"▶ [{event.phase}] {event.message}")
    elif event.event_type == EventType.COMPLETE:
        result = event.data["result"]
        print(f"Done! {result['total_word_count']} words")

When to Use This Skill

Use this skill when:

  • User wants to generate academic papers programmatically
  • User needs to understand EasyPaper SDK usage
  • User asks about paper generation workflows
  • User needs venue-specific formatting guidance

For detailed workflows and execution contracts, refer to files in plugins/easypaper/ directory.