To create an anchor to a heading in github flavored markdown.
Add - characters between each word in the heading and wrap the value in parens (#some-markdown-heading)
so your link should look like so:
[create an anchor](#anchors-in-markdown)
I was interested of autodocumentation
in my case I use this code (for git lab)
//... val is input
var anchor = val.trim().toLowerCase().replace(/[^\w\- ]+/g, ' ').replace(/\s+/g, '-').replace(/\-+$/, '');
if (usedHeaders.indexOf(anchor) !== -1) {
var i = 1;
while (usedHeaders.indexOf(anchor + '-' + i) !== -1 && i++<=10);
anchor = anchor + '-' + i;
}
usedHeaders.push(anchor);
console.log(val, anchor)//result her!
return ' '.repeat(level) + '* [' + val + '](#' + anchor + ')\n';
Thanks mate! 👍
👍
Thanks! 👍
This tip does not work with an anchor containing non-ascii characters, e.g., an English+CJK string like this:
[English中文标题](#English中文标题)
won't lead you to:
English中文标题
I tried adding a white space between the English and the first CJK character in the title, then added a dash in-between. This doesn't create the right link either.
@kakyoism the correct link is [English中文标题](#english中文标题)
(note the lowercase "e" as explained above)
It will link to:
# English中文标题
How can I use punctuation in my anchors? I tried using the backslash before the punctuation mark in my case a comma. See below example:
[Ready, set, GO!](#ready\,-set\,-go)
This didn't work though. Am I doing it wrong, or is it not even possible?
It's okay, I fixed it. I realized that the anchor can work fine without the inclusion of the punctuation. See example below
[Ready, set, GO!](#ready-set-go)
will result in an anchor that works just fine.
This is weird. I have the anchor like ## check out / check in files
and the link like [link](#check-in-check-out-files)
that doesn't work. From the ruby code I think it should handle it but it doesn't. Why?
Here's a tip -- if you're having trouble with your anchor not working due to misspellings or odd characters, simply hover over your heading on Github, then hover or click the link icon that appears to the left. You can then right click to copy the link location, left click it to go to the URL and view it in your address bar, or simply stay hovered over it and view it in the status bar of your browser.
@sandyleo26, your example has check out / check in reversed from the anchor to the link. @svmotha's tip fixed my issue of anchors with special characters.
@tomfun the correct regex substitutions for the first line would be:
var anchor = val.trim().toLowerCase().replace(/[^\w\- ]+/g, '').replace(/\s/g, '-').replace(/\-+$/, '');
It's important that every space in the title be converted to a -
for the anchor to work – but using \s+
instead of \s
prevents this.
How would I get anchors working on github pages?
Thanks!
is this still working? can't manage to get it work on my PR, it successfully creates the link but inspecting the DOM headers don't appear to have anchors.
@Zyxan This technique works, though the gist could be a little more explicit.
To create an anchor tag in github markup, you just need to create a heading element. Example:
#### Installation guide
Here would be some installation instructions
When GitHub transforms this markdown into html, the #### Installation guide line above will be represented as:
<a href='#installation-guide' id='installation-guide' class='anchor' aria-hidden='true'>Installation guide</a>
You can link to this href with a link that looks like this:
[Read our installation guide](#installation-guide)
I hope that helps!
Is there a way to specify the anchor name? As soon as I change my section name, all my links will break. I want to specify the anchor like normal for markdown but the html generated from my README.md file is not working as normal for markdown.
So my README.md has
# This is a section name that I might change {#foo}
Normally, this sort of link would work [link](#foo)
but it is not working in the html autogenerated by Github from my README.md file.
thank you @eeholmes, such a GREAT ADVICE!
Take me where
I guess markdown behaves quite similar to html. I will attach an example below;
[Take me there](#there_you_go)
[Take me where](#here)
I defined two links with anchor names
below is the first anchor
<a name="there_you_go"></a>Take me there
here is the second anchor
<a name="here"></a>Take me where
here is it in practice
Take me there will take you down
Take me where will take you up
/
Take me there
/
blank space for test
/
/
/
/
/
/
blank space end
/
/
So it does work. Hope this helps
@wayri Thanks! that works for me.
@janluong One would think that
# [](#my-custom-anchor-name)My Header Name
would result in what we want – but in GitHub Pages, it is unfortunately irrelevant as it would autogenerate the anchor as #my-header-name
instead of #my-custom-anchor-name
as one would expect.
I found inserting the following in your .md
file to work quite nicely:
your markdown here
<h1 id="my-custom-anchor-name">
My Header Name
</h1>
your markdown here
Best,
Kira
Works like a charm. Make sure the fragment link is all in lowercase
# [Heading Link](#section-i-want)
## [Section I Want]
I wonder how to create anchor to a sub-heading. For example:
and I want to add anchor to head 2. I tried this but not working:
[create an anchor](#head-2)
I use the "Display #Anchors" extension to Chrome, and also "Markdown Viewer". When I look at a markdown page in Chrome, I can then see how the anchors are spelled. Some have "-" inserted at the beginning, and some don't, and I don't know what the rules are, but if I follow the spelling used by Chrome, the links work, at least with Chrome.
The anchors don't work if you have an anchor link to the current page in GitHub Pages, generated from MarkDown via https://github.com/blog/2289-publishing-with-github-pages-now-as-easy-as-1-2-3
The only solution I see is putting HTML into your markdown...
Something along the lines of this at the top of your page:
<a id="-"/>
And instead of [hyper](links)
such as [^](#)
or [^](#-)
use something like the following just above your headers:
<a href="#-">`^`</a> - (click to go to first anchor of this comment)
# Header without an anchor link
this would look something like this:
^
- (click to go to first anchor of this comment)
Thanks bro!
Thanks for the tip!
If you want stable anchors to have permalinks in your CHANGELOG.md
you can do as explained here.
I send you love!
The code that creates the anchors is here:
https://github.com/jch/html-pipeline/blob/master/lib/html/pipeline/toc_filter.rb