Skip to content

jakobjpeters/Typstry.jl

Repository files navigation

Typstry.jl

Documentation Stable Documentation Development

Continuous Integration Workflow Documentation Workflow

Codecov Downloads Per Month Dependents

Introduction

Typstry.jl is the interface to convert the computational power of Julia into beautifully formatted Typst documents.

What is Typst?

Typst is an open-source and relatively new typesetting system (written in Rust 🦀🚀), designed to improve upon the performance and usability of LaTeX. See also the Typst repository and documentation for examples and how to get started.

Installation

julia> using Pkg: add

julia> add("Typstry")

julia> using Typstry

Showcase

julia> show(stdout, "text/typst", Typst([true 1; 1.0 [Any[true 1; 1.0 nothing]]]))
$mat(
  "true", 1;
  1.0, mat(
    "true", 1;
    1.0, #none
  )
)$

julia> TypstString(1 // 2; block = true)
typst"$ 1 / 2 $"

julia> typst"$ \(1 + 2im; mode = math) $"
typst"$ (1 + 2i) $"

julia> TypstCommand(["help"])
typst`help`

julia> typst`compile input.typ output.pdf`
typst`compile input.typ output.pdf`

julia> render(1:4);

Features

Strings

  • Print Julia values in Typst format
    • Specify Julia settings and Typst parameters
    • Implement formatting for custom types
  • Construct Typst strings
    • Interpolate formatted values

Commands

  • Construct Typst commands
  • Render documents using the Typst compiler
    • Display in IJulia.jl, Pluto.jl, and QuartoRunner.jl notebooks
    • Use the JuliaMono typeface

Planned

  • Seperate the choice of Typst representation from the mode
  • Default auto::Mode?
    • Automatically determine the Typst syntactic context
    • Use a tree-sitter grammar or jll package
  • Implement Typst formatting for more types
    • Base
      • AbstractDict
      • AbstractIrrational
      • AbstractSet
      • Enum
        • Mode
      • Expr
      • Symbol
    • Package extensions
      • Standard Library
        • LinearAlgebra.jl
        • DataFrames.jl
    • Partial Julia to Typst transpilation
      • @typst(a * b) ==
        TypstString(:(a * b)) ==
        TypstString(TypstFunction(*, :a, :b)) ==
        typst"$ a b $"
        

Similar Packages

Typst

Typst and LaTeX

LaTeX