【TikZ 简单学习(下):基础绘制】Latex下的绘图宏包

news2024/11/22 9:09:38

【TikZ 简单学习[下]:基础绘制】Latex下的绘图宏包

  • 上文
    • 绘制多个节点
    • 给节点添加统一样式
    • 给节点命名
    • 使用相对位置绘制
    • 给节点标签
    • 链接边的绘制
    • 在线边上添加标签
    • 绘制蛇形线和多行文本
    • 层图
    • 绘制一个简单的树

上文

  • 【TikZ 简单学习(上):基础绘制】Latex下的绘图宏包

绘制多个节点

  • 方法一:
    使用 \path A node[attr]{info} 进行绘制多个节点,这里节点和 “路径” 无关
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
	\path 	( 0,2) node [shape=circle,draw] {}
			( 0,1) node [shape=circle,draw] {}
			( 0,0) node [shape=circle,draw] {}
			( 1,1) node [shape=rectangle,draw] {}
			(-1,1) node [shape=rectangle,draw] {};
\end{tikzpicture}
\end{document}

在这里插入图片描述

  • 方法二:
    \node\path node 的省略,这里需要额外加上 at,即:
    \node at A [attr]{info};
    前面提到过,[draw] 的意思是并且绘制的意思。这里 [shape=circle] 可以简写成 [circle]
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
	\node at ( 0,2) [circle,draw] {};
	\node at ( 0,1) [circle,draw] {};
	\node at ( 0,0) [circle,draw] {};
	\node at ( 1,1) [rectangle,draw] {};
	\node at (-1,1) [rectangle,draw] {};
\end{tikzpicture}
\end{document}

给节点添加统一样式

  • 节点里没有文本,为什么节点仍然有大小?因为 TikZ 自动为文本周围添加了一些空间 inner sep
    所以可以更改 [inner sep = 0pt] 来修改之类的。
    但是确保节点正常显示,设置它的最小大小 [minumun size = 6mm]
  • 然后就是设置统一样式 [XXX/.style={……}]
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
	[place/.style={circle,draw=blue!50,fill=blue!20,thick,
		inner sep=0pt,minimum size=6mm},
		transition/.style={rectangle,draw=black!50,fill=black!20,thick,
		inner sep=0pt,minimum size=4mm}]
	\node at ( 0,2) [place] {};
	\node at ( 0,1) [place] {};
	\node at ( 0,0) [place] {};
	\node at ( 1,1) [transition] {};
	\node at (-1,1) [transition] {};
\end{tikzpicture}
\end{document}

在这里插入图片描述

给节点命名

  • 给节点命名可以为后续操作节省便利,不需要单独去计算坐标绘制。
    (name) ,注意名字不能有特殊字符等,可以有下划线和连线符。
  • TikiZ 语法对于多个并列属性之间循序比较宽松,可以比如 \node [A] (B) at C 或者 \node (B) [A] at C 之类的。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
	[place/.style={circle,draw=blue!50,fill=blue!20,thick,
		inner sep=0pt,minimum size=6mm},
		transition/.style={rectangle,draw=black!50,fill=black!20,thick,
		inner sep=0pt,minimum size=4mm}]

	\node[place] (waiting 1) at ( 0,2) {};
	\node[place] (critical 1) at ( 0,1) {};
	\node[place] (semaphore) at ( 0,0) {};
	\node[transition] (leave critical) at ( 1,1) {};
	\node[transition] (enter critical) at (-1,1) {};

\end{tikzpicture}
\end{document}

使用相对位置绘制

  • 上面给了许多坐标,其实我们也可以通过相对位置绘制
    需要导入 \usetikzlibrary {positioning},然后使用下述语法:
    [below = of name][right = of name] 等,他们之间的距离为 node distance,默认为节点之间的中心之间的距离,或者是边界之间的距离。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary {positioning}

\begin{document}
\begin{tikzpicture}
	[place/.style={circle,draw=blue!50,fill=blue!20,thick,
		inner sep=0pt,minimum size=6mm},
		transition/.style={rectangle,draw=black!50,fill=black!20,thick,
		inner sep=0pt,minimum size=4mm}]

	\node[place] (waiting) {};
	\node[place] (critical) [below=of waiting] {};
	\node[place] (semaphore) [below=of critical] {};
	\node[transition] (leave critical) [right=of critical] {};
	\node[transition] (enter critical) [left=of critical] {};
\end{tikzpicture}
\end{document}

在这里插入图片描述

