中width用法1cm_如何在LaTeX中使用TikZ绘图

这个简明教程主要是教大家使用强大的LaTeX宏包TikZ来绘制工作生活中需要的一些示意图。

首先需要设置好LaTeX的环境,然后在.tex文件的preamble中加入\usepackage{tikz},接着在正文中就可以插入TikZ的代码了。TikZ可以以两种方式加入到文中,可以用inline式的代码绘制正常文本上的overlay,也可以用

\begin{tikzpicture}

...

\end{tikzpicture}

这个环境来单独绘图(本文主要介绍此种方法)。

现在我们就用例子来进行学习吧。如果需要改进例子为自己所用,你还需要参考TikZ&PGF的最新版说明。

  • 例子1

这里推荐首先在一个独立的.tex文件中把图片画好,然后再将所需之代码复制粘贴至正文即可。

\documentclass{minimal}

\usepackage{tikz}

\usetikzlibrary{positioning}

% 绘图所需的TikZ子库

\usepackage[active,tightpage]{preview}

% 用了preview之后你生成的pdf文件都可以直接用`\includegraphics`命令加入文本中

\PreviewEnvironment{tikzpicture}

\setlength\PreviewBorder{2mm} % 边距

\begin{document}

\begin{tikzpicture}

这个例子介绍三种画矩形的方法;首先TikZ默认会有一套2D坐标系,在下面(0.2,0.4)就是表示点的位置

\node (rect) at (0,0) [draw, thick, fill=orange, fill opacity=0.7,

minimum width=1cm,minimum height=4cm] {$Y$};

第一种方法,\node一个通用的命令,你可以在后面的[]中画任何预先定义好的形状, (rect)是给这个node取的名字,draw是指边框,thick是指边框的粗细,fill=orange是指在这个边框围起来的部分填入橙色,fill opacity是指橙色透明度如何,width和height是长宽;前面有minimum表示如果后面{ }中的公式占空间太大的话,你的矩形可以自动改变大小。

\node at (1,0) {$=$};

\draw[thick] (1.5,-2) rectangle (3.5,2);

\fill[blue, opacity=0.3] (1.5,-2) rectangle (3.5,2);

第二种方法则比较手动,\draw命令指定从(1.5,-2)到 (3.5,2)画一个矩形,后面的\fill命令来决定填什么颜色。

\draw[thick, fill=blue, fill opacity=0.3]

(1.5,-2) -- (1.5,2) -- (3.5,2) -- (3.5,-2) -- cycle;

这是和第二种方法同样画在同一个地方的矩形;只是这次人工指定了每个顶点的位置;最后的--cycle--(1.5,-2)是等价的;而且填色的部分是直接作为\draw命令的选项来设置的。

\node at (2.5,0) {$\Psi$};

