Markdown'da aynı belgenin bir kısmına nasıl bağlantı kurulur?


539

Ben büyük bir Markdown belgesi yazıyorum ve başlangıçta belgenin çeşitli yerlerine bağlantılar sağlayacak bir tür içindekiler tablosu yerleştirmek istiyorum. Bunu nasıl yapabilirim?

Kullanmayı denedim

[a link](# MyTitle)

MyTitlebelgenin içindeki bir başlık nerede ve bu işe yaramadı.


1
R Markdown (Rmd) için stackoverflow.com/questions/12204257/… bağlantısı .
Etienne Low-Décarie

1
Sahip olduğunuz tek sorun, MyTitle'ın bir başlık değil, o belgedeki bir çapanın adı olması gerektiği (<a name="MyTitle"> </a> gibi). Ardından, orijinal bağlantınızı dokümanın herhangi bir yerinde kullanabilirsiniz.
userfuser

7
Kabul edilen cevap aslında pek çok kişi için geçerli değildir. Bunun yerine ikinci cevaba bakınız: stackoverflow.com/a/16426829/398630
BrainSlugs83

Yanıtlar:


37

Gelen Pandoc seçeneğini kullanırsanız, --tochtml üretiminde, bir içindekiler tablosu bölümlerine bağlantıları ve bölüm başlıkları içindekiler tablosuna tersiyle üretilecek. LaTeX, rtf, rst, vb.Gibi pandoc'un yazdığı diğer formatlara benzer.

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

bu işaretleme biraz:

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

bunu html'nin gövdesi olarak verir:

<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
Teşekkürler, tam da ihtiyacım olan buydu. Markdown'ı HTML'ye dönüştürmek için Textmate kullanıyordum, pandoc'a geçecek.
recipriversexclusion

1
Sen verebilir demo Pandoc tmbundle yüzden (çok) bazı Tuhaflıklar vardır tmbundle MultiMarkdown özgü sözdizimi vurgulayıcı yeniden kullanır (Pandoc-mode, vb emacs da vardır) Github bir deneyin kadar. Ayrıca, ilişkili komut dosyalarının birçoğu son derece özelleştirilmiştir - örneğin Context, LaTeX vb. - ancak fikir, kullanıcıların istedikleri gibi değiştirecekleri, ki oldukça basit buldum. Entegrasyonu basitleştirmek için muhtemelen git cloneen düşük veya en dıştaki tmbundle dizinine dönüştürülmelidir ~/Library/Application\ Support/TextMate/Bundles.
uygulamalı

2
Bu ekler -1, id ilk tekrarına -2vb saniyede için
uygulamalı

6
Aslında çıktı içindekiler tablosunun çıktısını almak için pandoc komutuna --standalone seçeneği eklemek zorunda buldum. Bu anahtar olmadan, başlıkları #toc adlı bağlantıya geri bağlantılar haline getirir, ancak aslında adlandırılmış bağlantıyı ve benzer listeyi çıkarmaz.
Duncan Lock

4
Bu OP'nin sorusuna cevap verebilir, ancak markdown'da nasıl yapılacağını bilmek isteyen geri kalanlarımız için oldukça işe yaramaz. - Bir sonraki cevap çok daha yararlı.
19:23

934

Github, bağlantı etiketlerini başlıklarınızdan otomatik olarak ayrıştırır. Böylece aşağıdakileri yapabilirsiniz:

[Custom foo description](#foo)

# Foo

Yukarıdaki durumda Foobaşlık, adıyla bir tutturma etiketi oluşturdufoo

Not : #tüm başlık boyutları için yalnızca bir tane , #bağlantı adı ve bağlantı adı, bağlantı etiketi adları küçük harf olmalı ve çok- d ise çizgi ile sınırlandırılmalıdır d.

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

### My Multi Word Header

Güncelleme

Kutudan çıkar çıkmaz pandocda çalışır.


54
Başlığınızda "Bu gibi" birden çok kelime varsa, boşlukları bağlantıda kısa çizgilerle değiştirin [just](#like-this-one).
Mogsdad

3
Bu sadece H1 başlıkları için mi çalışır? Bir H2 başlığına (yani ## Foo) bağlanıyorsa, bağlantıya iki sayı işareti koymam gerekir mi, yani [Foo] (## foo)? Sözdizimini veya benimkini çalıştıramıyorum (ekstra sayı işaretiyle).
GrayedFox

7
@GrayedFox, ab H2 başlığı için bir bağlantı oluşturmak istiyorsanız ## Foo, [bu benim Foo'ya olan bağlantımdır ] (# foo) ... yani: tek karma, karma ve küçük harf-kebab-case-name- başlığı
Abdull

4
İpucu olarak: ilgili bağlantıyı elde etmek için Github'daki başlığınızın yanında görüntülenen bağlantıya göz atın, yani özel karakterler içeriyorsa, bunlar otomatik olarak kaldırılır ve orada doğru bağlantı gösterilir.
Alexander Pacha

2
Başlıklar sayı olduğunda ne olacak? # 3. Üçüncü nokta [Üçüncü nokta] (# 3.-third.point) çalışmıyor
Aditya

118

Deneme kullanarak, bir çözüm buldum <div…/>ama açık bir çözüm kendi bağlantı noktanızı istediğiniz yere sayfaya yerleştirmektir, böylece:

<a name="abcde">

önce ve

</a>

sonra'bağlantı' yapmak istediğiniz satırdan . Sonra gibi bir etiketleme bağlantısı:

[link text](#abcde)

belgenin herhangi bir yerinde sizi oraya götürür.

<div…/>Çözelti bir "kukla" bölünme sadece eklemek ekler idözelliği, ve bu sayfayı yapısına potansiyel olarak yıkıcı olmakla <a name="abcde"/>Çözüm oldukça zararsız olmalı.

(Not: çapa koymak için Tamam olabilir de , sen bağlantısını istediğiniz satır olarak aşağıdaki gibidir:

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

ancak bu Markdown'un bunu nasıl ele aldığına bağlıdır. Örneğin, Yığın Taşması cevap biçimlendiricisinin bundan memnun olduğunu unutmayın!)


2
Bunu yaparsanız div'ın diğer işaretleme biçimlendirmelerini kaldırdığının farkında olmalısınız ## headers.
2rs2ts

@ user691859 Ayrıntı verebilir misiniz? Belki de daha iyi çalışması için bir cevabı güncelleyebiliriz. Div girintisini girene kadar TextMate'in vurgulamayı engellediğini gördüm, ancak bir tarayıcıdan görüntülenen işlenmiş işaretlemeyle ilgili bir sorun yok.
Steve Powell

WriteMonkey'de, <div/>aşağıdaki satırların herhangi birinden önce gelen bir metnin etkilendiğini gördüm . Bunun yerine bir tam divetiket yan tümcesinde bağladığım metni sarmak zorunda ve gerçek HTML kullanarak davranışı sıfırdan yeniden belirtmek zorunda. Boo.
2rs2ts

6
Bu iyi çalışıyor, teşekkürler. Merak eden herkes için bu, GitHub tarafından barındırılan ve görüntülenen Markdown dosyalarıyla da çalışır.
Alex Dean

2
Olmak HTML5 ile ileriye uyumlu , ben yerine tavsiye etmek istiyorum <a name="head1"/>ile <a id="head1"/>.
binki

74

Bu eski bir iş parçacığı olabilir, ancak Github kullanımındaki işaretlemede iç belge bağlantıları oluşturmak için ...
(NOT: küçük harf #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. 

İyi bir soru yapıldı bu yüzden cevabımı düzenledim;

Bir iç bağlantı kullanarak herhangi başlık boyutuna yapılabilir - #, ##, ###, #### ben ... aşağıda hızlı bir örnek oluşturdu https://github.com/aogilvie/markdownLinkTest


Örneğinizde, bağlantı etiketlerinde yalnızca bir # vardır, ancak bağlantı vermeleri gereken başlıklar iki ##; aynı olmamalılar mı?
Karim Bahgat

3
İyi soru. Cevap hayır. # in (#dependencies-title), Github markdown'a bunun bir iç bağlantı olduğunu söyler. Aşağıdaki metin herhangi bir başlık boyutu olabilir. İşte yaptığım bir örnek test ... https://github.com/aogilvie/markdownLinkTest
Ally

1
Bu, markdown aromasına bağlı mı? Markdown editöründe iyi çalışıyor gibi görünüyor, ancak html veya pdf'ye kaydettiğimde kimlikler uygun etiketlere eklenmiyor. Oraya sadece bir çapa atmak iyi olur, ama yöntemin çok daha temiz ve daha hızlı görünüyor.
meteorainer

21

evet, markdown bunu yapar, ancak çapa adını belirtmeniz gerekir <a name='xyx'>.

tam bir örnek,

bu bağlantıyı oluşturur
[tasks](#tasks)

belgede daha sonra, adlandırılmış bağlantıyı (adı ne olursa olsun) oluşturursunuz.

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

bunu başlıkta da satabileceğinizi unutmayın.

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

13

Pandoc el kitabı başlıklarını tanımlayıcılarını kullanarak nasıl bağlayacağınızı açıklar. Bunun desteğini diğer ayrıştırıcılar tarafından kontrol etmedim, ancak github üzerinde çalışmadığı bildirildi .

Tanımlayıcı manuel olarak belirtilebilir:

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

veya otomatik olarak oluşturulmuş tanımlayıcıyı kullanabilirsiniz (bu durumda #my-heading-text). Her ikisi de pandoc kılavuzunda ayrıntılı olarak açıklanmıştır .

NOT : Bu sadece dönüştürürken çalışır HTML , LaTex , bağlam , Tekstil veya AsciiDoc .


9

Eğer gitmek istediğiniz başlıklar içinde semboller ile fantezi olsun akılda tutulması gereken bazı ek şeyler ...

# 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

... gibi şeyler #, ;, &, ve :dizeleri genellikle çizgili yerine kaçan / göz ardı edilir edilir başlığı içinde ve bir de kullanabilirsiniz atıf kolay hızlı faydalanmak için stil bağlantıları.

notlar

GitHub destekler :word:kaydedilmesini sözdizimi, beni oku dosyalarını vs. bkz özünü using'em orada ilgi ise (rxaviers itibaren).

Ve hemen hemen her yerde, modern tarayıcılar için ondalık veya onaltılık kullanılabilir; dan hile sayfalık W3Schools'da olduğu purdy kullanışlı CSS kullanarak, özellikle ::beforeya ::aftersembollerle sözde elemanları daha fazla tarzıdır.

Bonus puanlar?

Birisinin bir başlıktaki resim ve diğer bağlantıların nasıl ayrıldığını merak etmesi durumunda 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!"

Uyarılar

MarkDown renderleme bir yerden bir yere farklılık gösterir, bu yüzden ...

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

... GitHub'da şöyle bir öğe olacak id...

id="methodnameoptions--promise"

... vanilya sanitasyonunun id...

id="methodnameoptions-codepromisecode"

... yani MarkDown dosyalarını şablonlardan yazmanın veya derlemenin ya tek bir yoldan vurmayı hedeflemesini ya da başlığın metnini temizlemek gibi çeşitli akıllı yollar için yapılandırmalar ve komut dosyası mantığı eklemeyi gerektirdiği anlamına gelir .


9

Evrensel çözümler

Markdown uygulamasına göre bu sorunun farklı bir cevabı var gibi görünüyor.
Aslında, resmi Markdown belgeleri bu konuda sessizdir.
Bu gibi durumlarda ve taşınabilir bir çözüm istiyorsanız, HTML kullanabilirsiniz.

Herhangi bir başlıktan önce veya aynı başlık satırında, bir miktar HTML etiketi kullanarak bir kimlik tanımlayın.
Örneğin:<a id="Chapter1"></a>
Bunu kodunuzda görürsünüz, ancak oluşturulan dokümanda göremezsiniz.

Tam örnek:

Burada tam bir örneğe bakın (çevrimiçi ve düzenlenebilir) .

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

Bu örneği test etmek için içerik listesi ile ilk bölüm arasına fazladan boşluk eklemeniz veya pencere yüksekliğini azaltmanız gerekir.
Ayrıca, kimliklerin adında boşluk kullanmayın.


Ah ... güzel görünüyordu. Denedim, iki sorun: (1). ## Chapter 1üstünde açık bir çizgiye ihtiyaç var. (2). Bağlantı çalışmıyor ...
musicformellons

Ah, kullandığım intellij markdown eklentisinde çalışmıyor; ancak Macdown biçimlendirme düzenleyicisinde çalışır.
musicformellons

Yine de, github üzerinde test edildi: başlığın üstünde açık bir çizgi gerekiyor, ancak çalışıyor.
musicformellons

@musicformellons lütfen açılış çizgisi olmadan ama span etiketini düzgün bir şekilde kapatabilir misiniz? <br><span id="Chapter1"><span>
ePi272314

evet, işe yarıyor!
musicformellons

7

Markdown şartnamesinde böyle bir yönerge yoktur. Afedersiniz.


Ah! MultiMarkdown veya Tekstil'in destekleyip desteklemediğini biliyor musunuz? Tüm belgelerim için MD'ye geçmeyi düşünüyordum ama bu bir anlaşma kırıcıydı. Yardım için teşekkürler!
recipriversexclusion

5
"Yönerge" ile ne demek istiyorsun? Soruna tam olarak başka çözümler de burada yayınlanmıştır.
Zelphir Kaltstahl

4

Gitlab GitLab Aromalı Markdown'ı (GFM) kullanıyor

Burada "Markdown ile oluşturulan tüm başlıklar otomatik olarak kimlik alır"

Fare aşağıdakileri yapmak için kullanılabilir:

  • fareyi başlığın üzerine getir
  • fareyi başlıktan sola görünür olan fareyle üzerine gelme düğmesinin üzerine getirin
  • farenin sağ tuşunu kullanarak bağlantıyı kopyala ve kaydet

    Örneğin README.md dosyasında başlık var:

## series expansion formula of the Boettcher function

bir bağlantı verir:

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

Ön ek kaldırılabilir, böylece buradaki bağlantı basitçe

file#header

burada:

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

Şimdi şu şekilde kullanılabilir:

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

Elle de yapılabilir: boşlukları tire işareti ile değiştirin.

Canlı örnek burada


1

Kramdown kullanarak, bu iyi çalışıyor gibi görünüyor:

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

Görüyorum ki bundan bahsedildi

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

etkili bir şekilde çalışır, ancak birincisi, başlıklar veya birden çok kelimeli başlıklar dışında öğeler için iyi bir alternatif olabilir.


1

MultiMarkdown'dan beri yorumlarda bir seçenek olarak bahsedildi.

In MultiMarkdown bir iç bağlantı için sözdizimi basittir.

Belgedeki herhangi bir başlık [heading][]için, dahili bir bağlantı oluşturmak için başlık adını bu biçimde belirtmeniz yeterlidir .

Daha fazla bilgiyi buradan edinebilirsiniz: MultiMarkdown-5 Çapraz referanslar .

Çapraz referans

Sıklıkla talep edilen bir özellik, Markdown'un belge içi bağlantıları otomatik olarak harici bağlantıları işlediği kadar kolay bir şekilde işlemesini sağlamaktı. Bu amaçla, “Bazı Metin” adlı bir başlık varsa, [Bazı Metin] [] öğesini çapraz bağlantı olarak yorumlama özelliğini ekledim.

Örnek olarak, [Meta Veriler] [] sizi # Meta verilere (veya ## Meta Veriler, ### Meta Veriler, #### Meta Veriler, ##### Meta Veriler, ###### Meta Verilere) götürür.

Alternatif olarak, birden fazla başlığın aynı başlığa sahip olduğu vakaları netleştirmeye yardımcı olması için seçtiğiniz isteğe bağlı bir etiketi ekleyebilirsiniz:

### Genel Bakış [MultiMarkdownOverview] ##

Bu, Genel Bakış adlı başka bir bölüme değil, özellikle bu bölüme başvurmak için [MultiMarkdownOverview] kullanmanızı sağlar. Bu, atx veya settext tarzı üstbilgilerle çalışır.

Üstbilgi tarafından kullanılanla aynı kimliği kullanarak bir bağlantı tanımladıysanız, tanımlanan bağlantı önceliğe sahiptir.

Belgedeki başlıklara ek olarak, daha sonra çapraz referanslar için de kullanılabilecek resimler ve tablolar için etiketler sağlayabilirsiniz.


0

Hünerde biraz daha dönme <a name="">:

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

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

0

Yukarıdaki cevaplara ek olarak,

number_sections: trueYAML başlığındaki seçeneği ayarlarken :

number_sections: TRUE

RMarkdown bölümlerinizi otomatik olarak numaralandırır.

Bu otomatik numaralandırılmış bölümlere başvurmak için R Markdown dosyanıza aşağıdakileri koymanız yeterlidir:

[My Section]

My SectionBölümün adı nerede

Bu bölüm düzeyinden bağımsız olarak işe yarıyor gibi görünüyor:

# My section

## My section

### My section

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.