AGENT SKILL

Typst & LaTeX Compiler

Compile Typst and LaTeX documents to PDF via API. Send source code, get back a PDF.

适用职业开发工程师
使用场景文档处理
License 许可
MIT
最近更新
2026-08-23
Stars
★ 1
Forks
0

01 前言 Front Matter

name
Typst & LaTeX Compiler
metadata
{ "clawdbot": { "config": { "stateDirs": [], "requiredEnv": [] } } }
description
Compile Typst and LaTeX documents to PDF via API. Send source code, get back a PDF.

02 资源文件 4

03 SKILL.md 正文

Typst & LaTeX Compiler

Compile Typst (.typ) and LaTeX (.tex) documents to PDF using the TypeTex compilation API.

API Endpoint

Base URL: https://studio-intrinsic--typetex-compile-app.modal.run

Endpoints

Compile Typst

POST /public/compile/typst
Content-Type: application/json

Request Body:

{
  "content": "#set page(paper: \"a4\")\n\n= Hello World\n\nThis is a Typst document.",
  "main_filename": "main.typ",
  "auxiliary_files": {}
}

Response (Success):

{
  "success": true,
  "pdf_base64": "JVBERi0xLjQK..."
}

Response (Failure):

{
  "success": false,
  "error": "error: file not found: missing.typ"
}

Compile LaTeX

POST /public/compile/latex
Content-Type: application/json

Request Body:

{
  "content": "\\documentclass{article}\n\\begin{document}\nHello World\n\\end{document}",
  "main_filename": "main.tex",
  "auxiliary_files": {}
}

Response (Success):

{
  "success": true,
  "pdf_base64": "JVBERi0xLjQK..."
}

Response (Failure):

{
  "success": false,
  "error": "! LaTeX Error: Missing \\begin{document}.",
  "log_output": "This is pdfTeX..."
}

Health Check

GET /public/compile/health

Returns {"status": "ok", "service": "public-compile"} if the service is running.

Usage Examples

Simple Typst Document

import requests
import base64

response = requests.post(
    "https://studio-intrinsic--typetex-compile-app.modal.run/public/compile/typst",
    json={
        "content": """
#set page(paper: "a4", margin: 2cm)
#set text(font: "New Computer Modern", size: 11pt)

= My Document

This is a paragraph with *bold* and _italic_ text.

== Section 1

- Item 1
- Item 2
- Item 3
""",
        "main_filename": "main.typ"
    }
)

result = response.json()
if result["success"]:
    pdf_bytes = base64.b64decode(result["pdf_base64"])
    with open("output.pdf", "wb") as f:
        f.write(pdf_bytes)
    print("PDF saved to output.pdf")
else:
    print(f"Compilation failed: {result['error']}")

Simple LaTeX Document

import requests
import base64

response = requests.post(
    "https://studio-intrinsic--typetex-compile-app.modal.run/public/compile/latex",
    json={
        "content": r"""
\documentclass[11pt]{article}
\usepackage[margin=1in]{geometry}
\usepackage{amsmath}

\title{My Document}
\author{Author Name}

\begin{document}
\maketitle

\section{Introduction}

This is a LaTeX document with math: $E = mc^2$

\end{document}
""",
        "main_filename": "main.tex"
    }
)

result = response.json()
if result["success"]:
    pdf_bytes = base64.b64decode(result["pdf_base64"])
    with open("output.pdf", "wb") as f:
        f.write(pdf_bytes)
else:
    print(f"Compilation failed: {result['error']}")
    if result.get("log_output"):
        print(f"Log: {result['log_output']}")

Multi-File Project (Typst)

import requests
import base64

response = requests.post(
    "https://studio-intrinsic--typetex-compile-app.modal.run/public/compile/typst",
    json={
        "content": """
#import "template.typ": *

#show: project.with(title: "My Report")

= Introduction

#include "chapter1.typ"
""",
        "main_filename": "main.typ",
        "auxiliary_files": {
            "template.typ": """
#let project(title: none, body) = {
  set page(paper: "a4")
  set text(font: "New Computer Modern")

  align(center)[
    #text(size: 24pt, weight: "bold")[#title]
  ]

  body
}
""",
            "chapter1.typ": """
== Chapter 1

This is the first chapter.
"""
        }
    }
)

result = response.json()
if result["success"]:
    pdf_bytes = base64.b64decode(result["pdf_base64"])
    with open("report.pdf", "wb") as f:
        f.write(pdf_bytes)

Including Images

For binary files like images, base64-encode them:

import requests
import base64

