Markdown: continuer la liste numérotée


475

Dans le code de démarque suivant, je veux item 3commencer par le numéro de liste 3. Mais à cause du bloc de code entre les démarques, cet élément de liste commence comme une nouvelle liste. Y a-t-il un moyen d'empêcher ce comportement?

Sortie désirée:

1. item 1
2. item 2

```
Code block
```

3. item 3

Production produite:

  1. objet 1
  2. point 2

Code block

  1. point 3

4
Voici la bonne solution . Les triples astuces dans la réponse de Macmade ne produisent en fait qu'un <code>élément HTML avec des retours à la ligne, qui n'est pas surlignable sur le plan de la syntaxe, et comporte une ligne vierge supplémentaire au-dessus visible en surbrillance sous forme de code.
Dan Dascalescu

1
Si vous êtes vraiment désespéré, vous pouvez rechercher les codes de caractères HTML pour les nombres que vous souhaitez utiliser (et pour chaque élément suivant) ... comme dans &#50;&#57;. this is list item number 29. Cela peut ne pas fonctionner dans tous les analyseurs de démarques.
Roy Tinker du

Réponses:


622

Utilisez quatre espaces pour indenter le contenu entre les puces

1. item 1
2. item 2

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

Produit:

  1. objet 1
  2. point 2

    Code block

  3. point 3

5
Oui, l'indentation indique clairement à l'analyseur que le bloc de code appartient à l'élément de liste 2. Sinon, c'est juste un paragraphe normal et mettra fin à la liste.
Macmade

42
Mais ... et si vous ne voulez pas d'indentation là-bas? Pour autant que je sache, Markdown n'a pas de solution. Il est souvent naturel de commencer une liste, puis de s'arrêter et de fournir un texte qui est un méta-commentaire sur la liste - ce que nous venons de faire et ce qui va suivre - sans que le texte fasse, logiquement, partie de la liste - et puis continuez la liste. Markdown ne veut pas que nous le fassions. C'est une forme de pensée que Markdown ne veut pas que les gens expriment - que Markdown ne sait pas exprimer, que Markdown pense qu'il est trop ... libre. Les outils doivent suivre la pensée. Soupir. Je pourrais écrire en HTML ou créer des PDF.
Mars

2
Cela ne semble pas fonctionner du tout pour moi. J'ai une liste numérotée simple, et en retrait et nouvelle ligne comme indiqué ci-dessus. Redémarre toujours à 1.
Ray

10
Dans les quelques éditeurs Markdown que j'ai essayés (Bitbucket, Tumblr), cela ne fonctionne pas - cela rend le code en ligne au lieu d'un bloc de code correctement indenté.
thdoan

2
Dans IntelliJ, le nombre de lignes vides au bas de chaque bloc numéroté fait une différence. Si vous laissez 2 lignes vides, il recommence la numérotation; n'en laisser qu'un et ça continue.
Rhubarbe

36

Remarquez comment dans la solution de Macmade, vous pouvez voir une ligne de code supplémentaire au-dessus du "bloc de code".

Voici deux meilleures solutions:

  1. Mettez en retrait le bloc de code de 4 espaces supplémentaires (donc généralement 8, dans cet exemple de liste imbriquée, 12). Cela mettra le code dans un <pre>élément. Sur SO, vous pouvez même spécifier la coloration syntaxique avec un
    <!-- language: lang-js -->retrait de 4 espaces (+1 ici en raison de la liste imbriquée).

    1. objet 1
    2. point 2

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

  2. Ou, placez simplement le bloc Code dans les backticks et indentez de 4 espaces (ici, 1 supplémentaire à cause de la liste imbriquée). Vous obtiendrez un paragraphe de texte régulier en retrait, avec un <code>élément à l'intérieur. Celui-ci vous ne pouvez pas mettre en évidence la syntaxe:

    1. objet 1
    2. point 2

      Code block

    3. point 3

Remarque: vous pouvez cliquer sur "modifier" sur cette réponse pour voir le code Markdown sous-jacent. Pas besoin d'enregistrer;)


27
Il s'agit d'une solution à ce problème particulier, mais ce n'est pas une solution générale au problème de redémarrage d'une liste de démarques au numéro suivant après un texte intermédiaire. Il semble qu'il n'y ait aucun moyen de le faire, ce qui me rend fou. Tout le reste sur Markdown est super.
Mars

@Mars, comme vous pouvez le voir dans la réponse de DavidT , la solution générale consiste à mettre le texte en retrait avec un nombre quelconque d'espaces. Par exemple, l'ajout d'un espace au lieu de quatre vous permettra d'insérer n'importe quel texte intermédiaire sans avoir à créer un bloc de code.
ClydeTheGhost

