跳至主要内容

pandoc 简单使用

在之前的 常用网站推荐 中介绍过一个在线转换的网站 online-convert,支持相当多不同类型的转换,如果网络状况好的话,是相当好用的。但是网络状况不好的情况也是经常存在的,特别像我这种整天背着电脑,用手机开热点,还难以忍受网速差的人,自然得给自己找点活路。
我在转换文档方面的需求很简单,只要能把各种不同类型的文档转换成 PDF 文件就可以了。我的电脑系统是 Arch Linux,没有装 LibreOffice 或者 OpenOffice,因为这两个在格式方面的问题太多了,不如 PDF 来的痛快(关键是 Okular + PDF 真的很舒服),所以我大多数时候都是把 word 或者 markdown 之类的文件转换成 PDF 文件来看。鉴于我的这些需求,我想到了 pandoc
下面就进行 pandoc 的简单安装以及使用吧。

安装

pandoc 在各个 Linux 发行版的仓库中都有,可以直接使用自己系统上的包管理进行安装即可。
除了 pandoc 之外,还需要安装 texlive 的相关组件,用于把文档转换为 PDF 格式。基于 Arch Linux 的系统下叫做 texlive-core,基于Debian 的系统下叫做 texlive-base
Arch Linux
$ sudo pacman -S  pandoc texlive-core
Debian/Ubuntu
$ sudo apt install pandoc texlive-base
其他系统的安装操作可以看 这里,这是 pandoc 官方的安装指导。

快速上手

在 pandoc 的官方 Github 库的 README 列出了 pandoc 支持读取和转换成的各种类型。
pandoc 的使用很简单
$ pandoc test.md -o test.pdf

注意:一般如果转换比较成功,是不会在终端输出任何内容的

这样就可以把 markdown 转换成 pdf 类型了,其中的 -o 选项是指定转换后的文件名。
pandoc 还支持许多其他的选项,如果你有兴趣的话,可以使用 man pandoc 命令查看,或者可以参阅 pandoc 的在线 User Guide,也可以下载 PDF 版
不过上面说到的那个例子只有在你的源文件是纯英文的时候才能正常工作,不过对于一个四级才勉勉强强过的人,怎么可能天天写英文文档呢。
下面说一个简单的解决办法。
首先使用 fc-list :lang=zh 命令查看一下你自己系统上都安装了哪些中文字体:
$ fc-list :lang=zh  
...  
/usr/share/fonts/noto-cjk/NotoSerifCJK-Regular.ttc: Noto Serif CJK SC:style=Regular
/usr/share/fonts/noto-cjk/NotoSansCJK-DemiLight.ttc: Noto Sans CJK JP,Noto Sans CJK JP DemiLight:style=DemiLight,Regular
/usr/share/fonts/noto-cjk/NotoSansCJK-Black.ttc: Noto Sans CJK JP,Noto Sans CJK JP Black:style=Black,Regular
/usr/share/fonts/noto-cjk/NotoSerifCJK-Light.ttc: Noto Serif CJK KR,Noto Serif CJK KR Light:style=Light,Regular
/usr/share/fonts/noto-cjk/NotoSansCJK-Medium.ttc: Noto Sans CJK JP,Noto Sans CJK JP Medium:style=Medium,Regular
/usr/share/fonts/noto-cjk/NotoSansCJK-Bold.ttc: Noto Sans CJK TC:style=Bold
/usr/share/fonts/noto-cjk/NotoSerifCJK-ExtraLight.ttc: Noto Serif CJK SC,Noto Serif CJK SC ExtraLight:style=ExtraLight,Regular
/usr/share/fonts/noto-cjk/NotoSansCJK-Bold.ttc: Noto Sans CJK SC:style=Bold
/usr/share/fonts/noto-cjk/NotoSansCJK-Medium.ttc: Noto Sans CJK TC,Noto Sans CJK TC Medium:style=Medium,Regular
 上面的是我系统上安装的一部分字体,注意每行第一个冒号到其后第一个逗号之间的内容

在最初例子的基础上我们需要再加两个参数使得 pandoc 可以正常识别并转换文档,这两个参数分别是 --pdf-engine=xelatex-V CJKmainfont='Noto Sans CJK SC。其中前者可以使 Pandoc 正常地识别源文档中的汉语等非英文语言,后者的 -V 选项是用来指定 pandoc 要使用的模板,CJKmainfont 用来指定你要使用的字体(也就是上面使用 fc-list 命令列出的,每一行第一个冒号到其后第一个逗号之间的内容),比如我选择的是 ‘Noto Sans CJK SC’,这里的字体名称最好区分大小写(在我这边,不区分大小写时,不一定每次都可以成功转换,所以为了方便起见,最好统一按照上面命令列出的字体大小写格式来填),如果字体间有空白的话(就像 Noto Sans CJK SC),一定要用引号把它们扩起来,单引号双引号都可以。
好了,修改后的命令如下:
$ pandoc test.md -o test.pdf --pdf-engine=xelatex -V CJKmainfont='Noto Sans CJK SC'
这下就可以应付绝大多数需要将其他类型的文档转换成 PDF 格式的需求了。
:)

