Markdown: Nummerierte Liste fortsetzen


474

Im folgenden Markdown-Code möchte ich item 3mit Listennummer 3 beginnen. Aufgrund des Codeblocks zwischen den Markdowns wird dieses Listenelement jedoch als neue Liste gestartet. Gibt es eine Möglichkeit, dieses Verhalten zu verhindern?

Gewünschte Ausgabe:

1. item 1
2. item 2

```
Code block
```

3. item 3

Produzierte Ausgabe:

  1. Gegenstand 1
  2. Punkt 2

Code block

  1. Punkt 3

4
Hier ist die richtige Lösung . Die dreifachen Backticks in der Antwort des Macmade erzeugen tatsächlich nur ein <code>HTML-Element mit Zeilenumbrüchen, das nicht durch Syntax hervorgehoben werden kann und über dem eine zusätzliche leere Zeile sichtbar als Code hervorgehoben ist.
Dan Dascalescu

1
Wenn Sie wirklich verzweifelt sind, können Sie die HTML-Zeichencodes für die Zahlen nachschlagen, die Sie verwenden möchten (und für jedes nachfolgende Element) ... wie in &#50;&#57;. this is list item number 29. Dies funktioniert jedoch möglicherweise nicht in allen Markdown-Parsern.
Roy Tinker

Antworten:


621

Verwenden Sie vier Leerzeichen, um Inhalte zwischen Aufzählungspunkten einzurücken

1. item 1
2. item 2

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

Produziert:

  1. Gegenstand 1
  2. Punkt 2

    Code block

  3. Punkt 3

5
Ja, durch Einrücken wird dem Parser klar, dass der Codeblock zum Listenelement 2 gehört. Andernfalls handelt es sich nur um einen normalen Absatz, und die Liste wird beendet.
Macmade

42
Aber ... was ist, wenn Sie dort keine Einrückung wünschen? Markdown hat meines Wissens keine Lösung. Es ist oft eine natürliche Sache, eine Liste zu starten, dann anzuhalten und einen Text bereitzustellen, der ein Metakommentar über die Liste ist - was wir gerade getan haben und was als nächstes kommt - ohne dass der Text logischerweise Teil der Liste ist - und Fahren Sie dann mit der Liste fort. Markdown will nicht, dass wir das tun. Es ist eine Form des Denkens, dass Markdown nicht möchte, dass Menschen sich ausdrücken - dass Markdown nicht weiß, wie man sich ausdrückt, dass Markdown denkt, dass es zu ... frei ist. Werkzeuge sollten dem Gedanken folgen. Seufzer. Ich könnte in HTML schreiben oder PDFs erstellen.
Mars

2
Scheint bei mir überhaupt nicht zu funktionieren. Ich habe eine einfache nummerierte Liste und bin wie oben gezeigt eingerückt und neu gezeichnet. Startet immer noch um 1.
Ray

10
In den wenigen Markdown-Editoren, die ich ausprobiert habe (Bitbucket, Tumblr), funktioniert dies nicht - es wird Inline-Code anstelle eines ordnungsgemäß eingerückten Codeblocks gerendert.
Dooan

2
In IntelliJ macht es einen Unterschied, wie viele Leerzeilen am Ende jedes nummerierten Blocks stehen. Wenn Sie 2 Leerzeilen lassen, wird die Nummerierung neu gestartet. lass nur einen und es geht weiter.
Rhabarber

36

Beachten Sie, dass in der Macmade-Lösung eine zusätzliche Codezeile über dem "Codeblock" angezeigt wird.

Hier sind zwei bessere Lösungen:

  1. Einrücken des Codeblocks um zusätzliche 4 Leerzeichen (normalerweise 8, in diesem Beispiel für verschachtelte Listen 12). Dadurch wird der Code in ein <pre>Element eingefügt. In SO können Sie sogar eine Syntaxhervorhebung mit einem
    <!-- language: lang-js -->um 4 Leerzeichen eingerückten Wert angeben (hier +1 aufgrund der verschachtelten Liste).

    1. Gegenstand 1
    2. Punkt 2

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

  2. Oder setzen Sie den Codeblock einfach in Backticks und rücken Sie ihn um 4 Leerzeichen ein (hier 1 extra wegen der verschachtelten Liste). Sie erhalten einen regulären eingerückten Textabsatz mit einem <code>Element darin. Diesen können Sie nicht Syntax-Highlight:

    1. Gegenstand 1
    2. Punkt 2

      Code block

    3. Punkt 3

Hinweis: Sie können bei dieser Antwort auf "Bearbeiten" klicken, um den zugrunde liegenden Markdown-Code anzuzeigen. Keine Notwendigkeit zu speichern;)


27
Dies ist eine Lösung für dieses spezielle Problem, aber keine allgemeine Lösung für das Problem des Neustarts einer Markdown-Liste bei der nächsten Nummer nach einem dazwischenliegenden Text. Es scheint, dass es keine Möglichkeit gibt, dies zu tun, was mich verrückt macht. Alles andere an Markdown ist großartig.
Mars

