Markdown para crear páginas y tabla de contenido?


Empecé a usar mardown para tomar notas.

Utilizo marcado para ver mis notas de descuento y su hermoso.

Pero a medida que mis notas se hacen más largas me resulta difícil encontrar lo que quiero.

Sé que markdown puede crear tablas, pero ¿es capaz de crear una tabla de contenido, que salta a secciones, o definir secciones de página en markdown?

Alternativamente, hay lectores/editores markdown que podrían hacer tales cosas. Búsqueda sería una buena característica para tener demasiado.

En resumen, quiero que sea mi impresionante herramienta para tomar notas y funciones como escribir un libro, etc.

 171
Author: resting, 2012-08-14

25 answers

MultiMarkdown Composer parece generar una tabla de contenido para ayudar durante la edición.

También puede haber una u otra biblioteca, que puede generar TDC: ver Extensión TDC de Python Markdown.

 16
Author: mxro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-04 20:24:40

Puedes probar esto.

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

## Example
## Example2
## Third Example
 211
Author: Rick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-06 17:14:56

Aquí hay un método útil. Debería producir referencias clicables en cualquier editor de MarkDown.

# 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

Produce:

Índice

  1. Introducción
  2. Algún párrafo
    1. Apartado
  3. Otro párrafo

Esta es la introducción

Algún texto de introducción, formateado en estilo de encabezado 2

Algún párrafo

El primer párrafo texto

Apartado

Este es un subpárrafo, formateado en estilo de encabezado 3

Otro párrafo

El texto del segundo párrafo

 93
Author: Tum,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:27

Puedes intentar este script ruby para generar el ÍNDICE a partir de un archivo markdown.

#!/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
 21
Author: albertodebortoli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-02 17:51:35
# 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}

Si utiliza markdown extra, no olvide que puede agregar atributos especiales a enlaces, encabezados, cercas de código e imágenes.
https://michelf.ca/projects/php-markdown/extra/#spe-attr

 18
Author: Greg Bosen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-08 22:09:11

Hay 2 formas de crear tu TOC (resumen) en tu documento de markdown.

1. Manualmente

# 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. Programáticamente

Puedes usar por ejemplo un script que genere un resumen para ti, echa un vistazo a mi proyecto en github - Resumen -

He intentado también otro módulo script/npm (por ejemplo doctoc) pero nadie reproduce un TOC con anclas de trabajo.

 16
Author: Luca Davanzo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-03 13:36:50

Para los usuarios de Visual Studio Code, una buena idea es usar el complemento Markdown TOC.

Para instalarlo, inicie el Código VS Quick Open (Ctrl+P), pegue el siguiente comando y presione entrar.

ext install markdown-toc

Y para generar la tabla de contenido, abra la paleta de comandos (Ctrl+Cambio+P) y seleccione el Markdown TOC:Insert/Update option o utilizar Ctrl+MT.

 14
Author: coderade,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-10 20:59:41

Para el beneficio de aquellos de nosotros haciendo README.md archivos en Atom (cómo encontré este hilo):

apm install markdown-toc

Https://atom.io/packages/markdown-toc

 6
Author: msanford,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-26 21:45:39

Escribí un script python que analiza un archivo markdown y muestra una tabla de contenido como una lista markdown: md-to-toc

A diferencia de otros scripts que he encontrado, md-to-toc soporta correctamente títulos duplicados. Tampoco requiere una conexión a Internet, por lo que funciona en cualquier archivo md, no solo en aquellos disponibles desde un repositorio público.

 5
Author: Antonio Maiorano,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-05 12:52:28

Acabo de codificar una extensión para python-markdown, que usa su analizador para recuperar encabezados, y genera una tabla de contenido como una lista desordenada con formato Markdown con enlaces locales. El archivo es

... y debe colocarse en el directorio markdown/extensions/ en la instalación de markdown. Entonces, todo lo que tienes que hacer es escribir etiquetas anchor <a> con un atributo id="..." como referencia, así que para un texto de entrada como este:

$ 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...

... la extensión se puede llamar así:

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

... y luego puede pegar esta tabla de contenido en su documento markdown (o tener un acceso directo en su editor de texto, que llama al script en el documento abierto actualmente, y luego inserta la tabla de contenido resultante en el mismo documento).

