จะเชื่อมโยงไปยังสมอที่มีชื่อใน Multimarkdown ได้อย่างไร?


573

ฉันเจอหลายข้อที่กล่าวถึงการสนับสนุนของ MultiMarkdown สำหรับลิงก์ภายใน / แองเคอร์ที่มีชื่อ แต่ฉันไม่สามารถหาตัวอย่างหนึ่งของวิธีการทำมันได้จริง

ดังนั้นไวยากรณ์สำหรับแสดงถึงจุดยึดที่ระบุชื่อคืออะไรและไวยากรณ์สำหรับการเชื่อมโยงนั้นเหมือนกับการเชื่อมโยงไปยัง URL อื่น ๆ (ใช้ #foo แทนเท่านั้นhttp://....) คืออะไร


หากคุณกำลังทำสิ่งนี้เพื่อสร้างสารบัญฉันขอแนะนำdoctocเพื่อทำสิ่งนี้โดยอัตโนมัติ (ต้องใช้node.js ) Doctoc สร้างรหัส markdown เพื่อให้มันเป็นตัวอย่างของวิธีการเชื่อมโยงไปยังส่วนหัวทั่วทั้งเอกสารด้วย (ดังอธิบายในคำตอบของ @ user1789493)
James Owers

คำตอบ:


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:

(บนดังนั้นลิงก์ไม่ทำงานเนื่องจากตัวยึดถูกตัดออก)


11
@ jj1bdx ฉันทำได้แล้ว - <a id="id"></a>แบบฟอร์มดีที่สุด ดูนี้ดังนั้นคำถาม / คำตอบ
Steve Powell

นอกจากนี้สตีฟ ฉันจะทำเครื่องหมายเป็นคำตอบยกเว้นคำถามเกี่ยวกับ MultiMarkdown เห็นได้ชัดว่าการลงคะแนนของผู้คนแสดงให้เห็นว่านี่เป็นส่วนเสริมที่เป็นประโยชน์ ดังนั้นขอบคุณ
masukomi

3
Fyi: Github markdown คาดว่าคุณจะใช้ name = แทน id ดูเหมือนว่า
Dieter

@Dieter: name=ถูกคัดค้านใน XHTML แต่ตอนนี้ฉันพบว่าid=มีผลข้างเคียงใน HTML5 ดังนั้นฉันจึงย้อนกลับไปname=ในคำตอบนี้
Steve Powell

3
ใช้งานได้กับ github-flavored-markdown (อัญมณีทับทิมให้ผลตามที่คาดไว้)
Kedar Mhaswade

461

หากคุณมีส่วนหัวในไฟล์ markdown คุณสามารถเชื่อมโยงส่วนหัวในไฟล์ได้โดยตรง

Markdown Header -

## The Header

สิ่งนี้จะสร้างรหัสโดยนัย#the-header(แทนที่ช่องว่างภายในด้วยเครื่องหมายขีดคั่นและตัวพิมพ์เล็ก)

หากต้องการนำทางไปยัง id นี้คุณสามารถสร้างลิงก์ดังนี้:

[Link to Header](#the-header)

นี่เทียบเท่ากับ:

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

#headerโปรดทราบชื่ออ้างอิงที่เป็นกรณีที่ต่ำกว่า


30
ดูเหมือนว่า BitBucket จะเติมคำนำหน้า id anchor ด้วย "markdown-header-" ดังนั้นถ้าส่วนหัวของคุณคือการเชื่อมโยงจะเป็น## This Header ## [To This Header](#markdown-header-this-header)หากคุณไม่แน่ใจว่า id ของส่วนหัวของคุณคืออะไรใช้ผู้ตรวจสอบหน้าเพื่อดูค่า HTML
Vinney Kelly

ไม่ได้ผลสำหรับฉันใน Pandoc ที่ขยายมาร์กอัปอาจใช้ได้ที่อื่น
Zelphir Kaltstahl

9
@SaurabhM สิ่งนี้จะใช้ได้เฉพาะถ้า markdown ของคุณเป็นตัวแปลง html ไม่เป็นไปตามมาตรฐาน มาตรฐานไม่ได้สร้างแท็กสมอ ตอนนี้หลายคนไม่ปฏิบัติตาม แต่คุณไม่ควรคาดหวังว่ามันจะทำงานได้ทุกที่
masukomi

9
ทำไมโอ้ทำไมเราต้องสร้างมาตรฐานในบางสิ่งบางอย่างที่ไม่ได้มาตรฐานและถูกอบเหมือนมาร์กดาวน์ ไม่สามารถรอให้ AsciiDoc เป็นผู้นำได้
hmijail mourns ลาออกจากตำแหน่ง

1
GitHub เพิ่มเนื้อหาผู้ใช้ก่อนชื่อส่วนหัว:[Link](user-content-the-header)
Melvin Witte

137

นำมาจากคำแนะนำผู้ใช้ Multimarkdown (ขอบคุณ @MultiMarkdown บน Twitter สำหรับชี้ให้เห็น)

[Some Text][]จะเชื่อมโยงไปยังส่วนหัวชื่อ“ ข้อความบางส่วน”
เช่น

### Some Text ###

ป้ายกำกับเพิ่มเติมที่คุณเลือกเพื่อช่วยแก้ปัญหากรณีที่ส่วนหัวหลายรายการมีชื่อเรื่องเดียวกัน:

### Overview [MultiMarkdownOverview] ##

สิ่งนี้อนุญาตให้คุณใช้ [MultiMarkdownOverview] เพื่ออ้างถึงส่วนนี้โดยเฉพาะและไม่ใช่ส่วนอื่นที่ชื่อภาพรวม ใช้งานได้กับส่วนหัว atx- หรือสไตล์

หากคุณได้กำหนดสมอแล้วโดยใช้ id เดียวกับที่ใช้โดยส่วนหัวแล้วสมอที่กำหนดไว้จะมีความสำคัญกว่า

นอกเหนือจากส่วนหัวภายในเอกสารคุณสามารถจัดทำป้ายกำกับสำหรับรูปภาพและตารางซึ่งสามารถใช้สำหรับการอ้างอิงโยงได้เช่นกัน


FWIW ไม่ทำงานกับโหมดมาร์กอัปของ emacs ตั้งแต่ 23.4.1
Attila Lendvai

5
Markdown ไม่สนับสนุนเชิงอรรถ เช่นนี้จะไม่ทำงานในโหมด "Markdown" ส่วนใหญ่ MultiMarkdown อย่างไรก็ตามสนับสนุนจำนวนของส่วนขยายที่ทำให้ชีวิตง่ายขึ้นสำหรับนักเขียน
masukomi

11
ดูเหมือน Github จะไม่สนับสนุนป้ายกำกับในส่วนหัว?
andig

1
สิ่งนี้ใช้ไม่ได้ (อย่างน้อยใน codepen.io) เมื่อมี ':' อยู่ในส่วนหัว
Xiao Peng - ZenUML.com

2
ลิงค์นั้นเป็นเอกสารโดยคนที่เขียน MultiMarkdown ไม่แน่ใจว่าคุณกำลังทำอะไรใน codepen.io แต่ฉันมั่นใจว่าเอกสารนั้นถูกต้อง โปรดจำไว้ว่าMULTI Markdown ไม่ใช่ Markdown
masukomi

100

ฉันทดสอบGithub Flavoured Markdownมาระยะหนึ่งแล้วสามารถสรุปได้ด้วยกฎสี่ข้อ:

  1. เครื่องหมายวรรคตอนจะลดลง
  2. ช่องว่างสีขาวชั้นนำจะลดลง
  3. ตัวพิมพ์ใหญ่จะถูกแปลงเป็นต่ำ
  4. ช่องว่างระหว่างตัวอักษรจะถูกแปลงเป็น -

ตัวอย่างเช่นหากส่วนของคุณมีชื่อว่า:

## 1.1 Hello World

สร้างลิงก์ด้วยวิธีนี้:

[Link](#11-hello-world)

เกิดอะไรขึ้นถ้ามียัติภังค์ในชื่อ? มันแปลงเป็นอะไร? หมายเหตุมีช่องว่างระหว่างคำและเครื่องหมายขีดคั่น ตัวอย่าง: `` `- [My - Header] (# my --- header) # My - Header` `` นั่นจะถูกต้องไหม?
Spencer Pollock

stackoverflow.com/a/17820138/2908724สำหรับคำศัพท์เกี่ยวกับสไตล์นี้ ฉันชอบ "kebab-case"
บิชอป

22

วิธีที่ดีที่สุดในการสร้างลิงก์ภายใน (เกี่ยวข้องกับส่วน) คือสร้างรายการ แต่แทนที่จะเชื่อมโยงให้ใส่ #section หรือ # section-title หากส่วนหัวมีช่องว่าง

---- MARKDOWN ------------------------

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

---- LIST PREVIEW ------------------------

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
ตามที่ระบุไว้ในความคิดเห็นอื่น ๆ ที่นี่ ที่จะไม่ทำงานใน markdown ใด ๆ -> ตัวแปลง html ที่เป็นไปตามมาตรฐาน การสร้างแท็กจุดยึดในส่วนหัวจะเกิดขึ้นในตัวแปลง SOME เท่านั้น อีกต่อไปพวกเขาจะไม่แปลงช่องว่างทั้งหมดเพื่อขีดคั่น สิ่งนี้ไม่สามารถนับได้
masukomi

1
ฉันใช้ GitHub Markdown ในเครื่องมือแก้ไขรหัสAtomซึ่งมีแพ็คเกจในตัวที่ชื่อว่า "Markdown Preview" จากโหมดดูตัวอย่างฉันสร้างไฟล์ html โดยใช้เมนูบริบท "บันทึกเป็น HTML ... "
rafr3

ใช่ประเด็นของฉันคือคุณไม่สามารถพึ่งพาเทคนิคของคุณในการทำงานได้ทุกที่และไม่ใช่คำถามและคำตอบของคุณก็ไม่ได้เกี่ยวกับ markdown ใน Atom โดยเฉพาะ คำถามไม่ได้เกี่ยวกับ Markdown แต่เป็นเรื่องของ MultiMarkdown
masukomi

ฉันใช้วิธีการเชื่อมโยงนี้ แต่มันไม่ทำงานสำหรับฉัน ไม่เลื่อนไปที่ส่วน / ส่วนหัวนั้น
Tom Kustermans

ให้หัวไวขึ้นถึงขนาดตัวพิมพ์ หากคุณนิยามคำว่า## Helloคุณควรอ้างถึงเป็น[Whatever you want](#Hello)
Victor Augusto

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คำตอบของ)

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

ซึ่งให้คุณ:

ข้ามไปที่ : ปุ่มลัด & เครื่องหมาย / Radii / Route Wizard 2.0

บันทึกการเปลี่ยนแปลงจากและ.ไป-ยังและการสูญเสียของ&ในลิงค์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.