学忠

V1

2022/05/17阅读:25主题:红绯

Tikz作图教程:动手 VS 动脑? 97行代码 VS 6行代码?

Tikz作图教程:动手 VS 动脑? 97行代码 VS 6行代码?

在学习Tikz的过程中,当我们对基本代码有一定熟悉之后,作图思路就是更重要的事情了。本文借一个例子谈谈作图思路的问题。

昨天在网上看到这样一幅图形:

看上去挺复杂的一个图,心里琢磨如果用Tikz来画,需要几行代码呢?

我看到原文附的代码共有97行,而且里面的点的坐标看上去是由计算机生成的。也就是说,绘图者先在第三方软件用鼠标画出这幅图形,然后再转成Tikz代码,然后插入到TeX文档中。

如果有这样的软件,对广大LaTeXer们来说岂不是一件大好事吗?因为这样及兼顾了Tikz的优秀出图品质,又能让绘图者节省脑力,免受复杂代码的折磨了!

事实上,笔者这种折衷的方法只能偶尔尝试一下,不宜用它代替对Tikz的学习和钻研。有诸多理由:一是用鼠标作图很费手,而且作图难以精确。笔者就是一个手残党,一个箭头用鼠标拉三四次都不能放到心里想要的位置。二是费时,三是费事折腾,四是代码太多,五是用多了会产生依赖心理,也就不想学习Tikz了……

当然,学习Tikz也需要花很多时间,不过这是一件虽然烧脑但是却有趣的事情。只要每天积累一点点,进步一点点,时间久了,就能水到渠成了!

言归正传,下面我们说说这个图的绘图思路。

使用Tikz作图与写一篇作文很相似,拿到一个图形以后,先要谋篇布局,打好腹稿。第一,节点的位置如何安排?第二,使用什么作图工具和技巧?

以文首的图形为例,这个图形虽然节点多(17个),箭头多(60个),但是,节点位置分布有规律,箭头也有规律(左边的每个节点都与相邻右侧的点相连)。

所以,作图的思路是:先安排节点的位置,上下两个节点的距离为2,水平相邻的两个节点的距离为4。节点按照四列分别用\node工具+\foreach循环语句批量作出,连线用\draw[->]()--();箭头工具+\foreach循环语句批量作出。

作图思路确定以后,就要具体安排节点的位置了。我们要考虑,坐标原点放在哪里好呢?

一种是放在图形的中心位置,让节点均匀的分布在原点周围,如下图:

另一种是放在图形左下角位置,如下图:

读者可以思考一下,这两种安排哪种更好?

节点位置安排大概花两三分钟就够了。安排好节点以后,就可以开始作图了。

作图有两种方法:一种是逐个给出17节点的坐标,然后逐条画出60个箭头。这样做想法比较简单,但操作比较繁琐乏味,没有挑战性,且耗时,易出错。

第二种方法是用循环语句\foreach批量设置节点,批量连线。这种方法只需要6行代码就能实现,熟悉代码的话只要10分钟就够了。

关于如何使用循环语句\foreach作图,可以查看往期推文Tikz教程 | 批量操作 foreach 语句,观看视频学习。

如果有朋友对本文例子的代码有兴趣,请点击下方链接领取:

Tikz作图教程:动手 VS 动脑? 97行代码 VS 6行代码?

分类:

数学

标签:

数学编程

作者介绍

学忠
V1

大学数学老师