查看原文
其他

TikZ 绘图辅助工具超级大合集

Eureka LaTeX工作室 2024-05-06

1. 前言

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

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

为什么要写这篇文章?

  1. 纪念自己曾经折腾 TiKZ 的这段经历
  2. 为了给没有入坑的人提供一点参考,让各位少走一点弯路

更多参考示例,这个里面有各式各样的精美抑或是令你感到 unbelievable 的示例:

https://tex.stackexchange.com/questions/158668/nice-scientific-pictures-show-off

2. 工具内容

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

  1. 分为绘图软件
  2. 绘图语言

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

3. 工具使用介绍

3.1 TiKZit

在介绍 tikz 之前,先给新手介绍一个比较友好的 tikz 可视化绘图软件 TikZit,github 的地址为:https://github.com/tikzit/tikzit; 是一个 Github 上的开源项目,是一个 GitHub 上的开源项目,这个东西的使用体验还好吧,也是我在这个方面的入门软件。我大概学了一个下午吧。这个软件的入门文档作者写的很好,按照它的教程一步步的走下来,基本上这个软件的功能你就可以摸透了.

  1. 功能简单,入手快。可以作为新手入门 tikz 的铺垫,
  2. 可以调用 pdflatex 进行预览
  3. 支持自定义 node 和 edge 的样式,可以方在文件中通过 \input { } 调用

对于中文支持即使更改默认的 latex 编译引擎 pdflatex 为 xelatex 的位置,并且在 tikzdefs 中引入 ctex 宏包仍然不支持中文

我去软件的 github 仓库开了一个 issue,但是还是没能解决问题

大致的使用方法如下:

  1. 到了后期就会发现功能有一点的单一
  2. node 和 edge 的样式太少(但是可以修改源码)
  3. 部分的样式定义不合理的话软件会崩溃
  4. 部分定义的样式在 GUI 界面无法显示

对应的 BUG 的解决?中文 node 和样式不合理导致的崩溃:均可以退出软件然后手动修改源码

使用演示

使用 tips:

  1. 使用 Ctrl + J 打开源码进行修改
  2. 把自己的样式定义在一个文件中,宏定义文件定义在一个文件中

其中有两个样式文件 (配置文件) .tikzstyles.tikzdefs, 其中第一个样式文件是必须的,第二个样式文件会被 tikzit 自动导入,这两个文件中的内容大概长这个样子

%%%%%  .tikzstyles
% TiKZ style file generated by TikZiT. You may edit this file manually,
% but some things (e.g. comments) may be overwritten. To be readable in
% TikZiT, the only non-comment lines must be of the form:
% \tikzstyle{NAME}=[PROPERTY LIST]

% Node styles
\tikzstyle{red circle}=[fill=white, draw=red, shape=circle]

