581

In the following markdown code I want item 3 to start with list number 3. But because of the code block in between markdown starts this list item as a new list. Is there any way to prevent that behaviour?

Desired output:

1. item 1
2. item 2

```
Code block
```

3. item 3

Produced output:

  1. item 1
  2. item 2

Code block

  1. item 3
orschiro
  • 15,631
  • 18
  • 54
  • 86
  • 4
    Here's the [correct solution](http://stackoverflow.com/a/22138846/1269037). The triple backticks in the Macmade's answer actually just produce a `` HTML element with newlines in it, which is not syntax-highlightable, and has an extra blank line above visibly highlighted as code. – Dan Dascalescu Mar 03 '14 at 04:55
  • 1
    If you're really desperate, you could look up the HTML character codes for the numbers you wish to use (and for every subsequent item)... as in `29. this is list item number 29`. This may not work in all markdown parsers though. – Roy Tinker Oct 24 '16 at 23:35

12 Answers12

759

Use four spaces to indent content between bullet points

1. item 1
2. item 2

    ```
    Code block
    ```
3. item 3

Produces:

  1. item 1
  2. item 2

    Code block

  3. item 3
Levi Fuller
  • 9,146
  • 4
  • 34
  • 41
Macmade
  • 49,018
  • 12
  • 104
  • 121
  • 5
    Yes, indentation makes it clear to the parser that the code block belongs to the list item 2. Otherwise, it's just a normal paragraph, and will end the list. – Macmade Aug 06 '13 at 19:53
  • I believe I have found a slightly [more elegant solution](http://stackoverflow.com/a/22138846/1269037). The triple backticks actually just produce a `` with newlines in it, which is not syntax-highlightable, and show a blank newline above. – Dan Dascalescu Mar 03 '14 at 04:54
  • It even works with escaped backticks in the code block! I can't believe, though, that there is no "normal" way of doing this, without hacks. – Sergey Orshanskiy Aug 15 '14 at 22:32
  • 58
    But ... what if you don't want indentation there? Markdown has no solution, as far as I know. It's often a natural thing to start a list, then stop and provide some text that's a meta comment about the list--what we just did, and what's coming next--without the text being, logically, part of the list--and then continue the list. Markdown does not want us to do that. It's a form of thought that Markdown does not want people to express--that Markdown does not know how to express, that Markdown thinks is too ... free. Tools should follow thought. Sigh. I could write in HTML, or make PDFs. – Mars Oct 29 '14 at 04:24
  • Note that I had to use 4 spaces and couldn't use tab in my specific case for this to work. – Adam Johns Aug 23 '15 at 22:51
  • A link related to this question: https://gist.github.com/clintel/1155906#file-gistfile1-md – Emer Nov 28 '15 at 17:40
  • 2
    Doesn't seem to work at all for me. I have a simple numbered list, and indented and new-lined as shown above. Still restarts at 1. – Ray Feb 29 '16 at 10:56
  • 11
    In the few Markdown editors that I've tried (Bitbucket, Tumblr), this doesn't work -- it renders inline code instead of a properly indented code block. – thdoan Aug 19 '16 at 12:07
  • 1
    Works awesomely in github! Thanks! – KyleFarris Oct 26 '16 at 20:37
  • 2
    @10basetom for Bitbucket, I've found that intenting the code twice and removing the triple ticks more or less accomplishes the desired effect. The only issue is that then you can't specify language formatting, but apparently that's not part of the "official" markdown implementation anyhow. – Daniel Schaffer Jun 22 '17 at 20:41
  • Thanks, this work well on GitLab too! But the Eclipse Markdown Previewer is buggy (Oxygen Release v4.7.0). – SiZiOUS Jul 06 '18 at 07:35
  • Works in wordpress – Syaiful Nizam Yahya Jan 11 '19 at 16:11
  • 2
    In IntelliJ it makes a difference how many blank lines are at the bottom of each numbered block. If you leave 2 blank lines, it restarts numbering; leave only one and it continues. – Rhubarb Aug 21 '19 at 10:28
  • Same issue with standard HTML ol elements. – Andrew Truckle Mar 05 '20 at 11:19
42

As an extension to existing answers. For those trying to continue a numbered list after something other than a code block. For example a second paragraph. Just indent the second paragraph by at least 1 space.

Markdown:

1. one
2. two

 three
3. four

Output:

  1. one

  2. two

    three

  3. four

Community
  • 1
  • 1
DavidT
  • 2,101
  • 19
  • 26
38

Notice how in Macmade's solution, you can see an extra line of code above the "Code block".

Here are two better solutions:

  1. Indent the code block by an extra 4 spaces (so usually 8, in this nested list example, 12). This will put the code in a <pre> element. On SO, you can even specify syntax highlight with a
    <!-- language: lang-js --> indented by 4 spaces (+1 here due to the nested list).

    1. item 1
    2. item 2

      Code.block('JavaScript', maybe)?
      
    3. item 3

  2. Or, just put the Code block within backticks and indent by 4 spaces (here, 1 extra because of the nested list). You'll get a regular indented text paragraph, with a <code> element inside it. This one you can't syntax-highlight:

    1. item 1
    2. item 2

      Code block

    3. item 3

Note: you can click "edit" on this answer to see the underlying Markdown code. No need to save ;)

