【问题标题】:Can Pandoc mark text inside a code block?Pandoc 可以在代码块内标记文本吗?
【发布时间】:2019-01-16 10:12:24
【问题描述】:

我使用<mark>...</mark> 突出显示Markdown 文档中的文本,例如Google Python Style Guide。我很难突出显示代码。例如,我想强调如何使用类型进行注释:

```python
<mark>def func(a: int) -> List[int]:</mark>
```

但是这个 pandoc 命令:

pandoc -s -t html5 -o "Google Python style guide.html" "Google Python style guide.md"

&lt;mark&gt;&lt;/mark&gt; 显示为代码并且不呈现HTML 高亮显示。

一种解决方案是使用pre标签,例如:

<pre><mark>def func(a: int) -> List[int]:</mark></pre>

它会渲染一个 HTML 高亮。

Pandoc 能否在无需将所有 ```python 块转换为 pre 标签的情况下渲染 HTML 亮点?

【问题讨论】:

    标签: markdown pandoc


    【解决方案1】:

    不,默认情况下不是。 pandoc 应该如何知道 &lt;mark&gt; 不是您的代码的一部分?

    但是,您可以编写一个匹配每个代码块的pandoc filter,并将其转换为原始 html 块。类似(未经测试):

    function CodeBlock(elem)
      html = "<pre>" .. elem.text .. "</pre>"
      return pandoc.RawBlock("html", html)
    end
    

    请注意,您必须确保代码块中没有其他未转义的 HTML。

    更新

    如果你还想要语法高亮,可能你想试​​试pandoc-emphasize-code filter

    【讨论】:

    • 我测试了它,它可以工作,谢谢!这个结果就像我已经将三引号代码块转换为 pre 标记一样,因此 HTML 失去了语法突出显示。我从来没有在 Lua 中编码过:它可以过滤标记并仍然突出显示块中的代码吗?
    • 这似乎很难做到,因为您不希望语法高亮器将&lt;mark&gt;s 考虑在内。也许您应该使用另一种方法,例如owickstrom.github.io/pandoc-emphasize-code
    • 这是非常优雅的,它适用于位置(虽然还不是整行,请参阅GitHub issue)。您是否能够同时使用 Python 语法高亮显示?我可以得到 Pandoc 语法高亮或 HTML 标记标签,但不能同时得到。
    • 我决定使用 pandoc-emphasize 代码过滤器,因为这种方法可以保持语法突出显示,提供行内突出显示的精度,并且最易于维护。
    【解决方案2】:

    如果您总是标记整行,那么您可以使用 CSS 来做到这一点。

    应为代码块指定一个 ID,以便更容易定位它

    ``` {#types-demo .python}
    def func(a: int) -> List[int]:
       return [a]
    ```
    

    要突出显示第一行,请将其包含在您的文档中:

    ```{=html}
    <style>
    #types-demo-1 {
        background-color: #ff0;
    } 
    </style>
    ```
    

    语法高亮应该会继续起作用。

    【讨论】:

    • 这很优雅,如果想要保持与要突出显示的不同行一样多的 CSS 样式,例如带有样式#types-demo-N 用于突出显示Nth 行。
    猜你喜欢
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多