在MetaPost中使用中文标签
MetaPost是非常经典的矢量图绘制工具。1 之前我用 PSTricks 配合 XeTeX 绘制含中文标签的图形,因为 MetaPost 中不方便使用中文标签。确实如此。
TL; DR 目前比较简单的办法是用 LuaTeX,因为它内置了 MetaPost 库 MPLib,可以直接输出 PDF,字体部分由 LuaTeX 负责处理。
使用 LuaTeX + MPLib 绘制的矢量图
MetaPost是非常经典的矢量图绘制工具。1 之前我用 PSTricks 配合 XeTeX 绘制含中文标签的图形,因为 MetaPost 中不方便使用中文标签。确实如此。
TL; DR 目前比较简单的办法是用 LuaTeX,因为它内置了 MetaPost 库 MPLib,可以直接输出 PDF,字体部分由 LuaTeX 负责处理。
使用 LuaTeX + MPLib 绘制的矢量图
(La)TeX 常被视为高质量出版工具。 确实如此, 但并非用它们生成的文档必然具备较高的排版质量: 计算机工具始终遵守人的指令, 因此排版质量的最终决定者仍然是作者本身。
LaTeX 给人一种快速上手的感觉, 某些作者可能愿意简单地将自己的文档按照结构化的方式以 LaTeX 代码呈现, 剩下的排版细节留给宏包以及排版引擎。 (某种程度上讲这也是 LaTeX 的设计目标之一。)
Plain TeX 相对而言要求作者对排版细节知悉更多。 例如, 它要求用户手动添加 {\it 斜体修正\/}
。 这看起来毫无必要, 并且丝毫不 “智能”; LaTeX 的 \textit{斜体}
功能就自动在末尾添加了斜体修正。
下面考虑一个 TeX 中比较麻烦的问题: 表格排版。 理论上, 可以把表格内的数据分离出来, 只需套用所需的格式, 就可以排版表格。 但是实践中往往需要手动地调整表格的样式。 因此, 从表格的排版中常常可以看出作者对细节的关注程度。 为了充分展示问题, 我选择讨论一个带有竖线的表格。 带有竖线的表格在 TeX 里较难处理 (但它在 Microsoft Word 里出乎意料地容易), 虽然这种样式越来越不流行, 且不被推荐。 1
继续阅读 →2013 年的《通用规范汉字表》是目前简体中文字形的最新标准。其中有若干字为新的类推简化字,如字典末尾均有的「𬭊」「𬭳」「𬭛」「𬭶」「鿏」(105–109号元素名)。
除「鿏」外,其余均位于 Unicode 8.0 新增的 Ext-E 扩展分区内。在较新的操作系统上,安装有相应的字体,这些汉字均可正常显示。可能并非所有输入法均能输入这些字。(可以根据上面给出的拼音测试一下自己的输入法是否符合国家标准。)
Ext-E 的范围是2B820–2CEAF。使用UTF-8或GB18030编码均需4个字节:
字 | GB18030 | UTF-8 |
---|---|---|
𬭊 | 9933a838 | f0 ac ad 8a |
Go 的 fmt
包提供了类似 C 标准库中的 scanf 和 printf 的系列输入输出函数。
// 输入 N*N 矩阵
var G [N][N]int
for i := 0; i < N; i++ {
for j := 0; j < N; j++ {
fmt.Scan(&G[i][j])
}
}
但是 C 的标准输入输出默认是带缓冲的, 而 Go 的不带。
当有大量 I/O 时, 效率较低。 解决的办法是用 bufio
中带缓冲的类型。
in := bufio.NewReader(os.Stdin)
for i := 0; i < N; i++ {
for j := 0; j < N; j++ {
fmt.Fscan(in, &G[i][j])
}
}
同理, 可用 bufio.Writer
对输出进行缓冲,
但是记得在程序退出前调用 Flush()
清空缓冲区。
我手头有一些 jpg 格式的图像文件。 我想把他们打印成 A5 尺寸的小册子。 如果打印机附带了将图像打印成小册子的功能, 那么直接使用即可。 否则, 比较方便的办法是将 jpg 汇集在一个 PDF 文件中, 拼版后交给打印机进行打印。
拼版之前需要确保每个页面的大小为 148mm x 210mm。 对于 300dpi 的图像而言, 即为 1748 x 2480。1 可以使用 ImageMagick 对图像进行缩放:
$ magick img.jpg -set density 300 \
-resize 1748x2480 \
-unsharp 0x5+0.3+0 \
img-300dpi.jpg
其中, -unsharp
选项用于对缩放后的图像进行钝化遮罩 (Unsharp Mask) 处理,
简单地说就是锐化图像, 抵消缩放所产生的模糊感。
使用 Acrobat 软件可以将若干张图像合成为单个 PDF。
观察一下小册子的印刷方式。 每张纸上印刷的页面并不是按照顺序排列的。 例如, 对于一份 8 页的小册子, 第一张纸正面印的是第 8 页和第 1 页, 反面印的是第 2 页和第 7 页; 第二张纸正面印的是第 6 页和第 3 页, 反面印的是第 4 页和第 5 页。 这样,将这两张纸叠在一起, 第 1 页的反面是第 2 页, 第 2 页和第 3 页恰好相对, 等等。 将所有纸张叠好, 并在中间装订, 然后对折,就构成了一本小册子。
对于上述的小册子, Acrobat 可以直接打印出来。 打开合成的 PDF 文件并按 “打印”, 在打印对话框中选择 “小册子”, 即可。
如果要用 A4 纸制作 A6 大小的小册子, 那么一张纸上需要拼 8 个版面。 仍以 8 页的小册子为例, 这时只需一张纸即可: 正面布置的版面为 \({5;4 \atop 8;1}\), 反面布置的版面为 \({3;6 \atop 2;7}\)。 将这张纸正面朝外对折, 则反面的第 2、 3 页相对, 第 6、 7 页相对。 用一把裁纸刀沿着折痕将纸裁开, 保持对折时页面的相对位置, 然后令第 1、 8 页朝外, 将两个叠好的半张纸再次对折, 在折痕处装订, 就构成了小册子。
继续阅读 →Duane Bibby 为 TeXbook 绘制的插图 (来自 http://ctan.org/lion)
上色后的效果
Vultr是和DigitalOcean类似的VPS服务提供商。它比后者多一个功能:挂载任意ISO镜像。这样就可以安装任意操作系统了。
我用这个功能安装Gentoo。主要参考这篇文章,以及Gentoo的官方手册。
我没有用Gentoo安装盘,而是用了Vultr的ISO library中已有的ArchLinux安装盘。这样省去了上传ISO镜像的步骤。而且事实上ArchLinux的安装盘好用得多。
分区、格式化、下载和解包stage3……等等步骤,都没有太多需要注意的地方。chroot之前要记得复制/etc/resolv.conf
,否则之后无法连网。然后就是emerge一些东西,也没什么难度。
值得注意的是内核编译选项。文章中明显提到了要启用VIRTIO_PCI
和VIRTIO_MMIO
,实际上还要启用VIRTIO_BLK
和VIRTIO_NET
,才能访问硬盘和网络。很多其它硬件驱动都可以禁用。
最后按照文章里写的配置好系统就可以了。安装GRUB启动器,如果/dev
等虚拟目录没有正确挂载到chroot的根目录下也会安装失败。重启之前记得运行passwd
设置root密码。
makeindex是用来编制索引的工具。在\(\LaTeX\)文档中,用\index
在文中标记索引,排版时将生成相应的.idx
文件,每一个\index
命令对应一行。
makeindex对.idx
文件进行排序和格式化,然后生成.ind
文件,该文件就是索引部分的\(\LaTeX\)代码。之后只需再运行一次\(\LaTeX\)程序即可将索引包含在文档内。
这个过程本身已经有些复杂了,现在遇到一件更麻烦的事:怎样编制中文索引。汉字没有明确的排序依据,通用的做法是按拼音或者笔画排序。zhmakeindex提供了这些功能。
继续阅读 →在工程领域中,复数\(\dot{A}=A\mathrm{e}^{\mathrm{i}\varphi}\)被用来指代一个有效值为\(A\),初相位为\(\varphi\)的正弦量\(\Re\big[\sqrt2\dot{A}\big]=\sqrt2A\cos(\omega t+\varphi)\)。这样的复数常被称作相量(phasor),通常会用更简便的Steinmetz记号\(\newcommand\phase{\enclose{phasorangle}}A\phase\varphi\)表示,并且使用角度制。