给节点标签

  • 方法一:
    添加一个姓的节点,设定属性为 [red,above],添加在 (semaphore.north) 某节点的北方,文字信息为 {s \e 3}
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary {positioning}

\begin{document}
\begin{tikzpicture}
	[place/.style={circle,draw=blue!50,fill=blue!20,thick,
		inner sep=0pt,minimum size=6mm},
		transition/.style={rectangle,draw=black!50,fill=black!20,thick,
		inner sep=0pt,minimum size=4mm}]

	\node[place] (waiting) {};
	\node[place] (critical) [below=of waiting] {};
	\node[place] (semaphore) [below=of critical] {};
	\node[transition] (leave critical) [right=of critical] {};
	\node[transition] (enter critical) [left=of critical] {};
	\node [red,above] at (semaphore.north) {$s\le 3$};
\end{tikzpicture}
\end{document}

在这里插入图片描述

  • 方法二:
    使用 [label=above:$info$] 即标签属性来直接添加标签信息。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary {positioning}

\begin{document}
\begin{tikzpicture}
	[place/.style={circle,draw=blue!50,fill=blue!20,thick,
		inner sep=0pt,minimum size=6mm},
		transition/.style={rectangle,draw=black!50,fill=black!20,thick,
		inner sep=0pt,minimum size=4mm}]

	\node[place] (waiting) {};
	\node[place] (critical) [below=of waiting] {};
	\node[place] (semaphore) [below=of critical,
		label=above:$s\le3$] {};
	\node[transition] (leave critical) [right=of critical] {};
	\node[transition] (enter critical) [left=of critical] {};
\end{tikzpicture}
\end{document}
  • 也可以给多重标签。
    这里使用 [label=60] 表示在60度的位置添加标签
    [label=-90] 表示在270度的位置添加标签
  • 使用 [every label/.style={}] 来修改标签的风格。
\tikz
	\node [circle,draw,label=60:$60^\circ$,label=below:$-90^\circ$] {my circle};

在这里插入图片描述

链接边的绘制

  • 方法一:
    使用语法 \draw [->] (A.west) -- (B.east) 或者 \draw A .. controls B and C .. D 绘制曲线
    这里需要指明是东南西北哪个位置出发,哪个位置结束
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary {positioning}

\begin{document}
\begin{tikzpicture}
	[place/.style={circle,draw=blue!50,fill=blue!20,thick,
		inner sep=0pt,minimum size=6mm},
		transition/.style={rectangle,draw=black!50,fill=black!20,thick,
		inner sep=0pt,minimum size=4mm}]

	\node[place] (waiting) {};
	\node[place] (critical) [below=of waiting] {};
	\node[place] (semaphore) [below=of critical] {};
	\node[transition] (leave critical) [right=of critical] {};
	\node[transition] (enter critical) [left=of critical] {};
	\draw [->] (enter critical.east) -- (critical.west);
	\draw [->] (waiting.west) .. controls +(left:5mm) and +(up:5mm)
		.. (enter critical.north);
\end{tikzpicture}
\end{document}

在这里插入图片描述

  • 方法二:
    但这太笨了。一个简单的写法是可以省略上述所有的方向,就像下面代码。
    因为 TikZ 会自动聪明地选择合适方向。
\draw [->] (enter critical) -- (critical);
\draw [->] (waiting) .. controls +(left:8mm) and +(up:8mm)
.. (enter critical);
  • 方法三:
    或者尝试新的语法
    使用 \draw [->] A to B 替代 \draw [->] A .. B
    使用 \draw [->] A to [out=B,in=C] D 绘制曲线,即给定 in,out 属性表示离开或进入坐标的弧线的角度。
\draw [->] (enter critical) to (critical);
\draw [->] (waiting) to [out=180,in=90] (enter critical);
  • 方法四:
    使用 [bend left=A] 表示向左/右弯的度数,也可以绘制对应的链接曲线。
\draw [->] (waiting) to [bend right=45] (enter critical);
  • 方法五:
    语法糖,使用 \node A edge B edge C…… 可以绘制点A与点B、C链接的边。
\node[transition] (enter critical) [left=of critical] {}
	edge [->] (critical)
	edge [<-,bend left=45] (waiting)
	edge [->,bend right=45] (semaphore);
  • 综合绘图代码如下,比较推荐使用 edge 语法,比较简单。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary {arrows.meta,positioning}

