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

news2024/11/23 21:45:47

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

  • 前置
  • 简单图形绘制
    • 基本架构
    • 路径绘制
    • 添加样式/风格
    • 弧线绘制
    • 剪切
    • 抛物线和正弦曲线绘制
    • 填充和绘制
    • 渲染
    • 绘制箭头
    • 循环
    • 添加文本信息
    • 绘制一个角度

前置

  • Latex 可以解决绘制这些东西: ∫ a b 1 x d x \int_a^b\frac{1}{x}dx abx1dx 之类。
    现在有宏包 T k i Z TkiZ TkiZ 可以解决绘制定性的图片,用代码绘图,甚至写pdf书籍等工作。
  • 环境:使用软件 TexWorks,免费,大约占内存 8 G 8G 8G,有点大
    左边写代码,点击运行按钮后,后侧显示对应的pdf
    在这里插入图片描述
  • 本文按照官方文档进行简单学习
    即只跟着做一下基础的tutorial代码,不具体深究所有命令,毕竟:
    c m d cmd cmd 中输入 texdoc tikz 即可显示官方pdf的文档,有 1321 1321 1321 页…

简单图形绘制

基本架构

  • 首先查看基本架构
\documentclass{article} 	% 百分号后的为注释,不运行
\usepackage{tikz}			% 使用 tikz 包
\begin{document}			% 开始文档
We are working on
\begin{tikzpicture}			% 对于需要 tikz 绘图的内容,可以这样形式
\draw (-1.5,0) -- (1.5,0);	% 命令需要以分号结尾,表示调用 draw 方法,绘制从点 A 到点 B 的线段
\draw (0,-1.5) -- (0,1.5);
\end{tikzpicture}
\tikz \draw (-1.0,-1.0) -- (1.0,1.0);	% 或者对于简单的图形,使用 \tikz 单行命令绘制图形
\tikz \draw (0,-1.0) -- (1.0,0);
\end{document}

在这里插入图片描述

  • 注意到,我们绘制了三幅图,也就是对于一个 tikzpicture 是一副图。

路径绘制

  • 我们可以缩进来清晰代码之间的逻辑
    连续使用 -- 进行绘制路径。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
	\draw (-1.5,0) -- (1.5,0) -- (0,-1.5) -- (0,1.5);
\end{tikzpicture}
\end{document}

在这里插入图片描述

  • 我们可以绘制曲线路径
    这是第一种比较麻烦的方法。绘制一段曲线,有起点、起点控制点、终点、终点控制点组成。
    起点控制点表示曲线在起点处曲线切线的方向。
    为了方便,这里使用了 \filldraw 方法绘制出了其中这四个点
    使用 \draw A .. controls B and C .. D; 进行绘制曲线,这里起点为A,起点控制点为B,终点控制点为C,终点为D
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
	\filldraw [gray] (0,0) circle [radius=2pt]
	(1,1) circle [radius=2pt]
	(2,1) circle [radius=2pt]
	(2,0) circle [radius=2pt];
	\draw (0,0) .. controls (1,1) and (2,1) .. (2,0);
\end{tikzpicture}
\end{document}

在这里插入图片描述

  • 画圆形环路
    语法1:\draw A circle [radius=B]; 绘制圆心为A,半径为B的圆,单位可以是 p t pt pt 像素,或者 c m cm cm
    语法2:\draw A ellipse [x radius=B, y radius=C]; 绘制椭圆,圆心为A,还有两个半距的长度。
  • 这里可以看出,给前面基础图形设定元素,使用 [attr = x] 进行赋值,比如使用 [rotate=30] 进行图形旋转30度。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\tikz \draw (0,0) circle [radius=10pt];
\tikz \draw (0,0) ellipse [x radius=20pt, y radius=10pt];
\tikz \draw (0,0) circle [radius=1cm];
\end{document}

在这里插入图片描述

  • 矩形路径绘制
    使用 \draw A rectangle B; 表示绘制对角顶点为A,B的矩形
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
	\draw (0,0) rectangle (0.5,0.5);
	\draw (-0.5,-0.5) rectangle (-1,-1);
\end{tikzpicture}
\end{document}

在这里插入图片描述

  • 网格线,与重复绘制
    使用 \draw [step=A] B grid C; 绘制从点B到点C,步长为A的网格。
    使用 [gray, very thin] 来修改网格线的颜色和粗细
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
	\draw[step=.5cm,gray,very thin] (-1.4,-1.4) grid (1.4,1.4);
	\draw (-1.5,0) -- (1.5,0);
	\draw (0,-1.5) -- (0,1.5);
	\draw (0,0) circle [radius=1cm];
