【问题标题】:Jekyll : Using links to internal markdown filesJekyll : 使用内部降价文件的链接
【发布时间】:2014-11-07 17:22:15
【问题描述】:

带有Folder/file.md链接的md文件

当 jekyll 生成索引时,指向文件的链接仍然是 folder/file.md,因此不会连接到生成的 file.html。 jekyll 可以用对应的 html 文件替换 markdown 中的链接吗?

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

【问题讨论】:

  • 投了反对票,因为我根本无法理解独立的问题(我希望能够)!

标签: html github hyperlink markdown jekyll


【解决方案1】:

答案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

【讨论】:

  • 真的很棒!但是...我想知道是否有更短的方法可以做到这一点...我的意思是所有.md 都应该有一个默认的永久链接,而不需要.md,所以[foo](bar) 可以工作。然后[[bar]] 也可以!有什么想法吗?
  • 请注意,如果您不使用 Github Pages 或不想使用单独的插件,则内置了 link 标签,as of Jekyll 4.0 使用起来更加简单。
  • @nrflaw 啊,那是很久以前的事了!对不起,不再关心这个了。我仍然在 jekyll 上,但只是作为遗产,而我迁移到其他地方......它很快就会在微软 eee 之后与 github 一起消亡。也许您也有兴趣退后几步环顾四周! (打算在下面回复antonio,留作参考)?
【解决方案2】:

您要查找的标签是 {% link %},它于 2016 年到达。

如果您有{% link _funkyCollection/banjo.md %},它将生成输出文件funkyCollection/banjo.htmlfunkyCollection/banjo/index.html 或其他任何文件的正确路径,无论它最终在哪里。

【讨论】:

  • 另一个答案中@vossad01 的意思太短了
  • 内置,不是插件。所以不一样@cregox。因此,答案也更短。
  • 啊,那是很久以前的事了!对不起,不再关心这个了。我仍然在 jekyll 上,但只是作为遗产,而我迁移到其他地方......它很快就会在微软 eee 之后与 github 一起消亡。也许您也有兴趣退后几步环顾四周! ?
【解决方案3】:

我写了一个简单的插件来解决这个问题。把它放在_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

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

【讨论】:

    【解决方案4】:

    这就是我用 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/)
    

    希望这对某人有所帮助。

    【讨论】:

    • 你还需要site.baseurl吗?另外,是否可以将[file](/file) 与一些较短的“wiki”样式(例如[[file]])链接起来?
    【解决方案5】:

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

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

    Jekyll 永远不会将 url 中的 file.md 重写为 file.html。因此,您必须自己将链接目标设置为生成的 page.url,这通常是一个 html 文件,但也可以是 css、je、json、...

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

    【讨论】:

    • 因此链接将始终只能作为通过 github 的 md 链接或作为通过 github 页面的 html 链接,但不能同时作为两者。
      因为不能两者都可导航。
    • 此外,当“jekyll build”运行时,我会在 {root}/folder/file/index.html 处生成文件?
    • Github 和 Github 页面是两个完全独立的东西,具有不同的规则。 Github 显示渲染的 md 文件,但不修改它们。带有 Jekyll 的 Github pages 正在构建,它解析 md 文件并生成 html 页面。
    • 听起来与 Ashwin 的回答中的一般想法完全相同......如果您删除 site.baseurl,它会起作用,@james
    【解决方案6】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-25
      • 2017-10-02
      • 2011-06-05
      • 2017-11-13
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      相关资源
      最近更新 更多