\begin{document}
\begin{tikzpicture}
	[place/.style={circle,draw=blue!50,fill=blue!20,thick,
		inner sep=0pt,minimum size=6mm},
		transition/.style={rectangle,draw=black!50,fill=black!20,thick,
		inner sep=0pt,minimum size=4mm},
		bend angle=45,
		pre/.style={<-,shorten <=1pt,>={Stealth[round]},semithick},
		post/.style={->,shorten >=1pt,>={Stealth[round]},semithick}]

	\node[place] (waiting) {};
	\node[place] (critical) [below=of waiting] {};
	\node[place] (semaphore) [below=of critical] {};
	\node[transition] (leave critical) [right=of critical] {}
		edge [pre] (critical)
		edge [post,bend right] (waiting)
		edge [pre, bend left] (semaphore);

	\node[transition] (enter critical) [left=of critical] {}
		edge [post] (critical)
		edge [pre, bend left] (waiting)
		edge [post,bend right] (semaphore);

\end{tikzpicture}
\end{document}

在这里插入图片描述

在线边上添加标签

  • [上篇] 我们学了在线的正上/中间/正下 添加信息,使用的是 [sloped, below]
    这里我们的需求是在线的边上添加信息,使用 [auto] 属性即可。
    使用 [swap] 属性会镜像绘制在线的另一侧。见下方代码。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary {arrows.meta,positioning}

\begin{document}
\begin{tikzpicture}
	[place/.style={circle,draw=blue!50,fill=blue!20,thick,
		inner sep=0pt,minimum size=6mm},
		transition/.style={rectangle,draw=black!50,fill=black!20,thick,
		inner sep=0pt,minimum size=4mm},
		bend angle=45,
		pre/.style={<-,shorten <=1pt,>={Stealth[round]},semithick},
		post/.style={->,shorten >=1pt,>={Stealth[round]},semithick}]

	\node[place] (waiting) {};
	\node[place] (critical) [below=of waiting] {};
	\node[place] (semaphore) [below=of critical] {};
	\node[transition] (leave critical) [right=of critical] {}
		edge [pre] (critical)
		edge [post,bend right] node[auto,swap]{2}	(waiting)
		edge [pre, bend left] (semaphore);

	\node[transition] (enter critical) [left=of critical] {}
		edge [post] (critical)
		edge [pre, bend left] 	node[auto]{3}(waiting)
		edge [post,bend right] node[auto]{4} node[auto,swap]{5} (semaphore);

\end{tikzpicture}
\end{document}

在这里插入图片描述

绘制蛇形线和多行文本

  • 添加 \usetikzlibrary {decorations.pathmorphing}
    使用 [decoration={snake}] 来添加蛇形线,也可以更改其他的参数,比如 [amplitude, segment length, post length] 等。
  • 多行文本很简单,和 LateX 语法类似,使用 \\ 来换行。
    也可以使用 [text width=3cm] 来让它按文本长度自动分段。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary {decorations.pathmorphing}

\begin{document}
\begin{tikzpicture}
	\draw [->,decorate,
		decoration={snake,amplitude=.4mm,segment length=2mm,post length=1mm}]
	(0,0) -- (3,0)
	node [above,align=center,midway]
	{
		replacement of\\
		the \textcolor{red}{capacity}\\
		by \textcolor{red}{two places}
	};
\end{tikzpicture}
\end{document}

在这里插入图片描述

层图

  • 在画完一个图之后,希望在该图背景后添加某个颜色的背景矩形。
    由于图的大小是动态的,可以选择指定坐标绘制,也可以使用层图
    层图需要导入 backgrounds 库,它使用了 fit 库,都需要导入
  • 添加一个 scope ,指定 [on background layer] 绘制背景层
    在其中使用 [fit = A B C D E] 来适应覆盖这些元素。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary {arrows.meta,backgrounds,fit,positioning}

\begin{document}
\begin{tikzpicture}
	[place/.style={circle,draw=blue!50,fill=blue!20,thick,
		inner sep=0pt,minimum size=6mm},
		transition/.style={rectangle,draw=black!50,fill=black!20,thick,
		inner sep=0pt,minimum size=4mm},
		bend angle=45,
		pre/.style={<-,shorten <=1pt,>={Stealth[round]},semithick},
		post/.style={->,shorten >=1pt,>={Stealth[round]},semithick}]

	\node[place] (waiting) {};
	\node[place] (critical) [below=of waiting] {};
	\node[place] (semaphore) [below=of critical] {};
	\node[transition] (leave critical) [right=of critical] {}
	edge [pre] (critical)
	edge [post,bend right] node[auto,swap] {2} (waiting)
	edge [pre, bend left] (semaphore);
	\node[transition] (enter critical) [left=of critical] {}
	edge [post] (critical)
	edge [pre, bend left] (waiting)
	edge [post,bend right] (semaphore);
	\begin{scope}[on background layer]
		\node [fill=black!30,fit=(waiting) (critical) (semaphore)
		(leave critical) (enter critical)] {};
	\end{scope}