\end{tikzpicture}
\end{document}

在这里插入图片描述

添加样式/风格

  • 对于大量内容,可能我们都想要某一个风格,比如 [gray, very thin],每次都说明肯定很麻烦
    Style_Name/.style={A,B,C……} 可以让 [Style Name] 等价与 [A,B,C,……]
  • 我们把上述语句放在 \tikzset{} 中,来让全局可用
  • 这里 color=red!50 指颜色为50%的红。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\tikzset{MyStyle/.style={color=red!50,very thin}}
\begin{tikzpicture}
	\draw [MyStyle] (0,0) circle [radius = 1cm];
	\draw (2,0) circle [radius = 1cm];
\end{tikzpicture}
\end{document}

在这里插入图片描述

  • 其他一些可选的绘制风格
    粗细:ultra thin, very thin, thin, semithick, thick, very thick, ultra thick
    短线:dashed
    点线:dotted
    密度:loosely XXX, densely XXX ,这里 XXX 为短线或点线

弧线绘制

  • 弧线可以绘制圆或椭圆的一部分
    语法:\draw A arc[start angle=B, end angle=C, radius=D]; 即圆心坐标A,开始角度B,结束角度C,半径D
    对于椭圆,类似指定 x radius, y radius 即可。
    可以发现,这里的单位均为角度制。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\tikzset{MyStyle/.style={color=red!50,very thin}}
\begin{tikzpicture}[scale=3]
	\draw[step=.5cm,gray,very thin] (-1.4,-1.4) grid (1.4,1.4);
	\draw (-1.5,0) -- (1.5,0);
	\draw (0,-1.5) -- (0,1.5);
	\draw (0,0) circle [radius=1cm];
	\draw (3mm,0mm) arc [start angle=0, end angle=30, radius=3mm];
\end{tikzpicture}

\begin{tikzpicture}
	\tikz \draw (0,0)
		arc [start angle=0, end angle=315,
			x radius=1.75cm, y radius=1cm];
\end{tikzpicture}

\end{document}

在这里插入图片描述

剪切

  • 有时候我们只需要图形的一个部分
    使用 \clip 图形; 语法。这里 图形 图形 图形 可以使用之前的圆,椭圆,矩形等图形。
    或者使用 \clip [draw] 图形 语法,绘制并剪切图形
\documentclass{article}
\usepackage{tikz}
\tikzset{MyStyle/.style={color=red!50,very thin}}
\begin{document}
\begin{tikzpicture}[scale=3]
	\clip [draw] (-0.1,-0.2) rectangle (1.1,0.75);
	\draw[step=.5cm,gray,very thin] (-1.4,-1.4) grid (1.4,1.4);
	\draw (-1.5,0) -- (1.5,0);
	\draw (0,-1.5) -- (0,1.5);
	\draw (0,0) circle [radius=1cm];
	\draw (3mm,0mm) arc [start angle=0, end angle=30, radius=3mm];
\end{tikzpicture}
\end{document}

在这里插入图片描述

抛物线和正弦曲线绘制

  • 对于抛物线,使用 \draw A parabola B; 绘制从点A到点B的抛物线
    对于正弦曲线,使用 \draw A B 绘制从点A到点B的曲线,这里点的坐标使用 sin(x,y)cos(x,y) 来表示
    可以连续使用 \draw A B C D …… 来绘制连续的正弦曲线。
  • 发现,输出的pdf鼠标移动上去可以放大展示。
\documentclass{article}
\usepackage{tikz}
\tikzset{MyStyle/.style={color=red!50,very thin}}
\begin{document}
\begin{tikzpicture}
	\draw (0,0) parabola (1,1);
\end{tikzpicture}

\begin{tikzpicture}
\draw[x=1.57ex,y=1ex] (0,0) sin (1,1) cos (2,0) sin (3,-1) cos (4,0)
(0,1) cos (1,0) sin (2,-1) cos (3,0) sin (4,1);
\end{tikzpicture}
\end{document}

在这里插入图片描述

填充和绘制

  • 使用 \fill 函数进行填充
    在构造填充回路时,建议使用 cycle 作为最后的坐标,可以看下下图两者的区别。
  • 使用 \fill[green!20!white] 表示填充使用20%的绿和80%的白。
