TikZ是什么
PGF/TikZ是用于绘制几何和代数的向量图形的语言,PGF是底层语言,TikZ则是基于PGF的宏高级语言。PGF/TikZ可以在$\LaTeX$、plain $\TeX$、和\ConTEXt中使用. 这里主要关注TikZ在$\LaTeX$中的用法。
TikZ基础
设置使用环境
|
|
构造直线
|
|
不要忘记表达式尾的分号。
构造长方形
|
|
增加一点风格
|
|
如果help lines
定义在全局,则在文档开头使用\tikzset
|
|
一个风格的定义可以引用另一个风格。如Karl's grid
引用了上面的help lines
|
|
这也同时提示我们风格的用法类似\draw[style]。如果定义局部(在环境内部)的风格,则像下面这样
|
|
定义在tikzpicture
的可选参数中。上面也提示我们可以为风格设置默认值,想要替换默认值只需要给风格赋一个新值。
绘制选项
线条的粗细有以下一些值
ultra thin, very thin, thin, semithick, thick, very thick, ultra thick
thin
是正常粗细,它和$\TeX$的\hrule
的粗细相同。
线条的样式有以下一些值
loosely dashed, dashed, densely dashed
loosely dotted, dotted, densely dotted
含义一看便知。
若要为线条尾部增加箭头,可以为\draw添加->选项。若为线条头部增加箭头,改为<-。若首尾均增加箭头,则是<->。
TikZ中的node
TikZ中的node
可以插入文字标签,更重要的是可以方便地构造几何图形。转换图、流程图等等都可以用node
实现。
\node和at
|
|
这种写法使用了\node
命令和at
标记,简化了原始写法。行尾的{}
用于插入文字,为空表示不插入任何文字。可选参数中,circle
给出了环绕文字(尽管为空)的形状,draw
选项引起绘制环绕形状的动作。
事实上,\node
命令是\path node
的简写。更原始的版本是这样
最原始的版本没有使用at
标记,含义并不直观,所以不再列出。
node的尺寸
上面绘制出的node尺寸非常小,因为我们没有设定尺寸参数。node默认使用inner sep
的值自动为node中的文字增加环绕空白,而默认的inner sep
是很小的。可以手动修改inner sep
的值
但是更好的做法是使用minimum size
选项。它指定了node的最小尺寸:无论内部文字多么小(甚至没有),node都能达到这一最小尺寸。同时将inner sep
设为0pt
,这样能在minimum size
较小的时候不至于错误地包含inner sep
增加的空间。
node命名
为了后续引用定义好的node(比如在node间绘制连接线),可以为node命名,以后用名字引用node。方便的做法是将名字放置在圆括号内部
node的语法很宽松,名字、at标识符、可选参数的顺序不做要求。
使用相对位置
fixed positioning弊端很大,不直观而且不灵活,relative positioning使用起来更方便。在TikZ中使用相对位置需要载入positioning
库。于是使用相对位置改写上面的例子
当类似below
的选项后面紧跟of
,TikZ就会启用相对位置。相对距离则使用node distance
选项。
为node增加文字标签
想要在node周围增加文字标签,有两种方法
直接使用node,利用node的
anchor
属性12345678\begin{tikzpicture}\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}使用
label
选项12\tikz\node [circle,draw,label=60:$60^\circ$,label=below:$-90^\circ$] {my circle};
像上面这样,可以增加多个标签。
node连接线
连接node使用锚点anchor
最为简便,每个node定义了一系列的锚点。最简单的情况是直线。
绘制曲线就复杂的多。我们不列出使用controls
语法的方式,直接讲述to
操作。如果to
操作不带任何参数,它就绘制一条直线
需要注意的是,上面的node没有指定anchor
。当TikZ遇到一个node需要解析为坐标时,它会根据后面的内容判断应该选取node的哪一个anchor
作为坐标。如果TikZ判断错误,大可重新加上anchor
给出准确位置。
to
操作有很多参数,这里用到的是in
和out
对。in
和out
接受角度值,分别给出曲线离开初始坐标的角度和曲线到达目标坐标的角度。
绘制直线和曲线的代码得到
更为简单的方式是使用bend left/bend right
选项。
bend right
可以想象为,本来有一条连接起始点和终点的直线,把直线的中点向右拉伸$45^{\circ}$。
有一个操作比to
操作更好,就是edge
操作。这个操作专门为node添加连接线,它和node一样,不是path的一部分,在path构造完后才会被加入进去。
上面三条edge
操作每一条都创建了一条新的path,每条path都是enter critical to
在edge
后面的node。
两个很实用的style
bend angle
一旦被设置,bend left
和bend right
的角度都是bend angle
的值。