اتفاقات با TexCreate نسخه 3

آخرین نسخه TexCreate نسخه 2.2.1 است و بیش از 9 ماه پیش منتشر شد. بنابراین با توجه به اینکه انتقال از TexCreate نسخه 1 به 2 چند ماه توسعه بود، چرا این مدت زمان زیادی طول می کشد؟
تمرکز بر مدولار بودن قالب
نقص شناخته شده ای که در نسخه فعلی با TexCreate داشتم، “کدگذاری سخت” قالب های داخل برنامه است. برای کسانی که نمی دانند، TexCreate یک مدیر پروژه LaTeX است که از قالب های از پیش ساخته شده برای ساخت پروژه ها برای نیازهای مختلف استفاده می کند. در نسخه 2 من به استفاده از کتابخانه بومی Rust تغییر مکان دادم tex-rs
برای ساخت کد LaTeX، اما کتابخانه خود ماژولار نبود.
پس چه کار کنیم؟ اولین تمرکز من ساختن کتابخانه ای بود که بتوانم آن را گسترش دهم، و این جایی است که توسعه با آن texcore
آغاز شده. پس از 6 ماه توسعه، آن چیزی است که من برای TexCreate آماده می دانم، آخرین نسخه در زمان نوشتن v0.4.10
. کتابخانه را می توان در crates.io یافت. ویژگی جدید جالب در v0.4
ویژگی TexCreate Template است که ارائه می دهد template
ماژول با نوع زیر:
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, PartialOrd)]
pub struct Template {
pub name: String,
pub description: String,
pub version: Version,
element_list: RefCell<ElementList<Any>>,
}
قالب های سفارشی؟
در حال حاضر قصد دارم برنامه فقط از قالب های شخص اولی که من توسعه می دهم استفاده کند، اما برنامه هایی برای اضافه کردن قابلیت برای قالب های سفارشی وجود دارد.
چگونه کار می کند؟ خوب وقتی TexCreate مقداردهی اولیه شود، یک دایرکتوری در آن ایجاد می کند $HOME/.texcreate
. برنامه فعلی این است که همه فایلهای JSON قالبها را در آنجا نگه دارد، اما چیزی که میتواند اتفاق بیفتد این است که داخل آن باشد .texcreate
دایرکتوری ممکن است ساختار زیر را داشته باشیم:
.texcreate/
mkproj/
Basic.json
custom/
Foo.json
یک الگوی نمونه ممکن است به شکل زیر باشد:
{
"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"
}
]
}
}
سپس الگوی زیر پردازش می شود و به کد TeX زیر تبدیل می شود:
\documentclass[11pt, letterpaper]{article}
\title{title}
\author{author}
\date{date}
\usepackage{amsmath}
\begin{document}
\maketitle
\pagenumbering{arabic}
\newpage
\end{document}
چی شده…
در حال حاضر در حال توسعه هستم texcreate-services
که قصد دارد مجموعه ای از برنامه های کاربردی برای مدیریت قالب ها برای TexCreate باشد. این بخش از پروژه ممکن است منبع باز نباشد زیرا می تواند به یک آسیب پذیری برای پروژه تبدیل شود و با توجه به عملکرد اصلی آن، من ترجیح می دهم این ریسک را نداشته باشم. با این حال، من قصد دارم برنامه ای بنویسم که به توسعه دهندگان کمک کند پس از فعال شدن این عملکرد، الگوهای سفارشی خود را ایجاد کنند.
این پروژه پیشرفت های زیادی دارد و به همراه آن زمان آزمایش و توسعه زیادی نیز به همراه دارد. با در نظر گرفتن اینکه چطور همیشه سرم شلوغ است، احتمال میدهم یک نسخه پایدار تا زمانی در سال 2024 منتشر شود.