Markdown: kontynuuj listę numerowaną

474

W poniższym kodzie rabatowym chcę item 3zacząć od listy nr 3. Ale z powodu bloku kodu między znakami zaczyna ten element listy jako nowa lista. Czy jest jakiś sposób, aby temu zapobiec?

Pożądane wyjście:

1. item 1
2. item 2

```
Code block
```

3. item 3

Wyprodukowana produkcja:

  1. przedmiot 1
  2. pozycja 2

Code block

  1. pozycja 3
orschiro
źródło
4
Oto prawidłowe rozwiązanie . Potrójne cofnięcia w odpowiedzi Macmade faktycznie tworzą po prostu <code>element HTML z nowymi wierszami, który nie jest podświetlany pod względem składni i ma dodatkową pustą linię powyżej widocznie podświetloną jako kod.
Dan Dascalescu
1
Jeśli jesteś naprawdę zdesperowany, możesz poszukać kodów znaków HTML dla liczb, których chcesz użyć (i dla każdego kolejnego elementu) ... jak w &#50;&#57;. this is list item number 29. Może to nie działać we wszystkich analizatorach przecen.
Roy Tinker

Odpowiedzi:

621

Użyj czterech spacji do wcięcia treści między punktorami

1. item 1
2. item 2

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

Produkuje:

  1. przedmiot 1
  2. pozycja 2

    Code block

  3. pozycja 3
Macmade
źródło
5
Tak, wcięcie wyjaśnia parserowi, że blok kodu należy do elementu listy 2. W przeciwnym razie jest to zwykły akapit i kończy listę.
Macmade
42
Ale ... co jeśli nie chcesz tam wcięć? Markdown nie ma rozwiązania, o ile mi wiadomo. Często jest rzeczą naturalną, aby rozpocząć listę, a następnie zatrzymać i podać tekst, który jest meta komentarzem do listy - co właśnie zrobiliśmy i co będzie dalej - bez tego, aby tekst był logicznie częścią listy - i następnie kontynuuj listę. Markdown nie chce, żebyśmy to zrobili. Jest to myśl, że Markdown nie chce, aby ludzie wyrażali - że Markdown nie umie wyrażać, że Markdown uważa, że ​​jest zbyt ... wolny. Narzędzia powinny podążać za myślami. Westchnienie. Mógłbym pisać w HTML lub tworzyć pliki PDF.
Mars
2
Wydaje mi się, że w ogóle nie działa. Mam prostą listę z numerami oraz wcięcia i nowe wiersze, jak pokazano powyżej. Nadal wznawia się o 1.
Ray
10
W kilku edytorach Markdown, które wypróbowałem (Bitbucket, Tumblr), to nie działa - renderuje kod wbudowany zamiast poprawnie wciętego bloku kodu.
thdoan
2
W IntelliJ robi różnicę, ile pustych linii znajduje się na dole każdego bloku numerowanego. Jeśli pozostawisz 2 puste wiersze, nastąpi ponowna numeracja; zostaw tylko jeden i tak będzie dalej.
Rabarbar
36

Zauważ, że w rozwiązaniu Macmade możesz zobaczyć dodatkowy wiersz kodu nad „Blokiem kodu”.

Oto dwa lepsze rozwiązania:

  1. Wcięcie bloku kodu o dodatkowe 4 spacje (czyli zwykle 8, w tym przykładzie listy zagnieżdżonej, 12). Spowoduje to umieszczenie kodu w <pre>elemencie. Na SO możesz nawet podświetlić składnię za pomocą
    <!-- language: lang-js -->wcięcia 4 spacjami (+1 tutaj ze względu na zagnieżdżoną listę).

    1. przedmiot 1
    2. pozycja 2

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

  2. Lub po prostu umieść blok kodu w backticks i wcięcie o 4 spacje (tutaj, 1 dodatkowy z powodu zagnieżdżonej listy). Otrzymasz zwykły akapit tekstowy z wcięciem, z <code>elementem w środku. Ten, którego nie możesz wyróżnić składni:

    1. przedmiot 1
    2. pozycja 2

      Code block

    3. pozycja 3

Uwaga: możesz kliknąć „edytuj” w tej odpowiedzi, aby zobaczyć podstawowy kod Markdown. Nie trzeba oszczędzać;)

Dan Dascalescu
źródło
27
Jest to rozwiązanie tego konkretnego problemu, ale nie jest to ogólne rozwiązanie problemu ponownego uruchomienia listy Markdown przy następnym numerze po jakimś pośrednim tekście. Wygląda na to, że nie ma takiej możliwości, co doprowadza mnie do szału. Wszystko inne w Markdown jest świetne.
Mars
@Mars Jak widać z odpowiedzi DavidT , ogólnym rozwiązaniem jest wcięcie tekstu dowolną liczbą spacji. Na przykład dodanie jednej spacji zamiast czterech pozwoli ci wstawić dowolny tekst pośredni bez konieczności tworzenia bloku kodu.
ClydeTheGhost
36

