The Happenings with TexCreate v3
Mustafif
Posted on January 26, 2023
The latest TexCreate version is v2.2.1 and that was released over 9 months ago. So considering that the transition from TexCreate v1 to 2 was a few months of development, why is this taking so long?
A Focus on Template Modularity
The known flaw I had with the current version with TexCreate is "hard coding" the templates inside the application. For those unaware, TexCreate is a LaTeX project manager that utilizes prebuilt templates to build projects for various needs. In v2 I transitioned to using a native Rust library tex-rs
to build the LaTeX code, but the library wasn't modular itself.
So what do we do? My first focus was building a library I can expand, and that's where the development with texcore
started. After 6 months of development, it is what I consider ready for TexCreate, the latest version at the time of writing is v0.4.10
. The library can be found in crates.io. The interesting new feature in v0.4
is the TexCreate Template feature which provides the template
module with the following type:
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, PartialOrd)]
pub struct Template {
pub name: String,
pub description: String,
pub version: Version,
element_list: RefCell<ElementList<Any>>,
}
Custom Templates?
At the current moment I plan to only have the application use first-party templates I develop, but there are plans to add functionality for custom templates.
How would that work? Well when TexCreate is initialized it will create a directory in $HOME/.texcreate
. The current plan is to keep all templates JSON files there, but what can happen is that inside of the .texcreate
directory we may have the following structure:
.texcreate/
mkproj/
Basic.json
custom/
Foo.json
A sample Template may look like the following:
{
"name": "Basic",
"description": "This is a basic LaTeX document",
"version": {
"major": 1,
"minor": 0,
"patch": 0
},
"element_list": {
"metadata": {
"author": "author",
"date": "date",
"title": "title",
"fontsize": 11,
"doc_class": "article",
"maketitle": true
},
"list": [
{
"value": {
"value": "\\pagenumbering{arabic}",
"type_": "T_Custom",
"level": "Document",
"header_level": null,
"text_type": null,
"list_type": null,
"items": null,
"elements": null
},
"type_": "T_Custom",
"level": "Document"
},
{
"value": {
"value": "\\newpage",
"type_": "T_Custom",
"level": "Document",
"header_level": null,
"text_type": null,
"list_type": null,
"items": null,
"elements": null
},
"type_": "T_Custom",
"level": "Document"
},
{
"value": {
"value": "amsmath",
"type_": "T_Package",
"level": null,
"header_level": null,
"text_type": null,
"list_type": null,
"items": null,
"elements": null
},
"type_": "T_Package",
"level": "Packages"
}
]
}
}
The following Template then would be processed and converted into the following TeX code:
\documentclass[11pt, letterpaper]{article}
\title{title}
\author{author}
\date{date}
\usepackage{amsmath}
\begin{document}
\maketitle
\pagenumbering{arabic}
\newpage
\end{document}
What's Happening Now...
Currently I am developing texcreate-services
which aims to be a suite of applications to manage the templates for TexCreate. This part of the project may not be opensource because it could become a vulnerability to the project and considering its the core function I rather not have that risk. However, I plan to write an application that would help developers create their own custom templates once that functionality is enabled.
This project has a lot of improvements and with that comes a lot of testing and development time. Considering how I always manage to be busy, I suspect that a stable version may be released until sometime in 2024.
Posted on January 26, 2023
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.