rusttex 0.1.2

A Rust library for programmatically generating LaTeX documents
Documentation
  • Coverage
  • 100%
    149 out of 149 items documented61 out of 63 items with examples
  • Size
  • Source code size: 59.01 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 5.53 MB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 13s Average build duration of successful builds.
  • all releases: 10s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • PiotrekPKP/rusttex
    13 1 0
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • PiotrekPKP

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.