Jak połączyć się z nazwaną kotwicą w Multimarkdown?

573

Natknąłem się na wiele wzmianek o wsparciu MultiMarkdown dla wewnętrznych linków / nazwanych kotwic, ale nie jestem w stanie znaleźć ani jednego przykładu jak to zrobić.

Jaka jest więc składnia oznaczenia nazwanej kotwicy i jaka jest składnia linkowania do niej tak samo jak linkowania do jakichkolwiek innych adresów URL (używając tylko #foo zamiast http://....)?

masukomi
źródło
Jeśli robisz to, aby utworzyć spis treści, polecam doctoc, aby to zautomatyzować (wymaga node.js ). Doctoc generuje kod przeceny, więc poda przykład linku do nagłówków w całym dokumencie (jak opisano w odpowiedzi @ user1789493).
James Owers
3
Możliwy duplikat odsyłacza (o nazwie kotwica) w przecenie
Organic Advocate

Odpowiedzi:

659

W standardowym Markdown umieść kotwicę w <a name="abcd"></a>miejscu, do którego chcesz utworzyć link, i odwołuj się do niej na tej samej stronie [link text](#abcd).

(To wykorzystuje, name=a nie id=, z powodów wyjaśnionych w tej odpowiedzi .)

[link text](http://...#abcd)Oczywiście można korzystać ze zdalnych referencji .

To działa jak sen, pod warunkiem, że masz kontrolę nad tekstem źródłowym i docelowym. Kotwica może nawet pojawić się w nagłówku, a zatem:

### <a name="head1234"></a>A Heading in this SO entry!

produkuje:

Nagłówek w tym wpisie SO!

i możemy nawet link do tego, aby:

and we can even [link](#head1234) to it so:

(W przypadku SO łącze nie działa, ponieważ kotwica jest usuwana).

Steve Powell
źródło
11
@ jj1bdx Robię teraz - <a id="id"></a>formularz jest najlepszy. Zobacz to SO pytanie / odpowiedź .
Steve Powell
Miły dodatek Steve. Oznaczę to jako odpowiedź, z wyjątkiem tego, że pytanie dotyczyło MultiMarkdown. Oczywiście głosy ludzi wskazują, że był to jednak pomocny dodatek. Więc dziękuję.
masukomi
3
Fyi: Markdown Github oczekuje, że użyjesz name = zamiast id, wygląda na to.
Dieter
@Dieter: name=był przestarzały w XHTML, ale teraz okazuje się, że id=ma efekt uboczny w HTML5, więc wracam do name=tej odpowiedzi.
Steve Powell,
3
Działa na github-flavored-markdown (rubinowy klej renderuje się zgodnie z oczekiwaniami)
Kedar Mhaswade
461

Jeśli masz nagłówki w plikach przeceny, możesz bezpośrednio połączyć je w pliku.

Nagłówek Markdown -

## The Header

wygeneruje to domyślny identyfikator #the-header(zamień spacje wewnętrzne na łączniki i umieść małe litery).

Aby przejść do tego identyfikatora, możesz utworzyć następujący link:

[Link to Header](#the-header)

Jest to równoważne z:

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

Pamiętaj, że nazwa odwołania jest małą literą #header.

SaurabhM
źródło
30
Wydaje się, że BitBucket poprzedza identyfikator kotwicy „markdown-header-”. Więc jeśli twój nagłówek to ## This Header ##, link będzie [To This Header](#markdown-header-this-header). Jeśli nie masz pewności, jaki jest identyfikator nagłówka, użyj inspektora strony, aby zobaczyć wartości HTML.
Vinney Kelly,
Nie działało dla mnie w rozszerzonym systemie Pandoc, może działać gdzie indziej.
Zelphir Kaltstahl
9
@SaurabhM zadziała to TYLKO JEŚLI twój znacznik do konwertera HTML NIE JEST zgodny ze standardem. Standard nie tworzy tagów zakotwiczenia. Teraz wielu nie stosuje się, ale NIE należy oczekiwać, że zadziała to nigdzie.
masukomi
9
Dlaczego, och, dlaczego musieliśmy ujednolicić coś mniej standardowego i na wpół upieczonego jak Markdown. Nie mogę się doczekać, aż AsciiDoc przejmie prowadzenie.
Hmijail opłakuje odrodzenie
1
GitHub dodaje treść użytkownika przed nazwą nagłówka:[Link](user-content-the-header)
Melvin Witte
137

Zaczerpnięte z Multimarkdown Users Guide (podziękowania dla @MultiMarkdown na Twitterze za zwrócenie na to uwagi)

[Some Text][]będzie link do nagłówka o nazwie „Some Text”
np

### Some Text ###

Opcjonalna etykieta do wyboru, aby ułatwić jednoznaczne przypadki, w których wiele nagłówków ma ten sam tytuł:

### Overview [MultiMarkdownOverview] ##

Pozwala to na użycie [MultiMarkdownOverview] w celu odniesienia się konkretnie do tej sekcji, a nie do innej sekcji o nazwie Przegląd. Działa to z nagłówkami w stylu atx lub settext.

Jeśli już zdefiniowałeś kotwicę przy użyciu tego samego identyfikatora, który jest używany przez nagłówek, wtedy zdefiniowana kotwica ma pierwszeństwo.

Oprócz nagłówków w dokumencie możesz także udostępnić etykiety dla obrazów i tabel, które mogą być następnie wykorzystane do odsyłaczy.

masukomi
źródło
FWIW, nie działa z trybem markdown emacsa od 23.4.1.
Attila Lendvai
5
Markdown nie obsługuje przypisów. Jako taki nie będzie działał w większości trybów „Markdown”. MultiMarkdown obsługuje jednak wiele rozszerzeń, które ułatwiają pisarzom życie.
masukomi
11
Github nie obsługuje etykiet w nagłówkach?
andig
1
To nie działa (przynajmniej w codepen.io), gdy w nagłówku jest „:”.
Xiao Peng - ZenUML.com
2
ten link to dokumentacja faceta, który napisał MultiMarkdown. Nie jestem pewien, co robisz w codepen.io, ale jestem pewien, że dokumenty są dokładne. Pamiętaj, że MULTI Markdown NOT Markdown.
masukomi,
100

Testowałem Github Flavored Markdown przez chwilę i mogę podsumować za pomocą czterech zasad:

  1. znaki interpunkcyjne zostaną upuszczone
  2. wiodące białe pola zostaną upuszczone
  3. wielkie litery zostaną zamienione na małe
  4. spacje między literami zostaną zamienione na -

Na przykład, jeśli twoja sekcja ma taką nazwę:

## 1.1 Hello World

Utwórz link do niego w ten sposób:

[Link](#11-hello-world)
longkai
źródło
Co jeśli w nazwie są łączniki? Na co się przekształca? Uwaga: między słowami a łącznikami są spacje. przykład: `` - [Mój - Nagłówek] (# mój --- nagłówek) # Mój - Nagłówek `` Czy to byłoby poprawne?
Spencer Pollock
stackoverflow.com/a/17820138/2908724 dla terminologii dotyczącej tego stylu. Wolę „skrzynkę z kebabem”.
biskup
22

Najlepszym sposobem tworzenia wewnętrznych linków (związanych z sekcjami) jest utworzenie listy, ale zamiast linku wstaw #section lub # section-title, jeśli nagłówek zawiera spacje.

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

---- PODGLĄD LISTY ------------------------

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>

Nie ma znaczenia, czy jest to nagłówek h1, h2, h3 itp., Zawsze odwołujesz się do niego za pomocą tylko jednego #.
Wszystkie odniesienia na liście sekcji należy przekonwertować na tekst pisany małymi literami, jak pokazano w powyższym przykładzie.

Link do sekcji powinien być pisany małymi literami. W przeciwnym razie to nie zadziała.
Ta technika działa bardzo dobrze dla wszystkich wariantów Markdown, także MultiMarkdown.

Obecnie używam Pandoc do konwersji formatu dokumentów. Jest znacznie lepszy niż MultiMarkdown.
Przetestuj Pandoc tutaj

rafr3
źródło
6
jak zauważono w innych komentarzach tutaj. które nie będą działać w żadnym konwerterie markdown -> HTML, który faktycznie jest zgodny ze standardem. Tworzenie tagów zakotwiczenia w nagłówkach odbywa się tylko w NIEKTÓRYCH konwerterach. Co więcej, nie zamierzają konwertować spacji na myślniki. NIE MOŻNA na to liczyć.
masukomi
1
Korzystam z GitHub Markdown w edytorze kodu Atom, który ma wbudowany pakiet o nazwie „Markdown Preview”. Z trybu podglądu tworzę pliki HTML za pomocą menu kontekstowego „Zapisz jako HTML ...”.
rafr3
tak, chodzi mi o to, że nie możesz liczyć na to, że twoja technika działa nigdzie indziej, i ani pytanie, ani twoja odpowiedź nie dotyczy konkretnie obniżki cen w Atom. Pytanie nie dotyczy nawet Markdown, chodzi o MultiMarkdown.
masukomi
Używam tej metody linku, ale to nie działa dla mnie. nie przesuwając się do sekcji / tego nagłówka.
Tom Kustermans,
Daj głowę do rozróżniania wielkości liter. Jeśli zdefiniujesz ## Hello, powinieneś nazywać go[Whatever you want](#Hello)
Victor Augusto
9

W mdcharm wygląda to tak:

* [Descripción](#descripcion)
* [Funcionamiento](#funcionamiento)
* [Instalación](#instalacion)
* [Configuración](#configuracion)

### Descripción {#descripcion}
### Funcionamiento {#funcionamiento}
### Instalación {#instalacion}
### Configuración {#configuracion}
Gonen09
źródło
2

Oto moje rozwiązanie (pochodzące z SaraubhModpowiedzi)

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

Co daje ci:

Przejdź do : Skrótów i znaczników / Radii / Route Wizard 2.0

Uwaga zmiany od i .do -, a także utratę &w linkach.

Peet
źródło