Community
  • 1
  • 1
Dan Dascalescu
  • 110,650
  • 40
  • 276
  • 363
  • 32
    This is a solution for this particular problem, but it's not a general solution to the problem of restarting a Markdown list at the next number after some intervening text. It appears that there is no way to do this, which drives me crazy. Everything else about Markdown is great. – Mars Oct 29 '14 at 04:22
  • @Mars as you can see from [DavidT's answer](https://stackoverflow.com/a/36337068/5179394), the general solution is to indent the text with any number of spaces. For instance, adding one space instead of four will allow you to insert any intervening text without having to create a code block. – ClydeTheGhost Aug 30 '17 at 14:04
16

If you use tab to indent the code block it will shape the entire block into one line. To avoid this you need to use html ordered list.

  1. item 1
  2. item 2

Code block

<ol start="3">
  <li>item 3</li>
  <li>item 4</li>
</ol>
user3505838
  • 231
  • 2
  • 7
16

Macmade's solution doesn't work for me anymore on my Jekyll instance on Github Pages anymore but I found this solution on an issue for the kramdown github repo. For OP's example it would look like this:

1. item 1
2. item 2

```
Code block
```

{:start="3"}
3. item 3

Solved my issues handily.

KhalilRavanna
  • 4,679
  • 3
  • 22
  • 23
  • 4
    Unfortunately, this does not work with GitHub readme files. :( – Nostalg.io Feb 21 '17 at 04:15
  • Was excited to read this, but in my Fastpages (Jekyll Github Pages) blog that uses kramdown, that start code is simply ignored. I suspect it gets mangled by Liquid or nbdev. – sh37211 Sep 22 '20 at 23:41
8

Source;

<span>1.</span> item 1<br/>
<span>2.</span> item 2
```
Code block
```
<span>3.</span> item 3


Result;

1. item 1
2. item 2 Code block 3. item 3

brillout
  • 8,117
  • 9
  • 60
  • 74
5

If you don't want the lines in between the list items to be indented, like user Mars mentioned in his comment, you can use pandoc's example_lists feature. From their docs:

(@)  My first example will be numbered (1).
(@)  My second example will be numbered (2).

Explanation of examples.

(@)  My third example will be numbered (3).
iuvbio
  • 398
  • 4
  • 17
  • This is the most universal solution to this problem. There's no need to indent and It even works if you have headings between the list elements. – lillemets Sep 26 '19 at 13:52
  • The `(@)` corresponds to a global continuing list (so there can be only one. Using `pandoc`'s `startnum` extension you can start an ordered list with the number you want and it just works. – Abid H. Mujtaba Jan 06 '20 at 21:15
  • This gets rendered as a literal '(@)' by kramdown, nothing more. – sh37211 Sep 22 '20 at 23:45
5

If you happen to be using the Ruby gem redcarpet to render Markdown, you may still have this problem.

You can escape the numbering, and redcarpet will happily ignore any special meaning:

1\. Some heading

text text
text text

text text

2\. Some other heading

blah blah

more blah blah
fqxp
  • 6,301
  • 3
  • 21
  • 37
2

Put the list numbers in parentheses instead of followed by a period.

(1) item 1
(2) item 2 code block (3) item 3

lomzher
  • 61
  • 1
2

I solved this problem on Github separating the indented sub-block with a newline, for instance, you write the item 1, then hit enter twice (like if it was a new paragraph), indent the block and write what you want (a block of code, text, etc). More information on Markdown lists and Markdown line breaks.

Example:

  1. item one
  2. item two

    this block acts as a new paragraph, above there is a blank line

  3. item three

    some other code

  4. item four
0

Note that there are also a number of extensions available that will fix this behaviour for specific contexts of Markdown use.

For example, sane_lists extension of python-markdown (used in mkdocs, for example), will recognize numbers used in Markdown lists. You just need to enable this extension arkdown.markdown(some_text, extensions=['sane_lists'])

Alex
  • 1,357
  • 1
  • 17
  • 28
0

If you want to have text aligned to preceding list item but avoid having "big" line break, use two spaces at the end of a list item and indent the text with some spaces.

Source: (dots are spaces ;-) of course)

1.·item1··
····This is some text
2.item2

Result:

  1. item1
    This is some text
  2. item2
Jarda
  • 514
  • 8
  • 28