Jekyll:使用内部markdown文件的链接

时间:2014-09-13 19:19:01

标签: html github hyperlink markdown jekyll

带有Folder/file.md

链接的md文件

当jekyll生成索引时,该文件的链接仍为folder/file.md,因此不会连接到生成的file.html。 jekyll可以将markdown中的链接替换为相应的html文件吗?

我真的想维护我的文件夹结构(大约7个子文件夹,每个子文件夹都有3个降价文件)。

6 个答案:

答案 0 :(得分:5)

答案since December 2016是使用jekyll-relative-links插件。

这是white-listed plugin if you are hosting on GitHub pages所以你可能已经拥有它了。

如果您不使用GitHub页面,则需要以下安装说明(from the README):

1.将以下内容添加到您网站的Gemfile:

gem 'jekyll-relative-links'

2.将以下内容添加到您网站的配置文件中:

gems:
  - jekyll-relative-links

答案 1 :(得分:2)

我已经写了一个简单的插件来解决这个问题。把它放在_plugins/中,并使链接引用*.md文件(所以github渲染链接工作);如果你使用jekyll构建它(当你能够运行插件时)链接将更改为*.html。由于github没有运行插件,因此不适用。

module ChangeLocalMdLinksToHtml
  class Generator < Jekyll::Generator
    def generate(site)
      site.pages.each { |p| rewrite_links(site, p) }
    end
    def rewrite_links(site, page)
      page.content = page.content.gsub(/(\[[^\]]*\]\([^:\)]*)\.md\)/, '\1.html)')
    end
  end
end

它并不完美(我确定你可以欺骗正则表达式)但它已经足够我的目的了。

答案 2 :(得分:1)

您正在寻找的标签是{% link %},它于2016年到货。

如果您有{% link _funkyCollection/banjo.md %},它会生成输出文件funkyCollection/banjo.htmlfunkyCollection/banjo/index.html或其他任何地方的正确路径。

答案 3 :(得分:1)

这就是我用jekyll 3.8.5解决此问题的方法。

对于根目录中的链接:/file.md

---
layout: page
title: Root File
permalink: /file/
---

This file is in root directory.

对于子目录中的链接:/folder/file.md

---
layout: page
title: SubDir File
permalink: /folder/file/
---

This file is in sub-directory.

现在链接这些文件:

[Root File]({{site.baseurl}}/file/))

[Sub Dir File]({{site.baseurl}}/folder/file/)

希望这对某人有帮助。

答案 4 :(得分:0)

Folder/file.md页面将导致创建_site/Folder/file.html页面。

因此,当您指向此页面的链接时,[Link to page]({{site.baseurl}}/Folder/file.html)不是[Link to page]({{site.baseurl}}/Folder/file.md)

Jekyll永远不会在网址中将file.md重写为file.html。所以你必须自己设置链接目标到结果page.url,这通常是一个html文件,但可以是css,je,json,......

如果您在任何file.md中使用permalink: /folder/folder/,它将生成一个/folder/folder/index.html文件,可以使用[Link to page]({{site.baseurl}}/folder/folder/)

来访问该文件

答案 5 :(得分:0)

我遇到了这个和written a basic Jekyll/Kramdown plugin。它比正则表达方法更不容易打破。

只要您的链接不以http://或类似内容开头,并以.md结尾,它就会将链接转换为其小写和带连字符的名称。

当然,您可以随时修改行为以满足您的需求。