Genere una tabla de contenidos desde Markdown
Convierta sus encabezados en una tabla de contenidos enlazada y lista para pegar: en el ejemplo, Project Guide, Installation y Usage se sangran por nivel, y el segundo Requirements recibe el ancla requirements-1 para que ambos enlaces funcionen. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Convierta un documento Markdown en una tabla de contenidos clara y enlazada sin copiar encabezados ni calcular anclas manualmente. El generador lee encabezados ATX escritos con almohadillas y encabezados Setext escritos con líneas de subrayado, ignora los falsos encabezados dentro de bloques de código delimitados y devuelve tanto Markdown listo para pegar como datos estructurados. Los niveles anidados reciben la sangría correspondiente y los títulos repetidos obtienen anclas distintas. El proceso es determinista, no usa la red y muestra un error claro si el documento no contiene encabezados.
Pegue Markdown y obtenga un esquema listo para usar
Introduzca el código Markdown completo en el campo de texto. El generador recorre el documento en orden de lectura y reconoce encabezados ATX de nivel uno a seis, como <code>## Instalación</code>. También admite encabezados Setext, donde una línea de texto va seguida de signos de igual para el nivel uno o guiones para el nivel dos.
El resultado incluye una cadena <code>toc</code> que usted puede pegar directamente al inicio de un README, una guía, una especificación o un artículo de una base de conocimiento. Cada elemento emplea la sintaxis normal de enlaces Markdown y la sangría refleja la diferencia entre su nivel y el encabezado menos profundo del documento. Así se conserva la jerarquía aunque un fragmento comience en el nivel dos.
La respuesta también contiene un array estructurado <code>headings</code> con el nivel, el texto visible y el ancla generada de cada entrada, útil para crear navegación personalizada.
Comprenda cómo el texto se convierte en un enlace estable
Una tabla de contenidos solo resulta útil si cada enlace apunta al mismo identificador de fragmento que corresponde a su encabezado. Este generador aplica una transformación predecible similar a la de GitHub: convierte las letras a minúsculas, sustituye los espacios por guiones, elimina la mayoría de los signos de puntuación y conserva letras y números de idiomas distintos del inglés. El formato Markdown en línea se retira de la etiqueta visible y del ancla; así, <code>Opciones **avanzadas**</code> produce la etiqueta legible «Opciones avanzadas» y el ancla <code>opciones-avanzadas</code>.
Los enlaces conservan su texto mostrado, no la URL de destino. Si un encabezado limpio se repite, el primero usa el ancla base, el segundo recibe el sufijo <code>-1</code> y los demás continúan la numeración. Los bloques de código delimitados no se analizan como encabezados y los encabezados vacíos se omiten porque no sirven para navegar.
Integre el resultado en sus flujos de documentación
El flujo más sencillo consiste en pegar la cadena <code>toc</code> debajo del título del documento y regenerarla cada vez que cambien los encabezados. En una automatización, invoque la capacidad después de montar la documentación y compare la cadena devuelta con la tabla de contenidos guardada. Una diferencia puede solicitar una actualización durante la revisión sin exigir un renderizador Markdown completo.
Los generadores de sitios estáticos pueden consumir los registros estructurados para construir barras laterales, índices de página o navegación móvil, respetando el orden y la profundidad del original. El analizador no hace solicitudes de red, no ejecuta HTML incrustado y no modifica el Markdown recibido. Solo deriva datos de navegación.
La entrada se limita a un millón de caracteres para mantener un procesamiento acotado.
Qué puede hacer con ella
Mantenga actualizado el índice de un README
Regenere el esquema enlazado cuando se añadan, renombren, reordenen o aniden secciones durante una versión.
Cree la navegación de su documentación
Use el array estructurado de encabezados para crear una barra lateral o un índice sin mantener otro esquema a mano.
Compruebe la documentación en integración continua
Compare el resultado generado con la tabla guardada y detecte navegación obsoleta durante la revisión del código.
Preguntas frecuentes
¿Qué estilos de encabezado Markdown son compatibles?
Se admiten encabezados ATX de H1 a H6 y encabezados Setext H1 o H2. Se ignora el texto que parece un encabezado dentro de bloques de código delimitados.
¿Qué ocurre si se repiten los nombres de los encabezados?
El primer encabezado usa el ancla base. Los siguientes con el mismo texto limpio reciben sufijos numéricos como -1 y -2.
¿El generador modifica mi Markdown?
No. Devuelve una nueva cadena de tabla de contenidos y registros estructurados; el texto de origen no se reescribe.
¿Cómo se forman los nombres de las anclas?
Al estilo de GitHub: las letras pasan a minúsculas, los espacios a guiones y se quita casi toda la puntuación, mientras se conservan letras y cifras de otros idiomas. Un encabezado como Advanced **options** da el ancla advanced-options.
¿Se incluyen los encabezados dentro de bloques de código?
No. Las líneas que parecen encabezados dentro de bloques de código se ignoran, algo importante en tutoriales que enseñan Markdown. Los encabezados vacíos también se omiten, y un documento sin ningún encabezado da un error claro en vez de una tabla vacía.
Herramientas relacionadas
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/dev2/markdown-toc-generate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"# Project Guide\n\n## Installation\n\n### Requirements\n\n## Usage"}'const res = await fetch("https://api.kit.forhosting.com/dev2/markdown-toc-generate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "# Project Guide\n\n## Installation\n\n### Requirements\n\n## Usage"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev2/markdown-toc-generate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "# Project Guide\n\n## Installation\n\n### Requirements\n\n## Usage"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev2/markdown-toc-generate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"# Project Guide\\n\\n## Installation\\n\\n### Requirements\\n\\n## Usage"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"# Project Guide\n\n## Installation\n\n### Requirements\n\n## Usage"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev2/markdown-toc-generate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"text": "# Project Guide\n\n## Installation\n\n### Requirements\n\n## Usage"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev2.markdown_toc_generate",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_chars | 1000000 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
Notas técnicas
Integre el resultado en sus flujos de documentación
Si hay párrafos, listas, código o tablas pero ningún encabezado válido, devuelve un error <code>invalid_input</code> en lugar de una tabla vacía.
Preguntas técnicas
¿Qué sucede si el documento no tiene encabezados?
La solicitud devuelve un error invalid_input que explica que no se encontraron encabezados Markdown.
¿Cuánto cuesta una solicitud de API?
Cada solicitud de API cuesta $0.002. La versión para navegador puede ejecutar localmente la misma lógica determinista.