Markdown: continuar lista numerada

475

En el siguiente código de rebajas quiero item 3comenzar con la lista número 3. Pero debido al bloque de código entre las rebajas comienza este elemento de la lista como una nueva lista. ¿Hay alguna forma de prevenir ese comportamiento?

Salida deseada:

1. item 1
2. item 2

```
Code block
```

3. item 3

Salida producida:

  1. Objeto 1
  2. elemento 2

Code block

  1. elemento 3
orschiro
fuente
44
Aquí está la solución correcta . Los triple backticks en la respuesta de Macmade en realidad solo producen un <code>elemento HTML con nuevas líneas, que no es resaltable por sintaxis, y tiene una línea en blanco adicional arriba visiblemente resaltada como código.
Dan Dascalescu
1
Si está realmente desesperado, puede buscar los códigos de caracteres HTML para los números que desea usar (y para cada elemento posterior) ... como en &#50;&#57;. this is list item number 29. Sin embargo, esto puede no funcionar en todos los analizadores de rebajas.
Roy Tinker

Respuestas:

622

Use cuatro espacios para sangrar contenido entre viñetas

1. item 1
2. item 2

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

Produce:

  1. Objeto 1
  2. elemento 2

    Code block

  3. elemento 3
Macmade
fuente
55
Sí, la sangría deja claro al analizador que el bloque de código pertenece al elemento de la lista 2. De lo contrario, es solo un párrafo normal y finalizará la lista.
Macmade
42
Pero ... ¿y si no quieres una sangría allí? Markdown no tiene solución, que yo sepa. A menudo es natural comenzar una lista, luego detenerse y proporcionar un texto que sea un meta comentario sobre la lista, lo que acabamos de hacer y lo que viene después, sin que el texto sea, lógicamente, parte de la lista, y luego continúa la lista. Markdown no quiere que hagamos eso. Es una forma de pensar que Markdown no quiere que la gente se exprese, que Markdown no sabe cómo expresarse, que Markdown piensa que es demasiado ... gratis. Las herramientas deben seguir el pensamiento. Suspiro. Podría escribir en HTML o hacer PDF.
Marte
2
No parece funcionar en absoluto para mí. Tengo una lista numerada simple, con sangría y nueva línea como se muestra arriba. Todavía se reinicia a las 1.
Ray
10
En los pocos editores de Markdown que he probado (Bitbucket, Tumblr), esto no funciona: muestra un código en línea en lugar de un bloque de código con sangría adecuada.
thdoan
2
En IntelliJ hace una diferencia cuántas líneas en blanco hay en la parte inferior de cada bloque numerado. Si deja 2 líneas en blanco, reinicia la numeración; deja solo uno y continúa.
Ruibarbo
36

Observe cómo en la solución de Macmade, puede ver una línea de código adicional sobre el "Bloque de código".

Aquí hay dos mejores soluciones:

  1. Sangra el bloque de código con 4 espacios adicionales (por lo general, 8, en este ejemplo de lista anidada, 12). Esto pondrá el código en un <pre>elemento. En SO, incluso puede especificar el resaltado de sintaxis con una
    <!-- language: lang-js -->sangría de 4 espacios (+1 aquí debido a la lista anidada).

    1. Objeto 1
    2. elemento 2

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

  2. O simplemente coloque el bloque de Código dentro de las comillas invertidas y sangría por 4 espacios (aquí, 1 extra debido a la lista anidada). Obtendrá un párrafo de texto sangrado regular, con un <code>elemento dentro de él. Este no puede resaltar la sintaxis:

    1. Objeto 1
    2. elemento 2

      Code block

    3. elemento 3

Nota: puede hacer clic en "editar" en esta respuesta para ver el código Markdown subyacente. No es necesario guardar;)

Dan Dascalescu
fuente
27
Esta es una solución para este problema en particular, pero no es una solución general para el problema de reiniciar una lista Markdown en el siguiente número después de un texto intermedio. Parece que no hay forma de hacer esto, lo que me vuelve loco. Todo lo demás sobre Markdown es genial.
Marte
@Mars, como puede ver en la respuesta de DavidT , la solución general es sangrar el texto con cualquier número de espacios. Por ejemplo, agregar un espacio en lugar de cuatro le permitirá insertar cualquier texto intermedio sin tener que crear un bloque de código.
ClydeTheGhost
36

