Como vincular a uma âncora nomeada no Multimarkdown?

573

Encontrei várias menções ao suporte do MultiMarkdown para links internos / âncoras nomeadas, mas não consigo encontrar um único exemplo de como fazê-lo.

Então, qual é a sintaxe para denotar a âncora nomeada e qual é a sintaxe para vincular a ela da mesma forma que vincular a qualquer outra URL (usando apenas #foo em vez de http://....)?

masukomi
fonte
Se você estiver fazendo isso para criar um índice, recomendo que o doctoc automatize isso (requer node.js ). O Doctoc gera o código de remarcação para fornecer também um exemplo de como vincular os títulos ao longo do documento (conforme descrito na resposta de @ user1789493).
James Owers
3
Possível duplicata da referência cruzada (chamada âncora) na remarcação
Organic Advocate

Respostas:

659

No Markdown padrão, coloque uma âncora na <a name="abcd"></a>qual deseja vincular e faça referência a ela na mesma página por [link text](#abcd).

(Isso usa name=e não id=, pelos motivos explicados nesta resposta .)

Referências remotas podem ser usadas, é [link text](http://...#abcd)claro.

Isso funciona como um sonho, desde que você tenha controle sobre os textos de origem e de destino. A âncora pode até aparecer em um cabeçalho, assim:

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

produz:

Um título nesta entrada SO!

e podemos até criar um link para isso:

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

(No SO, o link não funciona porque a âncora é removida.)

Steve Powell
fonte
11
@ jj1bdx eu faço agora - o <a id="id"></a>formulário é melhor. Veja esta pergunta / resposta do SO .
Steve Powell
Além agradável Steve. Eu marcaria isso como a resposta, exceto que a pergunta era sobre MultiMarkdown. Obviamente, os votos das pessoas estão indicando que essa foi uma adição útil. Então obrigado.
Masukomi 28/11/12
3
Fyi: A marcação do Github espera que você use name = em vez de id, ao que parece.
Dieter
@Dieter: name= foi preterido em XHTML, mas agora acho que id=tem um efeito colateral no HTML5, por isso estou voltando a name=esta resposta.
27413 Steve
3
Funciona na remarcação com sabor do github (a gema de rubi a processa conforme o esperado)
Kedar Mhaswade
462

Se você tiver cabeçalhos nos arquivos de remarcação, poderá vinculá-los diretamente no arquivo.

Cabeçalho de remarcação -

## The Header

isso irá gerar um ID implícito #the-header (substitua espaços internos por hífens e faça letras minúsculas).

Para navegar para esse ID, você pode criar o link assim:

[Link to Header](#the-header)

Isso é equivalente a:

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

Observe que o nome da referência é minúsculo #header.

SaurabhM
fonte
30
O BitBucket parece prefixar o ID da âncora com "markdown-header-". Portanto, se o seu cabeçalho for ## This Header ##, o link seria [To This Header](#markdown-header-this-header). Se você não tiver certeza de qual é o ID do seu cabeçalho, use um inspetor de página para ver os valores HTML.
Vinney Kelly
Não funcionou para mim na redução estendida de Pandoc, pode funcionar em outro lugar.
Zelphir Kaltstahl
9
@SaurabhM, isso só funcionará se o seu conversor de descontos em html NÃO aderir ao padrão. O padrão não cria tags de âncora. Agora, muitos não aderem, mas você NÃO deve esperar que isso funcione em qualquer lugar.
Masukomi
9
Por que, oh, por que tivemos que padronizar algo tão sem padrão e meio cozido quanto o Markdown. Mal posso esperar para o AsciiDoc assumir a liderança.
hmijail lamenta os demitidos 21/02
1
O GitHub adiciona conteúdo do usuário antes do nome do cabeçalho:[Link](user-content-the-header)
Melvin Witte
137

Retirado do Guia do Usuário do Multimarkdown (obrigado a @MultiMarkdown no Twitter por apontá-lo)

[Some Text][]vinculará a um cabeçalho chamado "Some Text",
por exemplo

### Some Text ###

Um rótulo opcional de sua escolha para ajudar a desambiguar casos em que vários cabeçalhos têm o mesmo título:

### Overview [MultiMarkdownOverview] ##

Isso permite que você use [MultiMarkdownOverview] para se referir especificamente a esta seção, e não a outra seção chamada Visão geral. Isso funciona com cabeçalhos no estilo atx ou settext.

Se você já definiu uma âncora usando o mesmo ID usado por um cabeçalho, a âncora definida terá precedência.

Além dos cabeçalhos do documento, você pode fornecer etiquetas para imagens e tabelas que também podem ser usadas para referências cruzadas.

masukomi
fonte
FWIW, ele não funciona com o modo de marcação do emacs a partir de 23.4.1.
Attila Lendvai
5
O Markdown não suporta notas de rodapé. Como tal, não funcionará na maioria dos modos "Markdown". O MultiMarkdown, no entanto, suporta várias extensões que facilitam a vida dos escritores.
Masukomi 29/10/12
11
O Github parece não suportar rótulos nos cabeçalhos?
andig
1
Isso não funciona (pelo menos no codepen.io) quando há ':' no cabeçalho.
Xiao Peng - ZenUML.com
2
esse link é a documentação do cara que escreveu o MultiMarkdown. Não sei o que você está fazendo no codepen.io, mas estou confiante de que os documentos são precisos. Lembre-se de MULTI Markdown NÃO Markdown.
Masukomi
100

Testei o Github Flavored Markdown por um tempo e posso resumir com quatro regras:

  1. sinais de pontuação serão descartados
  2. os principais espaços em branco serão descartados
  3. maiúsculas serão convertidas para minúsculas
  4. os espaços entre as letras serão convertidos em -

Por exemplo, se sua seção for nomeada como esta:

## 1.1 Hello World

Crie um link para ele desta maneira:

[Link](#11-hello-world)
longkai
fonte
E se houver hífens no nome? Em que isso se converte? Observe que existem espaços entre as palavras e os hífens. exemplo: `` - - [Meu - cabeçalho] (# meu --- cabeçalho) # Meu - cabeçalho `` `Isso estaria correto?
Spencer Pollock
stackoverflow.com/a/17820138/2908724 para terminologia neste estilo. Eu prefiro "kebab-case".
bispo
22

A melhor maneira de criar links internos (relacionados às seções) é criar lista, mas em vez de link, coloque #section ou # section-title se o cabeçalho incluir espaços.

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

Não importa se é o cabeçalho h1, h2, h3, etc., você sempre se refere a ele usando apenas um #.
Todas as referências na lista de seções devem ser convertidas em texto em minúsculas, conforme mostrado no exemplo acima.

O link para a seção deve estar em minúsculas. De outra maneira, não vai funcionar.
Essa técnica funciona muito bem para todas as variantes do Markdown, também para o MultiMarkdown.

Atualmente estou usando o Pandoc para converter o formato de documentos. É muito melhor que o MultiMarkdown.
Teste o Pandoc aqui

rafr3
fonte
6
como observado em outros comentários aqui. que não funcionará em nenhum conversor de descontos -> html que realmente siga o padrão. A criação de tags âncora nos títulos só acontece em ALGUNS conversores. Além disso, eles não vão converter todos os espaços em hífens. Não se pode contar com isso.
Masukomi
1
Estou usando o GitHub Markdown no editor de código Atom , que possui um pacote interno chamado "Markdown Preview". No modo de visualização, crio arquivos html usando o menu de contexto "Salvar como HTML ...".
rafr3
Sim, o que quero dizer é que você não pode contar com sua técnica funcionando em nenhum outro lugar, e nem a pergunta nem a resposta são especificamente sobre remarcações no Atom. A questão nem é sobre o Markdown, é sobre o MultiMarkdown.
Masukomi
Estou usando esse método de link, mas não está funcionando para mim. não deslizando para a seção / cabeçalho.
Tom Kustermans
Dê uma atenção a maiúsculas e minúsculas. Se você definir um, ## Hellodeverá referir-se a ele como #[Whatever you want](#Hello)
Victor Augusto
9

No mdcharm, é assim:

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

### Descripción {#descripcion}
### Funcionamiento {#funcionamiento}
### Instalación {#instalacion}
### Configuración {#configuracion}
Gonen09
fonte
2

Aqui está a minha solução (derivada da SaraubhMresposta)

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

O que lhe dá:

Ir para : Teclas de Atalho e Marcadores / Raios / Assistente de Rota 2.0

Observe as alterações de e .para -e também a perda de &nos links.

Peet
fonte