mdBook - Markdown से किताबें बनाने का command-line टूल
(rust-lang.github.io)- जब दस्तावेज़ और ट्यूटोरियल को किताब के रूप में वितरित करना हो, mdBook 0.5.3 Markdown-आधारित लेखन और आसानी से नेविगेट की जा सकने वाली आउटपुट सामग्री दोनों प्रदान करता है
- हल्के Markdown syntax और integrated search की वजह से लेखक formatting से ज़्यादा content पर ध्यान दे सकते हैं
- code block syntax highlighting और theme files के माध्यम से तकनीकी दस्तावेज़ों के लिए ज़रूरी पठनीयता और आउटपुट format को समायोजित किया जा सकता है
- preprocessors और backends custom syntax, content modification, और कई output formats के rendering के लिए extension points प्रदान करते हैं
- यह Rust प्रोजेक्ट्स और The Rust Programming Language किताब में इस्तेमाल होने वाला टूल है, इसलिए Rust documentation ecosystem से इसका मजबूत जुड़ाव है
Markdown किताब बनाने के लिए ज़रूरी बेसिक फीचर्स
- mdBook Markdown से किताबें बनाने का एक command-line टूल है
- यह product docs, API docs, tutorials, और course materials जैसे साफ-सुथरे और आसानी से नेविगेट होने वाले content बनाने के लिए उपयुक्त है
- यह writing और reading experience को बेहतर बनाने वाली सुविधाएँ साथ में देता है
- हल्के Markdown syntax के साथ content writing पर ध्यान केंद्रित किया जा सकता है
- किताब के भीतर integrated search support
- कई भाषाओं के code blocks पर color syntax highlighting लागू किया जा सकता है
- theme files से output format को customize किया जा सकता है
विस्तार और Rust ecosystem से जुड़ाव
- preprocessors custom syntax extension और content modification संभाल सकते हैं
- backends के जरिए कई output formats में rendering की जा सकती है
- mdBook को speed, safety, और simplicity के लिए Rust में लिखा गया है
- यह Rust code samples के automatic testing को support करता है
वास्तविक उपयोग के मामले और योगदान का तरीका
- mdBook का अपना documentation, mdBook से बने output का ही एक उदाहरण है
- Rust programming language project mdBook का उपयोग करता है, और The Rust Programming Language किताब भी इसका एक use case है
- mdBook एक मुफ्त open source प्रोजेक्ट है
- source code GitHub पर उपलब्ध है
- issues और feature requests को GitHub issue tracker पर दर्ज किया जा सकता है
- योगदान करने के लिए CONTRIBUTING गाइड पढ़कर pull request खोला जा सकता है
- mdBook का source और documentation Mozilla Public License v2.0 के तहत वितरित किया जाता है
1 टिप्पणियां
Hacker News टिप्पणियाँ
मुझे याद है कि यह प्लेटफ़ॉर्म लाइब्रेरी को bundle या vendor करने के बजाय CDN-hosted libraries का इस्तेमाल करता है। इसलिए उपयोगकर्ता सिर्फ CDN outage ही नहीं, बल्कि उस सर्वर द्वारा एकत्र किए जाने वाले डेटा के लिए भी exposed रहते हैं
और भी अफ़सोस की बात यह है कि frontend में Highlight.js और MathJax का इस्तेमाल करने का तरीका बहुत ही wasteful है। हर client को syntax और LaTeX खुद parse और render करना पड़ता है, और हर visit पर वही काम दोबारा करना पड़ता है ताकि वही result मिले। syntax highlighting को build time पर handle किया जा सकता है और JavaScript की ज़रूरत होने का कोई खास कारण भी नहीं है
लगता है MathJax support optional होने की वजह से ऐसा चुना गया है: https://rust-lang.github.io/mdBook/format/mathjax.html
फिर भी, बहुत संभावना है कि MathJax JS फिर से CDN से अतिरिक्त files लोड करे, इसलिए यह समझना मुश्किल है कि पूरी MathJax files को generated HTML के बगल में ही क्यों नहीं रखा जाता
इस thread में जिन documentation·static site tools का ज़िक्र हुआ, वे लगभग Jekyll, Hugo Book, MdBook, MkDocs, MkDocs Material, GitBook, Antora, Docusaurus, Nextra, Astro, Starlight, Clowncar, Keenwrite, Quarto, Honkit, JupyterBook हैं
Jekyll, Hugo Book, MdBook, MkDocs, MkDocs Material, GitBook, Antora, Docusaurus, Nextra, Astro, Starlight, Clowncar, Keenwrite, Quarto, Honkit, JupyterBook
यह mdBook का Nim port है, लेकिन इसमें Nim के JavaScript backend का उपयोग करके interactive content बनाने की क्षमता भी बढ़ाई गई है। मैंने खुद इसे इस्तेमाल नहीं किया, लेकिन ज़रूरत पड़ने पर interactive elements को एक ही जगह बना सकने का विचार अच्छा लगता है: https://pietroppeter.github.io/nimib/interactivity.html
मैंने MdBook, Jekyll, MkDocs इस्तेमाल किए हैं। MdBook बेसिक प्रोजेक्ट्स के लिए काफ़ी polished है, लेकिन यह कुछ ज़्यादा ही minimal लगा। जिन MdBook साइटों को मैंने पसंद किया, उनके source देखने पर पता चला कि कुछ मामलों में उन्हें custom Rust code से extend किया गया था
मेरी सिफारिश यह है: MkDocs एक reasonably flexible default विकल्प है, Jekyll उन मामलों के लिए बेहतर है जहाँ landing page या blog जैसी ज़्यादा flexibility चाहिए, और Antora तब सही है जब आप कई projects और कई versions के docs को जोड़कर बेहतरीन documentation site बनाना चाहते हों और उसके लिए काफ़ी मेहनत करने को तैयार हों। AsciiDoc में documentation लिखने के लिए बहुत उपयोगी features हैं
Hugo, Jekyll की तरह flexible लगता है, लेकिन उसे मनचाहे ढंग से ढालने में और ज़्यादा मेहनत लगती है, और themes के बीच behavior का फ़र्क भी बहुत बड़ा लगता है। जिस theme का मैं इस्तेमाल कर रहा था उसमें ज़रूरी feature नहीं था, इसलिए दूसरे theme पर जाना चाहा, लेकिन migration आसान नहीं थी और आख़िरकार मैंने छोड़ दिया। MdBook काफ़ी सक्रिय दिखता है, इसलिए लगता है कि यह अंततः आगे निकल आएगा
JavaScript-आधारित tool इस्तेमाल नहीं करना चाहता था, इसलिए लंबे समय तक टालता रहा, लेकिन इस्तेमाल करने पर पाया कि इसे शुरू करना आसान है, यह बहुत तेज़ है, default site सुंदर होती है, और customize करना भी आसान है। MDX support भी बेहतरीन है
BookStack भी आज़मा रहा हूँ; यह wiki के ज़्यादा क़रीब है, लेकिन जो लोग बहुत technical नहीं हैं उनके लिए अच्छा है। आम तौर पर MkDocs project VSCode में edit किए जाते हैं और Git repository में रखे जाते हैं, जबकि BookStack पूरी तरह web-based है
पहले मैं til.secretGeek.net को GitBook से generate करता था, लेकिन समय के साथ यह इतना धीमा हो गया कि site build होने में 45 मिनट लगने लगे, और जिन features का मैं इस्तेमाल करता था वे या तो बंद कर दिए गए या “premium” बना दिए गए। यानी आख़िरकार एनशिटिफिकेशन शुरू हो गया
अगर आप कोई ऐसा free tool इस्तेमाल कर रहे हैं जो बहुत अच्छा लगता है, तो कुछ साल इंतज़ार कीजिए—उसके बिगड़ जाने की काफ़ी संभावना है। आख़िर में मैंने .NET में खुद एक बहुत minimal static site generator बना लिया, जिससे build फिर से कुछ ही सेकंड में होने लगा। मैं इसे दूसरों को इस्तेमाल करने के लिए promote नहीं करता, क्योंकि अगर यह लोकप्रिय हो गया तो शायद मैं भी आख़िरकार उसी तरह इसे बिगाड़ दूँगा
https://www.collinsdictionary.com/jp/dictionary/english/spru...
मैंने कई projects में mdBook इस्तेमाल किया है, लेकिन आजकल material for mkdocs ज़्यादा पसंद आता है क्योंकि इसमें built-in features कहीं अधिक हैं
उदाहरण के लिए, दाईं तरफ़ का page TOC मुझे बहुत पसंद है, और mdBook में यह feature साफ़ तौर पर नहीं है। mdBook में SUMMARY को बहुत विस्तार से बनाना पड़ता है, और जो सामग्री मूल रूप से एक ही page पर रह सकती थी, उसे कई files में बाँटना standard तरीका जैसा लगता है
कुछ दिन पहले मैंने एक छोटे project के documentation के लिए mdBook इस्तेमाल करना शुरू किया, और यह मेरी ज़रूरत के बिल्कुल मुताबिक़ छोटा static page generator निकला
HUGO भी इस्तेमाल किया है, लेकिन mdBook की तुलना में वह बहुत बड़ा और भारी लगता है। अभी मैं Obsidian/VIM में docs edit करता हूँ और Gitea पर push करते ही एक मिनट के अंदर public docs बन जाते हैं
सही shortcode के साथ images, equations वगैरह की automatic numbering की जा सकती है। सोच रहा हूँ कि क्या mdBook में भी automatic numbering संभव है। इसमें दाईं तरफ़ TOC, tags, और pages को columns में बाँटने जैसी सुविधाएँ भी हैं, और KaTeX support भी अच्छा है। लगता है mdBook MathJax इस्तेमाल करता है, और deployment भी सिर्फ़ push या rsync से आसान हो जाता है
हाल में मैंने अपना कुछ content धीरे-धीरे
.mdसे .mdx में शिफ्ट करके देखना शुरू किया, और यह काफ़ी ताज़गीभरा लगा। Markdown की सबसे मुश्किल बात हमेशा यह रही कि हर dialect की सीमाएँ अलग होती हैं, और उन सीमाओं को बढ़ाने का तरीका भी अलग-अलग होता हैstandard GitBook Markdown dialect के 80~90% से मैं काफ़ी संतुष्ट हूँ, लेकिन कभी-कभी complex tables, code blocks जिनमें सिर्फ़ कुछ lines को highlight करना हो और syntax highlighting भी बनी रहे, interactive sliders, दस्तावेज़ में embedded calculator, या कुछ खास graphs और charts की ज़रूरत पड़ती है। बड़ी टीमों में MDX कैसे काम करेगा, यह नहीं पता, लेकिन व्यक्तिगत काम के लिए यह निश्चित रूप से एक सुधार लगता है
.mdxके बारे में सुना और [0] देखा। लगता है कि मैं frontend standardization की दिशा को काफ़ी ठीक से follow नहीं कर पा रहा थाअच्छा होता अगर dialects ख़त्म होकर एक universal approach बनती, लेकिन docs में लिखा है, “MDX React से बंधा नहीं है, और Preact, Vue, Emotion, Theme UI आदि में भी इस्तेमाल किया जा सकता है, साथ ही classic/automatic JSX runtime दोनों को support करता है।” Svelte implementation [1] भी पहले से मौजूद है, इसलिए समझ नहीं आ रहा कि यह फिर से frontend frameworks से बंधे और dialects खोल देने वाला Pandora’s box तो नहीं है।
.mdxके अंदर भी बँटवारा हो सकता है और यह.mdसे compatible भी न रहे[0] https://mdxjs.com/docs/what-is-mdx/
[1] https://mdsvex.com/docs
.mdxको https://astro.build/ के साथ बहुत आसानी से इस्तेमाल किया जा सकता है। Astro एक JavaScript meta-framework है, और यह static site generation first approach अपनाता है जिसमें client को JS नहीं भेजा जाताइस्तेमाल करने लायक themes भी हैं, लेकिन अगर आप modern web developer हैं, तो ख़ुद बनाना भी काफ़ी आसान होगा
Markdown आधारित किताबें बनाने के लिए मैंने मुफ़्त open source cross-platform tool KeenWrite बनाया है: https://github.com/DaveJarvis/keenwrite
KeenWrite document typesetting के लिए ConTeXt को call करता है, और preview mode में math typesetting के लिए KeenType fork का उपयोग करता है। command line से PDF generate किया जा सकता है। जो किताब मैं अभी लिख रहा हूँ, उसमें body के अंदर external files में define किए गए कई variables को refer किया जाता है, metadata के ज़रिए PDF properties pass की जाती हैं, और
chaptersargument के साथ सिर्फ़ कुछ chapters ही build किए जा सकते हैं।themedirectory में colors, fonts, layout, annotations आदि के typesetting instructions होते हैंsample output: https://github.com/DaveJarvis/keenwrite-themes/tree/main/exa...
मुझे हैरानी होती है कि Markdown या उससे मिलते-जुलते formats किताबों, documentation, और लगभग हर तरह की writing का default format क्यों नहीं हैं। कुछ साल पहले Typora पर आने के बाद, अपनी writing के लिए मुझे Word/Writer की लगभग ज़रूरत नहीं पड़ती; अब उन्हें सिर्फ़ तब खोलता हूँ जब किसी और ने document भेजा हो
जो किताबें मैं पढ़ता हूँ, उनमें से 90% के लिए भी यह कोई साफ़ वजह नहीं दिखती कि वे Markdown format में क्यों नहीं हो सकतीं। यह समझ में आता है कि paper books को सुंदर ढंग से print करने के लिए proper typesetting चाहिए, लेकिन computer या smartphone पर पढ़े जाने वाले ज़्यादातर text, या MS/LibreOffice से सीधे print होने वाले documents, वैसे भी उस स्तर का typesetting नहीं रखते
AsciiDoc जैसे बेहतर alternatives भी हैं, लेकिन वे documentation के लिए ज़्यादा specialized हैं और Markdown जैसी momentum नहीं रखते। यह देखते हुए कि Markdown एक अपेक्षाकृत बाद में आया format है, शायद बेहतर सवाल यह है कि किताबें Markdown में क्यों होनी चाहिए। binary या XML-based formats की तुलना में Markdown का सबसे बड़ा फ़ायदा यह है कि इसे plain text के रूप में कुछ हद तक पढ़ा जा सकता है, लेकिन ज़्यादातर publishers और readers के लिए यह इतनी अहम बात नहीं है
यह एक आम engineer trap भी है—“मैं इससे बेहतर कर सकता हूँ”—इसलिए बिना जाँच-पड़ताल के ऐसा मान लेना ठीक नहीं। typesetting इन tools से कहीं पुराना क्षेत्र है, और इसमें समय के साथ काफ़ी मूल्यवान समझ और तकनीक जमा हुई है; सिर्फ़ इसलिए कि कुछ उपयोगों के लिए Markdown लगभग काफ़ी लगता है, हमें उसे नज़रअंदाज़ नहीं करना चाहिए
mdBook इस्तेमाल करने में आसान है, और मुझे ख़ास तौर पर यह पसंद है कि इसमें users theme चुन सकते हैं। मैं इसे मुख्यतः ebooks के online versions [0] और curated materials [1][2] के लिए उपयोग करता हूँ
[0] https://github.com/learnbyexample/scripting_course#ebooks
[1] https://learnbyexample.github.io/py_resources/
[2] https://learnbyexample.github.io/curated_resources/