LaTeX का आसान सीखने योग्य विकल्प, Typst
(github.com/typst)- Typst का लक्ष्य LaTeX जितनी शक्ति देना है, लेकिन यह सीखने और इस्तेमाल करने में अधिक आसान markup-आधारित typesetting system है, और इस repository में local document compilation के लिए ज़रूरी compiler और CLI शामिल हैं
- यह बुनियादी formatting कार्यों के लिए built-in markup, flexible functions, integrated scripting, math typesetting, bibliography management, और उपयोगी error messages प्रदान करता है
- incremental compilation के ज़रिए तेज compile time का लक्ष्य रखा गया है, और
typst watchsource changes को मॉनिटर करके हर बार शुरुआत से compile करने की तुलना में तेज़ी से फिर से compile करता है - CLI को release binaries, package manager,
cargo, Nix, और Docker से install किया जा सकता है, औरtypst compile file.typसे PDF बनाया जा सकता है; custom font path भी निर्दिष्ट किया जा सकता है - इसके design principles हैं consistency से simplicity, composability से power, और incrementality से performance पाना, तथा ऐसी speed को लक्ष्य बनाना जिसमें instant preview संभव हो
Typst क्या प्रदान करता है
- Typst एक markup-आधारित typesetting system है, जिसे LaTeX जितना शक्तिशाली होने के साथ-साथ सीखने और उपयोग करने में अधिक आसान बनाने के लिए डिज़ाइन किया गया है
- मुख्य सुविधाएँ इस प्रकार हैं
- अक्सर उपयोग होने वाले formatting कार्यों के लिए built-in markup
- अन्य कार्यों के लिए flexible functions
- क़रीब से integrated scripting system
- math typesetting, bibliography management आदि
- incremental compilation पर आधारित तेज compile time
- समस्या आने पर उपयोगी error messages
- इस repository में Typst documents को local में compile करने के लिए आवश्यक Typst compiler और CLI शामिल हैं
- बेहतर लेखन अनुभव के लिए आप मुफ़्त collaborative online editor का उपयोग कर सकते हैं
Syntax और लेखन मॉडल
- Typst
#setजैसे set rule से page size या heading numbering जैसी element properties सेट करता हैpageकी height कोautoपर रखने से उसका आकार content के अनुसार समायोजित होता है- यदि अधिक पूर्ण नियंत्रण चाहिए, तो show rules के ज़रिए elements का appearance पूरी तरह redefine किया जा सकता है
- headings को
= Headingsyntax से लिखा जाता है- एक
=top-level heading बनाता है,==subheading बनाता है - पूरा lightweight markup list syntax दस्तावेज़ में देखा जा सकता है
- एक
- math को dollar sign के बीच रखा जाता है
- formula के आसपास अतिरिक्त spaces देने पर उसे अलग block के रूप में रखा जा सकता है
- कई अक्षरों वाले identifiers को quotes में न लिखने पर Typst उन्हें definitions और functions की तरह समझता है
floor,sqrtजैसे items के लिए backslash की ज़रूरत नहीं होतीphi.altमेंphiपरaltmodifier लागू करके किसी विशेष symbol variant को चुना जाता है
- scripting में hash (
#) के बाद expression लिखकर document के भीतर code डाला जाता है- उदाहरण में दो variables और recursive function से nवीं Fibonacci संख्या निकाली जाती है
tablefunction cells को row-wise लेता है- array items को individual arguments के रूप में भेजने के लिए spread operator
..इस्तेमाल होता है
Installation और CLI उपयोग
- Typst CLI को कई तरीकों से install किया जा सकता है
- नवीनतम release का source और prebuilt binaries releases page से मिल सकते हैं
- binary को
PATHमें शामिल किसी directory में रखकर बाद मेंtypst updateसे update किया जा सकता है - package manager versions नवीनतम release से पीछे हो सकते हैं
- package manager installation के उदाहरण इस प्रकार हैं
- Linux: Typst on Repology, Typst's Snap
- macOS:
brew install typst - Windows:
winget install --id Typst.Typst
- यदि Rust toolchain मौजूद है, तो
cargoसे install किया जा सकता है- नवीनतम release:
cargo install --locked typst-cli - development version:
cargo install --git https://github.com/typst/typst --locked typst-cli
- नवीनतम release:
- Nix और Docker भी supported हैं
- Nix:
nix-shell -p typst - Typst flake:
nix run github:typst/typst-flake -- --version - Docker:
docker run ghcr.io/typst/typst:latest --help
- Nix:
- बुनियादी compile commands इस प्रकार हैं
typst compile file.typ: working directory मेंfile.pdfबनाता हैtypst compile path/to/source.typ path/to/output.pdf: निर्दिष्ट path पर PDF बनाता है
- change watching
typst watch file.typसे चलाया जाता है- Typst incremental compilation का उपयोग करता है, इसलिए यह हर बार शुरुआत से compile करने की तुलना में तेज़ है
- fonts से संबंधित commands भी उपलब्ध हैं
typst compile --font-path path/to/fonts file.typ: अतिरिक्त font search directory निर्दिष्ट करता हैtypst fonts --font-path path/to/fonts: system और निर्दिष्ट directory में मिले fonts की सूची दिखाता हैTYPST_FONT_PATHS=path/to/fonts typst fonts: Linux syntax में environment variable का तरीका
- अन्य subcommands और options के लिए
typst help, तथा किसी विशेष command की help के लिएtypst help watchदेखें
Editing environment और community
- यदि आपको IDE जैसी integrated experience, autocomplete, और instant preview चाहिए, तो आप मुफ़्त Typst web app का उपयोग कर सकते हैं
- community द्वारा बनाया गया language server Tinymist कई editor extensions में integrated है
- community spaces में Forum और Discord server प्रमुख हैं
- Forum सवाल पूछने, अन्य users की मदद करने, और Typst से बने results साझा करने के लिए उपयुक्त है
- Discord तेज़ सवालों, contributions से जुड़ी चर्चाओं, और chat के लिए अधिक उपयुक्त है
- Typst Universe वह जगह है जहाँ community templates और packages साझा करती है
- अपने बनाए packages को package repository में submit किया जा सकता है
Contribution और build
- यदि bug मिले तो issue खोला जा सकता है, और नई feature या bug fix implement करने के लिए contribution guide का पालन किया जा सकता है
- स्वयं build करने के लिए नवीनतम stable Rust install करने के बाद ये commands चलाएँ
git clone https://github.com/typst/typstcd typstcargo build --release
- optimized binary
target/release/में संग्रहित होती है - community के साथ packages साझा करना भी contribution का एक तरीका है
नाम का उच्चारण और लेखन
- Typst का IPA उच्चारण
/taɪpst/है "Ty"का उच्चारण Typesetting केTyकी तरह, और"pst"का उच्चारण Hipster केpstकी तरह होता है- Typst लिखते समय इसे proper noun माना जाता है और uppercase
Tका उपयोग किया जाता है
Design principles
- Typst को Power, simplicity, performance इन तीन लक्ष्यों के केंद्र में रखकर डिज़ाइन किया गया है
- लक्ष्य ऐसा system बनाना है जो LaTeX जितना शक्तिशाली हो, सीखने और उपयोग करने में आसान हो, और इतना तेज़ हो कि instant preview संभव हो सके
-
Consistency से simplicity
- Typst में यदि आप एक काम करने का तरीका जानते हैं, तो वही ज्ञान दूसरे कामों में भी ले जा सकें
- यदि एक ही काम करने के कई तरीके हों, तो वे abstraction के अलग-अलग स्तरों पर होने चाहिए
= Introductionऔर#heading[Introduction]इसका उदाहरण हैं, जहाँ पहला दूसरे का syntax sugar है, इसलिए दोनों से एक ही काम होना स्वीकार्य है
-
Composability से power
- हर चीज़ में settings जोड़ने की बजाय, कम संख्या के building blocks को कई तरीकों से combine करने वाला design चुना गया है
- TeX भी composable low-level system है, लेकिन लोग अक्सर उसकी जगह LaTeX का उपयोग करते हैं
- LaTeX में कई मामलों में
\\usepackage{knob}जैसे packages पर निर्भर होना पड़ता है
-
Incrementality से performance
- Typst language की सभी सुविधाएँ incremental compilation के अनुकूल होनी चाहिए
comemobackground में incremental compilation से जुड़े काम का बड़ा हिस्सा संभालता है
Sponsorship और support
- Typst के open source काम के लिए मुख्य समर्थन के रूप में निम्नलिखित सूचीबद्ध हैं
- Posit: full-time compiler engineer के लिए funding
- NLnet: NGI Zero Core fund के माध्यम से कई grants द्वारा Typst कार्य का समर्थन
- HTML export पर काम
- PDF accessibility पर काम
- Science & Startups: Berlin Startup Scholarship के माध्यम से जनवरी 2023 से जून 2023 तक Typst development के लिए funding
- Zerodha: one-time sponsorship
- इस सूची में केवल वही योगदान शामिल हैं जो open source काम के लिए €10K से अधिक हैं या जिनके €10K से अधिक होने की उम्मीद है
2 टिप्पणियां
क्या
LeTeXको라텍스पढ़ते हैं? इसे레이텍पढ़ना चाहिए।Hacker News राय
Typst काफी शानदार रहा, और हमारे संगठन में भी हम इससे बहुत संतुष्ट हैं
हमें हर रात 15 लाख से ज़्यादा PDF बनाने होते हैं, इसलिए HTML→PDF conversion के लिए Puppeteer, pdflatex, lualatex वगैरह कई solutions आज़माए, लेकिन Typst कई orders of magnitude तेज़ था और resource usage भी हल्का था
LaTeX में PDF templates बनाने का developer experience अच्छा नहीं था, लेकिन Typst templates काफी intuitive थे
इस बड़े पैमाने के PDF generation stack के बारे में ब्लॉग में और विस्तार से लिखा है: https://zerodha.tech/blog/1-5-million-pdfs-in-25-minutes
मैं Puppeteer-based bulk PDF reporting product बना रहा हूँ, और nightly jobs, caching, parallel processing तक इस्तेमाल करें तो performance ठीक-ठाक रहती है
https://www.cx-reports.com
बहुत पहले जब मुझे इसी तरह की समस्या handle करनी पड़ी थी, तो वह एक अच्छा solution था
scale इतना बड़ा नहीं था, लेकिन फिर भी usable था
मैंने Typst में बहुत सारे assignments लिखे हैं, और academic writing ज़्यादा concise, immersive और कहूँ तो मज़ेदार हो जाती है
Typst syntax की functional nature की वजह से Microsoft Word, और कभी-कभी Google Docs में दिखने वाले unpredictable behavior से नहीं जूझना पड़ता
VSCode जैसी local IDE इस्तेमाल करें तो ज़रूरी features भी लगभग मिल जाते हैं
LaTeX से तुलना करें तो पूरे document का typesetting कहीं ज़्यादा intuitive है, लेकिन कई pages तक चलने वाले equation derivations लंबे लिखते समय LaTeX टाइप करना ज़्यादा आसान लगता है
LaTeX syntax functional programming language की बजाय Markdown के ज़्यादा करीब है, इसलिए functions, superscripts और subscripts से भरे formulas typeset करते समय पहले से कम सोचना पड़ता है
अभी मुझे नहीं लगता कि मैं paper Typst में लिखूँगा
institution के बाहर जाते ही लगभग निश्चित रूप से conversion करना पड़ेगा, और arXiv भी LaTeX source माँगता है
आज LaTeX के आसपास के tools काफी अच्छे हैं, और मदद करने वाली IDEs भी बहुत हैं
व्यक्तिगत रूप से मैं Emacs का Org-Mode इस्तेमाल करता हूँ, जो LaTeX में compile होता है
https://github.com/mitex-rs/mitex
पिछली चर्चाएँ और संबंधित सामग्री कई हैं: https://hn.algolia.com/?q=typst
1 साल पहले, 146 comments: https://news.ycombinator.com/item?id=35250210
8 महीने पहले, 34 comments: https://news.ycombinator.com/item?id=38354422
2 साल पहले, 53 comments: https://news.ycombinator.com/item?id=34423590
2 साल पहले, 30 comments: https://news.ycombinator.com/item?id=32209794
हैरानी है कि HTML output शुरू से core feature नहीं था, बल्कि अभी work in progress है
LaTeX का web के साथ awkward रिश्ता है; अगर कोई नया competing project शुरू कर रहा हो, तो यह ऐसा हिस्सा लगता है जिसे शुरुआत से ही सही तरीके से solve करने की कोशिश की जाती
[0] https://github.com/typst/typst/issues/721
दोनों एक ही problem face करते हैं: web और paper पूरी तरह अलग तरह से काम करते हैं और कुछ concepts एक-दूसरे में translate नहीं हो सकते
इसलिए यह define करना पड़ता है कि typeset result दूसरे environment में naturally कैसे fit होगा
अगर Typst ने शुरुआत से HTML को target किया होता, तो development बहुत आसान होता, लेकिन तब वह शायद एक overly complex site generator से ज़्यादा नहीं होता
PDF को पहले target करना मुझे सच में LaTeX से compete करने का इरादा लगता है
नया markup system शुरू करते समय अगर accessible documents बनाने की योजना नहीं थी, तो मेरे हिसाब से यह बहुत खराब decision है
जब तक Typst accessible documents बना नहीं सकता, मैं इसका इस्तेमाल नहीं करूँगा
मुझे PDF पसंद नहीं हैं
मैं इंतज़ार कर रहा हूँ कि LaTeX हटे और Typst उसकी जगह ले
user experience पूरी तरह अलग है, और output बहुत impressive है
अब तक मैं Jinja2 templates से TeX files generate करता था, लेकिन Typst command line से JSON ले सकता है, use करना आसान है और इतना powerful है कि Python step को पूरी तरह हटाया जा सकता है
compile time milliseconds के order में है, यह तो अलग बात है
शुरुआत में LaTeX में किए जाने वाले तरीके की आदत थी, इसलिए मैंने Go templates से Typst templates generate करके देखा
लेकिन यह जानकर अच्छा लगा कि Typst अपने scripting engine में JSON को सीधे आसानी से use कर सकता है
1999 में इंटर्न के तौर पर काम करते हुए, मुझे TIA के VoIP फोन standard working group के लिए standard documents लिखने का काम मिला था
standardization body के पास एक Word template था जिसे सभी इस्तेमाल करते थे, लेकिन engineering student होने के नाते मैं कुछ समय से LaTeX इस्तेमाल कर रहा था और उसे पसंद करता था, इसलिए सोचा, “आख़िर final output तो PDF ही है और formatting भी बेहतर होगी, तो LaTeX क्यों न इस्तेमाल करूं?”
सच में LaTeX का output बेहतर था, और मेरे boss को बिल्कुल पता नहीं चला कि मैंने Word इस्तेमाल नहीं किया है; उन्हें result पसंद आया
working group के members की प्रतिक्रिया भी अच्छी थी, और माहौल कुछ ऐसा था, “यह बच्चा सच में talented है”
startup के नजरिए से, working group में शामिल बड़ी कंपनियों पर अच्छा impression छोड़ना कंपनी के future, शायद survival, के लिए बहुत अहम था
फिर एक दिन boss ने कहा, “क्या तुम वह Word document उस बड़ी कंपनी के senior executive को भेज सकते हो जो शायद हमें acquire कर सकती है? वे इसे नए document template की तरह इस्तेमाल करना चाहते हैं,” और मुझे वैसी ही डूबती हुई feeling हुई जैसी चार साल की उम्र में दोस्त के साथ experiment के तौर पर cupboard में पेशाब कर देने पर मां के पकड़ लेने पर हुई थी
आखिरकार मैंने एक दोस्त को hire किया और उससे पूरे weekend बड़ी मुश्किल से उसे Word में फिर से बनवाया, और boss को document मिल गया
कंपनी 18 महीने बाद 100 million dollars में acquire हो गई
ख़ैर, LaTeX अब भी Word से 1000 गुना बेहतर दिखता है
यह Overleaf या CodiMD जैसी services का competitor लगता है
syntax फिर एक और है, लेकिन लगता है pandoc इसे support करता है
हाल में मैं R में programming कर रहा हूं, इसलिए Quarto का इस्तेमाल धीरे-धीरे ज़्यादा कर रहा हूं, और यह खासकर HTML जैसा काफी अच्छा output बनाता है
लेकिन ये tools भी academic use में अहम दो समस्याएं हल नहीं करते: reviewers को अच्छा diff comparison देना, और non-technical collaborators के साथ आसानी से share करके comments करने देना
इसलिए कम से कम मेरे field की scientific writing में Word को आने वाले कई सालों तक replace करना मुश्किल लगता है
[1] https://github.com/overleaf/overleaf
[2] https://github.com/hackmdio/codimd
[3] https://pandoc.org/typst-property-output.html
[4] https://quarto.org/
GT इस्तेमाल करते समय Typst PDF output LaTeX PDF की तुलना में थोड़ा अधिक rough लगा
उम्मीद है यह ठीक होगा
LaTeX की तुलना में Typst में मुझे सबसे ज्यादा जो बात खटकती है, वह यह है कि यह बुनियादी sophisticated typography features को अच्छी तरह handle नहीं करता
उदाहरण के लिए, math mode में spacing types (mathop, mathbin, mathrel आदि) या delimiter sizes (big, bigg आदि) को handle करने वाला हिस्सा कमजोर है
math mode में symbols/operators की spacing https://typst.app/docs/reference/math/class/ से बदली जा सकती है, और delimiter size https://typst.app/docs/reference/math/lr#functions-lr से बदला जा सकता है या automatically handle किया जा सकता है
हालांकि लगता है LaTeX के साथ भी यही है
वाकई अच्छा दिखता है और मैं इसे एक बार try करने वाला हूं
हालांकि मेरे मन में बार-बार यह सोच आती है
15 साल बाद भी LaTeX free और maintained होगा, इसका मेरा अनुमानित probability: 99.9999%
15 साल बाद भी कोई दूसरा नया tool free और maintained होगा, इसका मेरा अनुमानित probability: 5%
bash और कुछ दूसरी चीज़ों के साथ भी ऐसा ही है
बेहतर alternatives बहुत हैं, लेकिन pain points इतने बड़े नहीं हैं कि उन्हें replace कर दें
मुझे Typst पसंद है
खासकर programmatically बनाए गए inputs को handle करते समय यह अच्छा है, और
--inputflag JSON accept कर सकता हैfile के अंदर dedicated
json.decode()function से JSON आसानी से लाया जा सकता हैstable results बनाना बहुत आसान है, इसलिए अपने project में भी मैंने LaTeX से Typst पर switch कर लिया
[0] https://typst.app/docs/reference/foundations/sys/
[1] https://resgen.app