[英]Convert Markdown links to HTML with Pandoc
在我的新项目中,我有多个相互链接的 Markdown 文件。 这些链接引用原始.md
文件。
例子:
文件README.md
...
1. [Development documentation](Development.md)
1. [User documentation](Usage.md)
...
如果我使用 Pandoc 将这些文件转换为 HTML 文件,所有链接仍指向原始.md
文件。 我正在寻找一种同时转换链接类型的方法,这意味着输出文件应该引用输出文件类型,例如 HTML、PDF、 TeX等。有没有办法用 Pandoc 转换内部链接类型?
我用它来转换文件:
pandoc -f markdown -t html5 input.md -o output.html
内置 Lua 过滤器的示例:
# links-to-html.lua
function Link(el)
el.target = string.gsub(el.target, "%.md", ".html")
return el
end
然后:
pandoc -f markdown -t html5 input.md -o output.html --lua-filter=links-to-html.lua
假设您要通过 Web 服务器为您提供 HTML 页面,将所有*.md
URL 解析为*.html
相对简单,而不是通过 Pandoc 重写它们,例如,使用NGinx :
location ~ \.md$ {
if (!-f $request_filename) {
rewrite ^(.*)\.md$ $1 permanent;
}
}
location / {
try_files /$uri /$uri.html;
}
或者,您可以使用sed
(取自此处)将所有md
链接替换为html
:
将所有内部文件 URL 从指向 *.md 链接更改为指向本地 *.html 文件
递归运行此 sed 命令(以编程方式替换 FILENAME)
sed -n -i.bak '/href="\./s/\.md/\.html/' FILENAME.html
或者,改为运行以下命令(以编程方式替换 FILENAME)
sed -e '/href="\./s/\.md/\.html/' FILENAME.html > FILENAME.html.tmp && mv FILENAME.html.tmp FILENAME.html`
我遇到了类似的问题,所以我制作了md_htmldoc 。
它在一个目录中找到所有.md
文件,然后创建一个单独的目录,其中所有 Markdown 文件都已转换为 HTML。
它修复了超链接(感谢Sergio Correia 的回答)。
它还收集任何本地文件引用,以便图像链接等仍然有效。
对于任何使用 Makefile 来驱动转换的人,这里有一个 Makefile 片段,它提供了将 .md 转换为 .html 并调整链接的规则:
SHELL=/bin/bash
%.html: %.md
( set -eu -o pipefail ; \
pandoc -i $< -t html | \
sed -E 's/<a href="([^"]*).md/<a href="\1.html/g' > $@.tmp && mv -vf $@.tmp $@ ; )
如果当前目录中存在test.md
,则make test.html
会执行此操作。
该规则还负责在转换实际成功之前不破坏现有的 HTML 文件(无论是什么原因)。
对Sergio Correia 的回答稍作修改也可以捕获文档中的锚链接。 小心; 在极少数情况下,这可能会导致链接乱码...
import panflute as pf
def action(elem, doc):
if isinstance(elem, pf.Link):
if elem.url.endswith('.md'):
elem.url = elem.url[:-3] + '.html'
return elem
elif elem.url.find('.md#'):
elem.url = elem.url.replace('.md#', '.html#')
return elem
if __name__ == '__main__':
pf.run_filter(action)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.