在Markdown中使用折叠代码块

23
有没有办法在Markdown中将代码(在```内)与剧透(在!>后面的语法)组合起来,以便获得一些位于剧透中的代码?
我正在使用GitLab实现的Markdown。

1
答案取决于您使用的具体Markdown库。例如,原始实现不支持围栏代码块(它使用缩进来表示代码块)或者隐藏标签。请编辑您的问题以添加这些信息。 - Chris
@Chris 我不确定我正在使用哪个库,我正在Gitlab中的wiki部分编写文档。 - Ellone
1
这意味着您正在使用GitLab Flavored Markdown。我以前从未见过这个“spoiler”标签,而且在文档中似乎也没有列出来... - Chris
4个回答

42

https://docs.gitlab.com/ee/user/markdown.html#details-and-summary

你可以使用原始的HTML

<p>
<details>
<summary>Click this to collapse/fold.</summary>

These details <em>remain</em> <strong>hidden</strong> until expanded.

<pre><code>PASTE LOGS HERE</code></pre>

</details>
</p>

现在GitLab支持<details>块中的Markdown语法

<details>
<summary>Click this to collapse/fold.</summary>

These details _remain_ **hidden** until expanded.

```
PASTE LOGS HERE
```

</details>

11
请注意,最新版本的 Gitlab 已经完全支持在 <details> 块内使用 Markdown。 - Jonas D.
4
不确定现在是如何支持的,但我必须在打开<details>标签后添加空行才能使Markdown工作。只是提供信息,这可能有点棘手。 - validname
1
我想补充一下,您可以在您的 code 标签上使用 lang 属性来触发语法高亮。 - Denis Chevalier

13
以下代码应该可以达到效果:
<details>
  <summary>Click to expand</summary>
  Whatever
</details>

5
在GitLab Enterprise Edition 14.3.4-ee中,在折叠代码块内进行语法高亮有两种方法:

仅使用HTML

code标签内使用lang属性(如@Denis Chevalier在此处所述)。

<details>
<summary>Initial draft</summary>

<pre><code lang="python">
YOUR CODE
</code></pre>
</details>

Markdown代码围栏

注意在代码围栏(三个反引号)前的空格(如@validname在这里所指出的那样)。

<details>
<summary>Initial draft</summary>

```python
YOUR CODE
\```  <- remove backslash: StackOverflow markdown parsing is broken 
</details>

3
谢谢,这个也在CE上起作用,那个空行实际上非常关键^^ - xeruf

3
正如@Chris在评论中提到的那样,GitLab Flavored Markdown似乎没有提及支持"spoiler"语法(在!>之后)。此外,“spoiler”语法不是“官方”语法(就像@Chris所指出的围栏代码块一样),也不是很常见。就我个人而言,我不知道任何特定的Markdown实现支持它。话虽如此,据我所知,这种语法基本上是引用语法的扩展。因此,如果您使用的实现支持剧透,那么对于引用块起作用的任何内容都应该适用于剧透。

另一个需要注意的问题是,并非所有的Markdown实现都支持围栏代码块,而且并不是所有支持它们的实现都支持它们同等地支持。例如,一些最早的实现不支持围栏代码块被嵌套。因此,根据您使用的Markdown实现的不同,您可能会得到不同的结果(我不知道GitLab使用哪种实现)。这就是使用非标准功能时所付出的代价。

无论如何,假设您使用的实现具有完全支持,以下内容应该可以正常工作:

!> ```javascript
!> alert("42");
!> ```

请注意,我按照正常方式编写了代码块。然后我只需在每行开头插入三个字符(感叹号、大于符号和一个空格)。如果不起作用,则可以安全地假定该实现不支持所需的一个或多个非标准特性。

是的,不幸的是,GitLab Flavored Markdown不支持剧透语法。 - Ellone

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接