Làm cách nào để liên kết đến một phần của cùng một tài liệu trong Markdown?


541

Tôi đang viết một tài liệu Markdown lớn và muốn đặt một bảng nội dung các loại ở đầu sẽ cung cấp các liên kết đến các vị trí khác nhau trong tài liệu. Tôi có thể làm cái này như thế nào?

Tôi đã thử sử dụng

[a link](# MyTitle)

nơi MyTitlelà một tiêu đề trong tài liệu và điều này đã không làm việc.


1
Liên kết với stackoverflow.com/questions/12204257/ đá cho R Markdown (Rmd).
Etienne Low-Décarie

1
Vấn đề duy nhất bạn gặp phải là MyTitle không nên là một tiêu đề, mà là tên của một mỏ neo trong tài liệu đó (như <a name="MyTitle"> </a>). Sau đó, bạn có thể sử dụng liên kết ban đầu của mình, bất cứ nơi nào trong tài liệu.
userfuser

7
Câu trả lời được chấp nhận không thực sự phù hợp với hầu hết mọi người. Thay vào đó, hãy xem câu trả lời thứ hai: stackoverflow.com/a/16426829/398630
BrainSlugs83

Câu trả lời:


37

Trong pandoc , nếu bạn sử dụng tùy chọn --toctrong việc tạo html, một mục lục sẽ được tạo với các liên kết đến các phần và quay lại mục lục từ các tiêu đề của phần. Nó tương tự với các định dạng khác mà pandoc viết, như LaTeX, rtf, rst, v.v. Vì vậy, với lệnh

pandoc --toc happiness.txt -o happiness.html

chút đánh dấu này:

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

sẽ mang lại điều này như phần thân của 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
Cảm ơn, đây chính xác là những gì tôi cần. Tôi đã sử dụng Textmate để chuyển đổi Markdown sang HTML, sẽ chuyển sang pandoc.
trừ dòng chảy

1
Bạn có thể dùng thử bản thử nghiệm Pandoc tmbundle trên Github (cũng có chế độ pandoc-mode, v.v.) Tmbundle sử dụng lại công cụ tô sáng cú pháp dành riêng cho MultiMarkdown, do đó, có một vài điều rất kỳ lạ. Ngoài ra, rất nhiều tập lệnh liên quan được tùy chỉnh cao - ví dụ Bối cảnh, không phải LaTeX, v.v. - nhưng ý tưởng là người dùng sẽ thay đổi chúng theo ý muốn, điều mà tôi thấy khá đơn giản. Nó có lẽ nên được git cloneđưa vào thư mục tmbundle thấp nhất hoặc ngoài cùng, ~/Library/Application\ Support/TextMate/Bundlesđể đơn giản hóa việc tích hợp.
áp dụng

2
Nó thêm -1vào sự lặp lại đầu tiên của id, -2đến lần thứ hai, v.v.
áp dụng

6
Tôi thấy rằng tôi phải thêm tùy chọn --standopol vào lệnh pandoc để làm cho nó thực sự xuất ra mục lục của chính nó trong đầu ra. Nếu không có công tắc đó, nó sẽ làm cho các tiêu đề thành các liên kết trở lại neo có tên #toc, nhưng không thực sự xuất ra neo được đặt tên và danh sách giống như chính nó.
Khóa Duncan

4
Điều này có thể trả lời câu hỏi của OP, nhưng đối với phần còn lại của chúng tôi những người muốn biết làm thế nào để làm điều đó trong markdown , nó khá vô dụng. - Câu trả lời tiếp theo hữu ích hơn nhiều.
BrainSlugs83

936

Github tự động phân tích các thẻ neo ra khỏi tiêu đề của bạn. Vì vậy, bạn có thể làm như sau:

[Custom foo description](#foo)

# Foo

Trong trường hợp trên, Footiêu đề đã tạo ra một thẻ neo với tênfoo

Lưu ý : chỉ một #cho tất cả các kích thước tiêu đề, không có khoảng trắng giữa #và tên neo , tên thẻ neo phải là chữ thường và được phân cách bằng dấu gạch ngang nếu có nhiều từ .

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

### My Multi Word Header

Cập nhật

Làm việc ra khỏi hộp với pandocquá.


54
Nếu tiêu đề của bạn chứa nhiều từ, "Giống như từ này", hãy thay thế khoảng trắng bằng dấu gạch nối trong neo [just](#like-this-one).
Mogsdad

3
Điều này chỉ làm việc cho các tiêu đề H1? Nếu liên kết đến tiêu đề H2 (tức là ## Foo), tôi cũng cần đặt hai ký hiệu số trong liên kết, tức là [Foo] (## foo)? Tôi không thể làm cho cú pháp của bạn hoặc của tôi để làm việc (với dấu số thêm).
GrayedFox

7
@GrayedFox, nếu bạn muốn tạo liên kết cho tiêu đề ab H2 ## Foo, hãy thử [đây là liên kết của tôi với Foo] (# foo) ... đó là: băm đơn , không có khoảng cách giữa hàm băm và chữ thường-kebab-case-name- của tiêu đề
Abdull

4
Mẹo: kiểm tra neo được hiển thị bên cạnh tiêu đề của bạn trên Github để lấy liên kết tương ứng, tức là nếu nó chứa các ký tự đặc biệt, chúng sẽ tự động bị xóa và liên kết chính xác được hiển thị ở đó.
Alexander Pacha

2
Thế còn khi các tiêu đề có số? # 3. Điểm thứ ba [Điểm thứ ba] (# 3.-third.point) không hoạt động
Aditya

118

Thử nghiệm, tôi đã tìm thấy một giải pháp bằng cách sử dụng <div…/>nhưng một giải pháp rõ ràng là đặt điểm neo của riêng bạn vào trang bất cứ nơi nào bạn muốn, do đó:

<a name="abcde">

trước

</a>

sau dòng bạn muốn 'liên kết' đến. Sau đó, một liên kết đánh dấu như:

[link text](#abcde)

bất cứ nơi nào trong tài liệu sẽ đưa bạn đến đó.

Các <div…/>giải pháp chèn một "dummy" bộ phận chỉ để thêm các idbất động sản, và điều này là có khả năng gây gián đoạn cho các cấu trúc trang, nhưng <a name="abcde"/>giải pháp nên được khá vô hại.

(PS: Có thể ổn khi đặt neo vào dòng bạn muốn liên kết đến, như sau:

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

nhưng điều này phụ thuộc vào cách Markdown đối xử với điều này. Tôi lưu ý, ví dụ, trình định dạng câu trả lời Stack Overflow hài lòng với điều này!)


2
Nếu bạn làm điều này, bạn nên biết rằng div loại bỏ định dạng đánh dấu khác, chẳng hạn như ## headers.
2rs2ts

@ user691859 Bạn có thể giải thích? Có lẽ chúng ta có thể cập nhật một câu trả lời để làm cho nó hoạt động tốt hơn. Tôi đã thấy tô sáng ức chế TextMate, cho đến khi tôi thụt vào div, nhưng không có vấn đề gì với việc đánh dấu được xử lý được xem từ trình duyệt.
Steve Powell

Trong WriteMonkey tôi thấy rằng nếu tôi đứng trước bất kỳ văn bản nào có <div/>vài dòng bên dưới đều bị ảnh hưởng. Thay vào đó, tôi phải bọc văn bản mà tôi đang liên kết trong một divmệnh đề thẻ đầy đủ và tôi phải ĐỔI lại hành vi từ đầu bằng cách sử dụng HTML thực. Boo.
2rs2ts

6
Điều này hoạt động tốt, cảm ơn. Đối với bất kỳ ai thắc mắc, điều này cũng hoạt động với các tệp Markdown được lưu trữ và hiển thị của GitHub.
Alex Dean

2
Để tương thích với HTML5 , tôi muốn khuyên bạn nên thay thế <a name="head1"/>bằng <a id="head1"/>.
binki

74

Đây có thể là luồng lỗi thời nhưng để tạo các liên kết tài liệu bên trong đánh dấu trong Github sử dụng ...
(LƯU Ý: chữ thường #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. 

Một câu hỏi hay đã được đưa ra nên tôi đã chỉnh sửa câu trả lời của mình;

Một liên kết bên trong có thể được thực hiện đối với bất kỳ kích thước tiêu đề sử dụng - #, ##, ###, #### Tôi tạo ra một ví dụ nhanh dưới đây ... https://github.com/aogilvie/markdownLinkTest


Trong ví dụ của bạn, các thẻ liên kết chỉ có một #, nhưng các tiêu đề mà chúng được cho là liên kết có hai ##; Họ có nên giống nhau không?
Karim Bahgat

3
Câu hỏi hay. Câu trả lời là không. dấu # in (#dependencies-title)cho Github markdown đây là một liên kết bên trong. Các văn bản sau đây có thể là bất kỳ kích thước tiêu đề. Dưới đây là một thử nghiệm ví dụ tôi đã thực hiện ... https://github.com/aogilvie/markdownLinkTest
minh

1
Điều đó phụ thuộc vào hương vị của markdown? Có vẻ như nó hoạt động tốt trong trình chỉnh sửa markdown, nhưng khi tôi lưu vào html hoặc pdf, các id không được thêm vào các thẻ thích hợp. Tôi sẽ ổn khi chỉ cần thả một cái neo vào đó, nhưng có vẻ như phương pháp của bạn sạch sẽ hơn và nhanh hơn rất nhiều.
thiên thạch

21

có, markdown thực hiện điều này nhưng bạn cần chỉ định tên neo <a name='xyx'>.

một ví dụ đầy đủ,

điều này tạo ra liên kết
[tasks](#tasks)

sau đó trong tài liệu, bạn tạo neo được đặt tên (bất cứ cái gì nó được gọi).

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

lưu ý rằng bạn cũng có thể bọc nó xung quanh tiêu đề quá.

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

13

Hướng dẫn pandoc giải thích cách liên kết với các tiêu đề của bạn, bằng cách sử dụng định danh của họ. Tôi đã không kiểm tra sự hỗ trợ này bởi các trình phân tích cú pháp khác, nhưng nó đã được báo cáo rằng nó không hoạt động trên github .

Mã định danh có thể được chỉ định bằng tay:

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

hoặc bạn có thể sử dụng mã định danh được tạo tự động (trong trường hợp này #my-heading-text). Cả hai đều được giải thích chi tiết trong hướng dẫn sử dụng pandoc .

LƯU Ý : Điều này chỉ hoạt động khi chuyển đổi sang HTML , LaTex , ConTeXt , Dệt may hoặc AsciiDoc .


9

Một số điều cần lưu ý nếu bạn có thể thích các biểu tượng trong các tiêu đề mà bạn muốn điều hướng đến ...

# 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

... điều thích #, ;, &, và :trong tiến chuỗi thường được bỏ qua / sọc thay vì bỏ đi, và người ta cũng có thể sử dụng trích dẫn liên kết phong cách để tận dụng nhanh chóng dễ dàng hơn.

Ghi chú

GitHub hỗ trợ :word:cú pháp trong các xác nhận, các tệp readme, v.v. hãy xem ý chính (từ rxaviers) nếu việc sử dụng được quan tâm ở đó.

Và đối với mọi nơi khác, số thập phân hoặc thập lục phân có thể được sử dụng cho các trình duyệt hiện đại; cheat-sheet từ w3schoolspurdy tiện dụng , đặc biệt là nếu sử dụng CSS ::beforehoặc ::aftergiả yếu tố với các biểu tượng là hơn phong cách của bạn.

Điểm thưởng?

Chỉ trong trường hợp ai đó đang tự hỏi làm thế nào hình ảnh và các liên kết khác trong một tiêu đề được phân tích cú pháp thành 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!"

Hãy cẩn thận

Kết xuất MarkDown khác nhau từ nơi này sang nơi khác, vì vậy những thứ như ...

## methodName([options]) => <code>Promise</code>

... trên GitHub sẽ có một yếu tố idnhư ...

id="methodnameoptions--promise"

... nơi mà việc vệ sinh vani sẽ dẫn đến một id...

id="methodnameoptions-codepromisecode"

... có nghĩa là viết hoặc biên dịch các tệp MarkDown từ các mẫu hoặc yêu cầu nhắm mục tiêu một cách slugifeing , hoặc thêm cấu hình và logic theo kịch bản cho các cách thông minh khác nhau mà muốn làm sạch văn bản của tiêu đề.


9

Giải pháp phổ quát

Câu hỏi này dường như có một câu trả lời khác nhau theo cách thực hiện markdown.
Trên thực tế, tài liệu Markdown chính thức im lặng về chủ đề này.
Trong những trường hợp như vậy và nếu bạn muốn một giải pháp di động, bạn có thể sử dụng HTML.

Trước bất kỳ tiêu đề nào, hoặc trong cùng một dòng tiêu đề, hãy xác định ID bằng cách sử dụng một số thẻ HTML.
Ví dụ: <a id="Chapter1"></a>
Bạn sẽ thấy điều này trong mã của bạn nhưng không có trong tài liệu được kết xuất.

Ví dụ đầy đủ:

Xem một ví dụ đầy đủ (trực tuyến và có thể chỉnh sửa) ở đây .

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

Để kiểm tra ví dụ này, bạn phải thêm một số khoảng trống giữa danh sách nội dung và chương đầu tiên hoặc giảm chiều cao cửa sổ.
Ngoài ra, không sử dụng khoảng trắng trong tên của id.


Uh ..., có vẻ tốt. Đã thử nó, hai vấn đề: (1). ## Chapter 1cần một dòng mở trên nó. (2). Liên kết không hoạt động ...
Musicformellons

Ah, nó không hoạt động trong plugin markell intellij tôi đã sử dụng; nhưng DOES hoạt động trong trình soạn thảo đánh dấu Macdown.
nhạc nền

Tuy nhiên, đã được thử nghiệm trên github: yêu cầu mở dòng trên tiêu đề, nhưng nó hoạt động.
âm nhạc

@musicformellons bạn có thể vui lòng thử mà không có dòng mở nhưng đóng đúng thẻ span không? <br><span id="Chapter1"><span>
ePi272314

Vâng, nó hoạt động!
nhạc nền

7

Không có chỉ thị như vậy trong thông số Markdown. Lấy làm tiếc.


À! Bạn có biết nếu MultiMarkdown hoặc Dệt may hỗ trợ nó? Tôi đã nghĩ đến việc chuyển sang MD cho tất cả các tài liệu của mình nhưng đây là một công cụ thỏa thuận. Cảm ơn đã giúp đỡ!
trừ dòng chảy

5
Bạn có ý nghĩa gì bởi "chỉ thị"? Các giải pháp khác cho chính xác vấn đề đã được đăng ở đây.
Zelphir Kaltstahl

4

Gitlab sử dụng GitLab Flavored Markdown (GFM)

Ở đây "tất cả các tiêu đề được hiển thị Markdown tự động nhận ID"

Người ta có thể sử dụng chuột để:

  • di chuyển chuột trên tiêu đề
  • di chuyển chuột qua bộ chọn di chuột mà hiển thị bên trái từ tiêu đề
  • sao chép và lưu liên kết bằng cách nhấp chuột phải

    Ví dụ: trong tệp README.md tôi có tiêu đề:

## series expansion formula of the Boettcher function

cung cấp một liên kết:

https://gitlab.com/adammajewski/parameter_external_angle/blob/master/README.md#series-Exansion-formula-of-the-boettcher-f ghép

Tiền tố có thể được gỡ bỏ để liên kết ở đây chỉ đơn giản là

file#header

có nghĩa là:

README.md#series-expansion-formula-of-the-boettcher-function

Bây giờ nó có thể được sử dụng như:

[series expansion formula of the Boettcher function](README.md#series-expansion-formula-of-the-boettcher-function)

Người ta cũng có thể làm điều đó bằng tay: thay thế dấu cách bằng dấu gạch nối.

Ví dụ trực tiếp là đây


1

Sử dụng kramdown, có vẻ như điều này hoạt động tốt:

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

Tôi thấy nó đã được đề cập rằng

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

hoạt động hiệu quả, nhưng trước đây có thể là một sự thay thế tốt cho các yếu tố bên cạnh các tiêu đề hoặc các tiêu đề khác có nhiều từ.


1

Vì MultiMarkdown đã được đề cập như một tùy chọn trong các bình luận.

Trong MultiMarkdown , cú pháp cho một liên kết nội bộ rất đơn giản.

Đối với bất kỳ tiêu đề nào trong tài liệu chỉ cần cung cấp tên tiêu đề ở định dạng này [heading][]để tạo liên kết nội bộ.

Đọc thêm tại đây: MultiMarkdown-5 Tài liệu tham khảo chéo .

Tài liệu tham khảo chéo

Một tính năng được yêu cầu là khả năng Markdown tự động xử lý các liên kết trong tài liệu dễ dàng như xử lý các liên kết bên ngoài. Với mục đích này, tôi đã thêm khả năng diễn giải [Một số văn bản] [] dưới dạng một liên kết chéo, nếu một tiêu đề có tên là Một số văn bản có thể tồn tại.

Ví dụ: [Siêu dữ liệu] [] sẽ đưa bạn đến # Siêu dữ liệu (hoặc bất kỳ ## Siêu dữ liệu, ### Siêu dữ liệu, #### Siêu dữ liệu, ##### Siêu dữ liệu, ###### Siêu dữ liệu).

Ngoài ra, bạn có thể bao gồm một nhãn tùy chọn mà bạn chọn để giúp phân biệt các trường hợp có nhiều tiêu đề có cùng tiêu đề:

### Tổng quan [MultiMarkdownOverview] ##

Điều này cho phép bạn sử dụng [MultiMarkdownOverview] để tham khảo cụ thể phần này và không phải phần khác có tên Tổng quan. Điều này hoạt động với các tiêu đề kiểu atx- hoặc lắng đọng.

Nếu bạn đã xác định một neo sử dụng cùng một id được sử dụng bởi một tiêu đề, thì neo được xác định sẽ được ưu tiên.

Ngoài các tiêu đề trong tài liệu, bạn có thể cung cấp nhãn cho hình ảnh và bảng mà sau đó cũng có thể được sử dụng để tham khảo chéo.


0

Một số vòng quay khác về <a name="">mẹo:

<a id="a-link"></a> Title
------

#### <a id="a-link"></a> Title (when you wanna control the h{N} with #'s)

0

Ngoài các câu trả lời trên,

Khi đặt tùy chọn number_sections: truetrong tiêu đề YAML:

number_sections: TRUE

RMarkdown sẽ tự động đánh số phần của bạn.

Để tham chiếu các phần được đánh số tự động đó, chỉ cần đặt phần sau vào tệp R Markdown của bạn:

[My Section]

Trong trường hợp My Sectionlà tên của phần này

Điều này dường như hoạt động bất kể cấp độ phần:

# My section

## My section

### My section

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.