36

Comme extension aux réponses existantes. Pour ceux qui essaient de continuer une liste numérotée après autre chose qu'un bloc de code. Par exemple un deuxième paragraphe. Il suffit d'indenter le deuxième paragraphe d'au moins 1 espace.

Réduction:

1. one
2. two

 three
3. four

Production:

  1. une
  2. deux

    Trois

  3. quatre

1
Doux! J'avais une série de blocs de pseudo-code et d'équations MathJax. C'était exactement ce dont j'avais besoin.
xtian

Ne fonctionne pas sur le wiki GitHub. Ajouter plus d'espaces rendra au moins la numérotation du même type que les nombres au-dessus. : rofl:
Chaim Eliyah

1
@ChaimEliyah C'est parce que je suis sûr à 99% que le wiki n'utilise pas de démarque aromatisée GitHub (je suis sûr que j'ai déjà rencontré cette curiosité)
DavidT

Cela prendra également en charge les situations dans lesquelles vous avez une entrée de liste contenant du texte, du code et enfin plus de texte avant la fin de l'entrée de liste.
Frotz

14

Si vous utilisez tab pour indenter le bloc de code, il formera le bloc entier en une seule ligne. Pour éviter cela, vous devez utiliser la liste ordonnée html.

  1. objet 1
  2. point 2

Bloc de code

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

13

La solution de Macmade ne fonctionne plus pour moi sur mon instance Jekyll sur Github Pages mais j'ai trouvé cette solution sur un problème pour le dépôt github de kramdown. Pour l'exemple d'OP, cela ressemblerait à ceci:

1. item 1
2. item 2

```
Code block
```

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

Résolu mes problèmes facilement.


3
Malheureusement, cela ne fonctionne pas avec les fichiers Lisez-moi de GitHub. :(
Nostalg.io

7

La source;

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


Résultat;

1. élément 1
2. élément 2 Code block 3. élément 3


4

Si vous ne voulez pas que les lignes entre les éléments de la liste soient indentées, comme l'utilisateur Mars mentionné dans son commentaire, vous pouvez utiliser pandocla example_listsfonctionnalité de. De leurs documents :

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

Explanation of examples.

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

OUI! Cela a très bien fonctionné. Bien joué.
javadba

Il s'agit de la solution la plus universelle à ce problème. Il n'est pas nécessaire de mettre en retrait et cela fonctionne même si vous avez des en-têtes entre les éléments de la liste.
lillemets

Le (@)correspond à une liste continue globale (donc il ne peut y en avoir qu'un. En utilisant pandocl' startnumextension de, vous pouvez démarrer une liste ordonnée avec le numéro que vous voulez et cela fonctionne.
Abid H. Mujtaba

2

Mettez les numéros de liste entre parenthèses au lieu d'être suivis d'un point.

(1) point 1
(2) point 2 code block (3) point 3


5
Cela détruit les <ol>et <li>elems et au lieu que les enveloppe dans les <p>tags. De plus, vous obtenez littéralement (1).
jmargolisvt

2
Je pense que c'était l'intention.
Gal

1

J'ai résolu ce problème sur Github en séparant le sous-bloc en retrait avec une nouvelle ligne, par exemple, vous écrivez l'élément 1, puis appuyez deux fois sur entrée (comme s'il s'agissait d'un nouveau paragraphe), indentez le bloc et écrivez ce que vous voulez (un bloc de code, texte, etc.). Plus d'informations sur les listes Markdown et les sauts de ligne Markdown .

Exemple:

  1. élément un
  2. point deux

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

  3. point trois

    some other code

  4. point quatre

0

Notez qu'il existe également un certain nombre d'extensions disponibles qui corrigeront ce comportement pour des contextes spécifiques d'utilisation de Markdown.

Par exemple, l' extension sane_lists de python-markdown (utilisée dans mkdocs, par exemple), reconnaîtra les nombres utilisés dans les listes Markdown. Vous avez juste besoin d'activer cette extensionarkdown.markdown(some_text, extensions=['sane_lists'])


0

Si vous voulez que le texte soit aligné sur l'élément de liste précédent mais évitez d'avoir un "gros" saut de ligne, utilisez deux espaces à la fin d'un élément de liste et indentez le texte avec quelques espaces.

Source: (les points sont des espaces ;-) bien sûr)

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

Résultat:

  1. item1
    Ceci est du texte
  2. item2
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.