@Mars Wie Sie aus der Antwort von DavidT ersehen können , besteht die allgemeine Lösung darin, den Text mit einer beliebigen Anzahl von Leerzeichen einzurücken . Wenn Sie beispielsweise ein Leerzeichen anstelle von vier hinzufügen, können Sie dazwischenliegenden Text einfügen, ohne einen Codeblock erstellen zu müssen.
ClydeTheGhost

36

Als Erweiterung bestehender Antworten. Für diejenigen, die versuchen, eine nummerierte Liste nach etwas anderem als einem Codeblock fortzusetzen. Zum Beispiel ein zweiter Absatz. Den zweiten Absatz nur um mindestens 1 Leerzeichen einrücken.

Abschlag:

1. one
2. two

 three
3. four

Ausgabe:

  1. einer
  2. zwei

    drei

  3. vier

1
Süss! Ich hatte eine Reihe von Pseudocodeblöcken und MathJax-Gleichungen. Das war genau das, was ich brauchte.
Xtian

Funktioniert nicht im GitHub Wiki. Wenn Sie mehr Leerzeichen hinzufügen, entspricht die Nummerierung mindestens dem Typ der obigen Nummern. :rofl:
Chaim Eliyah

1
@ChaimEliyah Das liegt daran, dass ich zu 99% sicher bin, dass das Wiki keinen Markdown mit GitHub-Geschmack verwendet (ich bin mir sicher, dass ich zuvor auf diese Neugier
gestoßen

Dies wird auch Situationen berücksichtigen, in denen Sie einen Listeneintrag haben, der Text, Code und schließlich mehr Text vor dem Ende des Listeneintrags enthält.
Frotz

14

Wenn Sie den Codeblock mit der Registerkarte einrücken, wird der gesamte Block in eine Zeile geformt. Um dies zu vermeiden, müssen Sie die geordnete HTML-Liste verwenden.

  1. Gegenstand 1
  2. Punkt 2

Codeblock

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

13

Die Lösung von Macmade funktioniert auf meiner Jekyll-Instanz auf Github-Seiten nicht mehr für mich, aber ich habe diese Lösung bei einem Problem für das kramdown-Github-Repo gefunden. Für das Beispiel von OP würde es so aussehen:

1. item 1
2. item 2

```
Code block
```

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

Meine Probleme handlich gelöst.


3
Leider funktioniert dies nicht mit GitHub-Readme-Dateien. :(
Nostalg.io

7

Quelle;

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


Ergebnis;

1. Punkt 1
2. Punkt 2 Code block 3. Punkt 3


4

Wenn Sie nicht wollen , die Linien zwischen den Listenelemente eingerückt werden, wie Benutzer Mars in seinem Kommentar erwähnt, können Sie pandoc‚s - example_listsFunktion. Aus ihren Dokumenten :

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

Explanation of examples.

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

JA! Das hat super geklappt. Gut gemacht.
Javadba

Dies ist die universellste Lösung für dieses Problem. Es ist kein Einzug erforderlich, und es funktioniert sogar, wenn zwischen den Listenelementen Überschriften stehen.
Lilemets

Das (@)entspricht einer globalen fortlaufenden Liste (es kann also nur eine geben. Mit pandocder startnumErweiterung ' können Sie eine geordnete Liste mit der gewünschten Nummer starten und es funktioniert einfach.
Abid H. Mujtaba

2

Setzen Sie die Listennummern in Klammern anstatt auf einen Punkt.

(1) Punkt 1
(2) Punkt 2 code block (3) Punkt 3


5
Dies zerstört die <ol>und <li>elems und verpackt sie stattdessen einfach in <p>Tags. Darüber hinaus erhalten Sie buchstäblich (1).
jmargolisvt

2
Ich denke das war die Absicht.
Gal

1

Ich habe dieses Problem gelöst, indem Github den eingerückten Unterblock durch eine neue Zeile trennte. Sie schreiben beispielsweise das Element 1, drücken dann zweimal die Eingabetaste (als wäre es ein neuer Absatz), rücken den Block ein und schreiben, was Sie möchten (einen Block) von Code, Text usw.). Weitere Informationen zu Markdown-Listen und Markdown-Zeilenumbrüchen .

Beispiel:

  1. Punkt eins
  2. Punkt zwei

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

  3. Punkt drei

    some other code

  4. Punkt vier

0

Beachten Sie, dass auch eine Reihe von Erweiterungen verfügbar sind, mit denen dieses Verhalten für bestimmte Kontexte der Markdown-Verwendung behoben werden kann.

Beispielsweise erkennt die Erweiterung sane_lists von Python-Markdown (die beispielsweise in mkdocs verwendet wird) Zahlen, die in Markdown-Listen verwendet werden. Sie müssen nur diese Erweiterung aktivierenarkdown.markdown(some_text, extensions=['sane_lists'])


0

Wenn Sie möchten, dass Text an dem vorhergehenden Listenelement ausgerichtet wird, aber keinen "großen" Zeilenumbruch haben, verwenden Sie zwei Leerzeichen am Ende eines Listenelements und rücken Sie den Text mit einigen Leerzeichen ein.

Quelle: (Punkte sind Leerzeichen ;-) natürlich)

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

Ergebnis:

  1. item1
    Dies ist ein Text
  2. item2
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.