在 Markdown 中有两列

Posted

技术标签:

【中文标题】在 Markdown 中有两列【英文标题】:Have two columns in Markdown 【发布时间】:2015-08-11 10:11:29 【问题描述】:

我想用goodbad编码示例编写一个编码标准规范文档。每个规则都应该有一个编号、一个描述和一个示例。

例如这里是规则1:

# Rule 1
Description for rule 1.

## Good
```c
int foo (void) 

    int i;

```

## Bad
```c
int foo (void) 
    int i;

```

根据每个规则,我想生成一个带有全局目录的 PDF 或 html 页面。

我如何编写一个 Markdown 兼容的代码,可以用语法着色来表示水平对齐的代码块?

像这样(这是一张图片):

我知道我可以在我的 Markdown 文档中使用 HTML,所以我可以编写如下内容:

<good>
```c
int foo (void) 

    int i;

```
</good>
<bad>
```c
int foo (void) 
    int i;

```
</bad>

然后再处理数据(我还是不知道怎么做)

markdown -> own-tags-processing -> LaTeX -> pdf
markdown -> own-tags-processing -> HTML 

有没有更好的方法水平对齐两个代码块?

【问题讨论】:

可能相关:***.com/editing-help#tables - 但仅适用于 SO 文档页面... 【参考方案1】:

你不能,至少不能使用纯 Markdown,因为它没有任何列的概念。如rules 中所述:

Markdown 的理念是让散文易于阅读、编写和编辑。 HTML 是一种发布格式; Markdown 是一种写作格式。因此,Markdown 的格式化语法只解决了可以用纯文本表达的问题。

对于 Markdown 语法未涵盖的任何标记,您只需使用 HTML 本身。

事实上,最好的方法是将每个代码块包装在 &lt;div&gt; 中,并为每个 div 分配适当的类。但是,大多数 Markdown 解析器不会在原始 HTML 块中解析 Markdown。因此,您可能还需要在原始 HTML 中定义代码块。检查您的解析器的功能列表以找出答案。如果您无法定义自己的 CSS 以与 Markdown 分开使用(以设置 HTML 样式),您还需要在 HTML 中定义内联样式。 This question 包含一个很好的示例,说明它的外观。只需用适当的代码块替换 cmets。如果您必须在原始 HTML 中定义代码块,它们将如下所示:

<pre><code class="language-c">int foo (void) 

    int i;

</code></pre>

因此,确定在所有(大多数?)Markdown 解析器中都可以使用的最终文档如下所示:

# Rule 1
Description for rule 1.

<div style="-webkit-column-count: 2; -moz-column-count: 2; column-count: 2; -webkit-column-rule: 1px dotted #e0e0e0; -moz-column-rule: 1px dotted #e0e0e0; column-rule: 1px dotted #e0e0e0;">
    <div style="display: inline-block;">
        <h2>Good</h2>
        <pre><code class="language-c">int foo (void) 

    int i;

</code></pre>
    </div>
    <div style="display: inline-block;">
        <h2>Bad</h2>
        <pre><code class="language-c">int foo (void) 
    int i;

</code></pre>
    </div>
</div>

请注意,这使用了在 CSS 中定义列的多种不同方式中的一种。不同的方法在不同的浏览器中可能有效,也可能无效。 YMMV。

【讨论】:

【参考方案2】:

虽然这不适用于所有降价,但我让它与 GitLab、Github 和 mdBook 一起使用。我想我会分享这个答案。

基本上,您通过 HTML 创建表格。 Markdown 和 HTML 不能很好地混合,但是如果你用空格包围 markdown,有时可以识别 markdown。

https://docs.gitlab.com/ee/user/markdown.html#inline-html

<table>
<tr>
<th> Good </th>
<th> Bad </th>
</tr>
<tr>
<td>

```c++
int foo() 
    int result = 4;
    return result;

```

</td>
<td>

```c++
int foo()  
    int x = 4;
    return x;

```

</td>
</tr>
</table>

【讨论】:

在 Typora 中不起作用,记录在案【参考方案3】:

这是一个老问题,但如果人们从谷歌来到这里,上面的答案对于真正的 Markdown 来说是正确的,但是如果你想通过实现 kramdown 的东西来做到这一点,kramdown 确实支持混合 HTML 和 Markdown 语法,使用 php Markdown Extra,如 kramdown 文档 here 中所述。 kramdown 只要求在您打算使用上述 HTML 的降价页面中,向markdown="1" 的包装 HTML 元素添加一个属性。

作为示例(以及两列降价的直接解决方案),这会导致两列内容。我使用 Bootstrap 来处理列宽和图像居中,但您可以对这些主题采取任何方法。

<div class="row">
  <div class="col-md-8" markdown="1">
  Some text.
  </div>
  <div class="col-md-4" markdown="1">
  <!-- ![Alt Text](../img/folder/blah.jpg) -->
  <img  class="center-block" src="../img/folder/blah.jpg">
  </div>
</div>

小心缩进。在上面的代码中,我特别没有缩进超过一层。我相信默认情况下 kramdown 会将双缩进代码解释为引号块(如果我没记错的话,这通常是 Markdown 的标准)。

另外请注意,我选择使用 html img 标签而不是 markdown 图片链接。您可以选择做同样的事情,因为您获得了一些额外的控制权。

而且,如果您是新手或不熟悉 Bootstrap,您可以通过更改上面代码中显示的 8 和/或 4 来更改相对列宽,只需确保这两者的总和数字总是 12。

如上所述,这仅适用于实现 kramdown 引擎的降价消费者(这对 Jekyll 用户来说非常有用)。

【讨论】:

以上是关于在 Markdown 中有两列的主要内容,如果未能解决你的问题,请参考以下文章

我可以在引导面板中有两列吗?

python Python中的简单Markdown服务器。假设您在〜/ Text中有Markdown文件。在http:// localhost:5000 / w / Hello访问〜/ Text /

Markdown语法说明

Markdown常用基本语法

Markdown的使用

vscode使用Markdown文档编写