这是回归博客写作后的第一篇文章
回归
时光荏冉,已经好久没有更新博客了,上一次写博客还是去年寒假疫情在家时期。
这一年多以来总算把与实验组合作的几个工作结束了(第一次实践使用 VASP ),这几个工作感觉能总结的地方不多,都是细节居多,但坑还是不少的。我自己的工作做了快两年了 (看来平时没少摸鱼),在去年底它的进度有了 180 度转变,这还多亏了导师的嘱托,让我在补充图表时 Review 了一下之后的结果,一看就发现之前的结论完全错误,于是重新跑了一下 NAMD ,这次的结果终于符合「预期」了,但现在似乎又遇到了一些不大不小的问题, 即能带交叉的处理,目测解决它又要费些时间了(而且还中间还有其它实验组的东西要做)。
说了这段时间自己在做什么,下面就该讲博客相关的东西了。
博客相关
关于博客,我这次决心将它迁移到 Hugo 框架下,配合 Org-mode 和 ox-hugo 使用,至少到现在体验挺好:
- Hugo 很快,生成静态页面耗时在 ms 量级,比 Hexo 不知道高到哪里去了;
- Org-mode 很强大,谁用谁知道;
- 私以为 Jane 主题足够简约,也留了足够的空间折腾。
近期做了些工作,我会把心得总结起来放到博客上,供自己和小伙伴们参考~
配置、模板
以下是写博客时可能要用到的一些模板/配置,仅供自己参考了。
- Org-mode 中 CJK 文档的 soft space 问题,已经有人给出了解决方案1 :
|
|
-
添加链接时使用
C-c C-l
, Doom-Emacs 会提示你输入链 接的 URL 和 description; -
使用 Inline code 时,参考它2:
src_sh[:exports code]{echo -e "test"}
; -
:PROPERTIES:
中:@cat:
定义了一个 categorycat
,:foo:
定义了一个 tagfoo
,:@cat:foo:bar:
则分别定义了一个 categorycat
,两个 tagsfoo
、bar
; -
每篇文章标题前使用
S-left
或S-right
可以切换TODO
和DONE
的状态;输 入数学公式时,需要在 subtree 的:PROPERTIES:
里加上:EXPORT_HUGO_CUSTOM_FRONT_MATTER+: :katex true :markup goldmark
。此时
\(F=ma\)
表示 inline equation ,输出 \(F=ma\) ;\[F=ma\]
表示 displaystyle equation 。(冷知识3: Orgmode 支持 即时渲染公式:C-c C-x C-l
会把当前公式渲染好并以 png 的形式插入当前窗口,重 复这个操作可以关闭预览)现在试试一个稍稍复杂点的公式:
\[ \begin{aligned} \nabla \times \vec{\mathbf{B}} - \frac1c \frac{\partial\vec{\mathbf{E}}}{\partial t} & = \frac{4\pi}{c}\vec{\mathbf{j}} \newline \nabla \cdot \vec{\mathbf{E}} & = 4 \pi \rho \newline \nabla \times \vec{\mathbf{E}} + \frac1c \frac{\partial\vec{\mathbf{B}}}{\partial t} & = \vec{\mathbf{0}} \newline \nabla \cdot \vec{\mathbf{B}} & = 0 \end{aligned} \]
- 使用脚注来代替文献的上标4
,有三种方式:
- 声明和定义分离的脚注:在要添加脚注的地方声明
[fn:NAME]
,然后在其它地方定 义这个脚注[fn:NAME] some description here ...
; - 行内定义的脚注:直接使用
[fn:: some description here ... ]
,这种方法不需要命名,可谓对程序员十分友好了 23333 ; - 带名字的行内脚注:
[fn:NAME: some description here ...]
。
- 声明和定义分离的脚注:在要添加脚注的地方声明
图片等外部文件的引用
这一节单独列出来是因为它比数学公式还要难处理,根据 ox-hugo
5 的说明,现在有三种引用图片的方法:
- 使用相对路径:直接把图片放到
<HUGO_BASE_DIR>/static/
里,然后引用时可以省略<HUGO_BASE_DIR>/static/
前缀,例如有一个文件路径是<HUGO_BASE_DIR>/static/image/foo.png
,引用它时可以这样写:[[image/foo.png]]
; - 使用绝对路径:例如有一个路径是
~/some/path/foo.png
,引用它时可以使用[[~/some/path/foo.png]]
,此时不光在 orgmode 里可以直接预览图片,ox-hugo
在导出时还会把它复制到<HUGO_BASE_DIR>/static/ox-hugo/
里并生成链接; - 使用图床:现在 GitHub , GitLab 等也可以用作图床,并且有成熟的软件来做这件事
比如 PicGo6 。把图片传给图床后,图
床会返回一个链接,直接把它贴在 orgmode 里就能实现引用图片的效果。但之前我用七
牛云的图床一段时间后七牛云直接拒绝被薅,改了域名,我也就对图床产生一些顾虑
,而且使用图床后一个缺点是,它降低了每篇文章的内聚度,增加了对外部的耦合(掉个 书袋233)。
因此我还是决定把图片等外部文件放在 <HUGO_BASE_DIR>/content-org/
里,每篇文章单独建一个文件夹,然后使用相对路径引用。下面是效果展示(它使用了
[[./a-new-journey/himehina.jpeg]]
):
使用 TikZ 配合 Orgmode 进行画图 [2021-04-29 Thu] 更新
Orgmode 原生支持内嵌 \(\LaTeX\) 代码,自然也支持用 TikZ 画图。不过如果想要在利用 TikZ 的输出嵌入到博客中,还需要一点工作要做。
输出 PNG 格式的图片
- 确保机器上已经安装了 ImageMagick 和 \(\LaTeX\) ;
- 在 config 中加入
(setq org-latex-create-formula-image-program 'imagemagick)
;
接下来就可以愉快玩耍了:
|
|
Eval 这个 source block 后即可得到:
输出 SVG 格式的图片
- 确保机器上已经安装了 \(\LaTeX\)
接下来的工作不那么优雅,我们需要修改一下 ob-latex.el
。
因为在 Orgmode 中 Eval 代码块时 Orgmode 会自动把代码块的内容加入预告写好的
Preamble 里生成一个临时文件,但当使用 .svg
结尾的输出文件名时它的 Preamble 是这样的:
|
|
第二行的 \def\pgfsysdriver
需要放在 \usepackage{tikz}
后,或者使用 htlatex
才能编译,但 ob-latex 使用的是 latex
,而且这个过程只会提示 PDF produced with errors
,导致输出的 SVG 是乱码。
查询 ob-latex.el
发现,这个 Preamble 是硬编码在 org-babel-execute:latex
里的:
|
|
那问题就好办了,直接删掉两处 \\def\\pgfsysdriver{pgfsys-tex4ht.def}
,并重新
build (我使用的是 DoomEmacs ,运行 ~/.emacs.d/bin/doom build
),然后就可以正常导出了。
|
|
输出以下图形:
其实看 ob-latex.el
似乎可以通过用户定义 org-babel-latex-preamble
来绕过硬编码的 Preamble ,但经过测试发现并没有起作用,如果读者有更好方案,请务必联系我。
上面测试用的 TikZ 代码圴来自 Jonny Evans7,同时感谢群组内8大佬们的帮助。