\documentclass{article}
\usepackage{tikz}
\tikzset{MyStyle/.style={color=red!50,very thin}}
\begin{document}

\begin{tikzpicture}[line width=5pt]
	\draw (0,0) -- (1,0) -- (1,1) -- (0,0);
	\draw (2,0) -- (3,0) -- (3,1) -- cycle;
\end{tikzpicture}

\begin{tikzpicture}[line width=5pt]
	\fill (0,0) -- (1,0) -- (1,1) -- (0,0);
	\fill (2,0) -- (3,0) -- (3,1) -- cycle;
\end{tikzpicture}

\end{document}

在这里插入图片描述

渲染

  • 为了让图形更高大上,可以使用简单渲染
    使用 \shade 或者 \shadedraw来渲染
    使用 [posA colorA, posB colorB] 来表示过度位置和过度颜色,见下方代码
    使用 [ball] 表示渲染成球体
\documentclass{article}
\usepackage{tikz}
\tikzset{MyStyle/.style={color=red!50,very thin}}
\begin{document}

\begin{tikzpicture}[rounded corners,ultra thick]
	\shade[top color=yellow,bottom color=black] (0,0) rectangle +(2,1);
	\shade[left color=yellow,right color=black] (3,0) rectangle +(2,1);
	\shadedraw[inner color=yellow,outer color=black,draw=yellow] (6,0) rectangle +(2,1);
	\shade[ball color=green] (9,.5) circle (.5cm);
\end{tikzpicture}

\end{document}

在这里插入图片描述

  • 可以发现,上述我们使用了 A rectangle +B 的语法,这里A,B是坐标点。
    +A 表示当前点的坐标为:上一个指明的点的坐标下x,y的变化量。
    ++A 表示在 +A 的基础上,让该点成为新的指明的点。
    与此类似还有 -A--A 的语法
    比如 (1,2) rectangle ++(1,2) 等价与 (1,2) rectangle (2,4)

绘制箭头

  • [->] , [<-], [<->] 属性表明绘制箭头的种类,使用一般的 \draw 绘制即可
    可以重叠叠加,比如 [<<-] 或者 [><>-<><<]
  • 使用 [>=kind of end arrow tip] 来更改箭头的类型,比如使用 arrows.meta 包中 Stealth,更改箭头类型如下:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary {arrows.meta}

\tikzset{MyStyle/.style={color=red!50,very thin}}
\begin{document}

\begin{tikzpicture}
\draw [<<<<->] (0,0) arc [start angle=180, end angle=30, radius=10pt];
\draw [<->] (1,0) -- (1.5cm,10pt) -- (2cm,0pt) -- (2.5cm,10pt);
\end{tikzpicture}

\begin{tikzpicture}[>=Stealth]
\draw [->] (0,0) arc [start angle=180, end angle=30, radius=10pt];
\draw [<<-,very thick] (1,0) -- (1.5cm,10pt) -- (2cm,0pt) -- (2.5cm,10pt);
\end{tikzpicture}

\end{document}

在这里插入图片描述

循环

  • 使用 \foreach \var in {set} {Do something} 来遍历变量 var
    注意! $something$ 中两个美元符号中间用来输出 Latex 符号
    \x 表示变量 x
  • \foreach 可以嵌套,如下面:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary {arrows.meta}

\tikzset{MyStyle/.style={color=red!50,very thin}}
\begin{document}

\begin{tikzpicture}
	\foreach \x in {1,2,3} {$x =\x$, }
\end{tikzpicture}

\begin{tikzpicture}
	\foreach \x in {1,2,...,5,7,8,...,12}
	\foreach \y in {1,...,5}
	{
	\draw (\x,\y) +(-.5,-.5) rectangle ++(.5,.5);
	\draw (\x,\y) node{\x,\y};
	}
\end{tikzpicture}


\end{document}

在这里插入图片描述

添加文本信息

  • 上面代码发现,node 关键词后面会跟着可选内容 [] 以及花括号 {补充文本信息}
    第一个例子,使用 \draw A node[fill=yellow!80!black]{C} 在点A绘制后,在该位置添加一个文本信息C,使用填充格式
    第二个例子,使用 [sloped,above][sloped,below] 更改字体在曲线上显示的位置
    使用 [anchor=north] 更改显示字锚点的基础位置
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary {arrows.meta}

\tikzset{MyStyle/.style={color=red!50,very thin}}
\begin{document}

