矢量图(TiKZ)绘制总结-原创

1.前言

其实之前我已经写过一篇文章来总结了部分的TiKZ的可视化编辑软件,但是自己后面又发现了有很多的好用的工具,然后就都去用了一遍,也体会到了各个工具的优劣。后面发现,在某些方面TiKZ还是有一定的局限性。我也就去了解了各种的矢量图绘制软件,于是就有了这篇矢量图绘制软件推荐。

但是感觉有的时候,其实真没有必要太过于追求矢量图,位图也挺好的。但是我折腾就要折腾到底,满足自己近乎变态的绘图要求。所以下面我的内容将不在限定于TiKZ,但是绝大多数(90%)的软件都是支持导出tikz的 ……

PS:为什么我要写这篇文章?

1.纪念自己曾经折腾TiKZ的这段经历

2.为了给没有入坑的人提供一点参考,让你们少走一点弯路

2. 工具内容

相关的部分工具大致划分为:

分为绘图软件绘图语言PS: 其实这种划分并不太准确(欢迎讨论交流),同时也欢迎交流其他的矢量图绘制软件。

3.工具使用介绍

3.0 TiKZ和PgfPlots

LATEX\LaTeX自带的tikz宏包肯定不必多说了吧,我的专栏里也有很多的相关的内容.

3.1 MetaPost

可以稍微的介绍以下 MetaPost\rm{MetaPost}

的内容。

MetaPost\rm{MetaPost} 是脱胎于 DKE 的 MetaFont\rm {MetaFont}的一个东西,感觉和TiKZ差不多. 你可以在你的电脑上本地执行MetaPost的文件,也可以使用如下的在线网站。具体的使用文档可以查看官方文档,只需要在你电脑的终端中输入如下的命令:
texdoc metapost

操作示意图

1. 文件

一段简单的测试代码(使用样例), 把它保存为文件fig.mp

% fig.mp % 这里是注释 % 设置输出图片的格式为eps filenametemplate “%j-%c.eps”; beginfig (1) ; for i=0 upto 9: draw (0,0){dir 45}..{dir -10i}(6cm,0); endfor for i=0 upto 9: draw (7cm,1cm){dir 45}..{dir 10i}(13cm,1cm); endfor endfig ; end

2. 编译

在命令行输入如下的指令:

mpost fig.mp

3. 输出

然后你会得到如下的输出:

4. 查看

打开eps文件(可以使用Gsview)就可以看到内容了,如下:

详细的使用方法可以参加参见博客:MetaPost画图入门自带的文档:texdoc metapost

3.2 Asymptote

个人感觉这个软件(语言), 挺好的。

软件的介绍(来自百度百科):

Asymptote 是一种为了绘制技术图形而设计的矢量图语言,其灵感来自 MetaPost,它具有 IEEE 标准的浮点数支持、原生的三维图形支持、灰度 /RGB/CMYK/HSV 等不同色彩指定方式以及类似 C++ 的语法。与 MetaPost不同,Asymptote 原生的支持多段路径(因此不局限于单连通区域)、填充图案、Gouraud 着色(shading)以及PostScript 图像(和pdf等)

自己那段时间真的想把这个东西学会,我在学习的过程中看到它的语法和C差不多,而且文档也讲的挺详细的。

它有两种绘图模式:

BathMode (写为一个文件)InteractiveMode (命令行实时交互)

重要的是用它来绘制二维和三维图形的方法感觉比TikZ简单多了,而且这个也是TeXLive自带的一个宏包, 可以和TiKZ类似, 可以直接写在.TeX文件中,直接编译。还可以支持生成交互模式的三维pdf格式文档。

PS:要使用交互功能需要使用支持JavaScript的pdf阅读器(比如Adobe Acrobat)。

使用演示

1.BatchMode

2.InteractiveMode

视频中用到的MarkDown文档在这里!

3.3 MatLab2TiKZ 和 TiKZit

我在之前的一篇文章已经详细介绍过这两个东西了,这里就不介绍了。

3.4 TiKZ 和 GNUPlot 结合

对于这个软件,我只能用一个词来形容。

那就是 短小精悍。但是我用的不多。

以下为 单独的使用GnuPlot的演示:

关于GnuPlot在LaTeX中的使用,可以参见我的那篇 文章中关于GeoGebra那一节。但是讲解的不是那么的详细,我在这里把GnuPlot在TiKZ中的使用详细介绍一下

在介绍怎么使用 TikZ 与 Gnuplot 之前,我们先说怎么编译。在 TEX 发行里,Gnuplot

并不包含在内。它的原理是 TikZ 调用 Gnuplot 之后,在编译的过程中,我们将会得到两

个中间文件:

\bullet 1. filename.pgf-plot.gnuplot

\bullet 2. filename.pgf-plot.table

