¿Cómo enlazar a parte del mismo documento en Markdown?


Estoy escribiendo un documento de Markdown grande y me gustaría colocar una tabla de contenidos al principio que proporcione enlaces a varias ubicaciones en el documento. ¿Cómo puedo hacer esto?

He intentado usar

[a link](# MyTitle)

Donde MyTitle es un título dentro del documento y esto no funcionó.

Author: jwpfox, 2010-05-12

11 answers

En pandoc, si utiliza la opción --toc en la producción de html, se producirá una tabla de contenidos con enlaces a las secciones, y de vuelta a la tabla de contenidos de los encabezados de sección. Es similar con los otros formatos de escritura pandoc, como LaTeX, rtf, rst, etc. Así que con el comando

pandoc --toc happiness.txt -o happiness.html

Este poco de markdown:

% True Happiness

Introduction
------------

Many have posed the question of true happiness.  In this blog post we propose to
solve it.

First Attempts
--------------

The earliest attempts at attaining true happiness of course aimed at pleasure. 
Soon, though, the downside of pleasure was revealed.

Producirá esto como el cuerpo del html:

    <h1 class="title">
        True Happiness
    </h1>
    <div id="TOC">
        <ul>
            <li>
                <a href="#introduction">Introduction</a>
            </li>
            <li>
                <a href="#first-attempts">First Attempts</a>
            </li>
        </ul>
    </div>
    <div id="introduction">
        <h2>
            <a href="#TOC">Introduction</a>
        </h2>
        <p>
            Many have posed the question of true happiness. In this blog post we propose to solve it.
        </p>
    </div>
    <div id="first-attempts">
        <h2>
            <a href="#TOC">First Attempts</a>
        </h2>
        <p>
            The earliest attempts at attaining true happiness of course aimed at pleasure. Soon, though, the downside of pleasure was revealed.
        </p>
    </div>
 33
Author: applicative,
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
2012-05-27 23:31:34

Github analiza automáticamente las etiquetas de anclaje de tus encabezados. Así que puedes hacer lo siguiente:

[Foo](#foo)

# Foo

En el caso anterior, el encabezado Foo ha generado una etiqueta de anclaje con el nombre foo

Nota : solo un # para todos los tamaños de encabezado, sin espacio entre # y el nombre del ancla, los nombres de las etiquetas de ancla deben estar en minúsculas y delimitados por guiones si son varias palabras.

[click on this link](#my-multi-word-header)

### My Multi Word Header

Actualizar

Funciona fuera de la caja con pandoc también.

 473
Author: uberllama,
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-21 03:04:31

Experimentando, encontré una solución usando <div…/> pero una solución obvia es colocar tu propio punto de anclaje en la página donde quieras, así:

<a name="abcde">

antes de y

</a>

después de la línea a la que desea 'enlazar'. Luego un enlace de descuento como:

[link text](#abcde)

En cualquier parte del documento te lleva allí.

La solución <div…/> inserta una división "ficticia" solo para agregar la propiedad id, y esto es potencialmente perjudicial para la estructura de la página, pero la solución <a name="abcde"/> debe ser bastante inocua.

(PD: Podría estar bien poner el ancla en la línea a la que desea enlazar, de la siguiente manera:

## <a name="head1">Heading One</a>

Pero esto depende de cómo Markdown trata esto. Observo, por ejemplo, que el formateador de respuestas Stack Overflow está contento con esto.)

 85
Author: Steve Powell,
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-06-08 15:53:33

Este hilo puede estar desactualizado, pero para crear enlaces internos de documentos en markdown en Github, use...
(NOTA: #título en minúsculas)

    # Contents
     - [Specification](#specification) 
     - [Dependencies Title](#dependencies-title) 

    ## Specification
    Example text blah. Example text blah. Example text blah. Example text blah. 
Example text blah. Example text blah. Example text blah. Example text blah. 
Example text blah. Example text blah. Example text blah. Example text blah. 
Example text blah. Example text blah. 

    ## Dependencies Title
    Example text blah. Example text blah. Example text blah. Example text blah. 
Example text blah. Example text blah. Example text blah. Example text blah. 
Example text blah. Example text blah. Example text blah. Example text blah. 
Example text blah. Example text blah. 

Se hizo una buena pregunta, así que he editado mi respuesta;

Se puede hacer un enlace interno a cualquier tamaño de título usando - #, ##, ###, #### He creado un ejemplo rápido a continuación... https://github.com/aogilvie/markdownLinkTest

 56
Author: Ally,
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-02-27 02:08:28

Sí, markdown hace esto, pero necesita especificar el nombre anchor <a name='xyx'>.

Un ejemplo completo,

Esto crea el enlace
[tasks](#tasks)

Más adelante en el documento, se crea el ancla con nombre (como se llame).

<a name="tasks">
   my tasks
</a>

Tenga en cuenta que también podría envolverlo alrededor del encabezado también.

<a name="tasks">
### Agile tasks (created by developer)
</a>
 15
Author: davidj411,
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-11 19:13:41

El manual de pandoc explica cómo enlazar a sus encabezados, usando su identificador. No comprobé el soporte de esto por otros analizadores, pero se informó que no funciona en github.

El identificador se puede especificar manualmente:

## my heading text {#mht}
Some normal text here,
including a [link to the header](#mht).

O puede usar el identificador generado automáticamente. Ambos se explican en detalle en el manual de pandoc .

NOTA : Este solo funciona cuando se convierte a HTML, LaTex , Contexto, Textil o AsciiDoc.

 9
Author: hoijui,
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-06-20 10:24:48

No hay tal directiva en la especificación Markdown. Disculpe....

 7
Author: Nick Gerakines,
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
2010-05-12 21:25:15

Usando kramdown, parece que esto funciona bien:

[I want this to link to foo](#foo)
....
....
{: id="foo"}
### Foo are you?

Veo que se ha mencionado que

[foo][#foo]
....
#Foo

Funciona de manera eficiente, pero el primero podría ser una buena alternativa para elementos además de encabezados o encabezados con varias palabras.

 1
Author: kevin change,
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-09 00:33:39

Desde que MultiMarkdown fue mencionado como una opción en los comentarios.

En MultiMarkdown la sintaxis para un enlace interno es simple.

Para cualquier encabezado en el documento simplemente dar el nombre del encabezado en este formato [heading][] para crear un enlace interno.

Lea más aquí: Referencias cruzadas MultiMarkdown-5.

Referencias cruzadas

Una característica a menudo solicitada era la capacidad de hacer que Markdown maneje automáticamente los enlaces dentro del documento tan fácilmente como manejaba enlaces externos. A este fin, agregué la capacidad de interpretar [Algún texto] [] como un enlace cruzado, si existe un encabezado llamado "Algún texto".

Como ejemplo, [Metadata][] te llevará a # Metadata (o cualquiera de ## Metadata, ### Metadata, #### Metadata, ##### Metadata, # # # # # Metadata).

Alternativamente, puede incluir una etiqueta opcional de su elección para ayudar a desambiguar los casos en los que varias cabeceras tienen el mismo título:

# # # Descripción general [MultiMarkdownOverview] ##

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

Si ya ha definido un ancla utilizando el mismo id que utiliza 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 se pueden usar para referencias cruzadas también.

 1
Author: jwpfox,
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-09-04 08:34:25

Gitlab utiliza GitLab Flavored Markdown (GFM)

Aquí "todos los encabezados renderizados de Markdown obtienen automáticamente IDs"

Uno puede usar el ratón para:

  • mover el ratón sobre el encabezado
  • mueva el ratón sobre el selector de hover que se hace visible a la izquierda desde el encabezado
  • Copiar y guardar enlace con el botón derecho del ratón

    Por ejemplo en README.md archivo Tengo encabezado:

## series expansion formula of the Boettcher function

Que da un enlace:

Https://gitlab.com/adammajewski/parameter_external_angle/blob/master/README.md#series-expansion-formula-of-the-boettcher-function

El prefijo se puede eliminar, por lo que el enlace aquí es simplemente

file#header

Que aquí significa:

README.md#series-expansion-formula-of-the-boettcher-function

Ahora se puede usar como:

[series expansion formula of the Boettcher function](README.md#series-expansion-formula-of-the-boettcher-function)

También se puede hacer manualmente: reemplazar espacios con signo de guion.

El ejemplo vivo es aquí

 1
Author: Adam,
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-11-25 12:29:29

Algunos giros más en el truco <a name="">:

<a id="a-link"></a> Title
------

#### <a id="a-link"></a> Title (when you wanna control the h{N} with #'s)
 0
Author: laggingreflex,
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-07-31 12:39:34