Como una extensión a las respuestas existentes. Para aquellos que intentan continuar una lista numerada después de algo más que un bloque de código. Por ejemplo un segundo párrafo. Simplemente sangra el segundo párrafo por al menos 1 espacio.

Reducción:

1. one
2. two

 three
3. four

Salida:

  1. uno
  2. dos

    Tres

  3. cuatro
DavidT
fuente
1
¡Dulce! Tenía una serie de bloques de pseudocódigo y ecuaciones MathJax. Esto era exactamente lo que necesitaba.
xtian
No funciona en GitHub Wiki. Agregar más espacios al menos hará que la numeración sea del mismo tipo que los números anteriores. : rofl:
Chaim Eliyah
1
@ChaimEliyah Eso es porque estoy 99% seguro de que el wiki no usa el descuento de GitHub (estoy seguro de que me he encontrado con esta curiosidad anteriormente)
DavidT
Esto también se encargará de situaciones en las que tenga una entrada de lista que contenga texto, código y finalmente más texto antes del final de la entrada de lista.
Frotz
14

Si usa tab para sangrar el bloque de código, formará todo el bloque en una línea. Para evitar esto, debe usar la lista ordenada html.

  1. Objeto 1
  2. elemento 2

Bloque de código

<ol start="3">
  <li>item 3</li>
  <li>item 4</li>
</ol>
usuario3505838
fuente
13

La solución de Macmade ya no funciona para mí en mi instancia de Jekyll en las páginas de Github, pero encontré esta solución en un problema para el repositorio de kramdown github. Para el ejemplo de OP se vería así:

1. item 1
2. item 2

```
Code block
```

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

Resuelto mis problemas fácilmente.

KhalilRavanna
fuente
3
Desafortunadamente, esto no funciona con los archivos Léame de GitHub. :(
Nostalg.io
7

Fuente;

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


Resultado;

1. elemento 1
2. elemento 2 Code block 3. elemento 3

brillante
fuente
4

Si no desea que las líneas entre los elementos de la lista estén sangradas, como mencionó el usuario Mars en su comentario, puede usar pandocla example_listsfunción. De sus documentos :

(@)  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
fuente
¡SI! Esto funcionó muy bien. Bien hecho.
javadba
Esta es la solución más universal para este problema. No es necesario sangrar e incluso funciona si tiene encabezados entre los elementos de la lista.
lillemets
El (@)corresponde a una lista continua global (por lo que solo puede haber una. Usando pandocla startnumextensión puede comenzar una lista ordenada con el número que desea y simplemente funciona.
Abid H. Mujtaba
2

Ponga los números de la lista entre paréntesis en lugar de seguido de un punto.

(1) elemento 1
(2) elemento 2 code block (3) elemento 3

lomzher
fuente
55
Esto destruye las <ol>y <li>elems y en su lugar sólo les envuelve en <p>las etiquetas. Además, literalmente obtienes (1).
jmargolisvt
2
Creo que esa fue la intención.
Gal
1

Resolví este problema en Github separando el subbloque sangrado con una nueva línea, por ejemplo, escribe el elemento 1, luego presiona enter dos veces (como si fuera un nuevo párrafo), sangra el bloque y escribe lo que quieras (un bloque de código, texto, etc.). Más información sobre las listas de Markdown y los saltos de línea de Markdown .

Ejemplo:

  1. artículo uno
  2. artículo dos

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

  3. elemento tres

    some other code

  4. elemento cuatro
Néstor Marín
fuente
0

Tenga en cuenta que también hay varias extensiones disponibles que corregirán este comportamiento para contextos específicos de uso de Markdown.

Por ejemplo, la extensión sane_lists de python-markdown (utilizada en mkdocs, por ejemplo), reconocerá los números utilizados en las listas de Markdown. Solo necesita habilitar esta extensiónarkdown.markdown(some_text, extensions=['sane_lists'])

Alex
fuente
0

Si desea alinear el texto con el elemento de la lista anterior, pero evite tener un salto de línea "grande", use dos espacios al final de un elemento de la lista y aplique sangría al texto con algunos espacios.

Fuente: (los puntos son espacios ;-) por supuesto)

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

Resultado:

  1. item1
    Este es un texto
  2. item2
Jarda
fuente