markdown पृष्ठों और सामग्री की तालिका बनाने के लिए मार्कडाउन?




(19)

यदि आप जावास्क्रिप्ट / node.js उपकरण का उपयोग करना चाहते हैं, तो मार्कडाउन-टीओसी पर एक नज़र डालें।

मैंने नोट्स लेने के लिए मार्डउन का उपयोग करना शुरू कर दिया।

मैं अपने मार्कडाउन नोट्स और इसकी सुंदरता देखने के लिए चिह्नित का उपयोग करता हूं।

लेकिन जैसे ही मेरे नोट्स अधिक समय तक मिलते हैं, मुझे यह पता लगाना मुश्किल लगता है कि मैं क्या चाहता हूं।

मुझे पता है कि मार्कडाउन टेबल बना सकता है, लेकिन क्या यह सामग्री की तालिका बनाने में सक्षम है, जो खंडों पर कूदता है, या मार्कडाउन में पृष्ठ अनुभाग परिभाषित करता है?

वैकल्पिक रूप से, क्या मार्क्सडाउन पाठक / संपादक हैं जो ऐसी चीजें कर सकते हैं। खोज भी अच्छी सुविधा होगी।

संक्षेप में, मैं इसे अपना कमाल नोट लेने का टूल बनाना चाहता हूं और एक पुस्तक लिखने की तरह काम करता हूं।


विभिन्न मार्कडाउन पार्सर्स द्वारा उत्पन्न एंकर टैग भी नहीं हैं।

यदि आप मार्कडाउन पार्सर्स जीएफएम (गिटहब फ्लेवर मार्कडाउन) या रेडकार्पेट के साथ काम कर रहे हैं, तो मैंने सामग्री की तालिका को संभालने के लिए एक विम प्लगइन लिखा था।

विशेषताएं

  1. मार्कडाउन फ़ाइलों के लिए सामग्री की तालिका जेनरेट करें।

    समर्थित मार्कडाउन पार्सर्स:

    • जीएफएम (गिटहब स्वादित मार्कडाउन)
    • लाल कालीन
  2. सामग्री की मौजूदा तालिका अद्यतन करें।

  3. स्वतः सहेजने पर सामग्री की मौजूदा तालिका अद्यतन करें।

स्क्रीनशॉट

प्रयोग

सामग्री की तालिका उत्पन्न करें

कर्सर को उस पंक्ति में ले जाएं जिसे आप सामग्री की तालिका जोड़ना चाहते हैं, फिर नीचे दिए गए कमांड को टाइप करें। कमांड सामग्री के सारणी में कर्सर के बाद शीर्षलेख उत्पन्न करेगा।

  1. :GenTocGFM

    जीएफएम लिंक शैली में सामग्री की तालिका जेनरेट करें।

    यह आदेश GitHub रिपॉजिटरीज़ में Markdown फ़ाइलों के लिए उपयुक्त है, जैसे README.md, और गिटबुक के लिए मार्कडाउन फ़ाइलें।

  2. :GenTocRedcarpet

    Redcarpet लिंक शैली में सामग्री की तालिका उत्पन्न करें।

    यह आदेश जेकिल के लिए उपयुक्त है या कहीं और रेडकार्प का उपयोग मार्कडाउन पार्सर के रूप में करता है।

    आप जीएफएम और रेडकार्प शैली टोक लिंक के बीच अंतर जानने के लिए here देख सकते हैं।

मैन्युअल रूप से सामग्री की मौजूदा तालिका अद्यतन करें

आम तौर पर आपको ऐसा करने की आवश्यकता नहीं है, सामग्री की मौजूदा तालिका डिफ़ॉल्ट रूप से सहेजने पर स्वतः अपडेट हो जाएगी। यदि आप इसे मैन्युअल रूप से करना चाहते हैं, तो बस :UpdateToc कमांड का उपयोग करें।

डाउनलोड और दस्तावेज

https://github.com/mzlogin/vim-markdown-toc