# Read and encode an image
with open("figure.png", "rb") as f:
    image_base64 = base64.b64encode(f.read()).decode("utf-8")

response = requests.post(
    "https://studio-intrinsic--typetex-compile-app.modal.run/public/compile/typst",
    json={
        "content": """
#set page(paper: "a4")

= Document with Image

#figure(
  image("figure.png", width: 80%),
  caption: [A sample figure]
)
""",
        "main_filename": "main.typ",
        "auxiliary_files": {
            "figure.png": image_base64
        }
    }
)

Using curl

# Typst compilation
curl -X POST https://studio-intrinsic--typetex-compile-app.modal.run/public/compile/typst \
  -H "Content-Type: application/json" \
  -d '{
    "content": "#set page(paper: \"a4\")\n\n= Hello World\n\nThis is Typst.",
    "main_filename": "main.typ"
  }' | jq -r '.pdf_base64' | base64 -d > output.pdf

# LaTeX compilation
curl -X POST https://studio-intrinsic--typetex-compile-app.modal.run/public/compile/latex \
  -H "Content-Type: application/json" \
  -d '{
    "content": "\\documentclass{article}\n\\begin{document}\nHello World\n\\end{document}",
    "main_filename": "main.tex"
  }' | jq -r '.pdf_base64' | base64 -d > output.pdf

Supported Features

Typst

  • Full Typst language support
  • Multi-file projects with imports
  • Images (PNG, JPG, SVG)
  • Custom fonts (New Computer Modern, etc.)
  • Math equations
  • Tables and figures
  • Bibliography (using Hayagriva format)

LaTeX

  • Full TeX Live distribution via Tectonic
  • Multi-file projects (\input, \include)
  • BibTeX/BibLaTeX bibliography
  • Custom style files (.sty, .cls)
  • All standard packages (amsmath, graphicx, etc.)
  • TikZ/PGFPlots graphics
  • Images (PNG, JPG, PDF, EPS)

Error Handling

When compilation fails, the response includes:

  • success: false
  • error: Human-readable error message
  • log_output (LaTeX only): Full compilation log for debugging

Common errors:

  • Syntax errors: Check your source code for typos
  • Missing files: Ensure all imported/included files are in auxiliary_files
  • Package not found: Most common packages are available; contact support for additions
  • Timeout: Complex documents may timeout after 60 seconds

Rate Limits

  • No authentication required
  • Please be respectful of shared resources
  • For high-volume usage, contact support

Tips for Agents

  1. Always check success before accessing pdf_base64
  2. Parse errors to provide helpful feedback to users
  3. Use minimal documents when testing - complex documents take longer
  4. Cache results if compiling the same content multiple times
  5. Include all dependencies in auxiliary_files for multi-file projects

Related Resources

04 同仓库更多 Skills

kbarbel640-del
kbarbel640-del/skills

crowd-prompting

A marketplace where AI agents improve prompts, system instructions, tool descriptions, and other text-based content with domain expertise from real-world operations — and earn tokens for valuable contributions.

内容创作者
★ 1
kbarbel640-del
kbarbel640-del/skills

dilemm-ai

Compete in DilemmAI, the prisoner's dilemma AI arena at dilemm.ai. Use when an OpenClaw agent wants to create an account, design and submit strategy prompts for their bot, enter matchmaking, analyze historical matches and leaderboards, and iterate on bot strategy. Requires headless browser automation (no API available yet).

Skill与智能体开发
★ 1
kbarbel640-del
kbarbel640-del/skills

arxiv-paper-reviews

Interact with arXiv Crawler API to fetch papers, read reviews, and submit comments. Use when working with arXiv papers, fetching paper lists by date/category/interest, viewing paper details with comments, or submitting paper reviews via API at http://150.158.152.82:8000.

资料检索与研究
★ 1
kbarbel640-del
kbarbel640-del/skills

arxiv-paper-reviews

Interact with arXiv Crawler API to fetch papers, read reviews, and submit comments. Use when working with arXiv papers, fetching paper lists by date/category/interest, viewing paper details with comments, or submitting paper reviews via API at http://150.158.152.82:8000.

资料检索与研究
★ 1
kbarbel640-del
kbarbel640-del/skills

git-summary

Get a quick summary of the current Git repository including status, recent commits, branches, and contributors.

★ 1
kbarbel640-del
kbarbel640-del/skills

agent-constitution

Interact with AgentConstitution governance contracts on Base Sepolia. Check compliance, read rules, log actions, query governance state.

律师与法务Skill与智能体开发
★ 1