Як пов’язати іменований якір у Multimarkdown?


573

Я натрапив на ряд згадок про підтримку MultiMarkdown внутрішніх посилань / названих якорів, але я не в змозі знайти жодного прикладу того, як насправді це зробити.

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


Якщо ви робите це для створення вмісту, я рекомендую doctoc для автоматизації цього (потрібен node.js ). Doctoc генерує код розмітки, тому він надає приклад того, як посилатися на заголовки в документі також (як це описано у відповіді @ user1789493).
Джеймс Оуерс

Відповіді:


659

У стандартному Markdown розмістіть якір, <a name="abcd"></a>куди ви хочете зв’язатись, і відправте його на тій самій сторінці [link text](#abcd).

(Це використовується, name=але не id=з причин, пояснених у цій відповіді .)

[link text](http://...#abcd)Звичайно, можна використовувати віддалені посилання .

Це працює як сон, за умови, що ви маєте контроль над вихідними та цільовими текстами. Якір може навіть з’являтися в заголовку, таким чином:

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

виробляє:

Заголовок у цьому записі SO!

і ми навіть можемо пов’язати це так:

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

(У режимі SO посилання не працює, оскільки якір знімається.)


11
@ jj1bdx Я зараз - <a id="id"></a>форма найкраща. Дивіться це питання / відповідь .
Стів Пауелл

Гарне доповнення Стіва. Я б відзначив це як відповідь, за винятком питання про MultiMarkdown. Очевидно, голоси людей свідчать, що це було корисним доповненням. Отже, дякую.
masukomi

3
Fyi: Розмітка Github очікує, що ви використовуєте name = id, замість id.
Дітер

@Dieter: name=у XHTML був застарілий, але тепер я вважаю, що id=це побічний ефект у HTML5, тому я звертаюсь до name=цієї відповіді.
Стів Пауелл

3
Працює над відміткою з ароматом github (рубіновий дорогоцінний камінь надає це як очікується)
Кедар Массвад

461

Якщо у файлах розмітки є заголовки, ви можете безпосередньо зв’язати їх у файлі.

Заголовок відмітки -

## The Header

це створить неявний ідентифікатор #the-header(замініть внутрішні пробіли дефісами та зробіть малі літери).

Щоб перейти до цього ідентифікатора, ви можете створити таке посилання:

[Link to Header](#the-header)

Це еквівалентно:

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

Зверніть увагу, ім'я посилання - це малі регістри #header.


30
BitBucket, здається, префіксує якірний код за допомогою "markdown-header-". Отже, якщо ваш заголовок ## This Header ##, посилання буде [To This Header](#markdown-header-this-header). Якщо ви не впевнені, що ідентифікатор вашого заголовка, скористайтеся інспектором сторінки, щоб побачити значення HTML.
Вінні Келлі

Не працювало для мене в Pandoc розширена відмітка, може працювати в іншому місці.
Зельфір Кальтшталь

9
@SaurabhM це ТОЛЬКО спрацює, якщо ваш відмітка до html-конвертера НЕ дотримується стандарту. Стандарт не створює якірних тегів. Зараз багато хто не дотримується, але НЕ слід очікувати, що це буде працювати де завгодно.
masukomi

9
Чому о, чому ми повинні були стандартизувати щось таке, що не стандартне і напівзапечене, як Маркдаун. Не можу дочекатися, коли AsciiDoc виступить у ролі.
hmijail сумує у відставці

1
GitHub додає вміст користувачів перед назвою заголовка:[Link](user-content-the-header)
Мелвін Вітте,

137

Взяте з посібника користувача Multimarkdown (завдяки @MultiMarkdown у Twitter за його вказівку)

[Some Text][]буде посилатися на заголовок з назвою "Деякий текст",
наприклад

### Some Text ###

Необов’язковий ярлик на ваш вибір, щоб допомогти розмежувати випадки, коли кілька заголовків мають однакову назву:

### Overview [MultiMarkdownOverview] ##

Це дозволяє використовувати [MultiMarkdownOverview] для конкретного посилання на цей розділ, а не інший розділ з назвою Огляд. Це працює з заголовками в стилі atx або settext.

Якщо ви вже визначили якір, використовуючи той самий ідентифікатор, який використовується заголовком, то визначений якір має перевагу.

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


FWIW, він не працює в режимі розмітки emacs станом на 23.4.1.
Аттіла Лендвай

5
Markdown не підтримує виноски. Як такий, він не працюватиме в більшості режимів "Відмітки". Однак MultiMarkdown підтримує ряд розширень, які полегшують життя письменників.
masukomi

11
Здається, Github не підтримує мітки в заголовках?
andig

1
Це не працює (принаймні, на codepen.io), коли в заголовку є ":".
Сяо Пен - ZenUML.com

2
це посилання - це документація хлопця, який написав MultiMarkdown. Не впевнений, що ви робите в codepen.io, але я впевнений, що документи точні. Майте на увазі MULTI Markdown NOT Markdown.
masukomi

100

Я тестував Github Flavored Markdown деякий час і можу підсумувати чотири правила:

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

Наприклад, якщо ваш розділ названий таким:

## 1.1 Hello World

Створіть посилання на нього таким чином:

[Link](#11-hello-world)

Що робити, якщо в імені є дефіси? У що це перетворюється? Зауважте, між словами та дефісами є пробіли. Приклад: `` `- [Мій - заголовок] (# мій --- заголовок) # Мій - заголовка` `` Це правильно?
Спенсер Поллок

stackoverflow.com/a/17820138/2908724 для термінології цього стилю. Я віддаю перевагу "шашлику".
єпископ

22

Найкращий спосіб створити внутрішні посилання (пов’язані з розділами) - це створити список, але замість посилання введіть #section або # section-title, якщо заголовок містить пробіли.

---- РОЗМІСТЬ ------------------------

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.
Тестуйте Pandoc тут


6
як зазначено в інших коментарях тут. це не працюватиме в жодному відмітці -> html-конвертері, який насправді відповідає стандарту. Створення анкерних тегів у заголовках відбувається лише в деяких НЕБЕЗПЕЧНИХ перетворювачах. Крім того, вони не збираються перетворювати пробіли у тире. ЦЕ НЕ МОЖЕТЕ рахувати.
masukomi

1
Я використовую GitHub Markdown в редакторі коду Atom, який має вбудований пакет під назвою "Markdown Preview". У режимі попереднього перегляду я створюю HTML-файли, використовуючи контекстне меню "Зберегти як HTML ...".
rafr3

так, я можу сказати, що ви не можете розраховувати на те, що ваша техніка працює ніде, і ні питання, ні ваша відповідь конкретно не стосуються розмітки в Atom. Питання навіть не в Markdown, а в MultiMarkdown.
masukomi

Я використовую цей метод посилань, але він не працює для мене. не ковзає до розділу / того заголовка.
Том Кустерманс,

Розділіть голови з урахуванням регістру. Якщо ви визначите, ## 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}

2

Ось моє рішення (похідне від SaraubhM відповіді 's)

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

Що дає вам:

Перейти до : гарячі клавіші та маркери / радіуси / майстер маршрутів 2.0

Зверніть увагу на зміни від і .до, -а також втрату &посилань.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.