\tikzstyle{greenrect} = [rectangle, draw, fill=green!50, fit=#1];

\coordinate (A) at (4,1);

\coordinate (B) at (5,-1);

\node[greenrect={(A) (B)}] {};

\node at (4.5,0) {$\beta$};

\end{tikzpicture}

\end{document}

06617978e34f585ba01d4ff4253f5442.png

这个例子结束之后有一个小tip:每一个TikZ命令结束之后一定要加;,否则LaTeX编译器会无法识别。

  • 例子2

箭头。 
这个是复分析路径积分的示意图。需要加入TikZ的几个库\usetikzlibrary{decorations,arrows}\usetikzlibrary{decorations.markings}。例子如下

\begin{tikzpicture}

\draw[style=help lines,step=1cm] (-2.3,-2.3) grid (2.3,2.3);

\draw[->,very thick] (-2.8,0) -- (2.8,0) node[right] {$x$};

\draw[->,very thick] (0,-2.8) -- (0,2.8) node[above] {$y$};

\tikzset{->-/.style=

{decoration={markings,mark=at position #1 with 

{\arrow{latex}}},postaction={decorate}}}

\draw[thick,->-=0.5](2,0) -- (0,2);

\draw[thick,->-=0.5](0,2) -- (-2,0);

\draw[thick,->-=0.5](-2,0) -- (0,-2);

\draw[thick,->-=0.5](0,-2) -- (2,0);

\filldraw[fill= blue!50,opacity=0.3] (2,0) -- (0,2) -- (-2,0) -- (0,-2) -- cycle;

\filldraw[fill= white,opacity=1] (-1,0) circle (0.3);

\draw[thick, decoration={markings, mark=at position 0.3

with {\arrow{latex reversed}}}, postaction={decorate}] (-1,0) circle (0.3);

\node[above] at (1.2,1){$C$};

\node[above] at (-1,0.3){$C'$};

\end{tikzpicture}

效果如下图:

93d5f9dc247ec8c1924966f9baf4bb50.png

  • 例子3

函数图像。

\begin{tikzpicture}

\draw[very thin,color=gray] (-0.1,-1.1) grid (3.9,8.1);

\draw[->,thick] (-0.5,0) -- (4,0) node[right] {$x$};

\draw[->,thick] (0,-1.2) -- (0,8.2) node[above] {$y$};

\draw[domain=0:3] plot (\x,{\x*\x-1}) node[below right] {$y = x^2-1$};

\draw[domain=0:3] plot (\x,{exp(-\x*\x/2)}) node[below right] {$y = e^{-x^2/2}$};

\end{tikzpicture}

上面这段命令用\drawplot自命令绘制了两个函数的图像。之后的node[above]node[below right]指出在函数图旁边建立node用来填写函数的表达式。 

效果如下图:

3bcda812b2d6da26ef0faddd4fa8bd6d.png

  • 例子4

给一些样本点,画一个区域(光滑度可调节)。

\begin{tikzpicture}

\draw[thick]  plot [smooth,tension=0.8]

coordinates {(-3,0.8) (-1.5,3.2) (1.8,2.8) (3.1,0.8)

(2.5,-2.2)  (0.2,-1.5) (-3,-3.5) (-3,0.8)};

\node at (1.6,1.6){$\Omega$};

\end{tikzpicture}

上面的代码画了一个比较光滑的区域。示意图(如下):

a39a5d31480060077b378f9144927123.png

这是在上面介绍过的plot自命令中加入smooth选项和tension参数的结果,如果把tension调节成0.2,则会变成这样:

d1c7fd49b382800f49573170598228af.png

而干脆去掉smooth和tension参数,plot会直接画一个经过这些给定坐标的多边形:

93e2fec97977adb72d9afbed3d383c61.png

  • 例子5

循环\foreach和三维坐标系统。

\begin{tikzpicture}[x={(1cm,0.5cm)},z={(0cm,0.5cm)},y={(1cm,-0.2cm)}]

\draw[->,thick,black!70] (0,6.5,0) -- (6.2,6.5,0) node[right] {Frequency}; % 频率轴

\draw[->,thick,black!70] (0,0,0) -- (0,6.5,0) node[below right] {Time}; % 时间轴

\draw[->,thick] (0,0,0) -- (0,0,2) node[above] {Magnitude};

\foreach \n in {0.5,1.5,...,5.5}{

\draw [cyan!50, domain=0:2*pi,samples=200,smooth]

plot (\n,\x, {sin(4*\n*\x r)/\n });

\draw[blue, ultra thick] (\n,6.5,0) -- (\n,6.5,1/\n);

} % 频率逐渐增大振幅逐渐变小的正弦函数

\draw [red, thick, domain=0:2*pi,samples=200,smooth]

plot (0,\x, {sin(4*0.5*\x r)/0.5 + sin(4*1.5*\x r)/1.5 + sin(4*2.5*\x r)/2.5 + sin(4*3.5*\x r)/3.5 + sin(4*4.5*\x r)/4.5 + sin(4*5.5*\x r)/5.5} );

% 最后是手动加起来得到矩形波的逼近

\end{tikzpicture}

\foreach命令就是TikZ中的for循环,比如\foreach \n in {0.5,1.5,...,5.5}这段命令就是让\n取到0.5到5.5之间间隔为0.5的数,然后代入取代后面plot命令中的\n

效果如下图:

4ff3acacdcb98f645cf8770a3d8b9bc6.png

上面这些例子是笔者平时教学研究时候绘制的示意图,希望对大家学习TikZ有所帮助。最后要给大家介绍一个网站: 
http://www.texample.net/tikz/examples/ 有各式各样的例子,从三维的球极投影,曲面的三角化,费曼图,到制作日历,在beamer里面加入overlay等等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值