我正在尝试为 Quarto/pandoc 编写一个 lua 过滤器,它删除与文档 yaml 标头中定义的目标语言不匹配的所有代码块。这是我从另一个答案中得到的过滤器:
function Pandoc (doc)
if doc.meta.target_lang then
local target_lang = pandoc.utils.stringify(doc.meta.target_lang)
print("target lang is " .. target_lang)
return doc:walk {
CodeBlock = function (cb)
if cb.classes[1] ~= target_lang then
return {}
end
end
}
end
return doc
end
然而,这个返回一个空的代码块,这在渲染到时很烦人ipynbb
:
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [],
"id": "c0eaebc8-2af1-42bc-840a-dda2e54fddbb"
}
这是原始文档:
---
title: Some title
author: Some author
date: last-modified
format:
ipynb:
toc: false
filters:
- langsplit.lua
target_lang: "python"
---
Here is some text.
```{python test-py}
print("some python code")
```
```{r test-r}
print("some R code")
```
我可以提出以下 hack,我们检查 Pandoc Div 是否包含这样的代码块,其语言不是我们的目标语言,如果是,我们将这些代码块替换为
pandoc.Para
.然后,我们删除第一个内容是 的 Divpandoc.Para
。