Typst & LaTeX Compiler

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

Safety Notice

This listing is from the official public ClawHub registry. Review SKILL.md and referenced scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "Typst & LaTeX Compiler" with this command: npx skills add gregm711/typetex

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

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

Olares Shared (olares-cli foundation)

Shared olares-cli foundation: profile model, first-time login (profile login with password + TOTP), bootstrapping a profile from an existing refresh token (p...

Registry SourceRecently Updated
Coding

Mistral Mcp Openclaw

Configure OpenClaw to use the community mistral-mcp stdio server for Mistral OCR, Codestral FIM, Voxtral audio, durable workflows, moderation, classification...

Registry SourceRecently Updated
651swih
Coding

mongolian-llm

【强制使用/零泄漏】任何请求涉及中文、传统蒙古文、西里尔蒙古文之间的翻译,蒙古语/蒙文对话,要求用蒙文输出,或输入包含传统蒙古文字符(Unicode U+1800–U+18AF)时,必须先读取本 SKILL.md 并按本文 API 流程执行;禁止凭模型自身语言知识直接翻译、改写或回答。调用成功后的可见最终回复必须...

Registry SourceRecently Updated
2690knixie
Coding

Olares Settings (olares-cli settings)

olares-cli settings command tree: profile-based reads of every section the SPA's Settings page exposes (https://docs.olares.com/manual/olares/settings/) plus...

Registry SourceRecently Updated