\end{tikzpicture}
\end{document}

在这里插入图片描述

绘制一个简单的树

  • 比较常用的,使用 \node {} 创建一个根节点
    使用 child {node{}} 创建孩子节点
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary {arrows.meta,backgrounds,fit,positioning}

\begin{document}
\begin{tikzpicture}
	\node {Root}
	child {	node{A}
		child {node{B}}
		child {node{C}}
	}
	child {node{D}
		child {node{E}}
	}
	;
\end{tikzpicture}
\end{document}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/559433.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【笔试强训选择题】Day19.习题(错题)解析

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;笔试强训选择题 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01;&#xff…

深度学习神经网络学习笔记-多模态方向-11-Deep Voice: Real-time Neural Text-to-Speech

摘要 本文提出Deep Voice&#xff0c;一种完全由深度神经网络构建的生产质量文本到语音系统。Deep Voice为真正的端到端神经语音合成奠定了基础。该系统由五个主要的构建模块组成:用于定位音素边界的分割模型、字素到音素的转换模型、音素时长预测模型、基频预测模型和音频合成…

那年我手执『wait』桃木剑,轻松解决僵尸进程~

文章目录 &#x1f490;专栏导读&#x1f490;文章导读&#x1f427;进程退出&#x1f426;进程常见的退出方法&#x1f414;正常终止&#x1f514;return 退出&#x1f514;exit 退出&#x1f514;_exit 退出 &#x1f414;异常终止 &#x1f427;进程等待&#x1f426;必要性…

00后实在太卷了,跳槽到我们公司起薪20k,都快超过我了....

都说00后已经躺平了&#xff0c;但是有一说一&#xff0c;该卷的还是卷。 前段时间我们部门就来了个00后&#xff0c;工作都还没两年&#xff0c;跳到我们公司起薪20K&#xff0c;都快接近我了。 后来才知道人家是个卷王&#xff0c;从早干到晚就差搬张床到工位睡觉了。最近和…

美股股指期货是什么?有哪些美股股指期货交易门槛?

美股期指就是美股期货指数&#xff0c;并不是单独的指道琼斯还是纳斯达克&#xff0c;就好像中国的股指期货一样道理&#xff0c;是以沪深300为标的的&#xff0c;美股期指也是期货&#xff0c;不是单纯的指数。交易美股产品需要先完成开户&#xff0c;要想一次性开户成功就要满…

2023.4月及5月最新HCIP 考试战报来袭

2023年HCIP/CCNP考试战报_微思xmws的博客-CSDN博客国内企业或国企、事业单位&#xff0c;华为设备普及&#xff0c;国内未来发展趋势&#xff0c;考华为认证更被认可。如果你在外企上班或有出国打算&#xff0c;推荐考思科。https://blog.csdn.net/XMWS_IT/article/details/129…

【隔空投送】2023新品,加速科技ST2500E重磅来袭

随着5G通信、人工智能、虚拟现实、新能源以及先进封装技术的飞速发展&#xff0c;芯片线宽尺寸不断减小&#xff0c;芯片复杂度不断跃升&#xff0c;对测试机的要求愈加提高。提供多种测试程序并可进行大量的并行测试&#xff0c;有效减少测试成本&#xff0c;缩短产品上市时间…

Paddle 模型转 TensorRT加速模型

Paddle 模型转 TensorRT加速模型 概述 NVIDIA TensorRT 是一个高性能的深度学习预测库&#xff0c;可为深度学习推理应用程序提供低延迟和高吞吐量。PaddlePaddle 采用子图的形式对TensorRT进行了集成&#xff0c;即我们可以使用该模块来提升Paddle模型的预测性能。在这篇文章…

Ubuntu显示时间不正确的问题解决

安装完ubuntu后&#xff0c;发现我的ubuntu显示的时间不对&#xff0c;和网络的时间根本对不上。网上查找了相关设置方法&#xff0c;这里总结一下。 一般来说&#xff0c;显示时间不正确的情况就两种情况&#xff0c;第一&#xff1a;是你系统设置的时区不对&#xff1b;第二…

