Markdown: continuar lista numerada


474

No código de remarcação a seguir, quero item 3começar com o número da lista 3. Mas, devido ao bloco de código entre as remarcações, esse item da lista é iniciado como uma nova lista. Existe alguma maneira de impedir esse comportamento?

Saída desejada:

1. item 1
2. item 2

```
Code block
```

3. item 3

Produção produzida:

  1. item 1
  2. item 2

Code block

  1. item 3

4
Aqui está a solução correta . Os backticks triplos na resposta do Macmade produzem apenas um <code>elemento HTML com novas linhas, o que não é destacável por sintaxe e possui uma linha em branco extra acima visivelmente destacada como código.
— Dan Dascalescu

1
Se você está realmente desesperado, pode procurar os códigos de caracteres HTML para os números que deseja usar (e para cada item subseqüente) ... como em &#50;&#57;. this is list item number 29. Porém, isso pode não funcionar em todos os analisadores de remarcação.
— Roy Tinker

Respostas:


621

Use quatro espaços para recuar o conteúdo entre os marcadores

1. item 1
2. item 2

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

Produz:

  1. item 1
  2. item 2

    Code block

  3. item 3

5
Sim, o recuo deixa claro para o analisador que o bloco de código pertence ao item 2. da lista. Caso contrário, é apenas um parágrafo normal e encerrará a lista.
— Macmade

42
Mas ... e se você não quiser recuar lá? Markdown não tem solução, tanto quanto eu sei. Muitas vezes, é natural iniciar uma lista, parar e fornecer um texto que seja um meta-comentário sobre a lista - o que acabamos de fazer e o que virá a seguir - sem que o texto seja, logicamente, parte da lista - e depois continue a lista. Markdown não quer que façamos isso. É uma forma de pensamento que Markdown não quer que as pessoas se expressem - que Markdown não sabe se expressar, que Markdown acha que é muito ... grátis. As ferramentas devem seguir o pensamento. Suspiro. Eu poderia escrever em HTML ou criar PDFs.
— Mars

2
Não parece funcionar para mim. Eu tenho uma lista numerada simples e recuada e alinhada de novo, como mostrado acima. Ainda reinicia no 1.
— Ray

10
Nos poucos editores do Markdown que eu tentei (Bitbucket, Tumblr), isso não funciona - renderiza código embutido em vez de um bloco de código corretamente recuado.
— Thdan

2
No IntelliJ, faz diferença quantas linhas em branco existem na parte inferior de cada bloco numerado. Se você deixar duas linhas em branco, ele reiniciará a numeração; deixe apenas um e continua.
— Ruibarbo

36

Observe como na solução da Macmade, você pode ver uma linha extra de código acima do "Bloco de código".

Aqui estão duas soluções melhores:

  1. Recue o bloco de código com mais 4 espaços (geralmente 8, neste exemplo de lista aninhada, 12). Isso colocará o código em um <pre>elemento. No SO, você pode especificar o realce da sintaxe com um
    <!-- language: lang-js -->recuo de 4 espaços (+1 aqui devido à lista aninhada).

    1. item 1
    2. item 2

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

  2. Ou, basta colocar o bloco de código nos backticks e recuar em 4 espaços (aqui, 1 extra por causa da lista aninhada). Você receberá um parágrafo de texto recuado regular, com um <code>elemento dentro dele. Este você não pode destacar a sintaxe:

    1. item 1
    2. item 2

      Code block

    3. item 3

Nota: você pode clicar em "editar" nesta resposta para ver o código Markdown subjacente. Não há necessidade de salvar;)


27
Essa é uma solução para esse problema específico, mas não é uma solução geral para o problema de reiniciar uma lista Markdown no próximo número após algum texto intermediário. Parece que não há como fazer isso, o que me deixa louco. Tudo o resto sobre Markdown é ótimo.
— Mars

@Mars, como você pode ver na resposta de DavidT , a solução geral é recuar o texto com qualquer número de espaços. Por exemplo, adicionar um espaço em vez de quatro permitirá inserir qualquer texto intermediário sem precisar criar um bloco de código.
— ClydeTheGhost 30/08