Tenga en cuenta que las versiones anteriores de python-markdown no tienen un módulo __main__.py, y como tal, la llamada de línea de comandos anterior no funcionará para esas versiones.

 5
Author: sdaau,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-07 22:59:03

Las etiquetas de anclaje generadas por diferentes analizadores de Markdown no son pares.

Si estás trabajando con analizadores de Markdown GFM (GitHub con sabor a Markdown) o Redcarpet, escribí un plugin de Vim para manejar la tabla de contenido.

Características

  1. Generar tabla de contenido para los archivos Markdown.

    Analizadores de Markdown soportados:

    • GFM (Markdown con sabor a GitHub)
    • Redcarpet
  2. Actualizar la tabla existente de contenido.

  3. Actualización automática de la tabla de contenido existente al guardar.

Capturas de pantalla

vim-markdown-toc

Uso

Generar índice

Mueva el cursor a la línea que desea agregar la tabla de contenido, luego escriba un comando a continuación. El comando generará encabezados después del cursor en la tabla de contenido.

  1. :GenTocGFM

    Generar tabla de contenido en estilo de enlace GFM.

    Esto command es adecuado para archivos Markdown en repositorios de GitHub, como README.md y archivos de Markdown para GitBook.

  2. :GenTocRedcarpet

    Generar tabla de contenido en estilo de enlace Redcarpet.

    Este comando es adecuado para Jekyll o cualquier otro uso Redcarpet como su analizador de Markdown.

    Puede ver aquí para conocer las diferencias entre los enlaces tdc de estilo GFM y Redcarpet.

Actualizar la tabla de contenido existente manualmente

Generalmente no necesita hacer esto, la tabla de contenido existente se actualizará automáticamente al guardar de forma predeterminada. Si desea hacerlo manualmente, simplemente use el comando :UpdateToc.

Descargas y documentos

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

 5
Author: Zhuang Ma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-25 04:57:18

Puede generarlo usando este bash one-liner. Asume que tu archivo markdown se llama 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
 5
Author: Asim Jalis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-12 13:23:52

Si desea utilizar un nodo javascript/.herramienta js, echa un vistazo a markdown-toc .

 4
Author: jonschlinkert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-27 02:07:42

Acabo de empezar a hacer lo mismo (tomar notas en Markdown). Utilizo Sublime Text 2 con el plugin MarkdownPreview . El analizador integrado markdown soporta [TOC].

 3
Author: Martin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-12 05:39:04

Typora genera Tabla de Contenido añadiendo [TOC] a tu documento.

 3
Author: Paul Jurczak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-07 11:27:13

También puedes usar pandoc, la "navaja suiza" para convertir "un formato de marcado en otro". Puede generar automáticamente una tabla de contenido en el documento de salida si proporciona el argumento --toc.

Sugerencia: Si desea una tabla de contenido en la salida html, también debe proporcionar -s que genera un documento independiente.

Ejemplo de línea de comandos de shell:

./pandoc -s --toc input.md -o output.html
 3
Author: M.Geiger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-15 12:32:25

Basado en respuesta albertodebortoli creó la función con comprobaciones adicionales y sustitución de signos de puntuación.

# @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
 2
Author: dmigous,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-13 12:37:55

MultiMarkdown 4.7 tiene una macro {{TOC}} que inserta una tabla de contenido.

 2
Author: Michael R,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-16 01:05:20

Dependiendo de su flujo de trabajo, es posible que desee mirar strapdown

