Как связать с частью того же документа в Markdown?

Я пишу большой документ Markdown и хотел бы сначала поместить в него содержимое оглавления, которое будет содержать ссылки на различные местоположения в документе. Как я могу это сделать?

Я попытался использовать

[a link](# MyTitle)

где MyTitle - заголовок в документе, и это не сработало.

Ответ 1

В pandoc, если вы используете опцию --toc при создании html, будет подготовлено оглавление со ссылками на разделов и обратно к оглавлению из заголовков разделов. Он похож на другие форматы pandoc, такие как LaTeX, rtf, rst и т.д. Таким образом, с помощью команды

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

этот бит уценки:

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

даст это как тело 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>

Ответ 2

Github автоматически анализирует теги привязки из ваших заголовков. Таким образом, вы можете сделать следующее:

[Custom foo description](#foo)

# Foo

В приведенном выше случае заголовок Foo сгенерировал тег привязки с именем foo

Примечание: только один # для всех размеров заголовков, без пробела между # и именем привязки, имена тегов привязки должны быть в нижнем регистре и разделяться штрихами, если они состоят из нескольких слов.

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

### My Multi Word Header

Обновить

Работает из коробки с pandoc тоже.

Ответ 3

Экспериментируя, я нашел решение с использованием <div…/>, но очевидным решением является размещение вашей собственной точки привязки на странице, где бы вы ни находились, таким образом:

<a name="abcde">

до и

</a>

после строки, на которую вы хотите "привязать". Затем ссылку уценки вроде:

[link text](#abcde)

где-нибудь в документе вы попадете туда.

Решение <div…/> вставляет раздел "dummy" только для добавления свойства id, и это потенциально может привести к разрушению структуры страницы, но решение <a name="abcde"/> должно быть совершенно безобидным.

(PS: Может быть, правильно поставить якорь в линию, к которой вы хотите установить связь, следующим образом:

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

но это зависит от того, как Markdown рассматривает это. Я отмечаю, например, форматировщик ответов с переполнением стека доволен этим!)

Ответ 4

Это может быть устаревший поток, но для создания внутренних ссылок документа в уценке в использовании Github...
(ПРИМЕЧАНИЕ: нижний регистр #title)

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

Хороший вопрос был сделан, поэтому я отредактировал свой ответ;

Внутренняя ссылка может быть сделана для любого размера заголовка, используя - #, ##, ###, #### Я создал быстрый пример ниже... https://github.com/aogilvie/markdownLinkTest

Ответ 5

да, уценка делает это, но вам нужно указать имя anchor <a name='xyx'>.

полный пример,

это создает ссылку [tasks](#tasks)

далее в документе вы создаете именованный якорь (независимо от того, что он вызывается).

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

обратите внимание, что вы также можете обернуть его вокруг заголовка.

<a name="tasks">
### Agile tasks (created by developer)
</a>

Ответ 6

Руководство pandoc объясняет, как связать ваши заголовки, используя их идентификатор. Я не проверял поддержку этого другими парсерами, но сообщалось, что он не работает на github.

Идентификатор можно указать вручную:

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

или вы можете использовать автоматически сгенерированный идентификатор (в данном случае #my-heading-text). Оба подробно объясняются в руководстве Pandoc.

ПРИМЕЧАНИЕ. Это работает только при конвертации в HTML, LaTex, ConTeXt, Textile или AsciiDoc.

Ответ 7

В спецификации Markdown нет такой директивы. К сожалению.

Ответ 8

Gitlab использует GitLab Flavored Markdown (GFM)

Здесь "все заголовки, обработанные Markdown, автоматически получают идентификаторы"

Можно использовать мышь для:

  • перемещение мыши над заголовком
  • переместите указатель мыши над селектором hover, который становится видимым слева от заголовка
  • копировать и сохранять ссылку, используя правую кнопку мыши

    Например, в файле README.md у меня есть заголовок:

## series expansion formula of the Boettcher function

который дает ссылку:

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

Префикс можно удалить, так что ссылка здесь просто

file#header

который здесь означает:

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

Теперь его можно использовать как:

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

Можно также сделать это вручную: заменить пробелы знаком дефиса.

Живой пример здесь

Ответ 9

Используя kramdown, похоже, что это хорошо работает:

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

Я вижу, что было упомянуто, что

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

работает эффективно, но первая может быть хорошей альтернативой для элементов, кроме заголовков, или заголовков с несколькими словами.

Ответ 10

Так как MultiMarkdown упоминался как опция в комментариях.

В MultiMarkdown синтаксис для внутренней ссылки прост.

Для любого заголовка документа просто укажите название заголовка в этом формате [heading][] для создания внутренней ссылки.

Подробнее здесь: MultiMarkdown-5 Перекрестные ссылки.

Перекрестные ссылки

Часто запрашиваемая функция заключалась в том, что Markdown автоматически обрабатывал ссылки внутри документа так же легко, как и внешние ссылки. С этой целью я добавил способность интерпретировать [Some Text] [] в качестве перекрестной ссылки, если существует заголовок с именем "Some Text".

В качестве примера, [Метаданные] [] перенесет вас в # Метаданные (или любые из ## Метаданных, ### Метаданные, #### Метаданные, ##### Метаданные, ###### Метаданные).

В качестве альтернативы вы можете включить необязательную метку по вашему выбору, чтобы помочь устранить случаи, когда несколько заголовков имеют один и тот же заголовок:

### Обзор [MultiMarkdownOverview] ##

Это позволяет использовать [MultiMarkdownOverview] для ссылки на этот раздел специально, а не на другой раздел с названием Обзор. Это работает с заголовками atx или settext.

Если вы уже определили привязку с использованием того же идентификатора, который используется заголовком, то определенный якорь имеет приоритет.

В дополнение к заголовкам внутри документа вы можете предоставить метки для изображений и таблиц, которые затем могут использоваться для перекрестных ссылок.

Ответ 11

Некоторые дополнительные вещи, которые следует иметь в виду, если вам когда-либо нравятся символы внутри заголовков, к которым вы хотите перейти...

# What this is about


------


#### Table of Contents


- [About](#what-this-is-about)

- [&#9889; Sunopsis](#9889-tldr)

- [:gear: Grinders](#it-grinds-my-gears)

- [Attribution]


------


## &#9889; TLDR


Words for those short on time or attention.


___


## It Grinds my :gear:s


Here _':gear:'_ is not something like &#9881; or &#9965;


___


## &#9956; Attribution


Probably to much time at a keyboard



[Attribution]: #9956-attribution

... такие вещи, как # ; , &, и : внутри заголовка строки обычно игнорируются/чередуются, а не экранируются, и можно также использовать ссылки в стиле цитирования для упрощения быстрого использования.

Заметки

GitHub поддерживает :word: синтаксис фиксаций, ReadME файлов и т.д. см сути (от rxaviers), если using'em представляет интерес есть.

И почти везде можно использовать десятичный или шестнадцатеричный код для современных браузеров; Шпаргалка от w3schools очень удобна, особенно если использование CSS ::before или ::after псевдоэлементов с символами больше подходит вашему стилю.

Бонусные очки?

На всякий случай, если кому-то интересно, как изображения и другие ссылки внутри заголовка разбираются в id...

- [Imaged](#alt-textbadge__examplehttpsexamplecom-to-somewhere)


## [![Alt Text][badge__example]](https://example.com) To Somewhere


[badge__example]:
  https://img.shields.io/badge/Left-Right-success.svg?labelColor=brown&logo=stackexchange
  "Eeak a mouse!"

Предостережения

Визуализация MarkDown отличается от места к месту, поэтому такие вещи, как...

## methodName([options]) => <code>Promise</code>

... на GitHub будет элемент с таким id, как...

id="methodnameoptions--promise"

... где, как ваниль санитарии привело бы к id из...

id="methodnameoptions-codepromisecode"

... это означает, что для записи или компиляции файлов MarkDown из шаблонов требуется либо целенаправленная работа с одним способом, либо добавление конфигураций и скриптовой логики для различных хитроумных способов очистки текста заголовка.

Ответ 12

Еще несколько спинов на <a name=""> трюке:

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

#### <a id="a-link"></a> Title (when you wanna control the h{N} with #'s)

Ответ 13

Вы можете сделать это, используя этот синтаксис:

уценка

#list of links
- link one  [goto](#link-one)
- link two [goto] (#two)

##link one
ut perspiciatis unde omnis iste natus error sit voluptatem accusantium
doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore 

##two
n voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint 
occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit
anim id est laborum.

Выход


список ссылок

  • ссылка первая
  • ссылка вторая

ссылка первая

ut perspiciatis undemnis iste natus error sit vulptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore

два

н волптате велит эссе cillum долоре ес фугиат нулла париатур. Excepteur sint occaecat cupidatat non proident, иск в виновнике, вызывающий моллис аним, то есть лейборист.


Если в связанном заголовке есть пробелы, вы должны использовать дефисы (тире) вместо пробелов.

Это прекрасно работает для меня на GitHub!