| Crates.io | rusttex |
| lib.rs | rusttex |
| version | 0.1.2 |
| created_at | 2025-04-17 13:42:24.081765+00 |
| updated_at | 2025-04-17 15:58:59.023208+00 |
| description | A Rust library for programmatically generating LaTeX documents |
| homepage | |
| repository | https://github.com/PiotrekPKP/rusttex |
| max_upload_size | |
| id | 1637739 |
| size | 59,496 |
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.
Add the following to your Cargo.toml:
[dependencies]
rusttex = "0.1.2"
Here are some examples of how to use RustTeX to generate LaTeX documents.
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}
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}
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}
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}
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}
Contributions are welcome! Feel free to open issues or submit pull requests to improve RustTeX.