Esa es una bifurcación de la original ( http://strapdownjs.com ) que añade la generación de la tabla de contenido.

Hay un archivo de configuración de apache en el repositorio (puede que aún no esté actualizado correctamente) para ajustar markdown sobre la marcha, si prefiere no escribir en archivos html.

 1
Author: dgn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-23 13:59:29

No estoy seguro de cuál es la documentación oficial para markdown. La referencia cruzada se puede escribir solo entre corchetes [Heading], o con corchetes vacíos [Heading][].

Ambas obras utilizan pandoc. Así que creé un script de bash rápido, que reemplazará TTOC en el archivo md con su TOC. (Necesitará envsubst, que podría no ser parte de su distro)

#!/bin/bash
filename=$1
__TOC__=$(grep "^##" $filename | sed -e 's/ /1. /;s/^##//;s/#/   /g;s/\. \(.*\)$/. [\1][]/')
export __TOC__
envsubst '$__TOC__' < $filename
 1
Author: dosmanak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-26 07:39:37

Si usa Eclipse puede usar Ctrl+O (esquema) atajo, esto mostrará el equivalente de la tabla de contenido y permitirá buscar en títulos de sección (autocompletar).

También puede abrir la vista de esquema (Ventana -> Mostrar Vista -> Esquema) pero no tiene búsqueda de autocompletar.

 1
Author: Christophe Roussy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-06 09:53:05

Use toc.py que es un pequeño script python que genera una tabla de contenido para su markdown.

Uso:

  • En su archivo Markdown agregue <toc> donde desea que se coloque la tabla de contenido.
  • $python toc.py README.md (Usa tu nombre de archivo markdown en lugar de README.md )

Salud!

 1
Author: Dhruv Batheja,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-29 19:24:17

Puede usar el [TOC] en la primera línea y luego en la parte inferior, lo único que necesita hacer es asegurarse de que los títulos estén en la misma fuente más grande. La tabla de contenido saldría automáticamente. (Pero esto solo aparece en algunos editores de markdown, no lo intenté todo)

 0
Author: Cecilé,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-15 19:27:07

Hay un script Ruby llamado gen_markdown_toc.rb que puede generar automáticamente una Tabla de contenido GFM Markdown, y es similar pero ligeramente diferente a algunos otros scripts publicados aquí.

Dado un archivo de Markdown de entrada como:

# Lorem Ipsum

Lorem ipsum dolor sit amet, mei alienum adipiscing te, has no possit delicata. Te nominavi suavitate sed, quis alia cum no, has an malis dictas explicari. At mel nonumes eloquentiam, eos ea dicat nullam. Sed eirmod gubergren scripserit ne, mei timeam nonumes te. Qui ut tale sonet consul, vix integre oportere an. Duis ullum at ius.

## Et cum

Et cum affert dolorem habemus. Sale malis at mel. Te pri copiosae hendrerit. Cu nec agam iracundia necessitatibus, tibique corpora adipisci qui cu. Et vix causae consetetur deterruisset, ius ea inermis quaerendum.

### His ut

His ut feugait consectetuer, id mollis nominati has, in usu insolens tractatos. Nemore viderer torquatos qui ei, corpora adipiscing ex nec. Debet vivendum ne nec, ipsum zril choro ex sed. Doming probatus euripidis vim cu, habeo apeirian et nec. Ludus pertinacia an pro, in accusam menandri reformidans nam, sed in tantas semper impedit.

### Doctus voluptua

Doctus voluptua his eu, cu ius mazim invidunt incorrupte. Ad maiorum sensibus mea. Eius posse sonet no vim, te paulo postulant salutatus ius, augue persequeris eum cu. Pro omnesque salutandi evertitur ea, an mea fugit gloriatur. Pro ne menandri intellegam, in vis clita recusabo sensibus. Usu atqui scaevola an.

## Id scripta

Id scripta alterum pri, nam audiam labitur reprehendunt at. No alia putent est. Eos diam bonorum oportere ad. Sit ad admodum constituto, vide democritum id eum. Ex singulis laboramus vis, ius no minim libris deleniti, euismod sadipscing vix id.

Genera esta tabla de contenidos:

$ gen_markdown_toc.rb FILE.md 
#### Table of contents

1. [Et cum](#et-cum)
    * [His ut](#his-ut)
    * [Doctus voluptua](#doctus-voluptua)
2. [Id scripta](#id-scripta)

Ver también mi blog post sobre este tema.

 0
Author: Alex Harvey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-02 05:32:04

Um... ¡usa los encabezados de Markdown!?

Es decir:

# Esto es el equivalente de

# # Esto es el equivalente de

# # # Esto es el equivalente de

Muchos editores le mostrarán un índice. También puede grep para las etiquetas de encabezado y crear su propia.

Espero que eso ayude!

J JF

 -10
Author: user2502476,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-19 18:31:55