Перекрестная ссылка (именованная привязка) в уценке
Существует ли синтаксис уценки для эквивалента:
Take me to <a href="#pookie">pookie</a>
...
<a name="pookie">this is pookie</a>
15 ответов
Take me to [pookie](#pookie)
должна быть правильный синтаксис уценки для перехода к точке якоря с именем Pookie.
Чтобы вставить точку привязки с таким именем, используйте HTML:
<a name="pookie"></a>
Уценка, кажется, не возражает против того, где вы поставили опорную точку. Полезное место, чтобы поместить это в заголовке. Например:
### <a name="tith"></a>This is the Heading
работает очень хорошо. (Я бы продемонстрировал здесь, но средство визуализации SO удаляет якорь.)
Обратите внимание на самозакрывающиеся теги и id=
против name=
В более ранней версии этого поста предлагалось использовать <a id='tith' />
, используя самозакрывающийся синтаксис для XHTML и используя id
атрибут вместо name
,
XHTML позволяет любому тегу быть "пустым" и "замкнутым". То есть, <tag />
это сокращение для <tag></tag>
, подходящая пара тегов с пустым телом. Большинство браузеров принимают XHTML, но некоторые нет. Чтобы избежать кросс-браузерных проблем, закройте тег явно, используя <tag></tag>
, как рекомендовано выше.
Наконец, атрибут name=
устарел в XHTML, поэтому я изначально использовал id=
, который каждый признает. Однако HTML5 теперь создает глобальную переменную в JavaScript при использовании id=
, и это не обязательно то, что вы хотите. Итак, используя name=
теперь, вероятно, будет более дружелюбным.
(Спасибо Slipp D. Thompson за объяснение мне XHTML и mikemaccana за то, что он указал на побочный эффект HTML5 - см. Комментарии и ответнаильщика для более подробной информации. name=
кажется, работает везде, хотя в XHTML это устарело.)
На bitbucket.org проголосовавшее решение не сработает. Вместо этого, при использовании заголовков (с ##), можно ссылаться на них как на якоря, используя префикс #markdown-header-my-header-name, где #markdown-header- - это неявный префикс, сгенерированный средством визуализации, и остальное - заголовок в нижнем регистре с черточками, заменяющими пробелы.
пример
## My paragraph title
будет производить неявный якорь, как это
#markdown-header-my-paragraph-title
Весь URL перед каждой привязкой является необязательным, т.е.
[Some text](#markdown-header-my-paragraph-title)
эквивалентно
[Some text](https://bitbucket.org/some_project/some_page#markdown-header-my-paragraph-title)
при условии, что они находятся на одной странице.
Источник: https://bitbucket.org/tutorials/markdowndemo/overview (отредактируйте источник этого файла.md и посмотрите, как создаются якоря).
Использовать name
, Используя id
не требуется в HTML 5 и создаст глобальные переменные в вашем JavaScript
См. Спецификацию HTML 5, 5.9.8 Переход к идентификатору фрагмента - оба id
а также name
используются.
Важно знать, что большинство браузеров по-прежнему превращают идентификаторы в глобальные переменные. Вот быстрый тест. Используя name
избегает создания глобалов и любых конфликтов, которые могут возникнуть.
Пример использования имени:
Take me to [pookie](#pookie)
И якорь назначения:
### <a name="pookie"></a>Some heading
Markdown Anchor поддерживает хэшмарк, поэтому ссылка на якорь на странице будет просто [Pookie](#pookie)
Генерация привязки фактически не поддерживается в Gruber Markdown, но есть в других реализациях, таких как Markdown Extra.
В Markdown Extra идентификатор привязки добавляется к заголовку или подзаголовку с помощью {#pookie}
,
Github Flavored Markdown на страницах репозитория Git (но не в Gists) автоматически генерирует якоря с несколькими тегами разметки на всех заголовках (h1, h2, h3 и т. Д.), Включая:
id="user-content-HEADERTEXT"
class="anchor"
href="#HEADERTEXT"
aria-hidden="true"
(это для значка ссылки SVG, который отображается при наведении мыши)
Исключая значок aria/svg, когда пишется:
# Header Title
Github генерирует:
<h1><a id="user-content-header-title" class="anchor" href="#header-title">Header Title</a></h1>
Следовательно, для создания ссылок заголовка ничего не нужно делать, и всегда можно ссылаться на них с помощью:
- Ссылка на
[Header Title](#header-title)
Для тех, кто ищет решение этой проблемы в GitBook. Вот как я заставил это работать (в GitBook). Вам нужно явно пометить свой заголовок, например так:
# My Anchored Heading {#my-anchor}
Тогда ссылка на этот якорь, как это
[link to my anchored heading](#my-anchor)
Решение и дополнительные примеры можно найти здесь: https://seadude.gitbooks.io/learn-gitbook/
Нет доступного синтаксиса, чтобы сделать это в оригинальном синтаксисе Markdown, но Markdown Extra предоставляет средства, по крайней мере, для присвоения идентификаторов заголовкам, которые затем можно легко связать. Также обратите внимание, что вы можете использовать обычный HTML как в Markdown, так и в Markdown Extra, и что name
атрибут был заменен id
атрибут в более поздних версиях HTML.
Поздно на вечеринке, но я думаю, что это дополнение может быть полезно для людей, работающих с rmarkdown
, В rmarkdown
в вашем документе есть встроенная поддержка ссылок на заголовки.
Любой заголовок, определенный
# Header
может ссылаться на
get me back to that header(#header)
Ниже приведен минимальный автономный .rmd
файл, который показывает это поведение. Можно вязать до .pdf
а также .html
,
---
title: "references in rmarkdown"
output:
html_document: default
pdf_document: default
---
# Header
Write some more text. Write some more text. Write some more text. Write some more text. Write some more text. Write some more text. Write some more text. Write some more text. Write some more text. Write some more text. Write some more text.
Go back to that [header](#header).
Как видим (из ответов), стандартного способа для этого нет; и разные процессоры уценки будут отличаться расширением уценки, которое предлагает такие возможности.
С pandoc вы можете получить то, о чем просили, вот так:
Take me to [pookie](#pookie)
...
[this is pookie]{#pookie}
Это дает (с pandoc-2.9.2.1):
<p>Take me to <a href="#pookie">pookie</a></p>
<p>…</p>
<p><span id="pookie">this is pookie</span></p>
Также можно создать пустой промежуток с идентификатором привязки:
Take me to [pookie](#pookie)
...
this is pookie []{#pookie}
который даст:
<p>Take me to <a href="#pookie">pookie</a></p>
<p>…</p>
<p>this is pookie <span id="pookie"></span></p>
Помимо этого, для pandoc и для большинства распространенных генераторов уценки у вас есть простая самогенерируемая привязка в каждом заголовке. (См. Этот и другие ответы здесь, чтобы узнать об удобных способах (автоматически) генерировать такие привязки и ссылаться на них.)
Для наиболее распространенных генераторов уценки. У вас есть простой самогенерируемый якорь в каждом заголовке. Например, с помощью pandoc сгенерированный якорь будет слагом кебаба вашего заголовка.
echo "# Hello, world\!" | pandoc
# => <h1 id="hello-world">Hello, world!</h1>
В зависимости от того, какой анализатор уценки вы используете, якорь может измениться (возьмите пример ответов Symbolrush и La muerte Peluda, они разные!). Посмотрите эту метку, где вы можете увидеть сгенерированные привязки в зависимости от вашей реализации уценки.
Используя последнюю версию Markdown, вы сможете использовать следующий синтаксис:
[](){:name='anchorName'}
Это должно создать следующий HTML:
<a name="anchorName"></a>
Если вы хотите, чтобы у якоря был текст, просто добавьте тест в квадратных скобках:
`Some Text {: name = 'anchorName'}
Для тех, кто любит использовать заголовки с разными уровнями, полезно отметить, что ссылка на заголовок должна всегда использовать только один#
, независимо от уровня заголовка:
# This is an H1
## This is an H2
### This is an H3
...
[Take me to H3](#this-is-an-H3)
[Take me to H1](#this-is-an-H1)
[This won't work](##-this-is-an-H2)
Я быстро дополню случаи, когда заголовок содержит смайлы, в этом случае проще просто удалить смайлики в ссылке ссылки. Например
# ⭐ Title 2
....
[Take me to title 2](#-title-2)
В некоторых случаях это не работает по непонятной причине, например здесь, в настройке. В этом случае решение состоит в том, чтобы также включить весь код для эмодзи.
Особый случай, не описанный в других ответах:
Если в вашем заголовке есть круглые скобки, просто игнорируйте их в ключе, разделенном дефисом.
Пример:
## My paragraph title (MpT)
[Some text](#my-paragraph-title-mpt)
По крайней мере, это работает при отображении кода Visual Studio.
Этот пример окончательного вида оглавления
https://stackru.com/images/791c7da6a08b29addd7e4a2c5113111883b54a39.png
Этот код для создания оглавления выше
https://stackru.com/images/41ed06acbb968a22ac81fbf6d068b4d5fb83bbe6.png
клетка
## Table of Contents
<ul>
<li><a href="#intro">Introduction</a></li>
<li><a href="#wrangling">Data Wrangling</a></li>
<li><a href="#eda">Exploratory Data Analysis</a></li>
<li><a href="#conclusions">Conclusions</a></li>
</ul>
клетка
<a id='intro'></a>
### Introduction
клетка
<a id='wrangling'></a>
### Data Wrangling
клетка
<a id='eda'></a>
### Exploratory Data Analysis
клетка
<a id='conclusions'></a>
### Conclusions
О специальных символах
Не уверен, что это применимо ко всем процессорам MarkDown, но специальные символы (включая буквы с диакритическими знаками), а также наборы специальных символов могут быть заменены одним дефисом:
# L’insoutenable légèreté de l’Être
дам
#l-insoutenable-l-g-ret-de-l-tre
Суффикс
Некоторые процессоры добавляют суффикс для предотвращения конфликтов:
# Foobar
## Foobar
### Baz
### Foobar
# Foobar
дам
#foobar-1
#foobar-2
#baz-1
#foobar-3
#foobar-4