आप मार्कबी फ़ाइल से टीओसी उत्पन्न करने के लिए इस रूबी स्क्रिप्ट को आजमा सकते हैं।

#!/usr/bin/env ruby

File.open("your_file.md", 'r') do |f|
  f.each_line do |line|
    forbidden_words = ['Table of contents', 'define', 'pragma']
    next if !line.start_with?("#") || forbidden_words.any? { |w| line =~ /#{w}/ }

    title = line.gsub("#", "").strip
    href = title.gsub(" ", "-").downcase
    puts "  " * (line.count("#")-1) + "* [#{title}](\##{href})"
  end
end

मैंने सिर्फ python-markdown लिए एक एक्सटेंशन को कोड किया है, जो शीर्षकों को पुनर्प्राप्त करने के लिए अपने पार्सर का उपयोग करता है, और स्थानीय लिंक के साथ मार्कडाउन-स्वरूपित अनॉर्डर्ड सूची के रूप में एक टीओसी आउटपुट करता है। फाइल है

... और इसे मार्कडाउन स्थापना में markdown/extensions/ निर्देशिका में रखा जाना चाहिए। फिर, आपको बस इतना करना है, एक id="..." रूप में एंकर <a> टैग एक id="..." विशेषता के रूप में टाइप करें - इसलिए इस तरह के एक इनपुट पाठ के लिए:

$ cat test.md 
Hello
=====

## <a id="sect one"></a>SECTION ONE ##

something here

### <a id='sect two'>eh</a>SECTION TWO ###

something else

#### SECTION THREE

nothing here

### <a id="four"></a>SECTION FOUR

also...

... विस्तार इस तरह कहा जा सकता है:

$ python -m markdown -x md_toc test.md 
* Hello
    * [SECTION ONE](#sect one)
        * [SECTION TWO](#sect two)
            * SECTION THREE
        * [SECTION FOUR](#four)

... और फिर आप अपने मार्कडाउन दस्तावेज़ में इस टीओसी को पेस्ट कर सकते हैं (या अपने टेक्स्ट एडिटर में एक शॉर्टकट है, जो वर्तमान में खुले दस्तावेज़ पर स्क्रिप्ट को कॉल करता है, और उसके बाद परिणामी टीओसी को उसी दस्तावेज़ में सम्मिलित करता है)।

ध्यान दें कि python-markdown __main__.py पुराने संस्करणों में __main__.py मॉड्यूल नहीं है, और इस तरह, उपरोक्त के रूप में कमांड लाइन कॉल उन संस्करणों के लिए काम नहीं करेगा।


Typora आपके दस्तावेज़ में [TOC] जोड़कर सामग्री की तालिका उत्पन्न करता है।


अल्बर्टोडबोर्टोली उत्तर के आधार पर अतिरिक्त जांच और विराम चिह्नों के प्रतिस्थापन के साथ समारोह बनाया गया।

# @fn       def generate_table_of_contents markdown # {{{
# @brief    Generates table of contents for given markdown text
#
# @param    [String]  markdown Markdown string e.g. File.read('README.md')
#
# @return   [String]  Table of content in markdown format.
#
def generate_table_of_contents markdown
  table_of_contents = ""
  i_section = 0
  # to track markdown code sections, because e.g. ruby comments also start with #
  inside_code_section = false
  markdown.each_line do |line|
    inside_code_section = !inside_code_section if line.start_with?('```')

    forbidden_words = ['Table of contents', 'define', 'pragma']
    next if !line.start_with?('#') || inside_code_section || forbidden_words.any? { |w| line =~ /#{w}/ }

    title = line.gsub("#", "").strip
    href = title.gsub(/(^[!.?:\(\)]+|[!.?:\(\)]+$)/, '').gsub(/[!.,?:; \(\)-]+/, "-").downcase

    bullet = line.count("#") > 1 ? " *" : "#{i_section += 1}."
    table_of_contents << "  " * (line.count("#") - 1) + "#{bullet} [#{title}](\##{href})\n"
  end
  table_of_contents
end

विजुअल स्टूडियो कोड उपयोगकर्ताओं के लिए, एक अच्छा विचार मार्कडाउन टीओसी प्लगइन का उपयोग करना है।

इसे स्थापित करने के लिए, वीएस कोड क्विक ओपन ( Ctrl + P ) लॉन्च करें, निम्न आदेश पेस्ट करें, और एंटर दबाएं।

ext install markdown-toc

और टीओसी उत्पन्न करने के लिए, कमांड पैलेट ( Ctrl + Shift + P ) खोलें और Markdown TOC:Insert/Update option चयन करें Markdown TOC:Insert/Update option या Ctrl + M T का उपयोग करें।


आपके मार्कडाउन दस्तावेज़ में अपना टीओसी (सारांश) बनाने के 2 तरीके हैं।

1. मैन्युअल रूप से

# My Table of content
- [Section 1](#id-section1)
- [Section 2](#id-section2)

<div id='id-section1'/>
## Section 1
<div id='id-section2'/>
## Section 2

2. प्रोग्रामेटिक रूप से

उदाहरण के लिए आप एक स्क्रिप्ट का उपयोग कर सकते हैं जो आपके लिए सारांश उत्पन्न करता है, github पर मेरी प्रोजेक्ट पर एक नज़र डालें - summarizeMD एमडी -

मैंने अन्य स्क्रिप्ट / एनपीएम मॉड्यूल (उदाहरण के लिए doctoc ) की कोशिश की है लेकिन कोई भी काम करने वाले एंकरों के साथ टीओसी का पुनरुत्पादन नहीं करता है।


यहां एक उपयोगी विधि है। किसी भी मार्कडाउन संपादक में क्लिक करने योग्य संदर्भों का उत्पादन करना चाहिए।

# Table of contents
1. [Introduction](#introduction)
2. [Some paragraph](#paragraph1)
    1. [Sub paragraph](#subparagraph1)
3. [Another paragraph](#paragraph2)

## This is the introduction <a name="introduction"></a>
Some introduction text, formatted in heading 2 style

## Some paragraph <a name="paragraph1"></a>
The first paragraph text

### Sub paragraph <a name="subparagraph1"></a>
This is a sub paragraph, formatted in heading 3 style

## Another paragraph <a name="paragraph2"></a>
The second paragraph text

पैदा करता है:

विषय - सूची

  1. Introduction
  2. कुछ अनुच्छेद
    1. उप अनुच्छेद
  3. एक और अनुच्छेद

यह परिचय है

कुछ परिचय पाठ, शीर्षक 2 शैली में स्वरूपित

कुछ अनुच्छेद

पहला अनुच्छेद पाठ

उप अनुच्छेद

यह एक उप अनुच्छेद है, जो 3 शैली शीर्षक में स्वरूपित है

एक और अनुच्छेद

दूसरा अनुच्छेद पाठ


आप पहली पंक्ति में [TOC] का उपयोग कर सकते हैं और फिर नीचे, केवल एक चीज जो आपको करने की ज़रूरत है, यह सुनिश्चित कर रहा है कि शीर्षक एक ही बड़े फ़ॉन्ट में हैं। सामग्री की तालिका स्वचालित रूप से बाहर आ जाएगी। (लेकिन यह केवल कुछ मार्कडाउन संपादकों में दिखाई देता है, मैंने सभी कोशिश नहीं की)


आपके वर्कफ़्लो के आधार पर, आप strapdown को देखना चाहेंगे

यह मूल एक काल्पनिक है ( http://strapdownjs.com ) जो सामग्री की तालिका की पीढ़ी को जोड़ता है।

यदि आप एचटीएमएल फाइलों में लिखना पसंद नहीं करते हैं, तो फ्लाई पर सादा मार्कडाउन लपेटने के लिए रेपो पर एक अपाचे कॉन्फ़िगरेशन फ़ाइल है (शायद अभी तक ठीक से अपडेट नहीं की जा सकती है)।


मैंने एक पायथन स्क्रिप्ट लिखी है जो एक मार्कडाउन फ़ाइल को पार करती है और एक मार्कडाउन सूची के रूप में सामग्री की एक तालिका आउटपुट करती है: md-to-toc

मुझे मिली अन्य स्क्रिप्ट के विपरीत, एमडी-टू-टोक सही ढंग से डुप्लिकेट खिताब का समर्थन करता है। इसे इंटरनेट कनेक्शन की भी आवश्यकता नहीं है, इसलिए यह किसी भी एमडी फाइल पर काम करता है, न केवल सार्वजनिक रिपो से उपलब्ध है।


आप इसे आज़मा सकते हैं।

# Table of Contents
1. [Example](#example)
2. [Example2](#example2)
3. [Third Example](#third-example)

## Example
## Example2
## Third Example

मैंने अभी भी वही काम करना शुरू कर दिया है (मार्कडाउन में नोट्स लें)। मैं MarkdownPreview प्लगइन के साथ सब्लिमे टेक्स्ट 2 का उपयोग करता हूं। अंतर्निहित मार्कडाउन पार्सर [TOC] का समर्थन करता है।


# Table of Contents
1. [Example](#example)
2. [Example2](#example2)
3. [Third Example](#third-example)

## Example [](#){name=example}
## Example2 [](#){name=example2}
## [Third Example](#){name=third-example}

यदि आप मार्कडाउन अतिरिक्त का उपयोग करते हैं, तो यह न भूलें कि आप लिंक, हेडर, कोड बाड़ और छवियों में विशेष विशेषताओं को जोड़ सकते हैं।
https://michelf.ca/projects/php-markdown/extra/#spe-attr


आप इसे इस बैश वन-लाइनर का उपयोग करके उत्पन्न कर सकते हैं। मान लें कि आपकी FILE.md फ़ाइल FILE.md

echo "## Contents" ; echo ; 
cat FILE.md | grep '^## ' | grep -v Contents | sed 's/^## //' | 
  while read -r title ; do 
    link=$(echo $title | tr 'A-Z ' 'a-z-') ; 
    echo "- [$title](#$link)" ; 
    done

यदि आप ग्रहण का उपयोग करते हैं तो आप Ctrl + O (रूपरेखा) शॉर्टकट का उपयोग कर सकते हैं, यह सामग्री की तालिका के बराबर दिखाएगा और अनुभाग शीर्षक (स्वतः पूर्ण) में खोज करने की अनुमति देगा।

आप रूपरेखा दृश्य भी खोल सकते हैं (विंडो -> शो देखें -> रूपरेखा) लेकिन इसमें कोई स्वत: पूर्ण खोज नहीं है।


आप "एक मार्कअप प्रारूप को दूसरे में परिवर्तित करने" के लिए pandoc , "स्विस-आर्मी चाकू" का भी उपयोग कर सकते हैं। यदि आप --toc तर्क की आपूर्ति करते हैं तो यह स्वचालित रूप से आउटपुट दस्तावेज़ में सामग्री की एक तालिका उत्पन्न कर सकता है।

संकेत: यदि आप html आउटपुट में सामग्री की एक टेबल चाहते हैं, तो आपको एक स्टैंडअलोन दस्तावेज़ उत्पन्न करने की भी आवश्यकता है।

उदाहरण खोल कमांड लाइन:

./pandoc -s --toc input.md -o output.html

उम ... मार्कडाउन के शीर्षलेख का उपयोग करें !?

अर्थात्:

# यह <h1> के बराबर है

## यह <h2> के बराबर है

### यह <h3> के बराबर है

कई संपादक आपको एक टीओसी दिखाएंगे। आप शीर्षक टैग के लिए भी grep कर सकते हैं और अपना खुद का बना सकते हैं।

उम्मीद है की वो मदद करदे!

--JF







markdown