36

Como uma extensão para as respostas existentes. Para aqueles que tentam continuar uma lista numerada após algo diferente de um bloco de código. Por exemplo, um segundo parágrafo. Apenas indente o segundo parágrafo em pelo menos 1 espaço.

Remarcação:

1. one
2. two

 three
3. four

Resultado:

  1. 1
  2. dois

    três

  3. quatro

1
Doce! Eu tinha uma série de blocos de pseudo-código e equações MathJax. Era exatamente disso que eu precisava.
— Xtian #

Não funciona no GitHub Wiki. Adicionar mais espaços fará com que a numeração seja do mesmo tipo que os números acima. : rofl:
— Chaim Eliyah

1
@ChaimEliyah Isso porque im 99% de certeza o wiki não usa GitHub sabor remarcação (im certeza eu me deparei com essa curiosidade anteriormente)
— DavidT

Isso também resolverá situações em que você tem uma entrada na lista contendo algum texto, algum código e, finalmente, mais texto antes do final da entrada na lista.
— Frotz 30/01/19

14

Se você usar tab para recuar o bloco de código, ele moldará o bloco inteiro em uma linha. Para evitar isso, você precisa usar a lista ordenada html.

  1. item 1
  2. item 2

Bloco de código

<ol start="3">
  <li>item 3</li>
  <li>item 4</li>
</ol>

13

A solução da Macmade não funciona mais para mim na minha instância do Jekyll no Github Pages, mas eu encontrei essa solução em um problema para o repositório do kramdown github. Para o exemplo do OP, ficaria assim:

1. item 1
2. item 2

```
Code block
```

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

Resolvi meus problemas com facilidade.


3
Infelizmente, isso não funciona com arquivos leia-me do GitHub. :(
— Nostalg.io

7

Fonte;

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


Resultado;

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


4

Se você não deseja que as linhas entre os itens da lista sejam recuadas, como o usuário Mars mencionado em seu comentário, você pode usar pandoco example_listsrecurso. Dos documentos deles :

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

Explanation of examples.

(@)  My third example will be numbered (3).

SIM! Isso funcionou muito bem. Bem feito.
— javadba

Esta é a solução mais universal para esse problema. Não há necessidade de recuar e funciona mesmo se você tiver títulos entre os elementos da lista.
— Lillemets 26/09/19

Os (@)corresponde a uma lista de continuar global (por isso não pode ser apenas um Usando. pandoc'S startnumextensão você pode começar uma lista ordenada com o número que você quer e ele simplesmente funciona.
— Abid H. Mujtaba

2

Coloque os números da lista entre parênteses em vez de seguidos por um ponto.

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


5
Isso destrói os <ol>e <li>elems e simplesmente envolve-los em <p>tags. Além disso, você literalmente recebe (1).
— 21136 jmargolisvt

2
Eu acho que essa foi a intenção.
— Gal

1

Resolvi esse problema no Github, separando o sub-bloco recuado com uma nova linha, por exemplo, você escreve o item 1 e pressiona enter duas vezes (como se fosse um novo parágrafo), recua o bloco e escreve o que deseja (um bloco de código, texto etc.). Mais informações sobre listas de Markdown e quebras de linha de Markdown .

Exemplo:

  1. item um
  2. item dois

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

  3. item três

    some other code

  4. item quatro

0

Observe que também há várias extensões disponíveis que corrigem esse comportamento para contextos específicos do uso do Markdown.

Por exemplo, a extensão sane_lists do python-markdown (usada no mkdocs, por exemplo), reconhecerá os números usados ​​nas listas do Markdown. Você só precisa ativar esta extensãoarkdown.markdown(some_text, extensions=['sane_lists'])


0

Se você deseja alinhar o texto ao item anterior da lista, mas evita quebras de linha "grandes", use dois espaços no final de um item da lista e indente o texto com alguns espaços.

Fonte: (pontos são espaços ;-) é claro)

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

Resultado:

  1. item1
    Este é algum texto
  2. item2
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.