其中,前者是 pgf-plot.table 的设定文件,而后者就是调用 Gnuplot 之后产生的一个数据表

(点的坐标),然后 TikZ 调用这些点的坐标得到函数图。

为了能够使用 TikZ 与 Gnuplot,需要做两件事

\bullet 1. 在电脑安装 Gnuplot

\bullet 2. 命令行加入参数【临时】: pdflatex –shell-escape filename.tex

或者是修改配置文件【永久】

vscode 的配置文件中加上–shell-escape.

如下图:

3.5 Adobe Illustrator联合GeoGeBra

这里介绍的这个 GeoGeBra 的使用和之前那片文章的使用方法不太一样。那篇文章是使用的GeoGeBra导出TiKZ代码的功能,这里我们主要是利用 GeoGeBra生成pdf文档的方法联合

Adobe Illustrator绘制一部分的矢量图(数学笔记之类的)。PS:满足你排版数学矢量图笔记的需要

AI的各个功能都很强的,但是数学方面不太行,主要体现在如下的几点:

\bullet 1. 不支持数学公式的输入

\bullet 2. 不能进行函数图像的绘制

所以为了支持数学公式的输入我们需要给AI添加一个插件:

latex2ai.

这个是官方的项目地址,里边有各种的注意事项,好好阅读一下就行了,里边讲的还是很详细的。

对应的使用教程为演示如下:

1.公式使用方法和模板的配置

2.联合GeoGeBra

安装提示AI的路径和你的.ai文件的路径中均不能含有非ASCII字符(也就是说:汉字是不允许的)你可以自定义你的模板,里边可以包含你自己添加的宏包。但是千万别修改文档类。GeoGeBra导出的三维图形是位图(png)的,但是你可以选择分辨率,所以也没有多大的影响。

3.6 TiKZiT和MatLab2TiKZ

TiKZiT的使用可以参见我的上一篇文章

3.7 LaTeXDraw

也不知道是什么原因,我安装了Perl等一系列的插件之后,这个软件现在还是无法导出pdf,我在官方的主页也没有找到修复的方法。

但是除了不能导出pdf外,LaTeXDraw这个软件真的是好用的,导出PSTriks代码很方便。界面的设计也是十分的简洁,看着也很舒服。

3.8 PPT(PowerPoint)

你以为PPT就只能够做一下幻灯片??? NO!NO!NO!

其实很多发表的论文中的图都是使用PPT来绘制的,可以直接导出svg, 然后随便到网上找一个svg装pdf的网站即可,他们网站上还有非常多的好用的pdf工具,下面截取部分加以展示:

这里给大家推荐一个良心的网站:svg转pdf他们还有一个对应的pdf编辑的工具箱,个人感觉比绝大多数的pdf工具强。

操作演示:

3.9 IPE

强烈推荐这个软件,目前我已经入坑这个软件了。主要的优点

\bullet 1. UI 设计精良,看着很舒服

\bullet 2. 软件的功能设计合理,快捷键人性化

\bullet 3. 具有良好的拓展性,可以安装诸多的插件。

\bullet 4. 方便绘制几何图形和函数图像

界面截图:

我的一些排版作品:

1.怎么安装插件?进入官网:Ipelets,把对应的 .lua代码文件复制到你IPE的目录 Ipelets下,如图(我自己安装的插件):

PS: 部分的插件安装还是需要参考官方文档.

1.我的IPE插件

2.IPE学习

对应的视频教程: ipe教程

对应的实例教程: ipe实例教程

看完了上面的两个教程之后,你会觉得这就是一个为了 TiKZ而生的软件。

3.10 Inkscape

最近总算是有机会来接触Inkscape则会个软件了,感觉对于IPE就是碾压,IPE有的优点,Inkscape几乎都有,IPE没有的,InkScape也有。而且你还可以自己去调用它的API接口,很强。终于理解了为什么那个外国小哥要用Inkscape了 . . .

比如Inkscape中的LaTeX公式对象可以在InkScape中编辑,而不用去修改源码,这点胜过IPE和AI,也有官方的说明:

首先便是使得InkScape支持 \rm{\LaTeX} 了,很简单,直接无脑安装一个 TexText就可以了,下载地址:

然后稍微参考一下官方的安装教程就很安装好了。

注:

你的插件可能会报错:

解决办法

把你的模板文件中的中文全部删掉,使用原始的模板文件,模板文件如下:

改了之后我还产生报错

Command C:\Users\PC\scoop\apps\inkscape\current\bin\inkscape.exe –pdf-poppler –pdf-page=1 –export

我报错的原因

是我之前使用Scoop安装过一次InkScape,导致TexText还是去找原来路径下的InkScape。

解决

只需要使用windows的.bat文件把TexText重新安装一次就行了,不要使用GUI的安装方式。

报错二