最近在使用 pandoc 命令将 markdown 文件转换成 pdf 文件时,发生了一些之前没遇到的错误。
$ pandoc test.md -o test.pdf --pdf-engine=xelatex -V CJKmainfont='Noto Sans Mono CJK SC'
Error producing PDF.
! LaTeX Error: File `environ.sty' not found.

Type X to quit or <RETURN> to proceed,
or enter new name. (Default extension: sty)

Enter file name: 
! Emergency stop.
<read *> 

l.42 \file_if_exist:nT
上面的错误提示缺少了 environ.sty 这个文件,使用关键词 ‘archlinux environ.sty’ 最终发现在 texlive-latexextra 这个包中有 environ.sty 这个文件。具体页面参考 此处
texlive-latexextra 包位于官方源中,可以直接使用 pacman 命令安装。
这个包里面应该包含了绝大多数需要用到的 *.sty 文件,安装之后应该不会再出现无法找到 sty 文件的情况了。

此博客中的热门博文

使用 Gimp 合并多张图片

缘起 我的 Arch Linux 的桌面环境是 KDE,KDE 自家的截屏软件 Spectacle 不支持截长屏。所以有时候截的图都是一段一段的。这时候就需要进行手动连接,我选择的是 Gimp。
可能是因为用 Gimp 拼接图片太简单了,我在网上没有找到什么相关比较合适的教程,所以就自己摸索了一番,以下就是大概的过程。 安装 Gimp 是一个非常强大的开源图像处理程序,现在很多 Linux 发行版都会默认安装它。一般在官方的标准库中都会有 Gimp,所以即便你的电脑上没有安装,使用你系统上的包管理软件也可以很快安装。 Arch Linux: sudo pacman -S gimp Debian/Ubuntu: sudo apt install gimp Fedora: sudo dnf install gimp Centos: sudo yum install gimp 使用 这里说的使用仅限于拼接多张图片,因为我 Gimp 使用的不多,这个拼接过程可能会比较粗糙。 底下的例子中我以三张图片作为例子,分别是 regex1.png(834x859),regex2.png(836x864),regex3.png(832x599)。使用的 Gimp 版本是 2.10.6 首先使用 Gimp 打开 regex1.png 然后把 regex2.png 和 regex3.png 作为图层打开(这时候三张图可能重叠在一起,不用担心,后面再移动。关键是限于画布尺寸,移动到画布外面的图是看不到的) 新建图层,名字随意设置,因为我接下来时把图向下拼接,所以宽设置为比最宽的图像稍大,我设置的是 850;高设置为最高图像的三倍左右,我设置的是 2400。 点击 图像 -> 画布适配图层 现在就可以使用使用 移动工具 把其余两张图拖放到合适的位置了
使用 裁剪工具 把多余的部分裁掉 在一开始创建的 regex 图层上点击右键,然后点击 平整图像。现在就只剩最开始打开的 regex1.png 了 最后 导出图像 就大功告成了。 阅读更多 Gimp 其实还是相当强大的,不过我平时也没有太多使用的场景,拼接多个图像算是使用之一吧,希望这篇教程能稍稍帮到你。 有关更多 Gimp 的使用,可以参阅 Gimp 官方教程,不过是英文的,需…

在 GitPage 上部署 Hugo 博客

缘起 之前一直尝试者在别的平台上写东西,可是有些文章莫名其妙的就被锁定,无法被其他人查看了,我并不反感这些平台锁定文章,只是它也不给你指明你到底犯了什么错,发邮件也没人回。所以我就想找个可以有一定自主权的文章发布地。 最终我选择了 Hugo + GitPage 的组合。 在 GitPage 上部署 Hugo 的教程五花八门,也没几个真正解决了我的问题,最后还是得靠 官方文档。 下面就是整个部署过程。 PS: 1. 请替换下面的 <your-github-id> 为你自己的 GitHub 用户名。 2. 我在文中使用的主题目录为 temple,这个目录名根据你自己的情况进行修改 3. 下面有些命令前的 $ 代表命令输入符,在复制代码时,请不要复制 $ 本地搭建 先在 GitHub 上创建一个名为 your-github-id.github.io 的仓库 在你的电脑上安装 git 和 hugo。 并且确保你已经把 本机的 ssh 公钥添加到了 GitPage。 安装好 hugo 之后,使用下面的命令创建一个新的站点目录: $ hugo new site <your-github-id>.github.io 之后,如果你看到类似下面的信息,证明你创建成功了: Congratulations! Your new Hugo site is created in /home/wagoo/Documents/test/dianabnjiu.github.io. Just a few more steps and you're ready to go: 1. Download a theme into the same-named folder. Choose a theme from https://themes.gohugo.io/, or create your own with the "hugo new theme <THEMENAME>" command. 2. Perhaps you want to add some content. You can add single files with "hugo new <SECTIONNAME>/<…