多层感知机学习XOR实例

多层感知机学习XOR实例 多层感知机介绍使用多层感知机学习XOR实例传统统计数学方法&#xff08;传统机器学习&#xff09;使用多层感知机学习XOR 总结 多层感知机介绍 多层感知机&#xff08;Multilayer Perceptron&#xff0c;MLP&#xff09;&#xff0c;又称为深度前馈网络…

Compose 二三事:绘制原理

setContent做了什么 我们基于一个最简单的例子进行分析 class MainActivity : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContent {Text(text "Hello World!")}} }这里setContent做了什么…

【Jmeter入门】使用Jmeter做接口测试

目录 一、Jmeter简介 二、Jmeter相关插件安装&#xff1a; 三、Jmeter运行模式及参数 四、Jmeter函数 五、Jmeter属性与变量 六、Jmeter如何做接口测试 【1】、Jmeter 的使用步骤 【2】、接口请求实例 1. “用户定义的变量” 的应用 3. 建立接口间的关联 4…

Gaussian量子化学计算、LAMMPS分子动力学模拟

Gaussian是做半经验计算和从头计算使用最广泛的量子化学软件&#xff0c;可研究诸如分子轨道&#xff0c;结构优化&#xff0c;过渡态搜索&#xff0c;热力学性质&#xff0c;偶极矩和多极矩&#xff0c;电子密度和电势&#xff0c;极化率和超极化率&#xff0c;红外和拉曼光谱…

超越竞争的获客之道:DTC品牌出海策略全面解析

随着全球数字化的快速发展&#xff0c;DTC品牌正迎来一个全新的时代。然而&#xff0c;随着越来越多的DTC品牌进入国际市场&#xff0c;如何在激烈的竞争中脱颖而出&#xff0c;并获得新客户成为一个关键的挑战。本文Nox聚星将和大家深入探讨DTC品牌在出海时代如何破解获客困局…

外包干了五年,废了...

先说一下自己的情况。大专生&#xff0c;17年通过校招进入湖南某软件公司&#xff0c;干了接近5年的测试点点点&#xff0c;今年年上旬&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落&#xff01;而我已经在一个企业干了五年的点工…

10年开发,浅谈eolink 、aifox、apipost 横向对比

功能对比 在实际工作中,eolink 、apifox、apipost 三个工具,我个人都有使用。接下来,我会对三款功能对比,于是我拉了个功能对比的清单。 特别说明:以下的对比,不吹不黑,只列功能,纯客观比对,不带有任何商业带货的意义。 eolink 、aifox、apipost 三款工具有很多功能模块,本次仅…

acwing提高——DFS之连通性问题+搜索顺序

1 连通性问题&#xff08;内部搜索&#xff09; 内部搜索一般不用恢复现场 1.迷宫 题目http://ybt.ssoier.cn:8088/problem_show.php?pid1215 #include<bits/stdc.h> using namespace std; const int N110; bool st[N][N]; char g[N][N]; int n; int sx,sy,ex,ey; …

95后字节八年测开晒出工资单:狠补了这个,真香···

最近一哥们跟我聊天装逼&#xff0c;说他最近从字节跳槽了&#xff0c;我问他跳出来拿了多少&#xff1f;哥们表示很得意&#xff0c;说跳槽到新公司一个月后发了工资&#xff0c;月入5万多&#xff0c;表示很满足&#xff01;这样的高薪资着实让人羡慕&#xff0c;我猜这是税后…

2022年深圳杯数学建模B题基于用电可靠性的配电网规划解题全过程文档及程序

2022年深圳杯数学建模 B题 基于用电可靠性的配电网规划 原题再现&#xff1a; 如果一批用户变压器&#xff08;下面简称用户&#xff09;仅由一个电源变电站&#xff08;下面简称电源&#xff09;供电&#xff0c;称为单供。这时配电网由电线和开关联接成以电源为根节点的树状…

k8s使用ECK形式部署elasticsearch+kibana

文章目录 前言一、ECK是什么&#xff1f;二、安装ECK1.crd.yaml2.operator.yaml 三、安装es&#xff0c;elasticsearch-cluster.yaml四、安装kibana总结 前言 在k8s上基于ECK&#xff08;2.4&#xff09;部署elasticsearch&#xff0c;简单记录一下&#xff0c;主要是quicksta…