想要在LaTeX中使用中文产生了如下的报错:

需要去修改TexText的模板文件

解决方法

模板增加为:

\documentclass[fontset=windows]{article} % 必须加上[fontset=windows],否则会报错fandol字体找不到 \usepackage{ctex}

InkScape的插件

InkScape的插件是十分丰富的,其余的InkScape插件的安装地址

推荐安装的一个TeX代码相关的插件:GtkSourceView【64位】

作用(官方解释)

具体的使用效果

安装好的使用截图:

其余的功能就和AI是差不多得了,参考学习一下就行了。

3.11 Dia

他们的绘图实时渲染不怎么好,UI界面看着很难受。

但是内在很强大,支持多种格式的导出,如图(截取部分):

导出后的文件的渲染效果也很好。所以这告诉了我们一个道理,外在往往不是那么的重要。

导出的图形

3.12 TpX

这个软件的使用体验上面的Dia差不多。

软件下载: 地址

界面截图:

3.13 FlowframTK

软件下载:地址

这个软件的原名其实是叫做Jpgfdraw,后来因为种种的原因,改成了这个名字。而且这个软件的安装方式也很奇葩。它依赖与Java环境,使用的是一个Java脚本来安装的,可以看看官方的安装教程:

安装好之后,可能你们会不知道在哪里打开这个应用,它不是我们熟知的 .exe, 也不是Linux下的 .sh, 它的启动是双击windows下的一个批处理脚本 .bat 文件,如下:

这个是它的界面,看看怎么样:

功能啥的,我稍微的体验了一下,感觉不太好。

应该还有提升的空间。

这个软件的官方文档(就在安装目录下)说明是十分的详细的,如果想要学习这个软件还是比较简单的。

这个是它帮助文档的部分目录截取:

制作这个软件,作者还是很用心的 ~~~

3.14 AxMath和AxGlyph

这两个软件可以和MS那一套结合,类似于MathType,但是个人感觉比MathType强一百倍。当然也可以单独的使用,就i类似于其他的软件了。AxMath主要是用于数学公式的编辑,AxGlyph主要是用于矢量图的绘制。但是…但是…

那个Axglyph有时导出pdf会报错,具体的bug原因没有找到。如果你习惯于使用MS那一套,那么这两个东西是你的不二之选。

PS: 这两个软件是付费的,也没有多贵,买了也算是支持国产吧【doge】

下面就是这两个软件的使用截图:

0. AxMath使用演示

个人作品

1.AxGlyph的演示

我选取一部分官网的图片,自己用它做的事也不多。

个人的作品

2.官网使用截图

3.15. Mermaid

这是一个开源项目,下面是官方介绍:

Mermaid is a JavaScript-based diagramming and charting tool that uses Markdown-inspired text definitions and a renderer to create and modify complex diagrams. The main purpose of Mermaid is to help documentation catch up with development.

简要的概括就是:使用MarkDown语法来制作流程图,思维导图,表格等各种图的工具。项目地址如下:

官方仓库也给了许多的例子:

具体的安装

通过NPM安装在本地使用在线的编辑网站

但是导出的矢量图是svg格式的,因为我们往往使用的都是pdf格式,所以我写了一个把svg转化为pdf的python脚本。【也可以用网上那种svg转pdf的网站

下面演示一下我那个脚本的使用示例:

1. Shell脚本配置如下

# 自定义一个svg2pdf的命令 function svg2pdf { python C:\BIN\Svg2Pdf.py $args # 注意:这里的脚本路径根据你的实际路径更改 } # 注:如下的命令会报错 # Set-Alias -Name svg2pdf -Value “python C:\BIN\Svg2Pdf.py” # 这样不带参数会报错:因为默认的python已经把这个脚本运行完,没有传入参数. 解析到的参数为:[C:\\BIN\\Svg2Pdf.py]

2.Python脚本如下

PS:这个脚本只能够处理比较简单的转换工作,有时候会字体丢失
import sys from svglib.svglib import svg2rlg from reportlab.graphics import renderPDF if __name__ == __main__: # 获取参数列表 # sys.argv[0]表示第一个参数,是脚本自己【即sysTest.py】 args = sys.argv[1:] # 显示传入的参数 # print(sys.argv) input_file = args[0] output_file = args[1] # 开始转换 drawing = svg2rlg(input_file) renderPDF.drawToFile(drawing, output_file)

4. 结语

这次推荐的软件和绘制语言,就是我最近的折腾内容了,其实挺那啥的。。。。

感谢优秀开源的的TeX排版系统!!!

感谢伟大的开源工作者!!!

正是它们的无私付出,才使得很多的优秀软件能够被我们使用!!!

本文使用 Zhihu On VSCode 创作并发布

© 版权声明
THE END
喜欢就支持一下吧
点赞13赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容