39 releases (6 breaking)

0.7.2 Apr 29, 2023
0.6.1 Mar 23, 2023
0.3.3 Dec 6, 2022
0.3.0 Nov 30, 2022
0.1.0 Jul 19, 2022

#661 in Text processing


Used in 4 crates

MIT license

69KB
2K SLoC

TexCore

GitHub Workflow Status Crates.io Lines of code Crates.io GitHub top language

The TexCore library is under the MIT License

TexCore is a library that allows a developer to write LaTeX using native Rust types. We also provide functions to compile the code using a Rust built LaTeX compiler, tectonic.

To add to your project:

[dependencies]
texcore = "0.7"

The Compile Feature

To allow this library to be able to run on Windows systems, I have made the tectonic dependency optional and only available under the compile feature. This means that the function, texcore::compile() and ElementList::compile() are hidden under this feature.

[dependencies]
texcore = { version = "0.7", features = ["compile"] }

The TexCreate Template Feature

To allow easier development with the TexCreate project, I have decided to add the texcreate-templates portion under the texcreate_template feature.

texcore = { version = "0.7", features = ["texcreate_template"] }

The Async Feature

This feature provides asynchronous options using the type, TexAsync which isn't a trait but a generic struct that requires T to implement Tex. The reason of not using a trait is that asynchronous methods in a trait isn't stable yet. Most importantly we get the following functions from the future module:

  • async_latex_string<T: Tex>(t: &T) -> impl Future<Output=String> + Send
  • Element<Any>::async_latex_string()
  • ElementList::async_latex_string()
  • ElementList::async_latex_split_string()
  • ElementList::async_write()
  • ElementList::async_split_write()

Advantages of using the asynchronous writing operations is because they are done so concurrently, and in terms of async_split_write(), the task of writing to each file is done in parallel.

texcore = { version = "0.7", features = ["async"] }

The Parallel Feature

This features utilizes the rayon crate to allow ElementList to contain the following functions:

  • ElementList::par_write()
  • ElementList::par_write_split()
  • ElementList::par_iter()
  • ElementList::par_iter_mut()
texcore = { version = "0.7", features = ["parallel"] }

The Full Feature

To enable all features seen above , you may use the full feature.

texcore = { version = "0.7", features = ["full"] }

Added Modules in 0.7

  • The bundle module provides types to easily add into your document:
    • Add images using the graphicx package under the module, texcore::bundle::graphicx
    • Add mathematical symbols or equations under the module, texcore::bundle::math
  • Be able to add extra parameters to elements using the modify_element() function
    • This is under the texcore::extra_ops module

Read documentation here

Dependencies

~1–16MB
~239K SLoC