TOC automático na remarcação com sabor do github

215

É possível gerar um sumário automático usando o Github Flavored Markdown ?

Roberto Aloi
fonte
2
tente marcado com toc , não pode ficar muito mais fácil.
Jschlinkert #
1
Se você usa o linux e não deseja instalar nenhum software adicional, tente github-markdown-toc (apenas awk under the hood).
shorrty
Estou processando vários arquivos de remarcação dentro de modelos de jade em html. Por isso, preciso que meu sumário contenha mais informações do que as encontradas em um arquivo de remarcação. Minha solução é gerar o TOC a partir do próprio código HTML com a biblioteca node.jstoc
Platão
2
Criei três geradores de TOC de descontos diferentes tentando "acertar", incluindo os toc-listados acima. markdown-toc é o meu favorito, ele usa um analisador de markdown real ( notável que segue a especificação [commonmark] (commonmark.org), permite que os TOCs sejam atualizados, tem uma CLI e API e agora é usado em milhares de projetos
jonschlinkert

Respostas:

141

Eu criei duas opções para gerar um toc para a remarcação com sabor do github:

A Ferramenta de Linha de Comando DocToc ( origem ) requer node.js

Instalação:

npm install doctoc

Uso:

npx doctoc . para adicionar um índice a todos os arquivos de remarcação nos diretórios atual e em todos os subdiretórios.

DocToc WebApp

Se você quiser experimentá-lo online primeiro, acesse o site doctoc , cole o link da página de remarcação e ele gerará uma tabela de conteúdo que você pode inserir na parte superior do arquivo de remarcação.

Wikis e âncoras do Github

Como Matthew Flaschen apontou nos comentários abaixo, para suas páginas wiki o GitHub anteriormente não gerou as âncoras das quais doctocdepende.

ATUALIZAÇÃO: No entanto, eles corrigiram esse problema .

Thorsten Lorenz
fonte
3
O sumário parece bom, mas o GitHub não gera âncoras para as seções reais; portanto, os links quebram. Vou adicioná-los manualmente por enquanto. Este é um wiki do GitHub.
Matthew Flaschen
2
Isso é registrado como um problema do GitHub, âncoras automáticas para títulos no wiki .
Matthew Flaschen
1
Se você acha isso tão irritante quanto eu, acesse o comentário de @ MatthewFlaschen e marque esta questão com +1.
Blues3r # 9/12
2
@MatthewFlaschen seu link quebrou - o novo endereço é github.com/gollum/gollum/issues/380
Adam Spires
3
o aplicativo da web DocToc não funciona. Eu costumava remarcação-toc
DynamicDan
23

As páginas do GitHub (que são basicamente um wrapper para Jekyll) parecem usar o kramdown , que implementa todo o Maruku , e, portanto, tem suporte para um índice gerado automaticamente através de um tocatributo:

* auto-gen TOC:
{:toc}

A primeira linha apenas inicia uma lista não ordenada e é realmente descartada.

Isso resulta em um conjunto aninhado de listas não ordenadas, usando os cabeçalhos no documento.

Nota: isso deve funcionar para as páginas do GitHub, não para o GitM Flavored Markdown (GFM), conforme usado nos comentários ou nas páginas da wiki. AFAIK não existe uma solução para isso.

Rebecca Scott
fonte
1
Isso não funciona. Apenas processa esse texto. Você pode vincular um arquivo que usa esse sumário?
Geoffrey De Smet
2
Observe que esse é um recurso do Maruku, não o Markdown por si só, e provavelmente nem o GH Flavored Markdown. As páginas GH usam Maruku.
Rebecca Scott
@KevinSuttle você tem certeza? Jekyll inclui redcarpet mas maruku ainda se parece com o padrão (a menos GH usa uma configuração Jekyll diferente) github.com/mojombo/jekyll/blob/master/lib/jekyll.rb#L66
Rebecca Scott
10
@BenScott Parece que sua solução funciona apenas para páginas do github. Você conhece uma solução para o wiki do github?
Reprogramador
13

Se você editar arquivos Markdown com o Vim, poderá experimentar este plugin vim-markdown-toc .

O uso é simples, basta mover o cursor para o local que você deseja anexar e executar :GenTocGFM, pronto!

Imagens:

vim-markdown-toc

Recursos:

  1. Gere toc para arquivos Markdown. (Suporte ao GitHub com sabor de Markdown e Redcarpet)

  2. Atualize o toc existente.

  3. Atualização automática toc ao salvar.

Zhuang Ma
fonte
certifique-se de encontrar um estilo comum de sumário, caso você colabore em arquivos .md e diferentes editores / plug-ins estejam envolvidos para não obter alterações no sumário em todos os outros commit. Possíveis adições ~/.vimrcpara: alterar o caractere da lista com let g:vmt_list_item_char = "-", incluir títulos antes do sumário com let g:vmt_include_headings_before = 1. Consulte a seção de opções de documentos para obter mais informações, por exemplo, como alterar o texto da cerca.
Wolfson
9

Não é automático, mas usa expressões regulares do Notepad ++:

Substitua todos os primeiros a cada segundo (remove todas as linhas que não têm cabeçalhos)

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

Então (converte os cabeçalhos III em espaços)

-##
        -

Então (converte os cabeçalhos II em espaços)

-#
    -

Em seguida (remova os caracteres não utilizados no início e no final do título do link)

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

Em seguida (converta os últimos tokens em minúsculas e trace em vez de espaços)

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

Remova libras finais não utilizadas e traços iniciais:

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

Remova caracteres inúteis nos links:

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

E, finalmente, adicione parênteses nos links finais:

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

E voilà! Você pode até colocar isso em uma macro global se repetir o tempo suficiente.

Mikaël Mayer
fonte
9

Não é possível, exceto pelas soluções alternativas propostas.

I proposta de extensão Kramdown TOC e outras possibilidades de [email protected] e Steven! Ragnarök respondeu com o habitual:

Obrigado pela sugestão e links. Vou adicioná-lo à nossa lista de solicitações de recursos internos para a equipe ver.

Vamos votar esta questão até que ela aconteça.

Outra solução alternativa é usar o Asciidoc em vez do Markdown, que processa os TOCs . Hoje, mudei para essa abordagem para o meu conteúdo.

Ciro Santilli adicionou uma nova foto
fonte
Eu preferiria que a GFM o fornecesse algum dia. É realmente uma coisa de cômodo para mim, enquanto o Markdown do SourceForge tem a sintaxe para gerar este sumário por padrão.
Chetabahana
8

O Github Flavored Markdown usa o RedCarpet como seu mecanismo de Markdown. No repositório RedCarpet :

: with_toc_data - adicione âncoras HTML a cada cabeçalho no HTML de saída, para permitir o vínculo com cada seção.

Parece que você precisaria chegar ao nível do renderizador para definir esse sinalizador, o que não é possível no Github, obviamente. No entanto, na atualização mais recente do Github Pages, parece que a ancoragem automática está ativada para cabeçalhos, criando cabeçalhos vinculáveis. Não é exatamente o que você deseja, mas pode ajudar a criar um sumário para o seu documento um pouco mais fácil (embora manualmente).

Kevin Suttle
fonte
5

Uma maneira muito conveniente de obter um índice para um arquivo de mardown ao trabalhar com o Visual Studio Code é a extensão Markdown-TOC .

Ele pode adicionar um toc aos arquivos existentes e até mesmo mantê-lo atualizado para salvar.

insira a descrição da imagem aqui

Mathias Dpunkt
fonte
Outro bom plug-in de código VS (excelente suporte a .md com recursos interessantes, incluindo o TOC com sabor GitHub e GitLab) é o markdown-all-in-one .
Wolfson
4

É possível gerar uma página da web automaticamente com http://documentup.com/ a partir do README.mdarquivo Não está criando um sumário, mas para muitos pode resolver o motivo de querer criar um sumário.

Outra alternativa ao Documentup é o Flatdoc: http://ricostacruz.com/flatdoc/

Nils
fonte
3

Gitdown é um pré-processador de remarcação para o Github.

Usando o Gitdown, você pode:

  • Gerar sumário
  • Encontre URLs mortos e identificadores de fragmentos
  • Incluir variáveis
  • Incluir arquivos
  • Obter tamanho do arquivo
  • Gerar emblemas
  • Data de impressão
  • Imprimir informações sobre o próprio repositório

O Gitdown simplifica tarefas comuns associadas à manutenção de uma página de documentação para um repositório GitHub.

Usá-lo é simples:

var Gitdown = require('gitdown');

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

Você pode tê-lo como um script separado ou como parte da rotina de criação de scripts (como Gulp ).

Gajus
fonte
1

Meu colega @schmiedc e eu criamos um script GreaseMonkey que instala um novo TOCbotão à esquerda do h1botão que usa o excelentemarkdown-js biblioteca para adicionar / atualizar um índice.

A vantagem sobre soluções como o doctoc é que ele se integra ao editor de wiki do GitHub e não precisa que os usuários trabalhem em sua linha de comando (e exige que os usuários instalem ferramentas como node.js ). No Chrome, ele funciona arrastando e soltando na página Extensões. No Firefox, você precisará instalar a extensão GreaseMonkey.

Ele funcionará com remarcações simples (ou seja, não manipula blocos de código corretamente, pois é uma extensão do GitHub para remarcações). Contribuições são bem-vindas.

Johannes Schindelin
fonte
Muito obrigado! Eu tive que usar o Tampermonkey, conforme sugerido por esta resposta, para instalá-lo no Chrome, e funcionou! O que seria necessário para o seu script gerar TOCs para arquivos de remarcação normais no repositório do github?
lifebalance
1

Esta não é uma resposta direta a esta pergunta, pois muitas pessoas forneceram soluções alternativas. Eu não acho que a geração de um sumário tenha sido oficialmente suportada pelo Github até o momento. Se você deseja que o GitHub renderize um Sumário nas páginas de visualização do GFM automaticamente, participe da discussão sobre o problema oficial de solicitação de recurso .

Xiaodong Qi
fonte
0

Atualmente, não é possível usar a sintaxe de remarcação (consulte a discussão em andamento no GitHub ); no entanto, você pode usar algumas ferramentas externas, como:


Como alternativa, use em AsciiDocvez (por exemplo README.adoc), por exemplo

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

## A

### A2

## B

### B2

como sugerido neste comentário . Confira a demonstração aqui .

kenorb
fonte
A hospedagem do Online Table Of Content Generator (raychenon / play-table-contents) no tableofcontent.eu "foi interrompida devido aos custos da AWS.
Michael Freidgeim
0

Para o Texteditor Atom do Github, confira este incrível plugin (ou "pacote" no Atom-lingo), que gera "TOC (índice) das manchetes dos arquivos analisados" :

markdown-toc

Depois de instalado como pacote Atom, você pode usar o atalho ctrl-alt-c para inserir um sumário com base na sua estrutura de markdown-doc na posição atual do cursor ...

Imagens:

insira a descrição da imagem aqui

Atom Keybindings

markdown-toc fornece as seguintes combinações de teclas padrão para controlar o plug-in no Atom:

  • ctrl-alt-c => criar sumário na posição do cursor
  • ctrl-alt-u => atualizar o sumário
  • ctrl-alt-r => excluir sumário

Recursos de plug-in (do README do projeto)

  • Ligação automática através de etiquetas de ancoragem, por exemplo # A 1#a-1
  • Controle de profundidade [1-6] com depthFrom:1edepthTo:6
  • Ativar ou desativar links com withLinks:1
  • Atualizar lista ao salvar com updateOnSave:1
  • Use a lista ordenada (1. ..., 2. ...) com orderedList:0
Mayinx
fonte
0

Aqui está um script de shell que juntei hoje para isso. Pode ser necessário ajustá-lo para suas necessidades, mas deve ser um bom ponto de partida.

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/^#//'

Se alguém souber a melhor maneira de fazer essas # substituições finais, adicione um comentário. Eu tentei várias coisas e não estava feliz com nada, então eu apenas a forcei.

John Eikenberry
fonte
0

Agora há uma ação do GitHub realizando isso:

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

  1. Especifique a localização do sumário (opção), por exemplo README.md
<!-- START doctoc -->
<!-- END doctoc -->
  1. Configuração do fluxo de trabalho, por exemplo .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
emazzotta
fonte