Pandoc可以在代码块中标记文本吗?

时间:2019-01-16 10:12:25

标签: markdown pandoc

我使用<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"

<mark></mark>显示为代码,并且不呈现HTML高亮。

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

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

可呈现HTML高亮。

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

2 个答案:

答案 0 :(得分:3)

否,默认情况下不是。 Pandoc应该如何知道<mark>不是您的代码的一部分?

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

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

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

更新

如果您还希望突出显示语法,则可能要尝试pandoc-emphasize-code filter

答案 1 :(得分:1)

如果您将始终标记整行,则可以使用CSS进行标记。

应该为代码块指定一个ID,以使其更易于定位

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

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

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

语法突出显示应该继续起作用。