¿Cómo vincular a un ancla con nombre en Multimarkdown?

573

Me he encontrado con varias menciones del soporte de MultiMarkdown para enlaces internos / anclajes con nombre, pero no puedo encontrar un solo ejemplo de cómo hacerlo realmente.

Entonces, ¿cuál es la sintaxis para denotar el ancla con nombre y cuál es la sintaxis para vincularlo de la misma manera que vincular a cualquier otra URL (solo usando #foo en lugar de http://....)?

masukomi
fuente
Si está haciendo esto para crear una tabla de contenido, recomendaría doctoc para automatizar esto (requiere node.js ). Doctoc genera el código de descuento, por lo que también proporcionará un ejemplo de cómo vincular los encabezados en todo el documento (como se describe en la respuesta de @ user1789493).
James Owers
3
Posible duplicado de la referencia cruzada (ancla con nombre) en la rebaja
Organic Advocate

Respuestas:

659

En Markdown estándar, coloque un ancla <a name="abcd"></a>donde desee vincular y consulte en la misma página [link text](#abcd).

(Esto usa name=y no id=, por las razones explicadas en esta respuesta ).

Las referencias remotas pueden usar, [link text](http://...#abcd)por supuesto.

Esto funciona como un sueño, siempre que tenga control sobre los textos de origen y destino. El ancla incluso puede aparecer en un encabezado, por lo tanto:

### <a name="head1234"></a>A Heading in this SO entry!

produce:

Un encabezado en esta entrada SO!

e incluso podemos vincularlo así:

and we can even [link](#head1234) to it so:

(En SO, el enlace no funciona porque el ancla está despojado).

Steve Powell
fuente
11
@ jj1bdx lo hago ahora: la <a id="id"></a>forma es la mejor. Vea esta pregunta / respuesta SO .
Steve Powell
Buena adición Steve. Lo marcaría como la respuesta, excepto que la pregunta era sobre MultiMarkdown. Obviamente, los votos de la gente indican que esta fue una adición útil. Así que gracias.
masukomi
3
Fyi: Github Markdown espera que uses name = en lugar de id, parece.
Dieter
@Dieter: name=estaba en desuso en XHTML, pero ahora encuentro que id=tiene un efecto secundario en HTML5, por lo que estoy volviendo a name=esta respuesta.
Steve Powell
3
Funciona en github-con sabor-markdown (la gema de rubí lo hace como se esperaba)
Kedar Mhaswade
462

Si tiene encabezados en los archivos de descuento, puede vincularlos directamente en el archivo.

Encabezado de rebajas -

## The Header

esto generará una identificación implícita #the-header(reemplazar espacios internos con guiones y hacer minúsculas).

Para navegar a esta identificación, puede crear el enlace de esta manera:

[Link to Header](#the-header)

Esto es equivalente a:

<a href="#the-header">Link to Header</a>

Tenga en cuenta que el nombre de la referencia es minúscula #header.

SaurabhM
fuente
30
BitBucket parece prefijar la identificación del ancla con "markdown-header-". Entonces, si su encabezado es ## This Header ##, el enlace sería [To This Header](#markdown-header-this-header). Si no está seguro de cuál es la identificación de su encabezado, use un inspector de página para ver los valores HTML.
Vinney Kelly
No funcionó para mí en el descuento extendido de Pandoc, podría funcionar en otro lugar.
Zelphir Kaltstahl
99
@SaurabhM esto SOLO funcionará SI su reducción al convertidor html NO se adhiere al estándar. El estándar no crea etiquetas de anclaje. Ahora, muchos no se adhieren, pero NO debe esperar que esto funcione en ningún lado.
masukomi
99
¿Por qué? ¿Por qué tuvimos que estandarizar algo tan poco estándar y medio cocido como Markdown? No puedo esperar a que AsciiDoc tome la delantera.
hmijail llora a los despedidos
1
GitHub agrega contenido de usuario antes del nombre del encabezado:[Link](user-content-the-header)
Melvin Witte
137

Tomado de la Guía del usuario de Multimarkdown (gracias a @MultiMarkdown en Twitter por señalarlo)

[Some Text][]se vinculará a un encabezado llamado "Algún texto",
por ejemplo

### Some Text ###

Una etiqueta opcional de su elección para ayudar a desambiguar casos donde varios encabezados tienen el mismo título:

### Overview [MultiMarkdownOverview] ##

Esto le permite usar [MultiMarkdownOverview] para referirse específicamente a esta sección, y no a otra sección llamada Descripción general. Esto funciona con encabezados de estilo atx o settext.

Si ya ha definido un ancla usando la misma identificación que usa un encabezado, entonces el ancla definida tiene prioridad.

Además de los encabezados dentro del documento, puede proporcionar etiquetas para imágenes y tablas que luego también pueden usarse para referencias cruzadas.

masukomi
fuente
FWIW, no funciona con el modo de reducción de emacs a partir de 23.4.1.
Atila Lendvai
55
Markdown no admite notas al pie. Como tal, no funcionará en la mayoría de los modos "Markdown". MultiMarkdown, sin embargo, admite una serie de extensiones que facilitan la vida de los escritores.
masukomi
11
¿Github no parece admitir etiquetas en encabezados?
andig
1
Esto no funciona (al menos en codepen.io) cuando hay ':' en el encabezado.
Xiao Peng - ZenUML.com
2
ese enlace es la documentación del tipo que escribió MultiMarkdown. No estoy seguro de lo que está haciendo en codepen.io, pero estoy seguro de que los documentos son precisos. Tenga en cuenta MULTI Markdown NO Markdown.
masukomi
100

Probé Github de sabores Markdown por un tiempo y puedo resumir con cuatro reglas:

  1. los signos de puntuación se eliminarán
  2. los espacios en blanco principales se eliminarán
  3. las mayúsculas se convertirán en minúsculas
  4. los espacios entre letras se convertirán a -

Por ejemplo, si su sección se llama así:

## 1.1 Hello World

Crea un enlace de esta manera:

[Link](#11-hello-world)
longkai
fuente
¿Qué pasa si hay guiones en el nombre? ¿A qué se convierte? Tenga en cuenta que hay espacios entre las palabras y los guiones. ejemplo: `` `- [Mi - Encabezado] (# mi --- encabezado) # Mi - Encabezado` `` ¿Sería correcto?
Spencer Pollock
stackoverflow.com/a/17820138/2908724 para la terminología de este estilo. Prefiero "kebab-case".
obispo el
22

La mejor manera de crear enlaces internos (relacionados con las secciones) es crear una lista, pero en lugar de un enlace, coloque #section o # section-title si el encabezado incluye espacios.

---- MARKDOWN ------------------------

Go to section
* [Hello](#hello)  
* [Hello World](#hello-world)
* [Another section](#new-section)    <-- it's called 'Another section' in this list but refers to 'New section'


## Hello
### Hello World
## New section

---- VISTA PREVIA DE LA LISTA ------------------------

Go to section
Hello              <-- [Hello](#hello)                 -- go to `Hello` section
Hello World        <-- [Hello World](#hello world)     -- go to `Hello World` section
Another section    <-- [Another section](#new-section) -- go to `New section`

---- HTML ------------------------

<p>Go to section</p>
<ul>
<li><a href="#hello">Hello</a><br />
</li>
<li><a href="#hello-world">Hello World</a></li>
<li><a href="#new-section">Another section</a> &lt;– it’s called ‘Another section’ in this list but refers to ‘New section’</li>
</ul>
<h2 id="hello">Hello</h2>
<h3 id="hello-world">Hello World</h3>
<h2 id="new-section">New section</h2>

No importa si es un encabezado h1, h2, h3, etc., siempre se refiere a él usando solo uno #.
Todas las referencias en la lista de secciones deben convertirse a texto en minúsculas como se muestra en el ejemplo anterior.

El enlace a la sección debe estar en minúsculas. De otra manera no funcionará.
Esta técnica funciona muy bien para todas las variantes de Markdown, también MultiMarkdown.

Actualmente estoy usando Pandoc para convertir el formato de documentos. Es mucho mejor que MultiMarkdown.
Prueba Pandoc aquí

rafr3
fuente
66
como se señaló en otros comentarios aquí. eso no funcionará en ningún markdown -> convertidor html que realmente siga el estándar. La creación de etiquetas de anclaje en encabezados solo ocurre en ALGUNOS convertidores. Además, no van a convertir todos los espacios en guiones. ESTO NO PUEDE ser contado.
masukomi
1
Estoy usando GitHub Markdown en el editor de código Atom que tiene un paquete incorporado llamado "Markdown Preview". Desde el modo de vista previa, creo un archivo html usando el menú contextual "Guardar como HTML ...".
rafr3
Sí, mi punto es que no puede contar con su técnica trabajando en ningún otro lugar, y ni la pregunta ni su respuesta son específicamente sobre Markdown en Atom. La pregunta ni siquiera es sobre Markdown, sino sobre MultiMarkdown.
masukomi
Estoy usando este método de enlace pero no funciona para mí. no se desliza a la sección / ese encabezado.
Tom Kustermans
Dé un aviso a mayúsculas y minúsculas. Si define un ## Hellodebe referirse a él como[Whatever you want](#Hello)
Victor Augusto
9

En mdcharm es así:

* [Descripción](#descripcion)
* [Funcionamiento](#funcionamiento)
* [Instalación](#instalacion)
* [Configuración](#configuracion)

### Descripción {#descripcion}
### Funcionamiento {#funcionamiento}
### Instalación {#instalacion}
### Configuración {#configuracion}
Gonen09
fuente
2

Aquí está mi solución (derivada de SaraubhMla respuesta de)

**Jump To**: [Hotkeys & Markers](#hotkeys-markers) / [Radii](#radii) / [Route Wizard 2.0](#route-wizard-2-0)

Lo que te da:

Saltar a : Teclas de acceso rápido y marcadores / Radii / Route Wizard 2.0

Tenga en cuenta los cambios desde y .hacia -y también la pérdida de &en los enlaces.

Peet
fuente