Bagaimana cara menautkan ke bagian dari dokumen yang sama dalam penurunan harga?

541

Saya menulis dokumen penurunan harga yang besar dan ingin menempatkan daftar isi di awal yang akan menyediakan tautan ke berbagai lokasi dalam dokumen. Bagaimana saya bisa melakukan ini?

Saya mencoba menggunakan

[a link](# MyTitle)

di mana MyTitlejudul dalam dokumen dan ini tidak berhasil.

pengecualian penerima
sumber
1
Tautan ke stackoverflow.com/questions/12204257/... untuk R Markdown (Rmd).
Etienne Low-Décarie
1
Satu-satunya masalah yang Anda miliki adalah bahwa MyTitle tidak boleh menjadi judul, tetapi nama jangkar dalam dokumen itu (seperti <a name="MyTitle"> </a>). Maka Anda akan dapat menggunakan tautan asli Anda, di mana saja di dalam dokumen.
userfuser
7
Jawaban yang diterima sebenarnya tidak relevan bagi kebanyakan orang. Alih-alih lihat jawaban kedua di bawah: stackoverflow.com/a/16426829/398630
BrainSlugs83

Jawaban:

37

Di pandoc , jika Anda menggunakan opsi --tocdalam menghasilkan html, daftar isi akan dibuat dengan tautan ke bagian, dan kembali ke daftar isi dari judul bagian. Ini mirip dengan pandoc format lain yang ditulis, seperti LaTeX, rtf, rst, dll. Jadi dengan perintah

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

sedikit penurunan harga ini:

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

akan menghasilkan ini sebagai badan 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>
aplikatif
sumber
1
Terima kasih, inilah tepatnya yang saya butuhkan. Saya menggunakan Textmate untuk mengonversi Markdown ke HTML, akan beralih ke pandoc.
recipriversexclusion
1
Anda dapat mencoba demo Pandoc tmbundle di Github (ada juga emacs pandoc-mode, dll.) Tmbundle menggunakan kembali highlighter sintaksis khusus MultiMarkdown, sehingga ada (sangat) sedikit keanehan. Juga, banyak skrip terkait sangat dikustomisasi - misalnya Konteks, bukan LaTeX dll - tetapi idenya adalah bahwa pengguna akan mengubahnya sesuka mereka, yang saya temukan cukup sederhana. Mungkin harus git clone-ed ke direktori tmbundle terendah atau terluar, ~/Library/Application\ Support/TextMate/Bundlesuntuk menyederhanakan integrasi.
aplikasi
2
Itu menambah -1pengulangan pertama id, -2ke yang kedua, dll
aplikatif
6
Saya menemukan bahwa saya harus menambahkan opsi --standalone ke perintah pandoc untuk membuatnya benar-benar menampilkan daftar isi itu sendiri dalam output. Tanpa saklar itu, itu akan membuat header menjadi tautan kembali ke jangkar bernama #toc, tetapi tidak benar-benar menampilkan jangkar yang dinamai dan daftar sejenisnya sendiri.
Duncan Lock
4
Ini mungkin menjawab pertanyaan OP, tetapi bagi kita semua yang ingin tahu bagaimana melakukannya dalam penurunan harga , itu sangat tidak berguna. - Jawaban berikutnya jauh lebih bermanfaat.
BrainSlugs83
936

Github secara otomatis mem-parsing anchor tag dari header Anda. Jadi, Anda dapat melakukan hal berikut:

[Custom foo description](#foo)

# Foo

Dalam kasus di atas, Fooheader telah menghasilkan tag jangkar dengan namafoo

Catatan : hanya satu #untuk semua ukuran tajuk, tanpa spasi di antara #dan nama jangkar , nama tag jangkar harus lebih kecil, dan dibatasi oleh tanda hubung jika multi-kata .

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

### My Multi Word Header

Memperbarui

Bekerja di luar kotak pandocjuga.

uberllama
sumber
54
Jika tajuk Anda berisi beberapa kata, "Seperti ini", ganti spasi dengan tanda hubung di jangkar [just](#like-this-one).
Mogsdad
3
Apakah ini hanya berfungsi untuk header H1? Jika menautkan ke header H2 (mis. ## Foo), apakah saya juga perlu memasukkan dua tanda angka pada tautan, yaitu [Foo] (## foo)? Saya tidak dapat mengaktifkan sintaks atau milik saya (dengan tanda nomor tambahan).
GrayedFox
7
@GrayedFox, jika Anda ingin membuat tautan untuk ab H2 header ## Foo, coba [ini tautan saya ke Foo] (# foo) ... yaitu: hash tunggal , tanpa spasi antara hash dan huruf kecil-kebab-case-name- of-header
Abdull
4
Sebagai tip: periksa jangkar yang ditampilkan di samping tajuk Anda di Github untuk mendapatkan tautan masing-masing, yaitu jika itu berisi karakter khusus, mereka akan dihapus secara otomatis dan tautan yang benar ditampilkan di sana.
Alexander Pacha
2
Bagaimana dengan ketika pos memiliki nomor? # 3. Poin ketiga [Poin ketiga] (# 3.-third.point) tidak berfungsi
Aditya
118

Bereksperimen, saya menemukan solusi menggunakan <div…/>tetapi solusi yang jelas adalah menempatkan titik jangkar Anda sendiri di halaman mana pun Anda suka, dengan demikian:

<a name="abcde">

sebelum dan

</a>

setelah baris yang ingin Anda 'tautkan'. Lalu tautan penurunan harga seperti:

[link text](#abcde)

dimanapun dalam dokumen membawa Anda ke sana.

The <div…/>solusi menyisipkan "boneka" divisi hanya untuk menambahkan idproperti, dan ini berpotensi mengganggu struktur halaman, tetapi <a name="abcde"/>solusi seharusnya cukup berbahaya.

(PS: Mungkin tidak apa-apa untuk meletakkan jangkar di baris yang ingin Anda tautkan, sebagai berikut:

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

tetapi ini tergantung pada bagaimana penurunan harga memperlakukan ini. Saya perhatikan, sebagai contoh, formatter jawaban Stack Overflow senang dengan ini!)

Steve Powell
sumber
2
Jika Anda melakukan ini, Anda harus menyadari bahwa div menghapus format markdown lainnya, seperti ## headers.
2rs2ts
@ user691859 Bisakah Anda menguraikan? Mungkin kita dapat memperbarui jawaban untuk membuatnya bekerja lebih baik. Saya melihat TextMate menekan highlight, sampai saya membuat indentasi div, tapi tidak ada masalah dengan markdown yang diproses dilihat dari browser.
Steve Powell
Di WriteMonkey saya menemukan bahwa jika saya mendahului teks apa pun dengan <div/>beberapa baris di bawah ini akan terpengaruh. Alih-alih, saya harus membungkus teks yang saya tautkan dalam divklausa tag lengkap dan saya harus MENGATUR ULANG tingkah laku dari awal menggunakan HTML nyata. Boo.
2rs2ts
6
Ini bekerja dengan baik, terima kasih. Bagi siapa pun yang bertanya-tanya, ini juga berfungsi dengan file Markdown yang di-host-dan-ditampilkan GitHub.
Alex Dean
2
Agar kompatibel dengan HTML5 , saya ingin menggantinya <a name="head1"/>dengan <a id="head1"/>.
binki
74

Ini mungkin kedaluwarsa tetapi untuk membuat tautan dokumen dalam penurunan harga di Github digunakan ...
(CATATAN: huruf kecil #judul)

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

Sebuah pertanyaan bagus dibuat sehingga saya telah mengedit jawaban saya;

Link batin dapat dibuat untuk setiap ukuran judul menggunakan - #, ##, ###, #### saya membuat sebuah contoh cepat di bawah ini ... https://github.com/aogilvie/markdownLinkTest

Sekutu
sumber
Dalam contoh Anda, tag tautan hanya memiliki satu #, tetapi tajuk yang seharusnya ditautkan memiliki dua ##; bukankah seharusnya mereka sama?
Karim Bahgat
3
Pertanyaan bagus. Jawabannya adalah tidak. # in (#dependencies-title)memberi tahu Github markdown bahwa ini adalah tautan dalam. Teks yang mengikuti dapat berupa ukuran judul apa saja. Ini adalah contoh tes yang saya buat ... https://github.com/aogilvie/markdownLinkTest
Ally
1
Apakah itu tergantung pada rasa penurunan harga? Sepertinya berfungsi dengan baik di editor penurunan harga, tetapi ketika saya menyimpan ke html atau pdf id tidak ditambahkan ke tag yang sesuai. Saya akan baik-baik saja hanya membuang jangkar di sana, tetapi sepertinya metode Anda jauh lebih bersih dan lebih cepat.
meteorainer
21

ya, penurunan harga tidak melakukan ini tetapi Anda harus menentukan nama jangkar <a name='xyx'>.

contoh lengkap,

ini menciptakan tautan
[tasks](#tasks)

kemudian dalam dokumen, Anda membuat jangkar bernama (apa pun namanya).

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

perhatikan bahwa Anda juga bisa membungkusnya di sekitar tajuk juga.

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

Manual pandoc menjelaskan cara menautkan ke header Anda, menggunakan pengenal mereka. Saya tidak memeriksa dukungan ini oleh parser lain, tetapi dilaporkan tidak bekerja di github .

Pengidentifikasi dapat ditentukan secara manual:

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

atau Anda dapat menggunakan pengidentifikasi yang dibuat secara otomatis (dalam hal ini #my-heading-text). Keduanya dijelaskan secara rinci dalam manual pandoc .

CATATAN : Ini hanya berfungsi saat mengonversi ke HTML , LaTex , ConTeXt , Textile atau AsciiDoc .

hoijui
sumber
9

Beberapa hal tambahan yang perlu diingat jika Anda pernah menyukai simbol dalam pos yang ingin Anda navigasi ...

# 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

... hal-hal seperti #, ;, &, dan :dalam menuju string umumnya diabaikan / bergaris bukan melarikan diri, dan satu juga dapat menggunakan kutipan link gaya memanfaatkan cepat lebih mudah.

Catatan

GitHub mendukung :word:sintaks dalam commit, file readme, dll. Lihat inti (dari rxaviers) jika menggunakan 'em ada yang menarik di sana.

Dan untuk hampir semua tempat lain desimal atau heksadesimal dapat digunakan untuk browser modern; cheat-sheet dari w3schools sangat berguna , terutama jika menggunakan CSS ::beforeatau ::afterelemen semu dengan simbol lebih gaya Anda.

Poin Bonus?

Untuk berjaga-jaga seandainya seseorang bertanya-tanya bagaimana gambar dan tautan lain dalam sebuah pos diuraikan menjadi 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!"

Peringatan

Render MarkDown berbeda dari satu tempat ke tempat lain, jadi hal-hal seperti ...

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

... di GitHub akan memiliki elemen dengan idseperti ...

id="methodnameoptions--promise"

... dimana sanitasi vanili akan menghasilkan id...

id="methodnameoptions-codepromisecode"

... yang berarti bahwa menulis atau mengkompilasi file MarkDown dari template memerlukan penargetan satu cara slugifeing , atau menambahkan konfigurasi dan logika skrip untuk berbagai cara pintar yang dilakukan oleh tempat-tempat yang suka membersihkan teks judul.

S0AndS0
sumber
9

Solusi universal

Pertanyaan ini tampaknya memiliki jawaban yang berbeda sesuai dengan implementasi penurunan harga.
Bahkan, dokumentasi penurunan harga resmi tidak membahas topik ini.
Dalam kasus seperti itu, dan jika Anda menginginkan solusi portabel, Anda bisa menggunakan HTML.

Sebelum tajuk apa pun, atau dalam baris tajuk yang sama, tentukan ID menggunakan beberapa tag HTML.
Misalnya: <a id="Chapter1"></a>
Anda akan melihat ini dalam kode Anda tetapi tidak dalam dokumen yang diberikan.

Contoh lengkap:

Lihat contoh lengkap (online dan dapat diedit) di sini .

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

Untuk menguji contoh ini, Anda harus menambahkan beberapa ruang ekstra antara daftar konten dan bab pertama atau mengurangi ketinggian jendela.
Selain itu, jangan gunakan spasi atas nama id.

ePi272314
sumber
Eh ... sepertinya bagus. Mencobanya, dua masalah: (1). ## Chapter 1membutuhkan garis terbuka di atasnya. (2) Tautan tidak berfungsi ...
musicformellons
Ah, itu tidak berfungsi dalam plugin penurunan harga intellij yang saya gunakan; tetapi TIDAK berfungsi di editor markup Macdown.
musicformellons
Tetap saja, diuji pada github: diperlukan baris terbuka di atas header, tetapi berhasil.
musicformellons
@musicformellons dapatkah Anda mencoba tanpa garis pembuka tetapi dengan benar menutup tag rentang? <br><span id="Chapter1"><span>
ePi272314
ya, itu berhasil!
musicformellons
7

Tidak ada arahan seperti itu dalam spec Markdown. Maaf.

Nick Gerakines
sumber
Uh oh! Apakah Anda tahu jika MultiMarkdown atau Textile mendukungnya? Saya sedang berpikir untuk bermigrasi ke MD untuk semua dokumentasi saya tapi ini pemecah kesepakatan. Terima kasih untuk bantuannya!
recipriversexclusion
5
Apa yang Anda maksud dengan "arahan"? Solusi lain untuk masalah sebenarnya telah diposting di sini.
Zelphir Kaltstahl
4

Gitlab menggunakan GitLab Flavoured Markdown (GFM)

Di sini "semua tajuk yang dibuat dengan penurunan harga secara otomatis mendapatkan ID"

Seseorang dapat menggunakan mouse untuk:

  • gerakkan mouse ke atas tajuk
  • gerakkan mouse ke hover pemilih yang menjadi terlihat ke kiri dari header
  • salin dan simpan tautan menggunakan klik kanan mouse

    Misalnya dalam file README.md saya memiliki tajuk:

## series expansion formula of the Boettcher function

yang memberi tautan:

https://gitlab.com/adammajewski/parameter_external_angle/blob/master/README.md#series-expansion-formula-of-the-boettcher-function

Awalan dapat dihapus sehingga tautan di sini sederhana

file#header

yang di sini berarti:

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

Sekarang dapat digunakan sebagai:

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

Anda juga dapat melakukannya secara manual: ganti spasi dengan tanda hubung.

Contoh langsung ada di sini

Adam
sumber
1

Menggunakan kramdown, sepertinya ini berfungsi dengan baik:

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

Saya melihat sudah disebutkan itu

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

bekerja secara efisien, tetapi yang pertama mungkin merupakan alternatif yang baik untuk elemen selain tajuk atau tajuk dengan banyak kata.

parker sadie
sumber
1

Karena MultiMarkdown disebutkan sebagai opsi dalam komentar.

Dalam MultiMarkdown sintaks untuk tautan internal sederhana.

Untuk setiap heading dalam dokumen cukup berikan nama heading dalam format ini [heading][]untuk membuat tautan internal.

Baca lebih lanjut di sini: MultiMarkdown-5 Referensi-silang .

Referensi silang

Fitur yang sering diminta adalah kemampuan Markdown untuk secara otomatis menangani tautan di dalam dokumen semudah menangani tautan eksternal. Untuk tujuan ini, saya menambahkan kemampuan untuk menafsirkan [Some Text] [] sebagai cross-link, jika header dengan nama “Some Text” ada.

Sebagai contoh, [Metadata] [] akan membawa Anda ke # Metadata (atau ## Metadata, ### Metadata, #### Metadata, ##### Metadata, ###### Metadata).

Sebagai alternatif, Anda dapat menyertakan label opsional yang Anda pilih untuk membantu menyababasikan kasus di mana beberapa header memiliki judul yang sama:

### Ikhtisar [MultiMarkdownOverview] ##

Ini memungkinkan Anda untuk menggunakan [MultiMarkdownOverview] untuk merujuk ke bagian ini secara khusus, dan bukan bagian lain bernama Tinjauan. Ini berfungsi dengan header atx- atau settext-style.

Jika Anda telah menetapkan anchor menggunakan id yang sama dengan yang digunakan oleh header, maka anchor yang ditentukan diutamakan.

Selain header dalam dokumen, Anda dapat memberikan label untuk gambar dan tabel yang kemudian dapat digunakan untuk referensi silang juga.

jwpfox
sumber
0

Beberapa lagi berputar pada <a name="">trik:

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

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

Selain jawaban di atas,

Saat mengatur opsi number_sections: truedi header YAML:

number_sections: TRUE

RMarkdown akan otomatis menomori bagian Anda.

Untuk mereferensikan bagian-bagian yang diberi nomor otomatis itu, cukup masukkan yang berikut ini di file R Markdown Anda:

[My Section]

Di mana My Sectionnama bagian itu

Ini tampaknya berhasil terlepas dari tingkat bagian:

# My section

## My section

### My section

orrymr
sumber