| Crates.io | rust-texas |
| lib.rs | rust-texas |
| version | 0.3.6 |
| created_at | 2023-08-12 12:39:31.445717+00 |
| updated_at | 2024-12-28 12:55:54.734631+00 |
| description | Crate to generate latex documents |
| homepage | |
| repository | https://github.com/Abhay478/texas |
| max_upload_size | |
| id | 942720 |
| size | 301,567 |
This crate used to be Texas with a capital T. An issue was raised, and thus I have 'renamed' it the only way I know how. Apologies for any inconvenience. It is now rust-texas.
This crate does not, in any way, even remotely cover the vast variety of things you can do with latex. Instead, it attempts to provide a friendly API for some of the most basic functions. Furthermore, it does not catch most latex errors.
texas is a crate for programmatic latex generation. Its primary intended use it to collate data from multiple sources, (e.g. text files of varying formats, sqlite databases, images, tables, a counter within your program, the network, or hardcoded strings) into a single latex/beamer document, with an increasing number of format options. It attempts to automate data compilation with a latex or pdf target.
More concretely, it is a simple AST for a subset of latex, with the ability to compile down to a latex document.
It's also my first foray into the open-source world, so constructive criticism is welcome and appreciated. https://github.com/Abhay478/texas/issues
texas creates a tree (technically, a nested enum hierarchy) of Components, each of which can be converted to a string. This tree is rooted at the Document, from which all Components are recursively converted into strings and concatenated.
Document, which you populate per your whims and fancies. This can be written to a file like so:let mut q = File::create("file.tex")?;
let doc = document!("book");
write!(q, "{}", doc.to_string())?
Components (including Labels, References, Environments, etc.), Packages, and Commands. They can be created using both functions and macros.Component is an enum, with each variant containing a separate struct. If a component impls the Populate trait, you can fill it with more Components, then install it in the Document like so:let mut p1 = part!("one");
p1.attach(chapter!("c1"))?
.attach(chapter!("c2"))?; // and so on.
p1.attach_vec(vec![chapter!("c3"); 2])?;
doc.new_component(p1);
Commands can be created and installed like so:doc.new_command(Command::new("brak", 1, r"\ensuremath{\left(#1\right)}"));
let mut p1 = section!("one");
p1.attach(command!(doc, "brak", "hello there"))?;
Packages can be created and installed too:doc.new_package(package!("parskip", "parfill"));
Opt, which allows for adding options to a command (like usepackage and documentclass, for now).We have a lot of them.
These are regions in the document.
Support for beamer has been around since 0.3.0. The following components are available:
Well, I haven't added all of them. You can't make your own environments (that's upcoming) but you can use any environment with the Environment struct.
TextType enum for more.&. Can be used in align environments too.\phi, \infty) and stuff (\ensuremath). Refer the BuiltinType enum for more.An as-of-yet unimplemented feature, texas will have a Markdown parser by 0.4.0. Due to inconveniences faced while attempting to adapt the ASTs produced by other parsers, namely in converting them into texas' Component tree, I decided to write another markdown parser.
The parser will read a markdown file and produce a Document.
texas-y, just add use rust_texas::prelude::*;.component.rs and document.rs into multiple files.graphicx and hyperref by default.TextTypes.Opt, namely that it was doing nothing for environments.texas can be used.Populate trait, attach_iter.