我有一个如下所示的文件夹结构:
chapters/
01-chapter.md
02-chapter.md
03-chapter.md
format.sh
parse.sh
解析.sh
pandoc -t html5+smart -so dist/book.html --html-q-tags chapters/*.md
格式.sh
for f in chapters/*.md;
do
pandoc "$f" -o "$f" -t \
markdown+smart+footnotes-escaped_line_breaks+example_lists \
--columns=80;
done
我的想法基本上是不仅将 Pandoc 用作转换器,而且还用作格式化程序——在我开始使用脚注之前,这非常有效:
当我运行format.sh时,我用于脚注的每个参考名称都会被一个数字覆盖 - 这很好,但问题是如果我运行parse.sh我会收到以下消息:
[WARNING] Duplicate note reference '1' at line 360 column 1
问题是01-chapter.md
和02-chapter.md
都有脚注[^1]
。基本上,我希望 Pandoc 分别处理每个文件的脚注,并且不允许交叉引用我的降价文件,但我看不到任何方法可以做到这一点。
有人有什么想法吗?
不需要lua
我只是偶然发现了这个
--file-scope
选项。加上这个parse.sh
,你就会摆脱麻烦......Pandoc 的设计目的不是作为格式化程序,但它在大多数情况下都运行良好。
没有办法让 pandoc 保留原始脚注,因此您必须找到其他方法。挑战在于让 pandoc 将文件作为单独的文档顺序读取,然后将 pandoc 中的文档组合成最终文档。只需传递所有输入文件(通过
*.md
),pandoc 就会在解析 markdown 之前将这些文件连接成一个文档。我的建议是使用“索引”(或主)文件。Pandoc Markdown 没有用于包含子文件的内置语法,但我们可以使用pandoc Lua filter滚动自己的语法。例如,定义一个文件,将所有章节联系在一起,其中文件在代码块中逐行列出:
将以下代码放入文件
include.lua
中(取自此要点)然后使用 Lua 过滤器和主/索引文件作为输入调用 pandoc:
index.md
这样做的缺点是每次添加新的 Markdown 文件时都必须进行编辑;此外,只有在索引文件中定义的元数据才会将其输出到输出中(尽管这两种限制都可以通过一些编码来避免)。除此之外,它应该完全符合您的要求。