Как сделать ссылку на часть того же документа в Markdown?
Я пишу большой документ Markdown и хотел бы вначале поместить оглавление, которое будет содержать ссылки на различные места в документе. Как я могу это сделать?
Я пытался с помощью
[a link](# MyTitle)
где MyTitle
это заголовок в документе, и это не сработало.
17 ответов
В 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>
Github автоматически анализирует теги привязки из ваших заголовков. Таким образом, вы можете сделать следующее:
[Foo](#foo)
# Foo
В приведенном выше случае Foo
заголовок сгенерировал якорный тег с именем foo
Примечание: только один #
для всех размеров, без пробела #
и имя привязки, имена тегов привязки должны быть в нижнем регистре и разделены черточками, если они состоят из нескольких слов.
[click on this link](#my-multi-word-header)
### My Multi Word Header
Обновить
Работает из коробки с pandoc
тоже.
Это может быть устаревшая тема, но для создания внутренних ссылок на документы в уценке при использовании Github...
(ПРИМЕЧАНИЕ: строчный # заголовок)
# 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
Экспериментируя, я нашел решение, используя <div…/>
но очевидное решение состоит в том, чтобы разместить свою собственную точку привязки на странице, где вы хотите, таким образом:
<a name="abcde">
до и
</a>
после строки, на которую вы хотите "дать ссылку". Тогда ссылка уценки, как:
[link text](#abcde)
В любом месте документа вы попадете туда.
<div…/>
Решение вставляет "фиктивное" разделение, чтобы добавить id
свойство, и это потенциально нарушает структуру страницы, но <a name="abcde"/>
Решение должно быть довольно безобидным.
(PS: Возможно, будет правильным поместить якорь в строку, на которую вы хотите сослаться, следующим образом:
## <a name="head1">Heading One</a>
но это зависит от того, как Markdown относится к этому. Замечу, например, что форматировщик ответов Stack Overflow этим доволен!)
Да, уценка делает это, но вам нужно указать имя якоря <a name='xyx'>
,
полный пример,
это создает ссылку[tasks](#tasks)
позже в документе вы создаете именованный якорь (как бы он ни назывался).
<a name="tasks">
my tasks
</a>
обратите внимание, что вы также можете обернуть его вокруг заголовка.
<a name="tasks">
### Agile tasks (created by developer)
</a>
Просто следуйте[text](#link)
синтаксис и следуйте этим рекомендациям:
- пишите буквы и цифры как есть
- замените пробелы тире
-
- удалить остальные символы
Так, например, если у вас есть эти разделы:
# 1. Python
# 2. c++
# 3. c++11
# 4. asp.net-core
Вы можете добавить ссылку, используя:
[1. Python](#1-python)
[2. c++](#2-c)
[3. c++11](#3-c11)
[4. asp.net-core](#4-aspnet-core)
Обратите внимание, какasp.net-core
становитсяaspnet-core
,1. python
становится1-python
, и т. д.
Руководство pandoc объясняет, как связать ваши заголовки, используя их идентификатор. Я не проверял поддержку этого другими парсерами, но сообщалось, что он не работает на github.
Идентификатор можно указать вручную:
## my heading text {#mht}
Some normal text here,
including a [link to the header](#mht).
или вы можете использовать автоматически сгенерированный идентификатор. Оба подробно объяснены в руководстве Pandoc.
ПРИМЕЧАНИЕ. Это работает только при конвертации в HTML, LaTex, ConTeXt, Textile или AsciiDoc.
Универсальные решения
Похоже, что на этот вопрос есть другой ответ в зависимости от реализации уценки.
Фактически, официальная документация Markdown ничего не говорит по этой теме.
В таких случаях и если вам нужно портативное решение, вы можете использовать HTML.
Перед любым заголовком или в той же строке заголовка определите идентификатор, используя некоторый тег HTML.
Например:<a id="Chapter1"></a>
Вы увидите это в своем коде, но не в подготовленном документе.
Полный пример:
См. Полный пример (онлайн и редактируемый) здесь.
## Content
* [Chapter 1](#Chapter1)
* [Chapter 2](#Chapter2)
<div id="Chapter1"></div>
## Chapter 1
Some text here.
Some text here.
Some text here.
## Chapter 2 <span id="Chapter2"><span>
Some text here.
Some text here.
Some text here.
Чтобы протестировать этот пример, вы должны добавить дополнительное пространство между списком содержимого и первой главой или уменьшить высоту окна.
Также не используйте пробелы в названиях идентификаторов.
Некоторые дополнительные вещи, чтобы иметь в виду, если я когда - нибудь фантазии с символами внутри заголовков, которые я хочу, чтобы перейти к...
# What this is about
------
#### Table of Contents
- [About](#what-this-is-about)
- [⚡ Sunopsis](#9889-tldr)
- [:gear: Grinders](#it-grinds-my-gears)
- [Attribution]
------
## ⚡ TLDR
Words for those short on time or attention.
___
## It Grinds my :gear:s
Here _`:gear:`_ is not something like ⚙ or ⛭
___
## ⛤ Attribution
Probably to much time at a keyboard
[Attribution]: #9956-attribution
... вещи как #
, ;
, &
, а также :
внутри строки заголовка обычно игнорируются / разбиваются на полосы вместо экранирования, и можно также использовать ссылки в стиле цитирования, чтобы упростить быстрое использование.
Заметки
GitHub поддерживает
:word:
синтаксис в коммитах, файлах readme и т. д. см. суть (от rxaviers), если там интересно использование'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 из шаблонов требуется либо нацеливание на один способ слагайфинга, либо добавление конфигураций и скриптовой логики для различных умных способов, таких как очистка текста заголовка.
Gitlab использует GitLab Flavored Markdown (GFM)
Здесь "все отображаемые в Markdown заголовки автоматически получают идентификаторы"
Можно использовать мышь, чтобы:
- наведите курсор мыши на заголовок
- наведите курсор мыши на селектор наведения, который становится видимым слева от заголовка
скопируйте и сохраните ссылку, щелкнув правой кнопкой мыши
Например, в файле 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)
Можно также сделать это вручную: заменить пробелы знаком дефиса.
Живой пример здесь
В дополнение к приведенным выше ответам,
При установке опции number_sections: true
в заголовке YAML:
number_sections: TRUE
RMarkdown автоматически пронумерует ваши разделы.
Чтобы сослаться на эти автоматически пронумерованные разделы, просто поместите в файл R Markdown следующее:
[My Section]
где My Section
это название раздела
Кажется, это работает независимо от уровня раздела:
# My section
## My section
### My section
Это работает для меня:
Более длинный пример с предварительным просмотром GitHub здесь: https://gist.github.com/manero6/a0a67e8f9ebd7028f6fae51c49208b5d
# Title
title blablabla
#### Table of Content
- [First](#first)
- [Second](#second)
- [Third](#third-ᵗᵒᵖ)
- [Fourth](#fourth-)
- [Fifth](#-fifth)
## [First][toc]
1st
## [Second][toc]
2nd
## Third [ᵗᵒᵖ][toc]
3rd
## Fourth [^][toc]
4th
## [^][toc] Fifth
5th
[toc]: #table-of-content "go to Table of Content"
В моем случае я искал решение TOC без Pandoc. Каждая запись оглавления содержит ссылку на заголовок в формате[Display Name](#-url-formatted-name-of-header)
Для простого случая двух уровней отступа
1. [Installation](#1-installation)
1.1. [Minimum System Requirements](#11-minimum-system-requirements)
1.2. [Prerequisites](#12-prerequisites)
Результат:
- Установка
1.1. Минимальные системные требования
1.2. Предпосылки
Для общих многоуровневых нумерованных списков, содержащих 3 или более уровней отступа, в списке не удается сделать дальнейший отступ на уровне 3 или выше (например,1.3.2.
). Вместо этого лучшее решение, которое я мог найти, это использование>>>
для форматирования с вложенными цитатами.
## Table of Contents
>1. [Installation](#1-installation)
>>1.1. [Minimum System Requirements](#11-minimum-system-requirements)
>>1.2. [Prerequisites](#12-prerequisites)
>>>1.2.1. [Preparation of Database Server](#121-preparation-of-database-server)
>>>1.2.2. [Preparation of Other Servers](#122-preparation-of-other-servers)
>>
>>1.3. [Installing – Single Server](#13-installing-single-server)
>>1.4. [Installing – Multi Server](#14-installing-multi-server)
>>>1.4.1. [Database Server](#141-database-server)
>>>...
В результате на GitHub появляется красиво оформленное оглавление. Не могу отобразить его здесь без линтера SO, жалующегося на неформатированный код.
Обратите внимание на пустую запись после 1.2.2.
Без пустой записи ваши следующие строки остаются застрявшими на 3-м уровне отступа цитаты.
Сравните это с маркированными списками, которые «просто работают», используя только пробелы или табуляции в качестве маркеров отступа.
## Table of Contents
- [Installation](#1-installation)
- [Minimum System Requirements](#11-minimum-system-requirements)
- [Prerequisites](#12-prerequisites)
- [Preparation of Database Server](#121-preparation-of-database-server)
- [Preparation of Other Servers](#122-preparation-of-other-servers)
- [Installing – Single Server](#13-installing-single-server)
- [Installing – Multi Server](#-installing-multi-server)
- [Database Server](#141-database-server)
- ...
Результат:
Оглавление
- Монтаж
- минимальные системные требования
- Предпосылки
- Подготовка сервера базы данных
- Подготовка других серверов
- Установка — Один сервер
- Установка — Мультисервер
- Сервер базы данных
- ...
Все приведенные выше списки с отступом будут успешно ссылаться на следующие заголовки в уценке GitHub (по какой-то причине заголовки не могут быть связаны в уценке со вкусом SO) -
# 1. Installation
## 1.1. Minimum System Requirements
## 1.2. Prerequisites
### 1.2.1. Preparation of Database Server
### 1.2.2. Preparation of Other Servers
## 1.3. Installing – Single Server
## 1.4. Installing – Multi Server
### 1.4.1. Database Server
Используя kramdown, кажется, что это работает хорошо:
[I want this to link to foo](#foo)
....
....
{: id="foo"}
### Foo are you?
Я вижу, что было упомянуто, что
[foo][#foo]
....
#Foo
работает эффективно, но первый может быть хорошей альтернативой для элементов, кроме заголовков или заголовков с несколькими словами.
Еще несколько спинов на <a name="">
хитрость:
<a id="a-link"></a> Title
------
#### <a id="a-link"></a> Title (when you wanna control the h{N} with #'s)
Так как MultiMarkdown был упомянут как опция в комментариях.
В MultiMarkdown синтаксис для внутренней ссылки прост.
Для любого заголовка в документе просто дайте название заголовка в этом формате [heading][]
создать внутреннюю ссылку.
Подробнее читайте здесь: MultiMarkdown-5 Перекрестные ссылки.
Перекрестные ссылки
Часто запрашиваемой функцией была возможность автоматической разметки Markdown внутри ссылок на документы так же легко, как и внешних ссылок. С этой целью я добавил возможность интерпретировать [Some Text][] как перекрестную ссылку, если существует заголовок с именем "Some Text".
Например, [Метаданные] [] приведут вас к # Метаданным (или любым из ## Метаданных, ### Метаданных, #### Метаданных, ##### Метаданных, ###### Метаданных).
В качестве альтернативы вы можете добавить дополнительную метку по вашему выбору, чтобы помочь устранить неоднозначность в случаях, когда несколько заголовков имеют одинаковый заголовок:
### Обзор [MultiMarkdownOverview] ##
Это позволяет вам использовать [MultiMarkdownOverview], чтобы ссылаться именно на этот раздел, а не на другой раздел под названием Обзор. Это работает с заголовками в стиле atx или settext.
Если вы уже определили привязку, используя тот же идентификатор, который используется в заголовке, тогда определенная привязка имеет приоритет.
В дополнение к заголовкам в документе вы можете предоставить метки для изображений и таблиц, которые затем можно будет использовать и для перекрестных ссылок.