七种武器之Academic

邮箱中收到一封Hugo论坛简报邮件,顺着其中一个话题的链接发现了一款新的风格,叫Academic。细看之下,竟发觉它拥有不俗的表现,可以用来替代Hexo的NexT主题。NexT一个无法忍受的痛点是Hexo框架的速度,尽管它已经是同类平台下极快的一款静态(博客)网页生成工具,但受限于Node.js,它与GO语言相比还是差了不小的一截,何况安装Hexo这个工具就有一堆依赖包要处理,完全没有Hugo的精炼。对于已经迁移到Markdown的写作风格下的用户,如果挥一挥衣袖还得带起一大群的云彩,这得是多么难堪的体验?然而过去很长一段时间,因为NexT所提供的功能性和便利性,我无法考虑Hugo或向之迁移,这主要是因为NexT的以下几个特色。

  1. NexT能够提供内置的功能模块配置,比如Disqus的接入、页面布局的调整等均可在单一的配置文件通过预设的简单参数完成
  2. NexT开发者在针对博客类网站的制作上做了不少工作,诸如按时间归档、站内搜索、自定标签、分类的预设模块比较齐全,具体博客文章下的版权声明、永久链接等细节也充分考虑到了博客写作者的需求
  3. 设置好Markdown文件中的头部参数 mathjax: true 即可在安装好相关依赖包的前提下显示数学公式、流程图等元素
  4. 提供了现成的站内搜索功能
  5. 对中文语系有较完善的支持

并不是说,Hugo当时的风格不能够完成以上的各项功能,只是恰到好处的把以上主要的功能整合到一起而似又不增加额外的不必要的特色,对于我这样一个总期望简单化生活和工作而又不具备代码二次开发能力的用户来讲,却是极妙的好处了。在当初放弃了Hugo之后便未再关注过它,不料今天偶然的点开简报邮件却带我认识到了Academic这款主题,特别是它也能和NexT一样方便通过添加头部参数就展现漂亮规范的数学公式的功能令我心动不已,于是中午和晚间抓紧几小时时间大体浏览了官方文档,在动手尝试一番后,写下几条使用技巧。

一、LaTeX math支持
在文中直接展现数学公式从前是不可想像的,那会儿图表公式的渲染只能通过插入图片来完成,后来有了Mathjax之后,集成进网页中也不算是件简单的工作。到了用Markdown写博客的年代,如果只是要在部分博文中插入公式,为几篇文章而开发单独的配置参数的功能也是件麻烦事,至少当初我所尝试过的几款Hugo的风格中没有开发者这样做。现在Academic提供了两种在文章中展现公式做法,一是设置为全局,即在 academic-kickstart/config/_default/ 目录下的config.toml文件里把math = false修改为math = true[1],但这不是我需要的。第二种做法,是为单独的文章设置参数来显示公式,上述config.toml中的参数不变,到.md文件中添加头部参数math: truemarkup: mmark即可。这样的做法一定程度上有利于提升整站载入的效率。

二、增加作者名
如果博客只是个人单独使用,那么这个功能恐怕用不上,因为每篇文章下都可以显示作者名和头像等信息。但现在的静态博客生成工具都有向整站生成工具发展的趋势,聚合多个用户的文章甚至是同一篇文章有几个作者的情况也不少见,这时就需要在文章页面内(同时)显示单个的作者名。具体做法是先在academic-kickstart/content/authors/admin目录下的_index.md中将 name 等变量设置好,再到具体的文章文件中添加相应的头部参数,比如

1
2
3
4
authors: 
- Andy
- Bob
- Carol

三、自定义文章链接
默认情况下,文章链接是采集自文件名的,比如文件名是七种武器介绍之二,那么文章的链接可以是 https://mydomain.tld/七种武器介绍之二/,但通过修改config.toml文件,增加如下内容,然后再到相应文章的头部参数中添加slug: 自定义链接即可达到将链接变成https://mydomain.tld/自定义链接/的效果,更符合目前主流博客文章的URL形式。

1
2
[permalinks]
post = "/:year/:month/:day/:slug"

四、推荐博客文章或博客文章置顶功能
这个功能是通过一个名为Featured模块来实现在首页显示几篇选定的博客文章,具体来说分以下几步完成。

首先,在content\home目录下新增一个(例如)pinned的Markdown文件,内容复制为同目录下featured文件,将其中的title =设置为自己所需的名称,例如置顶日志,然后将[content]项下的page_type =的内容设为post,其下的count =设置为需要置顶的文章数量(比如3),这样就基本完成了配置。

接下来,在需要置顶的日志文章的头部信息中增加一个featured参数并将值设为true,即featured: true即可。后期如果不需要将之置顶了,可将这个参数值改为false,或直接从头部信息中删除该段参数行。

第三步就是将之显示到首页,打开config/_default/目录下主控网站菜单栏配置的menus.toml文件,在其中增加如下参数行:

1
2
3
4
[[main]]
name = "置顶日志"
url = "#pinned"
weight = 100

其中,name =参数设置的是菜单栏上的显示名称,url =参数设置的是网页相关栏目的锚点,参数值要与前述新增的文章同名,weight =是权重值,会影响到在菜单栏的排列顺序,这个可自行根据实际需要参考其它菜单栏项目的值来调节。


  1. 官方的说法中提及在头部参数中还需要加入markup: mmark,但据尝试结果看,如果页面内公式数量不多,这个变量也可不加。 ↩︎