Jako rozszerzenie istniejących odpowiedzi. Dla tych, którzy próbują kontynuować listę numerowaną po czymś innym niż blok kodu. Na przykład drugi akapit. Wystarczy wciąć drugi akapit o co najmniej 1 spację.

Obniżka cen:

1. one
2. two

 three
3. four

Wynik:

  1. jeden
  2. dwa

    trzy

  3. cztery
DavidT
źródło
1
Słodkie! Miałem serię pseudo-bloków i równań MathJax. Właśnie tego potrzebowałem.
Xtian
Nie działa na GitHub Wiki. Dodanie większej liczby spacji sprawi, że numeracja będzie co najmniej tego samego typu, co liczby powyżej. : rofl:
Chaim Eliyah
1
@ChaimEliyah Thats, ponieważ jestem w 99% pewien, że wiki nie używa markdown o smaku GitHub (jestem pewien, że już wcześniej spotkałem się z tą ciekawością)
DavidT
Zapobiegnie to również sytuacjom, w których przed końcem wpisu listy znajduje się pozycja listy zawierająca tekst, trochę kodu i wreszcie więcej tekstu.
Frotz 30.01.2019
14

Jeśli użyjesz tabulacji do wcięcia bloku kodu, ukształtuje on cały blok w jedną linię. Aby tego uniknąć, musisz użyć listy uporządkowanej w formacie HTML.

  1. przedmiot 1
  2. pozycja 2

Blok kodu

<ol start="3">
  <li>item 3</li>
  <li>item 4</li>
</ol>
użytkownik3505838
źródło
13

Rozwiązanie Macmade nie działa już dla mnie w mojej instancji Jekyll na Github Pages, ale znalazłem to rozwiązanie w przypadku repozytorium kramdown github. Na przykład OP wyglądałby tak:

1. item 1
2. item 2

```
Code block
```

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

Ręcznie rozwiązałem moje problemy.

Khalil Rawanna
źródło
3
Niestety nie działa to z plikami Readme GitHub. :(
Nostalg.io
7

Źródło;

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


Wynik;

1. pozycja 1
2. pozycja 2 Code block 3. pozycja 3

brillout
źródło
4

Jeśli nie chcesz, aby linie między elementami listy mają być wcięty, jak wspomniano użytkownik Mars w swoim komentarzu, można użyć pandoc„s example_listsfunkcję. Z ich dokumentów :

(@)  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
źródło
TAK! To działało świetnie. Dobra robota.
javadba
To najbardziej uniwersalne rozwiązanie tego problemu. Nie ma potrzeby wcięcia, a nawet działa, jeśli masz nagłówki między elementami listy.
lillemets,
Do (@)odpowiada globalnej liście ustawicznego (więc może być tylko jeden Używanie. pandoc„S startnumrozszerzenie można rozpocząć uporządkowaną listę z numerem chcesz i po prostu działa.
Abid H. Mujtaba
2

Umieść numery list w nawiasach zamiast kropki.

(1) pozycja 1
(2) pozycja 2 code block (3) pozycja 3

lomzher
źródło
5
To niszczy <ol>i <li>elems, a zamiast tego po prostu otacza je <p>tagami. Dodatkowo dosłownie dostajesz (1).
jmargolisvt
2
Myślę, że taka była intencja.
Gal
1

Rozwiązałem ten problem na Github, oddzielając wcięty podblok nową linią, na przykład, piszesz element 1, następnie naciskasz Enter dwa razy (tak jakby to był nowy akapit), wcinasz blok i pisz co chcesz (blok kodu, tekstu itp.). Więcej informacji o listach Markdown i podziałach linii Markdown .

Przykład:

  1. pozycja pierwsza
  2. pozycja druga

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

  3. pozycja trzecia

    some other code

  4. pozycja czwarta
Nestor Marin
źródło
0

Zauważ, że dostępnych jest również wiele rozszerzeń, które naprawią to zachowanie w określonych kontekstach użycia Markdown.

Na przykład rozszerzenie sane_lists w python-markdown (używane na przykład w mkdocs) rozpoznaje liczby używane na listach Markdown. Musisz tylko włączyć to rozszerzeniearkdown.markdown(some_text, extensions=['sane_lists'])

Alex
źródło
0

Jeśli chcesz wyrównać tekst do poprzedniego elementu listy, ale unikniesz „dużego” podziału wiersza, użyj dwóch spacji na końcu elementu listy i wstaw wcięcie w tekście za pomocą niektórych spacji.

Źródło: (kropki to spacje ;-) oczywiście)

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

Wynik:

  1. item1
    To jest jakiś tekst
  2. item2
Jarda
źródło