Github aromalı işaretlemede otomatik TOK


215

Github Aromalı Markdown kullanarak otomatik İçindekiler oluşturmak mümkün müdür ?


2
işaretli toc deneyin , çok daha kolay olamaz.
jonschlinkert

1
Linux kullanıyorsanız ve herhangi bir ek yazılım yüklemek istemiyorsanız, github-markdown-toc'u deneyin (sadece başlık altında awk).
shorrty

Ben html içine yeşim şablonları içinde birden fazla markdown dosyaları oluşturma. Bu yüzden bir markdown dosyasında bulunandan daha fazla bilgi içermek için TO'ma ihtiyacım var. Benim çözümüm, node.js kütüphanesi ile HTML kodunun kendisinden TOC'yi oluşturmaktırtoc
Plato

2
Yukarıda listelenen işaretli toc dahil olmak üzere, "doğru anlamaya" çalışan üç farklı etiketleme TOC jeneratörleri oluşturdum. markdown-toc 's kullanımları gerçek markdown ayrıştırıcı (benim favorim dikkat çekici , [commonmark] (commonmark.org) spesifikasyonlarına uygundur TOC'lar güncellenmesini sağlayan bir CLI ve API vardır ve şimdi projelerin binlerce kullanılır
jonschlinkert

Yanıtlar:


141

Github aromalı işaretleme için bir toc oluşturmak için iki seçenek oluşturdum:

DocToc Komut Satırı Aracı ( kaynak ) node.js gerektirir

Kurulum:

npm install doctoc

Kullanımı:

npx doctoc . geçerli ve tüm alt dizinlerdeki tüm işaretleme dosyalarına içindekiler tablosu eklemek için.

DocToc WebApp

Önce çevrimiçi denemek istiyorsanız, doctoc sitesine gidin, işaretleme sayfasının bağlantısını yapıştırın ve etiketleme dosyanızın üstüne ekleyebileceğiniz bir içerik tablosu oluşturur.

Github Wikileri ve Çapaları

Matthew Flaschen'nin aşağıdaki yorumlarda belirttiği gibi, wiki sayfaları için GitHub daha önce doctocbağlı olan çapaları üretmemişti .

GÜNCELLEME: Ancak bu sorunu çözdüler .


3
İçindekiler iyi görünüyor, ancak GitHub gerçek bölümler için bağlantı oluşturmaz, bu nedenle bağlantılar kopar. Şimdilik bunları manuel olarak ekleyeceğim. Bu bir GitHub wiki'si.
Matthew Flaschen

2
Bu, GitHub sorunu, wiki'deki başlıklar için Otomatik tutturucular olarak kaydedilir .
Matthew Flaschen

1
Bunu benim gibi sinir bozucu bulursanız, lütfen @ MatthewFlaschen'ın yorumundaki bağlantıya gidin ve bu sorunu + 1'leyin.
blak3r

2
@MatthewFlaschen Bağlantınız koptu - yeni adres github.com/gollum/gollum/issues/380
Adam Spires

3
DocToc web uygulaması çalışmıyor. Markdown-toc
DynamicDan

23

GitHub Sayfaları (temel olarak Jekyll için bir sarıcıdır) , tüm Maruku'yu uygulayan ve bu nedenle otomatik olarak oluşturulan bir içindekiler tablosuna destek veren kramdown kullanıyor gibi görünüyor bir tocözellik aracılığıyla :

* auto-gen TOC:
{:toc}

İlk satır sırasız bir liste başlatır ve aslında atılır.

Bu, belgedeki üstbilgileri kullanarak iç içe dizisiz listeler kümesiyle sonuçlanır.

Not: Bu, yorumlarda veya wiki sayfalarında kullanılan GitHub Aromalı İşaretleme (GFM) için değil, GitHub Sayfaları için çalışmalıdır. AFAIK bunun için bir çözüm mevcut değil.


