#latex #document #environment #tex #document-class #content-builder

rusttex

A Rust library for programmatically generating LaTeX documents

3 releases

Uses new Rust 2024

new 0.1.2 Apr 17, 2025
0.1.1 Apr 17, 2025
0.1.0 Apr 17, 2025

#353 in Math

Download history 379/week @ 2025-04-14

379 downloads per month

MIT license

59KB
649 lines

RustTeX

RustTeX is a Rust library for programmatically generating LaTeX documents. It provides a builder-style API to create LaTeX content with ease, allowing you to focus on the structure and content of your document without worrying about syntax errors.

Features

  • Generate LaTeX documents programmatically.
  • Support for document classes, packages, sections, formatting, and more.
  • Builder-style API for intuitive usage.
  • Easily extendable with custom LaTeX commands.

Installation

Add the following to your Cargo.toml:

[dependencies]
rusttex = "0.1.2"

Usage

Here are some examples of how to use RustTeX to generate LaTeX documents.

Example 1: Basic Document

use rusttex::{ContentBuilder, DocumentClass};

let mut builder = ContentBuilder::new();
builder.set_document_class(DocumentClass::Article, options![]);
builder.use_package("amsmath", options![]);
builder.begin_document();
builder.title("My First Document");
builder.author("John Doe");
builder.maketitle();
builder.section("Introduction");
builder.add_literal("This is the introduction.");
builder.end_document();

println!("{}", builder.build_document());

Generated LaTeX:

\documentclass{article}
\usepackage{amsmath}
\begin{document}
\title{My First Document}
\author{John Doe}
\maketitle
\section{Introduction}
This is the introduction.
\end{document}

Example 2: Formatting Text

use rusttex::ContentBuilder;

let mut builder = ContentBuilder::new();
builder.begin_document();
builder.add_literal("Here is some ");
builder.text_bold("bold text");
builder.add_literal(", ");
builder.text_italic("italic text");
builder.add_literal(", and ");
builder.text_underline("underlined text");
builder.add_literal(".");
builder.end_document();

println!("{}", builder.build_document());

Generated LaTeX:

\begin{document}
Here is some \textbf{bold text}, \textit{italic text}, and \underline{underlined text}.
\end{document}

Example 3: Adding Sections and Subsections

use rusttex::{ContentBuilder, DocumentClass};

let mut builder = ContentBuilder::new();
builder.set_document_class(DocumentClass::Report, vec![]);
builder.begin_document();
builder.section("Main Section");
builder.subsection("Subsection 1");
builder.add_literal("Content for subsection 1.");
builder.subsection("Subsection 2");
builder.add_literal("Content for subsection 2.");
builder.end_document();

println!("{}", builder.build_document());

Generated LaTeX:

\documentclass{report}
\begin{document}
\section{Main Section}
\subsection{Subsection 1}
Content for subsection 1.
\subsection{Subsection 2}
Content for subsection 2.
\end{document}

Example 4: Using Custom Environments

use rusttex::{ContentBuilder, Environment};

let mut builder = ContentBuilder::new();
builder.begin_document();
builder.env(Environment::Center, "This text is centered.");
builder.env(Environment::Quote, "This is a quoted block.");
builder.end_document();

println!("{}", builder.build_document());

Generated LaTeX:

\begin{document}
\begin{center}
This text is centered.
\end{center}
\begin{quote}
This is a quoted block.
\end{quote}
\end{document}

Example 5: Adding Labels and References

use rusttex::ContentBuilder;

let mut builder = ContentBuilder::new();
builder.begin_document();
builder.section("Introduction");
builder.label("sec:intro");
builder.add_literal("See Section \\ref{sec:intro} for more details.");
builder.end_document();

println!("{}", builder.build_document());

Generated LaTeX:

\begin{document}
\section{Introduction}
\label{sec:intro}
See Section \ref{sec:intro} for more details.
\end{document}

Contributing

Contributions are welcome! Feel free to open issues or submit pull requests to improve RustTeX.

No runtime deps