Quiver - आधुनिक commutative diagram editor
(github.com/varkor)- Quiver एक editor है जो commutative diagram और pasting diagram को ग्राफ़िक रूप में बनाने देता है, और स्क्रीन के लिए उच्च-गुणवत्ता rendering के साथ LaTeX·Typst export को support करता है
- हाथ से LaTeX या Typst लिखने की तुलना में diagram बनाना और संशोधित करना बहुत तेज़ है, और अभ्यस्त होने पर pen and paper के क़रीब काम की गति मिल सकती है
- यह pullback, pushout, adjunction, higher cell जैसे जटिल diagrams को संभाल सकता है, और label के आकार के अनुसार समायोजित होने वाला flexible grid तथा संयोजित किए जा सकने वाले arrow styles देता है
- mouse drag और keyboard shortcuts दोनों से काम किया जा सकता है, और multi-selection, undo·redo, user macros, HTML embeddable diagram export, panning·zoom को support करता है
- LaTeX या Typst में export करते समय diagram link भी साथ में डाला जा सकता है ताकि बाद में उसे फिर खोलकर संपादित किया जा सके या दूसरों के साथ साझा किया जा सके
Quiver क्या करता है
- Quiver commutative diagram और pasting diagram बनाने के लिए एक आधुनिक graphical editor है
- यह स्क्रीन पर देखने के लिए अच्छी उच्च-गुणवत्ता वाले diagrams render करता है, और LaTeX के लिए tikz-cd तथा Typst के लिए fletcher के माध्यम से export कर सकता है
- इसे वेब पर सीधे q.uiver.app में आज़माया जा सकता है
- प्रभावी उपयोग और केवल keyboard से diagram बनाना व संपादित करना Quiver tutorial में समझाया गया है
Diagram बनाने की सुविधाएँ
- जटिल commutative diagrams और pasting diagrams बनाने के लिए यह एक प्रभावी और सहज interface देता है
- समर्थित उदाहरण इस प्रकार हैं
- pullback और pushout वाले diagrams
- adjunction
- higher cell
- objects की placement label के आकार के अनुसार समायोजित होने वाले flexible grid पर आधारित है
- arrows में कई तरह के styles को मिलाकर इस्तेमाल किया जा सकता है
- labels और arrows में रंगों का उपयोग किया जा सकता है
- इसे इस तरह डिज़ाइन किया गया है कि screenshots में भी अच्छा दिखे, और LaTeX·Typst में export किया गया परिणाम भी मूल diagram के जितना संभव हो उतना क़रीब दिखे
Input तरीके और editing workflow
- diagram को mouse से click·drag करके बनाया और संपादित किया जा सकता है
- यह सभी क्रियाओं के लिए keyboard shortcuts का एक सेट देता है, इसलिए keyboard-based editing भी संभव है
- कई elements को एक साथ चुनकर बड़े पैमाने पर बदलाव आसान और तेज़ी से किए जा सकते हैं
- history system की मदद से काम को undo·redo किया जा सकता है
- बड़े diagrams को संभालने के लिए panning और zoom का support है
- यह smart label alignment और edge offset देता है
Export और reuse
- diagrams को LaTeX या Typst में export किया जा सकता है
- export किए गए परिणाम में उस diagram पर वापस जाने के लिए एक link शामिल होता है
- बाद में संशोधन की ज़रूरत हो तो उसे फिर खोला जा सकता है
- इसे दूसरे लोगों के साथ साझा किया जा सकता है
- HTML में embed किए जा सकने वाले diagram export को भी support करता है
- user-defined macros को
\\newcommandवाले file URL को paste करके इस्तेमाल किया जा सकता है - editor integration के बारे में Editor integration दस्तावेज़ और Quiver wiki में देखा जा सकता है
Build और run की शर्तें
- command line में
makeचलाने के बाद browser मेंsrc/index.htmlखोलकर build result देखा जा सकता है - अगर Make या Bash version मेल नहीं खाता, तो KaTeX का नवीनतम release manually डाउनलोड करके
src/KaTeX/के नीचे रखा जा सकता है - अगर KaTeX path सही नहीं है, तो KaTeX load failure error होगी
- Quiver को localhost के माध्यम से चलाना आवश्यक है
- अगर Python install है, तो Quiver directory में
make serveचलाने के बाद browser मेंlocalhost:8000खोला जा सकता है - build समस्या होने पर विवरण के साथ GitHub issue खोला जा सकता है
1 टिप्पणियां
Hacker News की राय
यह tool वाकई शानदार है। Fourier-Poisson cube [0] को मैं करीब 10 मिनट में बना पाया, और UI भी बहुत intuitive है
free canvas के बजाय commutative diagram पर फोकस करने वाला design साफ-सुथरा और इस्तेमाल में आसान बनाता है—मेरे हिसाब से यह बेहतरीन choice है। paper लिखते समय अगर यह होता, तो शायद मेरा बहुत समय बचता
[0] https://q.uiver.app/#q=WzAsOCxbMCwxLCJnIFxcdGV4dHsgb24gfVxcb...
इसी सिलसिले में, हाल में यह Petri net editor काफी impressive लगा: https://pes.vsb.cz/petrineteditor/#/model
Petri net कमाल के होते हैं। finite state machine को अगर multithreaded बना दें, तो कुछ ऐसा ही महसूस होता है
मुझे Petri net के बारे में पहली बार “statebox” नाम के organization के लेख पढ़ते हुए पता चला था। Statebox की रुचि Petri net, commutative diagram और category theory की कई concepts में थी, और कुछ papers पढ़कर मैं इतना प्रभावित हुआ कि वहां काम करना मेरा सपना बन गया। अफसोस, अब homepage पर सिर्फ “imagine being a category theorist” वाक्य और हंसते-हंसते रोने वाला emoji है, इसलिए पता नहीं क्या हुआ
कुछ दिन पहले मैंने अपनी किताब [1] में डालने के लिए एक simple diagram [0] बनाने में इसका इस्तेमाल किया था
अफसोस, यह category theory के लिए खास है, इसलिए nodes को खूबसूरती से सजाने का support ज्यादा नहीं है, लेकिन हां, LaTeX से यह किया जा सकता है
[0] https://q.uiver.app/#q=WzAsNSxbMSw2LCJcXHRleHR7TmF0dXJhbCBEZ...
[1] http://abstractionlogic.com
कल रात मैं https://tikzcd.yichuanshen.de/ इस्तेमाल कर रहा था, जो इस tool के कम फीचर वाले version जैसा है। फिर भी simple diagrams बनाने के लिए काफी ठीक है
क्या आप एक विनम्र और बहुत ज़्यादा कुशल न होने वाले software developer को समझा सकते हैं कि commutative diagram और pasting diagram क्या होते हैं?
Wikipedia का लेख बुनियादी स्तर पर समझने के लिए बहुत abstract था [0]
[0]: https://en.wikipedia.org/wiki/Commutative_diagram
A → Bके ऊपरfहो, तो यह उस function f को दर्शाता है जो A का input लेकर B का output बनाता हैजिस diagram में
A → Bfहै, फिर वहाँ सेB → Cgहै, औरA → Chहै, उसका मतलब हैg ∘ f = h, यानी पहले f करना और फिर g करना, h करने के बराबर है। हर function का domain और codomain साथ में लिखा होता है, इसलिए यह देखना आसान हो जाता है कि functions compose किए जा सकते हैं या नहीं, यानी वे type check पास करते हैं या नहींDiagram के अंदर paths खुद भी functions की तरह compose होते हैं, इसलिए यह notation बहुत स्वाभाविक रूप से फिट बैठता है। उदाहरण के लिए associativity notation में ही built-in है, इसलिए
A→B→C→Dतीन functions को compose करने की इकलौती expression है, और(f∘g)∘hवf∘(g∘h)का फर्क लिखा ही नहीं जा सकताआम तौर पर directed multigraph के साथ यह विवरण जुड़ा होता है कि उन paths में से कौन-से आपस में equivalent हैं और कौन-से नहीं; और अगर यह equivalence relation कुछ बुनियादी properties पूरी करता है, तो इसे category कहा जाता है। यह concept गणित, abstract logic वगैरह में बहुत बार आता है। Commutative diagram इस context में paths की equivalence को visually जल्दी infer करने में उपयोगी होता है
n(g(f(a)))दिखाता है। यही diagram है, और diagram के commutative होने का मतलब है कि जिन भी दो paths का starting point और ending point समान है, उन्हें follow करने पर वे बराबर होते हैंइसलिए
n(g(f(•))),s(r(l(•))),s(m(f(•)))सभी A से C' तक जाने वाले paths और function calls हैं, और क्योंकि diagram को commutative कहा गया है, ये paths सभी बराबर हैंMonomorphism, epimorphism, isomorphism सभी function की महत्वपूर्ण properties हैं, जो equation के दोनों sides से कुछ terms को “cancel” करने देती हैं। उदाहरण के लिए सामान्य तौर पर
f(g(x))=f(h(x))होने से यह निष्कर्ष नहीं निकाला जा सकता किg(x)=h(x)। अगर f को इस तरह cancel किया जा सके, तो उसे monomorphism कहते हैं। इसी तरहg(f(x))=h(f(x))से f को cancel करकेg(x)=h(x)मिल सके, तो f epimorphism है। Isomorphism दोनों शर्तें पूरी करता है। इन properties की वजह से कुछ स्थितियों में diagram के कुछ paths को “उल्टा चलना” संभव होता हैCategory theory में दिखने वाली theorem का एक रूप five lemma[0] जैसे उदाहरण में होता है: “इस diagram को देखो। अगर g epimorphism है और h monomorphism है, तो f isomorphism है।” यानी अगर हमें पता है कि इस तरफ और उस तरफ cancel किया जा सकता है, तो यह भी पता चलता है कि किसी और तरफ भी cancel किया जा सकता है
[0] https://en.wikipedia.org/wiki/Five_lemma
सरल ढंग से सोचें तो objects को types और arrows को types के बीच functions मान सकते हैं
ऊपर-बाएँ कोने से शुरू करके दो paths पर चलते हुए types verify किए जाते हैं। अगर diagram सही तरह type check होता है तो उसे commutative कहा जाता है, और दोनों paths किसी अर्थ में equivalent होते हैं। उसका ठोस अर्थ यहाँ छोड़ी गई कई details पर निर्भर करता है
Category का एक उदाहरण “sets and functions” category है। उस category में सोच सकने योग्य हर set object, यानी node के रूप में होता है, और किसी भी दो sets के बीच सोच सकने योग्य हर function उन दोनों के बीच arrow के रूप में होता है
इसलिए A से B तक जाने वाला एक arrow और B से C तक जाने वाला एक arrow लेकर उन्हें functions की तरह compose करें, तो A से C तक जाने वाला function मिल जाता है
Commutative diagram को पूरी category का subset माना जा सकता है, और यह वह स्थिति है जहाँ दो sets X और Y के बीच बनाए गए सभी paths को follow करते हुए हर path के arrows को compose करने पर वही function मिलता है
Higher categories के बारे में मैंने पढ़ा नहीं है, इसलिए pasting diagram के बारे में पक्का नहीं कह सकता, लेकिन शायद यह इसी idea को किसी तरह generalize करता है
क्या इसे web-friendly format में export किया जा सकता है? शायद SVG सही रहेगा। अगर quiver को localhost पर चला रहे हैं, तो link से share करना विकल्प नहीं है
कुछ साल पहले category theory की class लेते समय Quiver सच में indispensable था। UI साफ़-सुथरा और intuitive है, और features भी पर्याप्त हैं। TikZ से जूझने की तुलना में तो कोई मुकाबला ही नहीं
बहुत अच्छा product है। पहले आम तौर पर TikZ code हाथ से लिखता था और काफ़ी तेज़ था, लेकिन अब बहुत कुछ भूल गया हूँ, इसलिए commutative diagrams के लिए यह बहुत उपयोगी लग रहा है
यहाँ बनाने लायक एक code generation tool छिपा हुआ है
Quiver को कई बार इस्तेमाल किया है और हर बार अच्छा experience रहा। बनाने वालों ने शानदार काम किया है