1
Bu işe yaramıyor. Bu metni ortaya çıkarır. Böyle bir TOK kullanan bir dosyayı bağlayabilir misiniz?
Geoffrey De Smet


2
Bunun bir Maruku özelliği olduğunu unutmayın, kendi başına Markdown değil ve muhtemelen GH Aromalı Markdown bile değil. GH sayfaları Maruku'yu kullanıyor.
Rebecca Scott

@KevinSuttle emin misin? Jekyll redcarpet içerir, ancak (GH farklı jekyll yapılandırma kullanmadığı sürece) maruku hala varsayılan benziyor github.com/mojombo/jekyll/blob/master/lib/jekyll.rb#L66
Rebecca Scott

10
@BenScott Çözümünüz yalnızca github sayfaları için çalışıyor gibi görünüyor. Github wiki için bir çözüm biliyor musunuz?
yeniden

13

Markdown dosyalarını Vim ile düzenlerseniz, bu vim-markdown-toc eklentisini deneyebilirsiniz .

Kullanımı basit, sadece imlecinizi eklemek istediğiniz yere taşıyın İçindekiler ve çalıştırın :GenTocGFM, bitti!

Ekran görüntüleri:

vim-markdown-TOC

Özellikleri:

  1. Markdown dosyaları için toc oluşturun. (GitHub Aromalı Markdown ve Redcarpet'i destekleyin)

  2. Mevcut toc'yi güncelleyin.

  3. Kaydetme sırasında otomatik güncelleme toc.


.md dosyaları ve diğer editörler / eklentiler üzerinde işbirliği yaptığınızda, diğer tüm taahhütlerde TOK'da değişiklik almamak için ortak bir TOC stili bulduğunuzdan emin olun. Bunun için olası eklemeler ~/.vimrc: ile liste karakterini değiştir let g:vmt_list_item_char = "-", TOC ile başlıkları ekle let g:vmt_include_headings_before = 1. Daha fazla bilgi için doküman seçenekleri bölümüne bakın , örn. Çit metninin nasıl değiştirileceği.
Wolfson

9

Otomatik değildir, ancak Notepad ++ normal ifadelerini kullanır:

Tümünü önce ikincisiyle değiştir (başlık içermeyen tüm satırları kaldırır)

^##(#?)(#?)(.*?)$(.|\r|\n)*?(?=^##|\z)
-\1\2 [\3](#\3)\n

Sonra (III. Başlıkları boşluklara dönüştürür)

-##
        -

Ardından (II. Başlıkları boşluklara dönüştürür)

-#
    -

Ardından (bağlantı başlığının başında ve sonunda kullanılmayan karakterleri kaldırın)

\[ *((?:(?![ .:#!\?;]*\])[^#])*)[ #:!\?;]*\]
[\1]

Ardından (boşluk yerine son jetonları küçük harfe ve tireye dönüştür)

\]([^ \r\n]*) ([^\r\n ]*)
]\L\1-\2

Kullanılmayan son kiloları ve ilk kısa çizgileri kaldırın:

(?:()[-:;!\?#]+$|(\]#)-)
\1\2

Bağlantılardaki yararsız karakterleri kaldırın:

(\].*?)(?:\(|\))
\1

Ve son bağlantılara parantez ekleyin:

\](?!\()(.*?)$
\]\(\1\)

Ve voilà! Yeterince zaman tekrarlarsanız bunu global bir makroya bile koyabilirsiniz.


9

Önerilen geçici çözümler dışında bu mümkün değildir.

Ben önerdi support@github.com ve Kramdown TOK uzantısı ve diğer olasılıkları Steven! Ragnarök şöyle cevap verdi:

Öneri ve bağlantılar için teşekkürler. Ekibin görmesi için dahili özellik istek listemize ekleyeceğim.

Bu soruyu gerçekleşene kadar oylayalım.

Başka bir geçici çözüm Markdown kullanımı Asciidoc, etmektir Tocs hale yapar . Bugünlerde içeriğim için bu yaklaşıma geçtim.


Umarım GFM bunu bir gün sağlayacaktır. SourceForge's Markdown varsayılan olarak bu İçindekileri oluşturmak için sözdizimine sahipken, gerçekten benim için bir courius şey .
Chetabahana

8

Github Aromalı Markdown, Markdown motoru olarak RedCarpet kullanıyor. Gönderen redcarpet repo :

: with_toc_data - her bölüme bağlanmaya izin vermek için çıkış HTML'sindeki her başlığa HTML bağlantılarını ekleyin.

Görünüşe göre Github'da mümkün olmayan bu bayrağı ayarlamak için oluşturucu seviyesine gitmeniz gerekiyor. Bununla birlikte, Github Pages'daki en son güncelleme , başlıklar için otomatik sabitlemenin açık olduğu ve bağlanabilir başlıklar oluşturduğu görülüyor. Tam olarak ne istediğinizi değil, ancak belgeniz için bir TOC oluşturmanıza yardımcı olabilir (elle de olsa).


5

Visual Studio Code ile çalışırken mardown dosyası için bir içindekiler tablosu elde etmenin çok uygun bir yolu Markdown-TOC uzantısıdır .

Mevcut işaretleme dosyalarına bir toc ekleyebilir ve hatta kaydetme sırasında toc'u güncel tutabilir.

resim açıklamasını buraya girin


Başka bir güzel VS kodu eklentisi (GitHub & GitLab aromalı TOC dahil olmak üzere güzel özelliklere sahip harika .md desteği) markdown -all-in-one .
Wolfson


3

Gitdown , Github için bir işaretleme ön işlemcisidir .

Gitdown'u kullanarak şunları yapabilirsiniz:

  • İçindekiler Oluştur
  • Ölü URL'leri ve Parça Tanımlayıcılarını bulma
  • Değişkenleri dahil et
  • Dosyaları dahil et
  • Dosya boyutunu al
  • Rozet Oluştur
  • Basım tarihi
  • Depo hakkındaki bilgileri yazdırın

Gitdown, GitHub deposu için bir belge sayfası tutmayla ilgili ortak görevleri kolaylaştırır.

Kullanımı basittir:

var Gitdown = require('gitdown');

Gitdown
    // Gitdown flavored markdown.
    .read('.gitdown/README.md')
    // GitHub compatible markdown.
    .write('README.md');

Ayrı bir komut dosyası olarak ya da derleme komut dosyası yordamının ( Gulp gibi ) bir parçası olarak kullanabilirsiniz.



1

Meslektaşım @schmiedc ve ben içindekiler tablosu eklemek / yenilemek için mükemmel kütüphaneyi kullanan düğmenin soluna yeni bir düğme yükleyen bir GreaseMonkey betiği oluşturduk .TOCh1markdown-js

Doctoc gibi çözümlere göre avantajı GitHub'ın wiki düzenleyicisine entegre olması ve kullanıcıların komut satırlarında çalışmalarına gerek duymaması (ve kullanıcıların aşağıdaki gibi araçları yüklemelerini gerektirmesidir) node.js ). Chrome'da, Uzantılar sayfasına sürükleyip bırakarak çalışır, Firefox'ta GreaseMonkey uzantısını yüklemeniz gerekir.

Düz işaretleme ile çalışır (yani, işaretleme için bir GitHub uzantısı olduğu için kod bloklarını doğru işlemez). Katkıları bekliyoruz.


Çok teşekkürler! Tampermonkey'i Chrome'a ​​yüklemek için bu cevabın önerdiği şekilde kullanmak zorunda kaldım ve işe yaradı! Komut dosyanızı github deposunda normal markdown dosyaları için TOC'ler oluşturmak için ne yapmak gerekir?
lifebalance

1

Birçok insan geçici çözüm sağladığından, bu soruya doğrudan bir cevap değildir. Bir TOK oluşturmanın bugüne kadar henüz Github tarafından resmi olarak desteklendiğini düşünmüyorum. GitHub'ın GFM önizleme sayfalarında bir İçindekiler Tablosu oluşturmasını istiyorsanız, lütfen resmi özellik isteği sorunu hakkındaki tartışmaya katılın .


0

Şu anda markdown sözdizimini kullanmak mümkün değildir ( GitHub'da devam eden tartışmaya bakın ), ancak aşağıdaki gibi bazı harici araçları kullanabilirsiniz:


Alternatif olarak AsciiDocbunun yerine (örneğin README.adoc), örn.

:toc: macro
:toc-title:
:toclevels: 99
# Title

## A

### A2

## B

### B2

Bu yorumda önerildiği gibi . Demoyu buradan kontrol edin .


İçerik Generator (raychenon / play-masa-içeriğini) Of Çevrimiçi Tablosunun barındırma tableofcontent.eu . Sebebiyle AWS maliyetlere durduruldu "
Michael Freidgeim

0

İçin Github en Texteditor Atom üretir bu müthiş eklenti (veya "paket" Atom-lingo), kontrol "çözümlü markdown gelen başlıklarının TOK (İçindekiler tablosunu)" dosyaları:

markdown-toc

Atom-paketi olarak kurulduktan sonra ctrl-alt-c, mevcut imleç konumundaki markdown-doc yapınıza dayalı bir TOC eklemek için kısayolu kullanabilirsiniz ...

Ekran görüntüleri:

resim açıklamasını buraya girin

Atom Keybindings

markdown-toc, Eklentiyi Atom'da kontrol etmek için aşağıdaki varsayılan anahtar bağlantılarını verir:

  • ctrl-alt-c => imleç konumunda TOC oluştur
  • ctrl-alt-u => TOC'yi güncelle
  • ctrl-alt-r => TOC'yi sil

Eklenti Özellikleri (projenin README'sinden)

  • Bağlantı etiketleri aracılığıyla otomatik bağlantı, örn. # A 1#a-1
  • Derinlik kontrol [1-6] depthFrom:1vedepthTo:6
  • İle bağlantıları etkinleştirme veya devre dışı bırakma withLinks:1
  • İle kaydetme sırasında listeyi yenile updateOnSave:1
  • Sipariş listesini (1. ..., 2. ...) ile birlikte kullanın orderedList:0

0

İşte bugün bunun için birlikte attığım bir kabuk senaryosu. İhtiyaçlarınız için ayarlamanız gerekebilir, ancak iyi bir başlangıç ​​noktası olmalıdır.

cat README.md \
    | sed -e '/```/ r pf' -e '/```/,/```/d' \
    | grep "^#" \
    | tail -n +2 \
    | tr -d '`' \
    | sed 's/# \([a-zA-Z0-9`. -]\+\)/- [\1](#\L\1)/' \
    | awk -F'(' '{for(i=2;i<=NF;i++)if(i==2)gsub(" ","-",$i);}1' OFS='(' \
    | sed 's/^####/      /' \
    | sed 's/^###/    /' \
    | sed 's/^##/  /' \
    | sed 's/^#//'

Herkes bu son # değiştirmeleri yapmanın daha iyi bir yolunu biliyorsa, lütfen bir yorum ekleyin. Ben çeşitli şeyler denedim ve hiçbiri ile mutlu değildi, bu yüzden sadece kaba zorladı.


0

Şimdi bunu yapan bir GitHub Eylemi var:

https://github.com/marketplace/actions/toc-generator

  1. İçindekiler (konum) konumunu belirtin örn. README.md
<!-- START doctoc -->
<!-- END doctoc -->
  1. Kurulum iş akışı örn. .github/workflows/toc.yml
on: push
name: TOC Generator
jobs:
  generateTOC:
    name: TOC Generator
    runs-on: ubuntu-latest
    steps:
      - uses: technote-space/toc-generator@v2

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.