Skip to main content

Declarative Typst in Python with Pandas data frame support.

Project description

Pypst

Declarative Typst in Python with Pandas data frame support.

Pypst helps you dynamically generate Typst code directly in Python. No manual string manipulation required. It has two major use cases:

  • Generating full Typst documents to be rendered as PDFs
  • Generating and styling Typst tables from Pandas data frames to be included in another Typst document

Pypst produces human-readable Typst code that you can modify and extend. It will not compile Typst code for you, but you can either use the Typst compiler to do so in the command line or install the Typst Python package.

Example script and output

Installation

Pypst is available on PyPI and can be installed via pip.

pip install pypst

To use the table functionality, pandas is needed. Install Pypsts like this instead:

pip install pypst[pandas]

Usage

Pypst contains classes that represent Typst elements. You can create a Typst document by instantiating these classes and nesting them as needed.

>>> import pypst
>>> heading = pypst.Heading("My Heading", level=1)
>>> itemize = pypst.Itemize(["First item", "Second item", "Third item"])

Each of these classes has a render method that returns the Typst code as a string.

>>> print(heading.render())
= My Heading
>>> print(itemize.render())
- First item
- Second item
- Third item

If you want to combine multiple elements into a single document, you can use the Document class. You can even add imports for other Typst files or packages.

>>> document = pypst.Document([heading, itemize])
>>> document.add_import("utils.typ")
>>> print(document.render())
#import "utils.typ"
<BLANKLINE>
= My Heading
<BLANKLINE>
- First item
- Second item
- Third item

The output of the render method can be written to a .typ file for compilation. The documentation contains more extensive tutorials on generating documents and generating tables from Pandas data frames.

Limitations

Pypst is not a Typst compiler. It doesn't check for syntax errors or compile Typst code into PDFs. Pypst interprets any string as a Typst literal, so stroke = "1pt" will be rendered as stroke: 1pt. If you want to pass a string literal, you need to wrap it in quotes, for example, caption = '"My Caption"'. When Pypst encounters a string wrapped in quotes without need, it will automatically remove them. For a content block, you can wrap the string in brackets instead, for example, caption = "[My content]".

Roadmap

If there is time and people are interested, I would like to add the following features:

  • Complete table attributes (for example, fill is missing)
  • Support automatic formating for common workflows, like automatically merging multi-level columns with mean and standard deviation
  • Add more Typst elements (like headings or lists) to make building more complex documents easier

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pypst-0.7.0.tar.gz (19.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pypst-0.7.0-py3-none-any.whl (22.4 kB view details)

Uploaded Python 3

File details

Details for the file pypst-0.7.0.tar.gz.

File metadata

  • Download URL: pypst-0.7.0.tar.gz
  • Upload date:
  • Size: 19.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.7.1 CPython/3.12.3 Linux/6.11.0-1018-azure

File hashes

Hashes for pypst-0.7.0.tar.gz
Algorithm Hash digest
SHA256 68ebb8d122d30931c65d030353b5a4de5413156ece2d36dec8ee066df74dc3ed
MD5 bdbe9a0b2bbb789357f3adf6ef1b0190
BLAKE2b-256 8765b5e29dff4d7f9c629c82d676ff03916721b33498f6f6a3133bf6bff75e9c

See more details on using hashes here.

File details

Details for the file pypst-0.7.0-py3-none-any.whl.

File metadata

  • Download URL: pypst-0.7.0-py3-none-any.whl
  • Upload date:
  • Size: 22.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.7.1 CPython/3.12.3 Linux/6.11.0-1018-azure

File hashes

Hashes for pypst-0.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c1173243c9ec489c5896109be896b3da02493b67e785388677ca8b09e907125c
MD5 990ac8946e99f8cfe538deb99b820666
BLAKE2b-256 0f3f10ba9b9c7eb83ddb360c24b783d4daa653aa5aa1fe9630b869e4a37bcfdb

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page