TikZ 止痛剂

这篇日志,主要收集一下自己在 Tikz 画图时候使用的一些小技巧。

1. Why TikZ ?

在开始前,先撒一碗毒鸡汤。

都说 LaTeX 学习成本高,这么说是不是会给人留下一个错觉,认为学会了后就好了?很不幸,就我目前用 LaTeX 的感受而言,这个会的要求非常高,很可能用了好多年 LaTeX 后你还没有达到会的程度,也就是说,这个高门槛的学习痛苦会一直伴随着我们。有些人宣扬的 LaTeX 更加方便快捷、节省时间(比如图表公式参考文献交叉引用那些),个人认为其实并不成立。因为,用来学 LaTeX,Debug,Google 答案,等待大神回复的时间,远远超过用 Word 来做上面那些复杂繁琐的事情所花的时间。使用 TikZ 也是同样的心酸,相比 Visio 和 PPT,我相信在一个硕士、博士周期内, 在画图上,TikZ 并不能在整体上节省我们的时间。不幸的是,由于 TikZ 使用的人比 LaTeX 又远远的少的多,所以学习 TikZ、Google 答案,等待大神回复将是一个更加漫长而痛苦的过程。

既然我把学用 TikZ 说得那么痛苦,那为什么自己还要坚持用 TikZ 来画图呢?主要基于下面两点:

  • TikZ 可以精确控制安放的位置,而 PPT 上我在尝试很多图像块堆叠时位置间距没法统一,作为细节控不能忍受,这是我开始学习 TikZ 的唯一原因;
  • 我已经开始尝到编辑文本代码而非鼠标操作、循环语句以及代码复用所带来的方便快捷,在痛苦的学习过程中,几次这样的高峰体验,是让我继续坚持且坚定的原因。

总结一下,就是希望能够用更加优雅的方式来解决问题,但这优雅背后的心酸只有自己知道了。

这篇日志,收集我自己在 Tikz 画图时候的一些小需求以及解决方法,如果能够降低你在学习 TikZ 过程中的痛苦,那就再好不过了。也是处于这个目的,我把日志名字取成了TikZ 止痛剂,希望这篇日志能够像布洛芬一样缓解学习 TikZ 的痛苦。

2. Drawing Tips

2.1 给插入图像添加边框

当将一些相近的纯色图像堆叠在一起的时候,有时需要在每张图像外边包一圈彩色的边框。这个需求,可以利用 north westsouth east 这样的 Anchors 很容易的实现,举例的代码如下

1
2
\node (a) [anchor = north west, inner sep = 0] at (0, 0) {\includegraphics[scale=1]{"./img"}};
\draw [red, line width=1mm] (a.north west) rectangle (a.south east);

第一行插入图像,命名为 a,第二行,利用 a.north westa.south east 指定矩形的对角线上的两点。

2.2 把图像变成平行四边形

有些时候,我们为了让图像有点立体感,希望能够将矩形的图像变成平行四边形。这个需求,利用 \draw 命令的 xslantyslant 的两个属性值^xslant,可以很容易的实现。我们先一个自己画的矩形变成平行四边形:

1
\tikz \draw[xslant = 1, fill = red] (0,0) rectangle (2,1);

如果是图像的话,也差不多,代码为:

1
\node[xslant = 1, draw] (a) at (0,0) {\includegraphics[scale = 1]{"./img"}};

3. Miscellaneous

3.1 Font larger than \Huge?

基本的 LaTeX 提供了 10 个简单的声明式命令来调整文字的大小,其中最大的一个就是 \Huge,字体尺寸为 24.88pt。在平时写论文的时候,基本不可能需要这么大的字体,更不用说比 \Huge 更大的了。但是,在 TikZ 作图时候,由于图片都很大,在不缩小图片的时候,\Huge 字体的文字就会显得比较小。那如何得到比 Huge 更大的字体呢?

一种方法是使用moresize宏包^moresize,在导言区加入下面这句话,就可以使用 \HUGE 命令了,会得到更大一点的字体。

1
\usepackage{moresize}

另一种更普遍的方法是使用 \fontsize 命令^fontsize,前提是用的是 Type 1 字体(比如 mathptmx or mathpazo宏包),那么可以使用下面命令指定字体大小:

1
{\fontsize{50}{60}\selectfont Foo!}

Foo! 是文字内容,这里的 50 是尺寸,60 是行距,通常行距要比字体尺寸大 20% 左右。

致谢

最后,感谢 L 叔 在我第一次接触 TikZ 时给我提供的热心代码,以及 Dawn 在本文写作过程中给予的帮助,也感谢您一直阅读到这里,如果我的文章有错误或不足之处,请务必在评论中留言指出,千万不用客气,万分感谢~

Release Note

  • 2017-03-03: 第一次提交。

参考资料

坚持原创技术分享,您的支持将鼓励我继续创作!