Jekyll 写作✏️

rake

Jekyll博客文件格式 http://jekyllcn.com/docs/posts/ 年-月-日-标题.MARKUP 中文命名需要utf-8编码,而rake是内部编码问题不支持中文,只好将就用rake生成完文章再来命名。

由于Jekyll对md标题、yaml格式要求严格,而且每次都写yaml显得过于繁琐,因此使用脚本输出内容。

freehyan-csdn-jekyllJekyll 自动生成文章

gem list rake查看是否有安装rake,gem install rake,创建Rakefile文件,并将如下代码复制到该文件中,再运行rake post title="test"即可发布文章。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
require 'rake'
require 'yaml'

SOURCE = "."
CONFIG = {
  'posts' => File.join(SOURCE, "_posts/#{Time.now().year()}"),
  'post_ext' => "md",
}

# Usage: rake post title="A Title"
desc "Begin a new post in #{CONFIG['posts']}"
task :post do
  abort("rake aborted: '#{CONFIG['posts']}' directory not found.") unless FileTest.directory?(CONFIG['posts'])
  title = ENV["title"] || "new-post"
  slug = title.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '')
  filename = File.join(CONFIG['posts'], "#{Time.now.strftime('%Y-%m-%d')}-#{slug}.#{CONFIG['post_ext']}")
  if File.exist?(filename)
    abort("rake aborted!") if ask("#{filename} already exists. Do you want to overwrite?", ['y', 'n']) == 'n'
  end

  puts "Creating new post: #{filename}"
  open(filename, 'w') do |post|
    post.puts "---"
    post.puts "title: \"#{title.gsub(/-/,' ')}\""
    post.puts "date: #{Time.now}"
    post.puts "author: hoochanlon"
     post.puts "category: []"
    post.puts "tags: []"
    post.puts "math: true"
    post.puts "mermaid: true"
    post.puts "image:"
  	post.puts " src:"
    post.puts "---"
  end
end # task :post

文章生成位置变更

_post

这个“_post”目录是可以再创建文件夹将文章放入的,不影响Jekyll serve部署。这样的话,我们可以用rake直接创建以年为时间点的目录,将文章自动放入对应的时间点。

_site

permalink: /posts/:year/:month/:day/:hour-:minute.html,这样就减少了如下的文章同名冲突了。还能查看到博客文章迁移填写的日期冲突。

1
2
3
4
5
Conflict: The following destination is shared by multiple files.
  The written file may end up with unexpected contents.
    C:/Users/hooch/Desktop/jekyll-theme-chirpy/_site/posts/周日/index.html
    - C:/Users/hooch/Desktop/jekyll-theme-chirpy/_posts/2020/2020-3-1-周日-🌤.md
    - C:/Users/hooch/Desktop/jekyll-theme-chirpy/_posts/2020/2020-5-3-周日-🌤.md

文章块显示

PS:内容搜索方面可以使用jekyll-algolia进行集成。

字体渲染

Mac显示的sidebar{font-family:ui-serif}效果是不错的,但Windows…,原来还有ui-serif,这回看上去不错了。

read more

Jekyll指南文章摘要部分指出post.excerpt属性用于做文章内容的断点,可并未生效,未生效的原因参考jekyll-theme-chirpy/issues/42

了解情况后我们做出了如下添加

1
2
3
4
5
6
7
8
9
10

    <div class="post-content">
      <p>
        {% include no-linenos.html content=post.content %}
        <!-- {{ content | markdownify | strip_html | truncate: 200 }} -->
        {{ post.excerpt }}
  </p>
  <a href="{{ post.url }}">Read more →</a>
    </div>

可后面所有文章实际上都是要加上<!--more-->;不然就全都显示成全文了,这显然也不合适。直接将post.except写入到如上的过滤条件中。

1
2
3

{{ post.excerpt | content | markdownify | strip_html | truncate: 200 }}

接着我们在 _config.yml 尾处添加excerpt_separator: <!--more-->进行全局设置,这样就好了。

further reading

我们不需要这功能,但我们也不需要删了它,用掩耳盗铃的手段将它屏蔽掉,CSS:让元素不显示的方法。知道操作后,我们在related-posts.html中,id为related-posts的div,写入style="display:none"

show coding

https://segmentfault.com/q/1010000005045657 ,如下例

1
2
3
4
5

  {% if theme.related_posts.enable and (theme.related_posts.display_in_home or not is_index) %}
      {% include 'post-related.swig' with { post: post } %}
    {% endif %}

Jekyll会尝试把代码块里面的Liquid代码也一并生成。Liquid 中文官方文档