I am writing a large Markdown document and would like to place a table of contents of sorts at the beginning that will provide links to various locations in the document. How can I do this?
I tried using:
[a link](# MyTitle)
where MyTitle
is a title within the document but this didn't work.
Authoring Books and Technical Documents with R Markdown 1), theorems (Section 2.2. 2), figures (Section 2.4), and tables (Section 2.5). In fact, you can also reference sections using the same syntax \@ref(label) , where label is the section ID.
In standard Markdown, place an anchor <a name="abcd"></a> where you want to link to and refer to it on the same page by [link text](#abcd) . (This uses name= and not id= , for reasons explained in this answer.)
So as pointed out in the answers, it is not a feature in markdown. If you wanted to make this a default sitewide to link out, David Morrow has the answer. Or if you just wanted to do it in one instance, then Matchu's answer says that you must actually write that in HTML.
Press CTRL + SHIFT + P. Select Markdown: Create Table of Contents.
Github automatically parses anchor tags out of your headers. So you can do the following:
[Custom foo description](#foo)
# Foo
In the above case, the Foo
header has generated an anchor tag with the name foo
Note: just one #
for all heading sizes, no space between #
and anchor name, anchor tag names must be lowercase, and delimited by dashes if multi-word.
[click on this link](#my-multi-word-header)
### My Multi Word Header
Works out of the box with pandoc
too.
This may be out-of-date thread but to create inner document links in markdown in Github use...
(NOTE: lowercase #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.
A good question was made so I have edited my answer;
An inner link can be made to any title size using - #
, ##
, ###
, ####
I created a quick example below...
https://github.com/aogilvie/markdownLinkTest
Experimenting, I found a solution using <div…/>
but an obvious solution is to place your own anchor point in the page wherever you like, thus:
<a name="abcde">
before and
</a>
after the line you want to "link" to. Then a markdown link like:
[link text](#abcde)
anywhere in the document takes you there.
The <div…/>
solution inserts a "dummy" division just to add the id
property, and this is potentially disruptive to the page structure, but the <a name="abcde"/>
solution ought to be quite innocuous.
(PS: It might be OK to put the anchor in the line you wish to link to, as follows:
## <a name="head1">Heading One</a>
but this depends on how Markdown treats this. I note, for example, the Stack Overflow answer formatter is happy with this!)
yes, markdown does do this but you need to specify the name anchor <a name='xyx'>
.
a full example,
this creates the link[tasks](#tasks)
elsewhere in the document, you create the named anchor (whatever it is called).
<a name="tasks">
my tasks
</a>
note that you could also wrap it around the header too.
<a name="tasks">
### Agile tasks (created by developer)
</a>
In pandoc, if you use the option --toc
in producing html, a table of contents will be produced with links to the sections, and back to the table of contents from the section headings. It is similar with the other formats pandoc writes, like LaTeX, rtf, rst, etc. So with the command
pandoc --toc happiness.txt -o happiness.html
this bit of markdown:
% 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.
will yield this as the body of the html:
<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>
The pandoc manual explains how to link to your headers, using their identifier. I did not check support of this by other parsers, but it was reported that it does not work on github.
The identifier can be specified manually:
## my heading text {#mht}
Some normal text here,
including a [link to the header](#mht).
or you can use the auto-generated identifier (in this case #my-heading-text
). Both are explained in detail in the pandoc manual.
NOTE: This only works when converting to HTML, LaTex, ConTeXt, Textile or AsciiDoc.
This question seems to have a different answer according to the markdown implementation.
In fact, the official Markdown documentation is silent on this topic.
In such cases, and if you want a portable solution, you could use HTML.
Before any header, or in the same header line, define an ID using some HTML tag.
For example: <a id="Chapter1"></a>
You will see this in your code but not in the rendered document.
See a full example (online and editable) here.
## 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.
To test this example, you must add some extra space between the content list and the first chapter or reduce the window height.
Also, do not use spaces in the name of the ids.
Some additional things to keep in mind if ya ever get fancy with symbols within headings that ya want to navigate to...
# What this is about
------
#### Table of Contents
- [About](#what-this-is-about)
- [⚡ Sunopsis](#9889-tldr)
- [:gear: Grinders](#it-grinds-my-gears)
- [Attribution]
------
## ⚡ TLDR
Words for those short on time or attention.
___
## It Grinds my :gear:s
Here _`:gear:`_ is not something like ⚙ or ⛭
___
## ⛤ Attribution
Probably to much time at a keyboard
[Attribution]: #9956-attribution
... things like #
, ;
, &
, and :
within heading strings are generally are ignored/striped instead of escaped, and one can also use citation style links to make quick use easier.
Notes
GitHub supports the
:word:
syntax in commits, readme files, etc. see gist(from rxaviers) if using'em is of interest there.And for just about everywhere else decimal or hexadecimal can be used for modern browsers; the cheat-sheet from w3schools is purdy handy, especially if using CSS
::before
or::after
pseudo-elements with symbols is more your style.
Just in case someone was wondering how images and other links within a heading is parsed into an 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!"
MarkDown rendering differs from place to place, so things like...
## methodName([options]) => <code>Promise</code>
... on GitHub will have an element with id
such as...
id="methodnameoptions--promise"
... where as vanilla sanitation would result in an id
of...
id="methodnameoptions-codepromisecode"
... meaning that writing or compiling MarkDown files from templates either requires targeting one way of slugifeing, or adding configurations and scripted logic for the various clever ways that places like to clean the heading's text.
There is no such directive in the Markdown spec. Sorry.
Just follow the [text](#link)
syntax and follow these guidelines:
-
So for example if you have these sections:
# 1. Python
# 2. c++
# 3. c++11
# 4. asp.net-core
You can add a reference by using:
[1. Python](#1-python)
[2. c++](#2-c)
[3. c++11](#3-c11)
[4. asp.net-core](#4-aspnet-core)
Note how asp.net-core
becomes aspnet-core
, 1. python
becomes 1-python
, etc.
Gitlab uses GitLab Flavored Markdown (GFM)
Here "all Markdown-rendered headers automatically get IDs"
One can use mouse to :
copy and save link using right mouse click
For example in README.md file I have header:
## series expansion formula of the Boettcher function
which gives a link :
https://gitlab.com/adammajewski/parameter_external_angle/blob/master/README.md#series-expansion-formula-of-the-boettcher-function
Prefix can be removed so the link here is simply
file#header
which here means:
README.md#series-expansion-formula-of-the-boettcher-function
Now it can be used as :
[series expansion formula of the Boettcher function](README.md#series-expansion-formula-of-the-boettcher-function)
One can also do it manually: replace spaces with hyphen sign.
Live example is here
In addition to the above answers,
When setting the option number_sections: true
in the YAML header:
number_sections: TRUE
RMarkdown will autonumber your sections.
To reference those autonumbered sections simply put the following in your R Markdown file:
[My Section]
Where My Section
is the name of the section
This seems to work regardless of the section level:
# My section
## My section
### My section
Using kramdown, it seems like this works well:
[I want this to link to foo](#foo)
....
....
{: id="foo"}
### Foo are you?
I see it's been mentioned that
[foo][#foo]
....
#Foo
works efficiently, but the former might be a good alternative for elements besides headers or else headers with multiple words.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With