Is there markdown syntax for the equivalent of:
Take me to <a href="#pookie">pookie</a>
...
<a name="pookie">this is pookie</a>
Is there markdown syntax for the equivalent of:
Take me to <a href="#pookie">pookie</a>
...
<a name="pookie">this is pookie</a>
Take me to [pookie](#pookie)
should be the correct markdown syntax to jump to the anchor point named pookie.
To insert an anchor point of that name use HTML:
<a name="pookie"></a>
Markdown doesn't seem to mind where you put the anchor point. A useful place to put it is in a header. For example:
### <a name="tith"></a>This is the Heading
works very well. (I'd demonstrate here but SO's renderer strips out the anchor.)
id=
versus name=
An earlier version of this post suggested using <a id='tith' />
, using the self-closing syntax for XHTML, and using the id
attribute instead of name
.
XHTML allows for any tag to be 'empty' and 'self-closed'. That is, <tag />
is short-hand for <tag></tag>
, a matched pair of tags with an empty body. Most browsers will accept XHTML, but some do not. To avoid cross-browser problems, close the tag explicitly using <tag></tag>
, as recommended above.
Finally, the attribute name=
was deprecated in XHTML, so I originally used id=
, which everyone recognises. However, HTML5 now creates a global variable in JavaScript when using id=
, and this may not necessarily be what you want. So, using name=
is now likely to be more friendly.
(Thanks to Slipp Douglas for explaining XHTML to me, and nailer for pointing out the HTML5 side-effect — see the comments and nailer's answer for more detail. name=
appears to work everywhere, though it is deprecated in XHTML.)
id=
vs name=
I'm going to edit the answer again. Can I ask you not to directly modify the answer until your research is done? –
Enkindle ### <a id="tith" />This is a Heading with a link
becomes <h3><a id="tith" />This is a Heading with a link</h3>
. Check it out for yourself: gist.github.com/2432787 –
Nonaligned <a
element in all cases. I'm afraid I don't see what you are driving at. All of them render correctly. The second link you have specified the wrong way round in Markdown but I see it. Still looks like anchors all work correctly. But you are specifying <a id="tith">test</a>
and not <a id="tith"/>test
so what do you mean to demonstrate by it? Oh, and I'm not a cowboy. –
Enkindle <a id="tith" />
), and this Markdown in the gist: cl.ly/3F243H3H3Z2m0p2X1q3l (still just a <a id="tith" />
)? I'm seriously not making this tish up. –
Nonaligned <a id=".." />
and do not require <a id=".."></a>
, don't we? In which case, what do you mean by including lots of text between the <a> and </a> tags? I don't recommend it when this is an anchor (as opposed to a link). –
Enkindle href
-ed, so you weren't seeing any difference in the rendered HTML (but the DOM still would've differed). However, if my code samples look fine to you, then this is a moot point. –
Nonaligned <a id="hi"/> rest of doc
, but it was treated like <a id="hi"> rest of doc</a>
. (And the element analysis of the page shows this, too.) My mistake: I looked at the elements displayed not the raw source. Do you think the answer should be modified, in light of this observation? –
Enkindle <a/>
is valid only if the document is read by the browser as XML (for example, by setting Content-Type: application/xhtml+xml; charset=utf-8
) or otherwise if the element is in HTML’s void element list in which case the HTML parser will ignore the slash (older ones by seeing it as a syntax error to be recovered from) and also automatically close the element (because it’s unable to have any content, it’s void). –
Class <a name="Foo"/>
improperly, it's the markdown parser/renderer. I use <a name="Foo"/>
all the time in pure HTML without any problems, but Markdown is not. Edit: oops, I just checked, turns out my "pure HTML" was being transformed by some software into <a name="Foo"></a>
behind my back. I still think the browser could parse it... why not, it definitely handles <br/>
. –
Kurgan name
attribute also creates global variables (see #3434778), so you might as well use the id
attribute as the target of fragment identifier URLs, as intended. –
Hoeg name
attribute of <a>
element appears to be obsolete according to mdn –
Nickerson <a name="pookie"><!-- --></a>
because having an empty element didn't work, but maybe that's a relic of HTML3 or 4? –
Dramatization href
attribute when the <a name="...">
tag doesn't include one. What's unfortunate about that is that it inserts href="null"
; So to cater to that particular misbehavior, always include an href=""
with your anchors. Alternatively, just repeat the #<anchor-name>
so it becomes a link to itself. –
Lo On bitbucket.org the voted solution wouldn't work. Instead, when using headers (with ##), it is possible to reference them as anchors by prefixing them as #markdown-header-my-header-name, where #markdown-header- is an implicit prefix generated by the renderer, and the rest is the lower-cased header title with dashes replacing spaces.
Example
## My paragraph title
will produce an implicit anchor like this
#markdown-header-my-paragraph-title
The whole URL before each anchor reference is optional, i.e.
[Some text](#markdown-header-my-paragraph-title)
is equivalent of
[Some text](https://bitbucket.org/some_project/some_page#markdown-header-my-paragraph-title)
provided that they are in the same page.
Source: https://bitbucket.org/tutorials/markdowndemo/overview (edit source of this .md file and look at how anchors are made).
## My paragraph title
will produce the following anchor user-content-my-paragraph-title
, so you can reference it with [Some text](#user-content-my-paragraph-title). However, I haven't found official documentation for this. –
Sciamachy [linky](#header)
was a sufficient anchor, and worked when published to Gist, too. –
Kenric Use a name
. Using an id
isn't necessary in HTML 5 and will create global variables in your JavaScript
See the HTML 5 specification, 5.9.8 Navigating to a fragment identifier - both id
and name
are used.
It's important to know that most browsers still turn IDs into global variables. Here's a quick test. Using a name
avoids creating globals and any conflicts that may result.
Example using a name:
Take me to [pookie](#pookie)
And the destination anchor:
### <a name="pookie"></a>Some heading
name
and id
are different. –
Pentagrid window.someID
variables won't hurt anything. –
Pentagrid fineuploader
, you will be unable to use the fineuploader
module. Avoiding creating unnecessary globals helps avoid those conflicts. –
Deluna $
or _
) should be considered broken: it's very poor form for a library to pollute the global namespace that much. –
Pentagrid <script>
tags for each lib), lowercase names are far more common than specially prefixed names. –
Deluna <script>
tag onto your page" and don't publish things on npm. I wish we could force them to modularise their libs. But we can't, so it's still worth being cautious and programming defensively - hence avoiding HTML ID globals. –
Deluna <script>
in' is still useful for things like Google Analytics—but things like that don't need to pollute the global namespace, and generally don't. –
Pentagrid window.Stripe
window.olark
, and window.twttr
. Read more at 2ality.com/2012/08/ids-are-global.html –
Deluna window.Stripe
normally won't be an issue: who the heck uses capital letters for element IDs?) –
Pentagrid window.Stripe
still refers to the Stripe object, even though there's a <div>
with ID Stripe
(at least in Chrome). So as long as you don't rely on the divs-as-globals behavior (which no one does), it won't break anything because it will always yield. –
Pentagrid Markdown Anchor supports the hashmark, so a link to an anchor in the page would simply be [Pookie](#pookie)
Generating the anchor is not actually supported in Gruber Markdown, but is in other implementations, such as Markdown Extra.
In Markdown Extra, the anchor ID is appended to a header or subhead with {#pookie}
.
Github Flavored Markdown in Git repository pages (but not in Gists) automatically generates anchors with several markup tags on all headers (h1, h2, h3, etc.), including:
id="user-content-HEADERTEXT"
class="anchor"
href="#HEADERTEXT"
aria-hidden="true"
(this is for an svg link icon that displays on mouseover)Excluding the aria/svg icon, when one writes:
# Header Title
Github generates:
<h1><a id="user-content-header-title" class="anchor" href="#header-title">Header Title</a></h1>
Therefore, one need do nothing to create the header links, and can always link to them with:
[Header Title](#header-title)
[Header Title](#header-title)
–
Electroplate ### Header Title
header can have uppercase characters, but the (#header-title)
markdown is all lowercase. And had a comma which was encoded as %2C
which I used in markdown like this (#header-title%2C-etc)
–
Aberration For anyone who is looking for a solution to this problem in GitBook. This is how I made it work (in GitBook). You need to tag your header explicitly, like this:
# My Anchored Heading {#my-anchor}
Then link to this anchor like this
[link to my anchored heading](#my-anchor)
Solution, and additional examples, may be found here: https://seadude.gitbooks.io/learn-gitbook/
There's no readily available syntax to do this in the original Markdown syntax, but Markdown Extra provides a means to at least assign IDs to headers — which you can then link to easily. Note also that you can use regular HTML in both Markdown and Markdown Extra, and that the name
attribute has been superseded by the id
attribute in more recent versions of HTML.
Late to the party, but I think this addition might be useful for people working with rmarkdown
. In rmarkdown
there is built-in support for references to headers in your document.
Any header defined by
# Header
can be referenced by
get me back to that [header](#header)
The following is a minimal standalone .rmd
file that shows this behavior. It can be knitted to .pdf
and .html
.
---
title: "references in rmarkdown"
output:
html_document: default
pdf_document: default
---
# Header
Write some more text. Write some more text. Write some more text. Write some more text. Write some more text. Write some more text. Write some more text. Write some more text. Write some more text. Write some more text. Write some more text.
Go back to that [header](#header).
As we see (from the answers), there is no standard way for this; and different markdown processors would differ in their markdown extensions that offer this kind of possibilities.
With pandoc, you can get what you asked for like this:
Take me to [pookie](#pookie)
...
[this is pookie]{#pookie}
This gives (with pandoc-2.9.2.1):
<p>Take me to <a href="#pookie">pookie</a></p>
<p>…</p>
<p><span id="pookie">this is pookie</span></p>
One can also make an empty span with an anchor id:
Take me to [pookie](#pookie)
...
this is pookie []{#pookie}
which would produce:
<p>Take me to <a href="#pookie">pookie</a></p>
<p>…</p>
<p>this is pookie <span id="pookie"></span></p>
Apart from this, for pandoc and for most common markdown generators, you have a simple self generated anchor in each header. (See that and other answers here for convenient ways to (auto)generate and refernce such anchors.)
For most common markdown generators. You have a simple self generated anchor in each header. For instance with pandoc, the generated anchor will be a kebab case slug of your header.
echo "# Hello, world\!" | pandoc
# => <h1 id="hello-world">Hello, world!</h1>
Depending on which markdown parser you use, the anchor can change (take the exemple of symbolrush and La muerte Peluda answers, they are different!). See this babelmark where you can see generated anchors depending on your markdown implementation.
Using the latest Markdown, you should be able to use the following syntax:
[](){:name='anchorName'}
This should create the following HTML:
<a name="anchorName"></a>
If you wanted the anchor to have text, simply add the anchor text within the square brackets:
[Some Text](){:name='anchorName'}
Maruku
knows about this syntax. See the babelmark. –
Androcles For anyone who likes to use headers with different levels, it's useful to note that the link to the header should only ever use a single #
, regardless of the header's level:
# This is an H1
## This is an H2
### This is an H3
...
[Take me to H3](#this-is-an-H3)
[Take me to H1](#this-is-an-H1)
[This won't work](##-this-is-an-H2)
I will quickly complement for cases where the header contains emojis, in that case it is simpler to just remove the emoji in the link of the reference. For example
# ⭐ Title 2
....
[Take me to title 2](#-title-2)
There are some cases where this does not work for a weird reason, for example here in setup. The solution in that case is to include the whole code for the emoji as well.
Special case not covered in the other answers:
If your heading has parentheses, just ignore them from your hyphen-separated key.
Example:
## My paragraph title (MpT)
[Some text](#my-paragraph-title-mpt)
At least, this works in Visual Studio Code rendered.
https://i.stack.imgur.com/zUcXt.png
https://i.stack.imgur.com/yCxId.png
cell
## Table of Contents
<ul>
<li><a href="#intro">Introduction</a></li>
<li><a href="#wrangling">Data Wrangling</a></li>
<li><a href="#eda">Exploratory Data Analysis</a></li>
<li><a href="#conclusions">Conclusions</a></li>
</ul>
cell
<a id='intro'></a>
### Introduction
cell
<a id='wrangling'></a>
### Data Wrangling
cell
<a id='eda'></a>
### Exploratory Data Analysis
cell
<a id='conclusions'></a>
### Conclusions
Not sure it applies to all MarkDown processors, but special characters (including accented letters) as well as suites of special characters may be replaced by a single hyphen :
# L’insoutenable légèreté de l’Être
will give
#l-insoutenable-l-g-ret-de-l-tre
Some processors will add a suffix to prevent conflicts :
# Foobar
## Foobar
### Baz
### Foobar
# Foobar
will give
#foobar-1
#foobar-2
#baz-1
#foobar-3
#foobar-4
The name
attribute fails for me. Using id
works in Markdown.
Jump to [Header Below](#apples).
...
<a id="apples"></a>Blah blah blah...
© 2022 - 2024 — McMap. All rights reserved.