Как сделать ссылку на именованный якорь в Multimarkdown?

573

Я сталкивался с рядом упоминаний о поддержке MultiMarkdown внутренних ссылок / именованных якорей, но я не могу найти ни одного примера того, как на самом деле это сделать.

Итак, каков синтаксис для обозначения именованного якоря, и каков синтаксис для ссылки на него так же, как и для ссылки на любые другие URL (только с использованием #foo вместо http://....)?

masukomi
источник
Если вы делаете это для создания оглавления, я бы порекомендовал doctoc для автоматизации этого (требуется node.js ). Doctoc генерирует код уценки, поэтому он также предоставит пример того, как ссылаться на заголовки по всему документу (как описано в ответе @ user1789493).
Джеймс Оверс
3
Возможный дубликат перекрестной ссылки (названный якорь) в уценке
Органический Адвокат

Ответы:

659

В стандартной уценке разместите <a name="abcd"></a>привязку, на которую вы хотите сослаться, и сослаться на нее на той же странице [link text](#abcd).

(Используется, name=а не id=по причинам, объясненным в этом ответе .)

Удаленные ссылки могут использовать, [link text](http://...#abcd)конечно.

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

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

производит:

Заголовок в этой записи!

и мы можем даже ссылку на него так:

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

(На SO ссылка не работает, потому что якорь удален.)

Стив Пауэлл
источник
11
@ jj1bdx Я делаю сейчас - <a id="id"></a>форма лучше. Смотрите этот ТАК вопрос / ответ .
Стив Пауэлл
Хорошее дополнение Стив. Я бы отметил его как ответ, за исключением вопроса о MultiMarkdown. Очевидно, что голоса людей указывают на то, что это было полезным дополнением. Тогда спасибо.
Масукоми
3
К вашему сведению: Github markdown ожидает, что вы будете использовать name = вместо id, кажется.
Дитер
@Dieter: name=устарел в XHTML, но теперь я обнаружил, что это id=имеет побочный эффект в HTML5, поэтому я возвращаюсь к name=этому ответу.
Стив Пауэлл
3
Работает над github-flavored-markdown (рубиновый камень делает его, как и ожидалось)
Кедар Мхасвад
463

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

Заголовок уценки -

## The Header

это сгенерирует неявный идентификатор #the-header(замените внутренние пробелы дефисами и сделайте строчные буквы).

Чтобы перейти к этому идентификатору, вы можете создать ссылку следующим образом:

[Link to Header](#the-header)

Это эквивалентно:

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

Обратите внимание, что имя ссылки в нижнем регистре #header.

SaurabhM
источник
30
BitBucket, кажется, префикс идентификатора привязки с «markdown-header-». Так что, если ваш заголовок ## This Header ##, ссылка будет [To This Header](#markdown-header-this-header). Если вы не уверены, какой идентификатор вашего заголовка, используйте инспектор страниц, чтобы увидеть значения HTML.
Винни Келли
Не работал для меня в расширенной уценке Пандока, может работать в другом месте.
Зельфир Кальцталь
9
@SaurabhM это будет работать ТОЛЬКО ЕСЛИ ваша конвертация уценки в html НЕ соответствует стандарту. Стандарт не создает теги привязки. Теперь многие не придерживаются, но вы не должны ожидать, что это сработает где-либо.
Масукоми
9
Почему мы должны были стандартизировать что-то такое же стандартное и наполовину, как Markdown. Не могу дождаться, когда AsciiDoc возглавит.
hmijail оплакивает отставку
1
GitHub добавляет пользовательский контент перед названием заголовка:[Link](user-content-the-header)
Мелвин Витте
137

Взято из руководства пользователя Multimarkdown (спасибо @MultiMarkdown в Twitter за указание на это)

[Some Text][]будет ссылаться на заголовок с именем «Some Text»,
например

### Some Text ###

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

### Overview [MultiMarkdownOverview] ##

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

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

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

masukomi
источник
FWIW, он не работает с уценкой в ​​emacs по состоянию на 23.4.1.
Аттила Лендвай
5
Уценка не поддерживает сноски. Как таковой, он не будет работать в большинстве режимов «Уценки». Однако MultiMarkdown поддерживает ряд расширений, которые облегчают жизнь писателям.
Масукоми
11
Github не поддерживает метки в заголовках?
Andig
1
Это не работает (по крайней мере, на codepen.io), когда в заголовке есть «:».
Сяо Пэн - ZenUML.com
2
эта ссылка - документация парня, который написал MultiMarkdown. Не уверен, что вы делаете в codepen.io, но я уверен, что документы точные. Имейте в виду, MULTI Уценка НЕ ​​Уценка.
Масукоми
100

Я тестировал Github Flavored Markdown некоторое время и могу подвести итог по четырем правилам:

  1. знаки препинания будут сброшены
  2. ведущие пробелы будут отброшены
  3. верхний регистр будет преобразован в нижний
  4. пробелы между буквами будут преобразованы в -

Например, если ваш раздел назван так:

## 1.1 Hello World

Создайте ссылку на него следующим образом:

[Link](#11-hello-world)
longkai
источник
Что если в имени есть дефисы? Во что это конвертировать? Обратите внимание, что между словами и дефисами есть пробелы. пример: `` `- [My - Header] (# my --- header) # My - Header` `` Это будет правильно?
Спенсер Поллок
stackoverflow.com/a/17820138/2908724 для терминологии по этому стилю. Я предпочитаю "шашлык".
епископ
22

Лучший способ создать внутренние ссылки (связанные с разделами) - создать список, но вместо ссылки поместите #section или # section-title, если заголовок содержит пробелы.

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

---- ПРОСМОТР СПИСКА ------------------------

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>

Не имеет значения, является ли это заголовком h1, h2, h3 и т. Д., Вы всегда обращаетесь к нему, используя только один #.
Все ссылки в списке разделов должны быть преобразованы в строчные буквы, как показано в примере выше.

Ссылка на раздел должна быть в нижнем регистре. В противном случае это не сработает.
Этот метод работает очень хорошо для всех вариантов Markdown, в том числе MultiMarkdown.

В настоящее время я использую Pandoc для преобразования формата документов. Это намного лучше, чем MultiMarkdown.
Тест Пандока здесь

rafr3
источник
6
как отмечено в других комментариях здесь. это не будет работать ни в каком конвертере уценки -> html, который фактически следует стандарту. Создание тегов привязки в заголовках происходит только в НЕКОТОРЫХ конвертерах. Кроме того, они не собираются преобразовывать пробелы в пробелы. ЭТО НЕ МОЖЕТ рассчитывать.
Масукоми
1
Я использую GitHub Markdown в редакторе кода Atom, который имеет встроенный пакет с именем «Markdown Preview». В режиме предварительного просмотра я создаю html-файлы, используя контекстное меню «Сохранить как HTML ...».
rafr3
да, я хочу сказать, что вы не можете рассчитывать на то, что ваша техника работает где-то еще, и ни вопрос, ни ваш ответ не имеют отношения к уценке в Atom. Вопрос даже не в Markdown, а в MultiMarkdown.
Масукоми
Я использую этот метод ссылки, но он не работает для меня. не скользить в раздел / этот заголовок.
Том Кустерманс
Дайте головы до чувствительности к регистру. Если вы определяете, ## Helloвы должны ссылаться на это как[Whatever you want](#Hello)
Виктор Аугусто
9

В mdcharm это так:

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

### Descripción {#descripcion}
### Funcionamiento {#funcionamiento}
### Instalación {#instalacion}
### Configuración {#configuracion}
Gonen09
источник
2

Вот мое решение (получено из SaraubhMответа)

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

Что дает вам:

Прыгать в : горячие клавиши и маркеры / Radii / Route Wizard 2.0

Обратите внимание на изменения от и .до, -а также потерю &в ссылках.

Пита
источник