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
orschiro
fonte
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
Macmade
fonte
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;)

Dan Dascalescu
fonte
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
DavidT
fonte
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>
user3505838
fonte
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.

KhalilRavanna
fonte
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

brillout
fonte
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).
iuvbio
fonte
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

lomzher
fonte
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
Nestor Marin
fonte
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'])

Alex
fonte
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
Jarda
fonte