Як пов’язати частину того ж документа в Markdown?


539

Я пишу великий документ Markdown і хотів би розмістити на початку таблицю змісту, яка надаватиме посилання на різні місця в документі. Як я можу це зробити?

Я спробував використовувати

[a link](# MyTitle)

де MyTitleзаголовок у документі, і це не спрацювало.


1
Посилання на stackoverflow.com/questions/12204257/… для R Markdown (Rmd).
Етьєн Низький Декарі

1
Єдиною проблемою у вас є те, що MyTitle має бути не заголовком, а ім'ям якоря в цьому документі (наприклад, <a name="MyTitle"> </a>). Тоді ви зможете використовувати своє оригінальне посилання в будь-якій точці документа.
userfuser

7
Прийнята відповідь насправді не актуальна для більшості людей. Замість того, щоб побачити другий відповідь вниз: stackoverflow.com/a/16426829/398630
BrainSlugs83

Відповіді:


37

У пандоку , якщо ви використовуєте параметр --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>

1
Спасибі, саме це мені було потрібно. Я використовував Textmate для перетворення Markdown в HTML, переключиться на pandoc.
зворотневиключення

1
Ви можете спробувати демо-версію Pandoc в Github (також є режим emacs pandoc тощо). Tmbundle повторно використовує виділений синтаксис для синтаксису MultiMarkdown, тому існує дуже мало диваків. Крім того, багато пов'язаних сценаріїв дуже налаштовані - наприклад, Context, а не LaTeX тощо. Ймовірно, він повинен бути git clone-ed в найнижчий або зовнішній каталог tmbundle, ~/Library/Application\ Support/TextMate/Bundlesщоб спростити інтеграцію.
додаток

2
Це додає -1до першого повторення ідентифікатора, -2до другого тощо
додаток

6
Я виявив, що мені довелося додати команду --standalone до команди pandoc, щоб вона фактично виводила саму зміст у висновку. Без цього перемикання він би перетворював заголовки на посилання назад до #toc з ім'ям anchor, але насправді не виводить названий якір та список подібних до себе.
Замок Дункана

4
Це може відповісти на питання ОП, але для решти нас, хто хоче знати, як це зробити у відмітці , це досить марно. - Наступна відповідь вниз набагато корисніша.
BrainSlugs83

933

Github автоматично аналізує якірні теги з ваших заголовків. Тож ви можете зробити наступне:

[Custom foo description](#foo)

# Foo

У наведеному вище випадку Fooзаголовок створив якірний тег з назвоюfoo

Примітка : лише одна #для всіх розмірів заголовка, немає місця між #іменем якоря, імена тегів прив’язки повинні бути малими літерами та обмежуватись тиреми, якщо багаторядний d.

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

### My Multi Word Header

Оновлення

Працює з коробки pandocтеж.


54
Якщо ваш заголовок містить декілька слів "Як цей", замініть пробіли дефісами у якорі [just](#like-this-one).
Могспад

3
Це працює лише для заголовків H1? Якщо при посиланні на заголовок H2 (тобто ## Foo), чи потрібно мені також посилати два знаки числа у посилання, тобто [Foo] (## foo)? Я не можу змусити ваш синтаксис чи мою роботу (зі знаком додаткового числа).
GrayedFox

7
@GrayedFox, якщо ви хочете створити посилання для заголовка аб H2 ## Foo, спробуйте [це моя посилання на Foo] (# Foo) ... тобто: єдиний хеш, ні простір між хешем і рядковим-кебаб-випадок-name- of-header
Абдулл

4
Як підказка: перевірте якір, який відображається поруч із заголовком у Github, щоб отримати відповідне посилання, тобто, якщо він містить спеціальні символи, вони автоматично видаляються і там відображається правильне посилання.
Олександр Пача

2
А як щодо того, коли заголовки мають номер? # 3. Третій пункт [Третій пункт] (# 3-third.point) не працює
Адітья

118

Експериментуючи, я знайшов рішення, використовуючи, <div…/>але очевидним рішенням є розміщення власної точки прив’язки до сторінки, де вам подобається, таким чином:

<a name="abcde">

до і

</a>

після рядка, на який ви хочете "зв’язати". Потім посилання на розмітку:

[link text](#abcde)

де завгодно документ перевезе вас туди.

<div…/>Рішення вставляє «фіктивне» поділ просто додати idвласність, і це потенційно руйнівний для структури сторінки, але<a name="abcde"/> рішення повинно бути цілком нешкідливим.

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

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

але це залежить від того, як Маркдаун ставиться до цього. Зауважу, наприклад, формат відповідей відповіді на переповнення стека задоволений цим!)


2
Якщо ви робите це, ви повинні знати, що div знімає інші формати розмітки, такі як ## headers.
2rs2ts

@ user691859 Чи можете ви детальніше? Можливо, ми можемо оновити відповідь, щоб вона працювала краще. Я бачив TextMate придушення підсвічування, поки я не розрізав діл, але не було проблеми з оброблюваною відміткою, переглянутою з браузера.
Стів Пауелл

У WriteMonkey я виявив, що якщо я передую будь-якому тексту з <div/>кількома рядками нижче, це вплине. Натомість мені доведеться обгортати текст, який я посилаю, у повний divпункт тегу, і я повинен ПОВЕРНІТЬСЯ ПОВЕРНЕННЯ поведінки з нуля, використовуючи реальний HTML. Бу
2rs2ts

6
Це добре працює, дякую. Для всіх, хто цікавиться, це також працює з файлами Markdown, розміщеними та відображаються GitHub.
Алекс Дін

2
Щоб бути сумісним вперед з HTML5 , я б рекомендував замінити <a name="head1"/>на <a id="head1"/>.
binki

74

Це може бути застарілий потік, але для створення внутрішніх посилань на документ у розмітці в 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


У вашому прикладі теги посилань мають лише одне #, але заголовки, на які вони повинні посилатись, мають два ##; чи не повинні вони бути однаковими?
Карим Бахгат

3
Хороше питання. Відповідь - ні. # в (#dependencies-title)повідомляє розмітці Github це внутрішнє посилання. Наступний текст може бути будь-якого розміру заголовка. Ось приклад тесту, який я зробив ... https://github.com/aogilvie/markdownLinkTest
Аллі

1
Це залежить від аромату відмітки? Схоже, це добре працює в редакторі розмітки, але коли я зберігаю в html або pdf, ID не додається до відповідних тегів. Мені б добре просто скинути якір туди, але, здається, ваш метод набагато чистіший і швидший.
meteorainer

21

так, розмітка робить це, але вам потрібно вказати якір імені <a name='xyx'>.

повний приклад,

це створює посилання
[tasks](#tasks)

пізніше в документі ви створюєте названий якір (як би він не називався).

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

зауважте, що ви також можете обгорнути його навколо заголовка.

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

13

Посібник з pandoc пояснює, як зв’язатись із заголовками, використовуючи їх ідентифікатор. Я не перевіряв підтримку цього з боку інших парсерів, але повідомлялося, що це не працює на github .

Ідентифікатор можна вказати вручну:

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

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

ПРИМІТКА . Це працює лише при перетворенні в HTML , LaTex , ConTeXt , Textile або AsciiDoc .


9

Деякі додаткові речі, які слід пам’ятати, якщо ви коли-небудь захоплюєтесь символами в заголовках, до яких ви хочете перейти ...

# 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 із шаблонів або потрібен націлювання на один із способів слугіфефікування , або додавання конфігурацій та сценаріїв сценаріїв для різних розумних способів, які очищення тексту заголовка.


9

Універсальні рішення

Це питання, схоже, має іншу відповідь відповідно до реалізації розмітки.
Насправді офіційна документація 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.

Щоб перевірити цей приклад, потрібно додати трохи додаткового простору між списком вмісту та першою главою або зменшити висоту вікна.
Також не використовуйте пробіли в назві ідентифікаторів.


Гм ..., здалося приємним. Спробував це, дві проблеми: (1). ## Chapter 1потребує відкритої лінії над ним. (2). Посилання не працює ...
musicformellons

Ах, він не працює в плагіні позначення позначок Intellij, який я використовував; але працює в редакторі розмітки Macdown.
musicformellons

Все-таки перевірена на github: відкрита лінія над заголовком потрібна, але вона працює.
musicformellons

@musicformellons Ви можете, будь ласка, спробувати без початкової лінії, але належним чином закривши проміжок тегів? <br><span id="Chapter1"><span>
ePi272314

так, це працює!
musicformellons

7

У специфікації Маркдана такої директиви немає. Вибачте.


Ой-ой! Чи знаєте ви, чи підтримує його MultiMarkdown або Textile? Я думав про перехід на MD за всією моєю документацією, але це був вимикач угоди. Дякую за допомогу!
зворотневиключення

5
Що ви маєте на увазі під "директивою"? Тут були розміщені інші варіанти вирішення проблеми.
Зельфір Кальтшталь

4

Gitlab використовує GitLab ароматизовану знижку (GFM)

Тут "усі відведені заголовки Markdown автоматично отримують ідентифікатори"

Миші можна використовувати для:

  • переміщення миші над заголовком
  • перемістіть курсор миші на курсор миші, який стає видимим зліва від заголовка
  • скопіюйте та збережіть посилання за допомогою клацання правою кнопкою миші

    Наприклад, у файлі 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)

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

Живий приклад тут


1

Використовуючи kramdown, здається, це працює добре:

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

Я бачу, що це вже згадувалося

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

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


1

Оскільки MultiMarkdown було зазначено як варіант у коментарях.

У MultiMarkdown синтаксис внутрішнього посилання простий.

Для будь-якого заголовка в документі просто введіть назву заголовка в такому форматі, [heading][]щоб створити внутрішнє посилання.

Детальніше читайте тут: MultiMarkdown-5 Перехресні посилання .

Перехресні посилання

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

Наприклад, [Metadata] [] перенесе вас до # метаданих (або будь-яких ## метаданих, ### метаданих, #### метаданих, ##### метаданих, ###### метаданих).

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

### Огляд [MultiMarkdownOverview] ##

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

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

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



0

Окрім наведених відповідей,

Під час встановлення параметра number_sections: trueв заголовку YAML:

number_sections: TRUE

RMarkdown автоматично перенумерує ваші розділи.

Для посилання на розділи, що мають номер, просто введіть у файл R Markdown:

[My Section]

Звідки My Sectionназва розділу

Схоже, це працює незалежно від рівня розділу:

# My section

## My section

### My section

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