\begin{tikzpicture}
	\draw (0,0) rectangle (2,2);
	\draw (0.5,0.5) node [fill=yellow!80!black]
	{Text at \verb!node 1!}
	-- (1.5,1.5) node {Text at \verb!node 2!};
\end{tikzpicture}

\begin{tikzpicture}
	\draw (0,0) .. controls (6,1) and (9,1) ..
		node[near start,sloped,above] {near start}
		node {midway}
		node[very near end,sloped,below] {very near end} (12,0);
\end{tikzpicture}

\end{document}

在这里插入图片描述

绘制一个角度

  • 我们希望绘制一个角度
    使用 \coordinate (A) at B; 表示给定点A,位置为B
    使用 \coordinate (A) at (B:C) 表示给定点A,位置为角度B处C距离。B为弧度制。
    于是我们绘制线段 AB、BC,然后使用 pic {angle = A--B--C} 来给定三个点,绘制他们之间的弧线角度。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary {angles,quotes}

\tikzset{MyStyle/.style={color=red!50,very thin}}
\begin{document}


\begin{tikzpicture}[scale=3]
	\coordinate (A) at (1,0);
	\coordinate (B) at (0,0);
	\coordinate (C) at (30:1cm);
	\draw (A) -- (B) -- (C)
	pic [draw=green!50!black, fill=green!20, angle radius=9mm,
	"$\alpha$"] {angle = A--B--C};
\end{tikzpicture}

\end{document}

在这里插入图片描述

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

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

相关文章

DoFE:Domain-oriented Feature Embedding

key : 通过利用多源领域的知识来提高CNN在未见目标领域上的泛化能力。 我们的DoFE框架通过动态丰富图像特征与来自多源领域学习的附加领域先验知识相结合&#xff0c;使语义特征更具辨别性。引入了一个领域知识池来学习和记忆从多源领域提取的先验信息。 然后&#xff0c;原始…

Raidrive安装配置,结合alist实现将webdav网盘挂载为本地磁盘(保姆级教程)

目录 1. 下载安装2. 添加网盘3. 常见报错3.1 不要勾选安全连接3.2 路径必须填写正确 4. 测试效果总结 欢迎关注 『发现你走远了』 博客&#xff0c;持续更新中 欢迎关注 『发现你走远了』 博客&#xff0c;持续更新中 书接上文 AList挂载工具安装搭建使用教程&#xff0c;快速访…

【数据结构】一文读懂循环队列的实现细节

循环队列最早出现在计算机系统设计中&#xff0c;它的出现主要是为了满足实际需求&#xff1a;在存储机制上&#xff0c;传统的队列存储方式难以满足一些实际应用中需要存储大量数据的场景。在有限的数组空间内&#xff0c;传统的队列存储方式可能会出现存储空间浪费过多、存储…

【操作系统】线程简介

线程简介 线程概念 在许多经典的操作系统教科书中&#xff0c;总是把进程定义为程序的执行实例&#xff0c;它并不执行什么, 只是维护应用程序所需的各种资源&#xff0c;而线程则是真正的执行实体。 所以&#xff0c;线程是轻量级的进程&#xff08;LWP&#xff1a;light w…

4.1 - 信息收集 - 子域名收集

「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 子域名收集 一、域名爆破工具二、搜索引擎1、百度2、必应 三、第三方网站1、VirusTotal2、…

LLaMA模型系统解读

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

深度剖析,如何从底层代码层面理解Selenium和Appium的关联

目录 前言&#xff1a; 一、Selenium和WebDriver 二、Appium和WebDriver 三、Selenium和Appium的底层关联 1. Selenium WebDriver提供底层的浏览器控制机制 2. 利用JSON Wire Protocol通信协议实现通讯机制 四、实例代码 总结&#xff1a; 前言&#xff1a; Selenium和…

FFmpeg命令实战(中)

标题 1.ffplay命令播放2.ffplay简单过滤器3 .ffmpeg命令参数1.主要参数2. 音频参数3.视频参数 4.ffmpeg命令提取音视频数据1.保留封装格式2.提取视频3.提取音频 5.ffmpeg提取像素格式1.提取YUV2.提取RGB3.提取PCM 5.ffmpeg命令转封装格式1.保持编码格式2.改变编码格式3.修改帧率…

String源码

介绍 1&#xff09;String 是一个 final 类&#xff0c;即不能被继承的类 。 2&#xff09;String类实现了 java.io.Serializable 接口&#xff0c;可以实现序列化。 3&#xff09;String类实现了 Comparable< String>&#xff0c;可以用于比较大小&#xff08;按顺序…