% Edge styles
%%%%%  .tikzdefs
\PassOptionsToClass{\CurrentOption}{article}
\usepackage{ctex}
\usepackage{bm}
\newcommand{\param}[1]{\ensuremath{\vec{\bm{#1}}}}

TEX

从上面可以看出 tikzit 的 style 文件其实就是一系列声明的 node style (如果你对 tikz 熟悉的话). 但是目前为止我觉得用这个东西来绘制贝塞尔曲线还可以试试,其他的就算了.

3.2 TiKZ and PgfPlots

LATEX 自带的 tikz 宏包肯定不必多说了吧,你随便在网上一搜就有一堆的结果,有很多的相关内容.

3.3 MetaPost

可以稍微的介绍以下 MetaPost 的内容,MetaPost 是脱胎于 D. E. K. 的 MetaFont 的一个东西,感觉和 TiKZ 差不多。你可以在你的电脑上本地执行 MetaPost 的文件,也可以使用在线网站: http://www.tlhiv.org/mppreview/

具体的使用文档可以查看官方文档,只需要在你电脑的终端中输入如下的命令:

texdoc metapost

SHELL

操作示意图

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

MIPSASM

2. 编译

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

mpost fig.mp

SHELL

3. 输出

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

4. 查看

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

详细的使用方法可以参见如下链接

  1. 参见:https://www.tug.org/docs/metapost/mpman.pdf
  2. 查阅自带的文档:texdoc metapost

3.4 Asymptote

个人感觉这个软件(语言)挺好的,软件的介绍 (来自百度百科):

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

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

它有两种绘图模式:

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

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

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

Asymptote 使用演示

1.BatchMode

2.InteractiveMode


3.5 Matlab2TikZ

其实 Matlab 本身就可以导出相对比较精准的矢量图,可以绘制出图以后直接在绘图窗口另存为 pdf 格式,此时就是高清的矢量图了,如下:

当然,你们可能会遇到即使是选择了 pdf, eps 等矢量图格式,但是导出的图片依然非常的糊,那么只需要把如下的导出设置渲染方式更改一下即可:

但是我记得 matlab 好像默认就是 OpenGL 位图格式导出的,此时你可以选择 dpi

还可以使用 matlab 自带的函数 exportgraphics 进行导出,语法为

exportgraphics(gcf,'test.pdf','ContentType','vector'); 

MATLAB

但是如果你追求完美的数学字体和统一的 的话,那么就可以使用如下推荐的一个工具:MaTlaB2TiKZ, 一个 GitHub 上的开源项目,项目地址为:https://github.com/matlab2tikz; 这个可以认为是我这篇博客里边的又一个重点,它的功能十分的强大,可以和 MatlaB 梦幻联动,能不强大?具体的使用使用方法可以参见 github 在下载下来的源码里边的如下文件:

~\MatLab2TiKZ\src\matlab2tikz.m

SHELL

下边我给出几个个最基本的,也是最常用的使用方法样例

二维函数绘图导出

clear,clc;
% 绘制二维图
x = 0:0.1:2*pi;
y = sin(x);
plot(x, y, 'r')

% 导出(默认当前文件夹下)
addpath C:\Latex\MatLab2TiKZ\src
matlab2tikz('Test2D.tex')

MATLAB

三维函数导出

% 绘制三维图
peaks;

% 导出
addpath C:\Latex\MatLab2TiKZ\src
matlab2tikz('Test3D.tex')

MATLAB

PS: 也可以先把图形绘制出来,调整好后再导出 TiKZ 源码,只需使用如下两条语句:

% import matlab2tikz function
addpath C:\Latex\MatLab2TiKZ\src

% Export graphicx
matlab2tikz('Test3D.tex'

MATLAB

MatLab2TiKZ 的编译效果

3.6 gnuplot

对于这个软件,我只能用一个词来形容,那就是 短小精悍, 但是我用的不多。以下为 gnuplot 的一个简单使用样例:

关于 GnuPlot 在 LaTeX 中的使用,我在这里把 GnuPlot 在 TiKZ 中的使用详细介绍一下。在介绍怎么使用 TikZ 与 Gnuplot 之前,我们先说怎么编译。在发行里,gnuplot 并不包含在内。它的原理是 TikZ 调用 Gnuplot 之后,在编译的过程中,我们将会得到两个中间文件:

filename.pgf-plot.gnuplot

filename.pgf-plot.table

SHELL

其中,前者是 pgf-plot.table 的设定文件,而后者就是调用 Gnuplot 之后产生的一个数据表(点的坐标),然后 TikZ 调用这些点的坐标得到函数图。为了能够使用 TikZ 与 Gnuplot,需要做两件事

  1. 在电脑安装 Gnuplot
  2. 命令行加入参数【临时】: pdflatex –shell-escape filename.tex

或者是修改配置文件【永久】, vscode 的配置文件中加上–shell-escape 如下图:

想要更进一步了解 gnuplot 的使用方法的可以参见我的宏包 ztikz,其中有着诸多的 gnuplot 应用示例.

3.7 Geogebra

GeoGebra 这个软件想必大家都知道吧,一个很有名的数学教学软件; 它的功能太多了,网上也有很都多使用它做出来的炫酷的项目。 但是我们主要是使用它的导出 TiKZ 源代码的功能.

  1. 尽量使用 GeoGebra5 吧,真心感觉 GeoGebra6 不太好用
  2. 导出的代码选择 PGF/TiKZ 别用 PStrik(太底层了)

导出演示

导出对应的绘图源码后,在你的文件中 input 进来就可以用了.

编译出 bug 了不要慌张,看一看它导出的源代码,可能需要 GNUplot 参与编译过程,只需要在命令行使用如下的命令编译即可

xelatex --shell escape main.tex

SHELL

3.8 LaTeXDraw

同样的这也是一个开源的的软件,软件接口可以通过 source forge 地址进行下载。官网上有一些使用样例,可以仿照着学一学:

官方网站的又一个使用演示:

这个软件很强大,但是我没有怎么深入用过它。我用了一段时间的 TiKZiT 后就转纯 TiKZ 了。 但是它默认的安装是无法导出 pdf 等格式的,需要安装一个 perl 脚本。 这个是官方的说明:

我就不演示了,毕竟我目前也不咋用这个东西了。

3.9 Adobe Illustrator

这里介绍的这个 GeoGeBra 的使用和之前那片文章的使用方法不太一样。那篇文章是使用的 GeoGeBra 导出 TiKZ 代码的功能,这里我们主要是利用 GeoGeBra 生成 pdf 文档的方法联合 Adobe Illustrator 绘制一部分的矢量图(数学笔记之类的)。

PS: 满足你排版数学矢量图笔记的需要

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

  1. 不支持数学公式的输入
  2. 不能进行函数图像的绘制

所以为了支持数学公式的输入我们需要给 AI 添加一个插件: latex2ai. 这个是官方项目地址

里边有各种的注意事项,好好阅读一下就行了,里边讲的还是很详细的。对应的使用教程为演示如下:

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


2. 联合 GeoGeBra

安装提示:

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

3.10 LaTeXDraw

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

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

3.11 PPT (PowerPoint)

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

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


3.12 IPE

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

  1. UI 设计精良,看着很舒服
  2. 软件的功能设计合理,快捷键人性化
  3. 具有良好的拓展性,可以安装诸多的插件。
  4. 方便绘制几何图形和函数图像

界面截图:

我的一些排版作品:

1. 怎么安装插件?

进入他们的官网: https://github.com/otfried/ipelets; 把对应的 .lua 代码文件复制到你 IPE 的目录 Ipelets 下,如图(我自己安装的插件):

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

  1. 我的 IPE 插件

2. IPE 学习

  • 对应的视频教程: https://www.bilibili.com/video/BV14E411u7Na/?spm_id_from=333.337.search-card.all.click&vd_source=96bb8d1f8bd0536bf4c7face3f42d777
  • 对应的实例教程: https://www.bilibili.com/video/BV1rE411N7RU/?spm_id_from=333.337.search-card.all.click

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

3.13 Inkscape

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

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

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

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

注:

  1. 你的插件可能会报错:

解决办法

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

改了之后我还产生报错

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

MOONSCRIPT

我报错的原因

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

解决

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

报错二

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

需要去修改 TexText 的模板文件

解决方法

模板增加为:

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

ROUTEROS

InkScape 的插件

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

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

作用(官方解释)

具体的使用效果

安装好的使用截图:

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

3.14 Dia

他们的绘图实时渲染不怎么好,UI 界面看着很难受,但是内在很强大,支持多种格式的导出,如图(截取部分):

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

3.15 TpX

这个软件的使用体验上面的 Dia 差不多,软件下载地址: https://sourceforge.net/projects/tpx/; 界面截图:

3.16 FlowframTK

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

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

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

功能啥的,我稍微的体验了一下,感觉不太好。应该还有提升的空间。但是这个软件的官方文档(就在安装目录下)说明是十分的详细的,如果想要学习这个软件还是比较简单的, 这个是它帮助文档的部分目录截取:

制作这个软件,作者还是很用心的 >_<

3.17 AxMath and AxGlyph

这两个软件可以和 MS 那一套结合,类似于 MathType,但是个人感觉比 MathType 强一百倍。当然也可以单独的使用,就 i 类似于其他的软件了。AxMath 主要是用于数学公式的编辑,AxGlyph 主要是用于矢量图的绘制。但是… 但是那个 Axglyph 有时导出 pdf 会报错,具体的 bug 原因没有找到。如果你习惯于使用 MS 那一套,那么这两个东西是你的不二之选。

PS: 这两个软件是付费的,也没有多贵,买了也算是支持国产。下面就是这两个软件的使用截图:

0. AxMath 使用演示

个人作品

1.AxGlyph 的演示

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

个人的作品

2. 官网使用截图

3.18 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 语法来制作流程图,思维导图,表格等各种的工具。项目地址:https://mermaid.js.org/; 官方仓库也给了许多的例子:

具体的安装

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

但是导出的矢量图是 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']

# Update:2023-12-05
# 使用inkscape作为转换工具, 可以解决更多的兼容性问题
function svg2pdf {
    # 注意:这里的脚本路径根据你的实际路径更改
    # 1. 使用python的svg库转换 --> 会失真
    # python C:\BIN\Svg2Pdf.py $args
    # 2. 使用inkscape转换,效果更好
    inkscape --export-type=pdf $args
}

POWERSHELL

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)

PYTHON

3.19 SolidWroks

一些复杂的三维模型可以使用专门的软件来制作,这个方面 solidworks, UG 等肯定是一个很好的选择。毕竟专业的软件干专业的事。在本文中,我们主要讨论关于 solidworks 导出三维模型矢量图相关,毕竟二维的矢量图是十分的方便导出的。

我们这里以 SOLIDWorks 为例,同时还需要用到一个东西,就是 SOLIDWORKS Composer. 这个可执行文件位置应该在这里:

导出矢量图相关的操作如下,假如有一如下的 3 维模型

首先把这个模型另存为 .smg 格式

然后打开 SOLIDWORKS Composer, 导入刚才导出的 .smg 文件,如下

然后切换到 技术图解 菜单,进行相关的导出设置,然后导出为 M416.svg, 如下

我这里就是默认导出为线稿了,你可以设置材质,光照等参数,然后导出,看个人喜好

得到 svg 之后,参考之前我的文章中的一个 svg 转 pdf 的 inkscape 命令

inkscape --export-type=pdf M416.svg

SHELL

执行过程如下

所以你可以得到一个 pdf 文件, 使用 sumatrapdf 打开,结果如下

solidworks 相关方法参考

下面是一个设置了线宽和色彩的基本导出例子

很完美的一个矢量图,perfect

3.20 sane_tikz

一个使用 python 生成 tikz 代码的仓库,地址: https://github.com/negrinho/sane_tikz; 仓库中的一个示例代码,来看看他的书写风格

import sane_tikz.core as stz

label_spacing = 0.25
tick_label_spacing = 0.25
tick_length = 0.25
segment_spacing = 0.6
length_multiplier = 0.8


def segment(length, label_str, left_tick_label_str, right_tick_label_str):
    seg = stz.line_segment([0, 0], [length, 0])
    left_tick = stz.centered_vertical_line_segment([0, 0], tick_length)
    right_tick = stz.centered_vertical_line_segment([length, 0], tick_length)
    left_tick_label = stz.latex([0, 0], left_tick_label_str)
    right_tick_label = stz.latex([0, 0], right_tick_label_str)
    stz.place_above_and_align_to_the_center(left_tick_label, left_tick,
                                            tick_label_spacing)
    stz.place_above_and_align_to_the_center(right_tick_label, right_tick,
                                            tick_label_spacing)
    seg_label = stz.latex([-label_spacing, 0], label_str)
    return [
        seg, left_tick, right_tick, left_tick_label, right_tick_label, seg_label
    ]


segs = [
    segment(length_multiplier * 5, "A""0""5"),
    segment(length_multiplier * 1, "B""2""3"),
    segment(length_multiplier * 3, "C""1""4")
]

stz.distribute_vertically_with_spacing(segs[::-1], segment_spacing)
stz.draw_to_tikz_standalone(segs, "segments.tex")

PYTHON

绘制出来的图像

还有一些很复杂的图的例子

3.21 quiver

这是一个专门用于绘制交换图的应用,github 仓库地址:https://github.com/varkor/quiver; 它也有一个在线网站:https://q.uiver.app/; 下面是一些是官方仓库的示意图:

对于不喜欢 tikz 代码的人来说,可以一试

3.22 自己开发库

最近我也在开发一个跨平台的 tikz 绘图库,充分使用 gnuplot 和 octave 等工具,但是目前还在开发中,但是现在的大致样子如下

最后一个图的代码长这样

\begin{tikzpicture}[font=\small, >=Latex]
    % draw grid(coordinates)
    \ShowGrid{(-8, -8); (8, 8)}
    % \fill[black] (0, 0)node[below right]{$O$=(0, 0)} circle (1pt);
    \Show{(0, 0)}[$O=(0, 0)$][below right=.5em and 1em]
    \ShowAxis {(0, -8); (0, 8)}
    \ShowAxis {(-8, 0); (8, 0)}

    % Test unit
    \fill[red] (-4cm, 4em)node[left]{$A_1$=(-4cm, 4em)} circle (1pt);
    \fill[blue] (-4cm, 4cm)node[left]{$A_2$=(-4cm, 4cm)} circle (1pt);

    % draw function
    \draw[color=orange, domain=-3:3] plot (\x, 2*\x+1);
    \draw[color=cyan, domain=-1:7.6] plot (\x, -.9*\x+7);

    % draw an ellipse
    % 1.use self define cmd
    \NormalPlotPrecise{1500}
    \NormalPlot[][-7:7.8]{3*sin(1/x)}
    \NormalPlot[green, name path=exp][-1.5:7.5] {x*exp(-x)}
    \ParamPlot[red, name path=ellipse][0:2*pi]{7*sin(t), 4*cos(t)}

    % fill(needs \usetikzlibrary{patterns})
    \begin{scope}
        \clip (2, 0) rectangle (8, 1); 
        \fill[pattern=north east lines] plot file{./2d_plot/gnuplot_output_data/data_gen_2.table};
    \end{scope}
    \begin{scope}
        \clip (-6, 0) rectangle (-2, -2);
        \NormalPlot[][-6:-1]{3*sin(1/x)}
        \fill[pattern=crosshatch, pattern color=orange] plot file{./2d_plot/gnuplot_output_data/data_gen_4.table} -- (-2, 0) -- (-6, 0);
    \end{scope}

    % find intersection
    \ShowIntersecions{exp; ellipse}{2}
    % 或者是如下的语句
    % \path[name intersections={of=exp and ellipse}];
    % \ShowPoint[color=red] {(intersection-1); (intersection-2)}

    % draw intersection dot 
    \ShowPoint {(2.068, 5.137); (4.242, 3.181); (6.843, 0.840); (7.324, 0.408)}
        [$p_1$$p_2$$p_3$$p_4$$p_5$$p_6$$p_7$][above]
    \ShowPoint[radius=3pt, color=blue, opacity=.5, type=rectangle] {(-2.380, -3.761)}
    \ShowPoint[color=orange, opacity=1, radius=2pt] {(1.456, 3.912)}
\end{tikzpicture}
 

而且还有 cache 机制,绘制复杂的函数也很快。但是还有部分功能还有没有整合好,但是我相信,要开发出来了,快了

选自:TikZ工具合集 - Eureka (zongpingding.github.io)

关注我们公众号,学习 LaTeX 无烦恼!

入门资料,免费知识代码:

https://flowus.cn/latex/share/66110e84-b24a-4cd5-b8a7-2ba2afb35a30

精心制作免费视频教程:

https://space.bilibili.com/209746320




继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存