49天精通Java,第34天,finalize、引用计数、JVM停止复制、JVM即时编译器

目录 一、finalize二、引用计数三、JVM停止复制四、JVM即时编译器五、惰性评估 大家好&#xff0c;我是哪吒。 &#x1f3c6;本文收录于&#xff0c;49天精通Java从入门到就业。 全网最细Java零基础手把手入门教程&#xff0c;系列课程包括&#xff1a;基础篇、集合篇、Java8…

chatgpt赋能Python-pythonchallenge

Python Challenge: 挑战你的Python技能 如果你正在寻找一种提高Python编程技能的有趣方法&#xff0c;那么Python Challenge是一个不错的选择。Python Challenge是一个在线的puzzle游戏&#xff0c;每个挑战都需要使用Python编写程序来解决。这些挑战是由一个名叫Nadav Samet的…

centos或ubuntu部署OpenSips

参考 Centos7安装opensips超详细教程 centos7 部署opensips信令服务器 【死磕opensips】sip协议解析 开源SIP Kamailio OpenSIPS的四种均衡负载算法详解和SBC呼叫路由 基于SIP协议的性能测试——奇林软件kylinPET OpenSIPS实战&#xff08;一&#xff09;&#xff1a;OpenSIPS…

【消息中间件】RocketMQ如何保证消息的可靠性?

文章目录 前言一 、发送端消息可靠性1. 同步发送2. 异步发送3. 单向发送4. 发送重试策略 二、存储端消息可靠性1. 存储可靠性挑战2. 同步刷盘3. 异步刷盘&#xff08;默认&#xff09;4. 过期文件删除 三、消费端消息可靠性1. 消费重试2. 死信队列3. 消息回溯 四、总结参考与感…

一文读懂“大语言模型”

1、背景 本文基于谷歌云的官方视频&#xff1a;《Introduction to Large Language Models》 &#xff0c;使用 ChatGPT4 整理而成&#xff0c;希望对大家入门大语言模型有帮助。 本课程主要包括以下 4 方面的内容&#xff1a; 大语言模型的定义描述大语言模型的用例解释提示…

网络安全分组混战靶机攻击与加固——BPlinux系列

网络安全分组混战靶机攻击与加固——BPlinux系列 目录 一、渗透过程 二、加固过程 三、中职网络安全竞赛知识星球 一、渗透过程 #这是一个以前混战阶段用的靶机然后C模块也会用 1、我们先使用nmap --scriptvuln(这是nmap自带的脚本&#xff0c;可以扫描可利用的漏洞&…

计算机网络|第四章:网络层:数据平面

前文回顾&#xff1a;第三章&#xff1a;传输层 运输层依赖于网络层的主机到主机的通信服务&#xff0c;提供各种形式的进程到进程的通信。网络层与传输层和应用层不同的是&#xff0c;在网络中的每一台主机和路由器中都有一个网络层部分。正因如此&#xff0c;网络层协议是协议…

metaRTC+ZLMediaKit实现webrtc的推拉流

概述 ZLMediaKit是一个基于C11的高性能运营级流媒体服务框架&#xff0c;是一个支持webrtc SFU的优秀的流媒体服务器系统。 metaRTC新版本支持whip/whep协议&#xff0c;支持whip/whep协议的ZLMediaKit推拉流。 信令通信 ZLMediaKit新版本支持whip和whep协议&#xff0c;支…

065:cesium设置带有箭头的线材质(material-9)

第065个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中设置带有箭头的线材质,请参考源代码,了解PolylineArrowMaterialProperty的应用。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共82行)相关API参考…

Microsoft Office 2010安装

哈喽&#xff0c;大家好。今天一起学习的是office2010的安装&#xff0c;有兴趣的小伙伴也可以来一起试试手。 一、测试演示参数 演示操作系统&#xff1a;Windows 7 不建议win10及以上操作系统使用 系统类型&#xff1a;64位 演示版本&#xff1a;SW_DVD5_Office_Profession…

Ceres简介及示例(9)On Derivatives(Numeric derivatives)

使用analytic derivatives的另一个极端是使用numeric derivatives。关键是&#xff0c;对函数f(x)关于x的求导过程可以写成极限形式: Forward Differences前向差分 当然&#xff0c;在计算机中&#xff0c;我们不能执行数值求极限操作&#xff0c;所以我们要做的是&#xff0…