TEX:图形

图片的尺寸和位置

单位长度的选择是用如下命令进行的:

\setlength{\unitlength}{长度}

坐标值一般都是 正数,这就是说点位于参考点的右上方向。由于参考点是图形的左下角,因此所有点都应该在它的右上方向。然而,坐标也可以取负值。负的x值(坐标对中第一个数为负数)定义的点在原点的左边,而负的y值(坐标对中第二个数为负数) 定义的点在原点的下边。
单位长度通常就设为方便的尺寸,如1cm, 1mm1in,然后相应地建立我们的图形。当整幅图形完成后,只需修改单位长度的定义,就可以放缩图形。一幅原始设计时\unitlength取1cm,可以通过把单位长度重定义为1.2cm来放在为原来的1.2倍。

图形环境

图形是用picture环境构造的,其语法为

\begin{picture}(x尺寸,y尺寸)
画图命令
\end{picture}

这里的(x尺寸, y尺寸)是一组数,它定义了图形在x方向(水平)和y方向(竖直)的尺寸(范围)。这对数是用小括号围起来的。单位长度就是在此之前所定义的\unitlength

\setlength{\unitlength}{1.5cm}
\begin{picture}(4,5) ... ... ... \end{picture}

的结果为一幅4倍单位长度宽,5倍单位长度高的图形。而由于已把单位长度设为1.5cm ,因此图形的实际尺寸为宽6cm,高7.5cm。
画图命令就是下面将要介绍的用以生成和定位各个图形要素的命令。这些命令再加上字体样式和尺寸声明以及线粗命令\thicklines\thinlines就是可以位于picture环境中的所有命令。后面这两条命令用来确定两种可用线粗中的哪一种被用来绘制当前直线:我们按自己的意愿在两者之间来回切换。刚开始时激活的是细线。
参数\unitlength的值一定不能在 picture 环境内改变,因为对它而言,单位长度必须维持不变。当然可以在两幅图形中间改变它的值。
如果\unitlength的定义随同picture环境一起被包围在另一个类似于\begin{center} ... \end{center}这样的环境内,那么\unitlength值的作用持续到这个环境结束。一个前面没有\unitlength定义的picture环境,就会采用它的标准值1pt。

图形环境的广义语法

picture环境的广义语法中多了一对坐标,其为可省参数值:

\begin{picture}(x尺寸,y尺寸)(x偏移,y偏移)
图形命令\end{picture}

在这种形式中,(x偏移,y偏移)定义了左下角的坐标。这就是说对环境中所有\put命令,要从其定位坐标中减去x偏移y偏移,这样整幅图就向左平移了x偏移单位,向下平移了y偏移单位。

定位命令

图形中的元素是用两条命令\put\multiput来创建和定位的,它们的语法为:

\put(x坐标,y坐标){图形元素}
\multiput(x坐标,y坐标)(x增量,y增量){数}{图形元素}

这里的图形元素就是下一节要讲述的画形基本命令。参数值(x坐标,y坐标)是安置坐标,规定了元素在画形坐标系中的位置,它是以\unitlength为单位。

命令\multiput是把同样的图形元素生成数次,每次移动(x增量, y增量)。因此元素被重复地画在
( x 坐标, y 坐标 ) , ( x 坐标 + x 增量, y 坐标 + y 增量 ) , ( x 坐标 + 2 × x 增量, y 坐标 + 2 × y 增量 ) , . . . 一直到 ( x 坐标 + [ 数 − 1 ] × x 增量, y 坐标 + [ 数 − 1 ] × y 增量 ) (x坐标,y坐标),(x坐标+x增量,y坐标+y增量),\\ (x坐标+2\times x增量,y坐标+2\times y增量),\\ ...一直到\\ (x坐标+[数-1]\times x增量,y坐标+[数-1]\times y增量) (x坐标,y坐标)(x坐标+x增量,y坐标+y增量),(x坐标+2×x增量,y坐标+2×y增量),...一直到(x坐标+[1]×x增量,y坐标+[1]×y增量)
每画一次,(x坐标,y坐标)都要增加(x增量,y增量)。这里被增加的量可以是正数,也可以是负数。

注意坐标和增量数对都是放在小括号内,其中的两个数是用逗号分开的。而数和图形元素项则是像通常那样放在大括号内。
警告:由于这里是用逗号分开两个数,因此不能再用它表示小数点。对于坐标项,小数点必须是句号,而不能是逗号。

基本画图命令

图形中的文本

所有画形元素中最简单的就是一段文本,定位在图形中需要的位置。只要把文本放在\put\multiput命令中的图形元素所在地方就可以了。
做为图形中元素的文本也可以包装进一个\parboxminipage环境中,这时在\put命令中坐标项的参考点与竖直盒子的定位参数值有关

图形中的盒子–矩形

picture环境中也可用盒子命令\framebox, \makebox\savebox,但是其语法已做了推广。而且,还有一个盒子命令\dashbox :

\makebox(x尺寸,y尺寸)[位置]{文本}
\framebox(x尺寸,y尺寸)[pos]{text}
\dashbox{虚线尺寸}(x尺寸,y尺寸)[位置]{文本}

尺寸数对(x尺寸,y尺寸)定义了矩形的宽度和高度,它们以\unitlength为单位。定位参数值位置定义了文本在盒子中的位置。它可以取如下值:

  • [t] top-输入文本水平居中地位于盒子顶边的下面。
  • [b]bottom-输入文本水平居中地位于盒子底边的上面。
  • [l] left-输入文本竖直居中地位于盒子的左边。
  • [r] right-输入文本竖直居中地位于盒子的右边。
  • [s] stretch-输入文本竖直居中,但要水平伸展以充满整个盒子。

如果没有可省参数位置,那么输入文本是水平竖直居中放置在盒子中。
也可以一次这些参数中的两个组合起来使用:

  • [tl] top left- 输入文本位于左上角。
  • [tr] top right- 输入文本位于右上角。
  • [bl] bottom left- 输入文本位于左下角。
  • [br] bottom right-输入文本位于右下角。

这里值的顺序是无关紧要的,tllt的效果相同。
这些命令就是用在\put\multiput命令中图形元素处。盒子的放置方式是其左下角所处位置就是放置命令中的坐标对。

图形元素\makebox\framebox命令完全一样,只是它没有矩形框而已。对它而言,经常把范围对取为(0,0),这样可以把文本放在所希望的地方。

图形元素\dashbox也生成有框盒子,不过其框线为虚线。参数值虚线尺寸就是用来定义短线长度。

即使在上面这些图形盒子命令中,也可以把文本放在竖直盒子(\parboxminipage)中。由于竖直盒子自身具有可省的定位参数值b或t,它一定不能与图形盒子的定位参数值冲突,因此要遵守下面的规则:

  • 如果图形盒子中包含了定位参数值b或t,那么被包围的竖直盒子中也必须有相同的定位参数值。如果图形盒子中没有定位参数值,或者只是r或l,那么竖直盒子必须是标准(无参数值)形式。

图形盒子中的定位参数值对于被包围竖直盒子的作用同它对一行文本的作用一样,都是把它们当做一个整体对待。

直线

在picture环境中,LATEX可以绘制任意长度的水平,竖直以及有限倾角的直线。这个图形元素的语法是:

\line(△x,△y){长度}

对于水平线和竖直线,长度定义了以单位长度为单位的线长。对于有倾角的直线,参数值长度定义的是沿x轴的投影长度。直线开始于由\put\multiput命令中给出的安置坐标确定的点。

直线斜率 Δ y Δ x \dfrac{\Delta y}{\Delta x} ΔxΔy​​, Δ x \Delta x Δx Δ y \Delta y Δy的取值要遵从下面的规则:

  1. 数值必须是整数(负数或正数均可)。
  2. 只可以取值0,1, …,6。
  3. 在数对中的两数不能有公因子。

负的△x意味着向左移动,而负的△y意味着向下移动。

倾斜直线的长度必须不能短于10pt或者3.5mm,否则不会生成任何结果。但是如果包含了pict2e软件包,就不会有这种限制。

箭头

箭头图形要素是用下面的命令生成的:

\vector(△x,△y){长度}

其作用方式同\line命令完全一样,而且参数值和其局限性也是相同的。这条命令从由\put\multiput命令定义的位置开始画一条直线, 然后在终点处画上箭头。
同直线一样,箭头的长度也不能少于10pt或3.5mm。规则1-3也同样适用于△x和△y,而且更进一步,要求可以取的值只能是0,1,2,3,4。这样当不考虑正负号时,只能画13 种不同倾角的箭头。

圆这种图形要素是用“下面的命令得到的:

\circle{直径}
\circle*{直径}

利用*-形式的命令,可以画出内部被填充了的实心圆,而不是标准形式画出的那种轮廓线。只能画特定尺寸的圆,因此LATEX会选出与指定直径最接近
的圆。( pict2e软件包可以绘制任意尺寸的圆。)

在相应的\put命令中的安置位置对应于圆心。

卵形线与圆角

我们这里所说的卵形线指的是一种矩形, 其顶角用四分之一圆角代替;这里对直径的选取是使所有边光滑拼接的最大值。生成卵形线的命令是

\oval(x尺寸,y尺寸)[部分]

在相应\put命令中的安置坐标对应于卵形线的中心。

可省参数部分可以取值t,b,l或者r,以生成一半的卵形线。

参数值部分也可以是四种组合tl,tr,bl或br中的一种,以生成四分之一的卵形线。这里两字母的顺序是无关紧要的。

竖直堆积文本

有时在演示图中需要沿竖直方向书写文本,这可以用如下命令来做到

\shortstack[位置]{列}

位置参数值可以取l,r或c。标准值是c,表示居中。该命令类似于只有一列的tabular环境。表示输入文本,行与行之间用\\分开。

有框文本

\framebox命令生成一个具有预先定义尺寸的有框盒子,其中的文本可以放在不同的地方。在文本模式中,命令\fbox可以围绕文本画一个方框,而且其会与文本匹配得很好。这条命令也可以用在picture环境中。
在盒子的框线与被包围文本之间的距离是由参数\fboxsep所确定的。
利用\put命令来放置一个\fbox,其方式是出人意料的,请看下图:

在演示图中通常不期望在框中出现多余的空白,特别当方框包围的是幅图,而不是文本时更是如此。在这种情况中,可以使用命令

\frame{图形元素}

\put命令中的安置坐标与通常一样, 相应于左下角。

曲线

在picture环境中也可以用下面的命令画曲线:

\bezier{数}(x1, y1)(x2, y2)(x3, Y3)
\qbezier[数](x1, y1)(x2, y2)(x3, y3)

它会画出一条从点 (x1,y1)到(x3,y3)的二次Bezier曲线,而(x2, y2)是Bezier控制点。曲线实际上是用数+1个点画出来的。\bezier\qbezier命令之间的唯一区别在于, 对后者而言,数是一个可省参数值;如果省略了它,那么就会计算生成一条光滑曲线所需要的点数。之所以还保留\bezier命令,就是为了与老版本兼容。

直线粗细

对于图形元素\circle、\oval、\vector 和斜线,存在两种可选择的线粗。即可以用\thicklines\thinlines来选择粗线或细线。这两条命令的作用直到有相反命令为止,或者其所在环境结束。刚开始时\thinlines起作用。
水平或竖直直线的线粗可以用下面的声明来定义成任意期望的尺寸:

\linethickness{粗细}

参数值粗细是正的长度定义。利用\linethickness{1.5mm}可以使得所有后面的水平或竖直线粗1.5mm。如果包含了pict2e 软件包,这个粗细定义也同样适用于斜线。
由于方框就是用竖直线和水平线构成的,因此命令\linethickness的定义对\framebox\dashbox也同样有作用。

嵌套图形

\put\multiput命令中的图形元素也可以是另一个picture 环境。如此多重图形的语法是:

\put(x坐标,y坐标){\setlength{\unitlength}{单位长度}
\begin{picture}(x尺寸,y尺寸)
子图形... \end{picture} }

在内部图形环境中的安置坐标是相对于它自己的原点的,即其左下角;而原点就对应于外面picture环境中\put命令的安置坐标。可以给内部picture环境选择不同的\unitlength单位长度值;然而,如果没有定义新的值,那么它就用与外面picture环境相同的\unitlength值。

存贮部分图形

可以把图形中的一组图形元素用特定的名称保存成子图,然后就能随时调用整组命令,而不需一条一条地调用。
首先必须为每个子图起一个名称,所用命令为:

\newsavebox{\子图名称}

这样就会创建一一个名叫 \子图名称的用于保存图形的盒子。然后,用下面的命令保存子图:

\savebox{\子图名称}(x尺寸,y尺寸)[位置]{子图}

这里的参数值(x尺寸,y尺寸)与位置同\makebox中的含义一样。
如果图形命令\子图只是一小块文本,那么这条命令就与\makebox 命令几乎完全一样,除了文本不是显示出来,而是存贮到\子图名称中。子图可以用下面这条命令当做一个图形元素安置在主图内的任何地方。

格纸

软件包graphpap增加了一条绘 制格纸的命令

\graphpaper[数](x,y)(lx,ly)

这条命令把方格的左下角放在(x,y)处,它有lx单位宽,ly单位高。每隔给定的数单位就划条格线,而每个第5条格纸要粗一些,并且加上标记。如果没有给出,那就假定它是10。 所有参数值必须是整数,而不能是小数。

浮动表格和插图

LATEX确确实实地按照上面所要求的那样,做到了插图和表格连同标题和说明在一起的浮动。这种机制是用下面命令调用的:

\begin{figure}[位置]插图\end{figure}
\begin{figure*}[位置]插图\end{figure*}
\begin{table}[位置]表格\end{table}
\begin{table*}[位置]表格 \end{table*}

*-形式只适用于两列页面格式,它使得插图或表格占据两列,而不是正常情形的一列。当页面格式是单列时,它的作用同标准形式一样。
在上面的语法中,插图表格就是要浮动的内容,它是包含在picturetabular环境中的,还有可能出现的\caption命令。
而参数值位置定义了插图或表格允许出现的地方。位置由零到四个字母组成,因此取值有很多可能,字母的意义如下:

  • h
    here:浮动对象可以位于环境输入时所处的地方;它不能用于*-形式;
  • t
    top:浮动对象可以出现在当前页的顶部,条件是要有足够的空间以容纳它自己和其前面的文本;如果这行不通,就会把它加到下一页的顶部;页后续文本仍然显示在当前页上,直到正常地分页; (对于两列格式,上面叙述中的页换成列就可以了);
  • b
    bottom:浮动对象可以出现在当前页的底部;后续文本继续到在当前页上有放下浮动对象的足够地方为止;如果在当前页上已经没有足够地方,浮动对象会被放到下一页的底部;在*-形式中不能取这个值;
  • p
    page:浮动对象可以放在一个特殊页(或列)上,该页(或列)上只有插图和/或表格;
  • !
    与其它字母的组合一起使用,它会去掉关于间距和数值限制。

参数值可以组合,形成几种可能。如果没有给定任何值,LATEX假定它是标准组合tbp

安置参数值使得定位浮动对象有几种可能,但是实际的插入点是符合下述规则的最早可能点:

  • 在它定义的前面一页上再没有浮动对象;
  • 插图和表格是按照在文本中定义的先后顺序输出的,因此不会有浮动对象会在前面定义的同类型对象之前输出;然而插图和表格输出顺序有可能混杂在一起; 在两列格式中的双列*-浮动对象也有可能不符合这一顺序;
  • 浮动对象可会出现在安置参数值位置所允许的位置上;若没有该参数值,就会用标准组合tbp ;
  • 除非在位置中包含了!,定位要遵从在6.6.3节中描述的样式参数的限制;
  • 对于组合ht,优先考虑h;即使在当前页顶部有足够的空间,浮动对象也会被插入在定义点。

当使用了\clearpage, \cleardoublepage或者\end{document} 命令时,所有还没输出的浮动对象就会显示在单独一页或列上,而不会考虑它的定位参数。

子图与子表

%插入子图
\begin{subfigure}[位置]插图\end{subfigure}
%插入子表
\begin{subtable}[位置]插图\end{subtable}

例子:插入子图

\begin{figure}
    \centering
    \begin{subfigure}[t]{1in}
        \centering
        \includegraphics[width=lin]{placeholder}
        \caption{Caption 1}\labe1{fig:1a}
    \end{subfigure}
    \quad
    \begin{subfigure}[t]{1in}
        \centering
        \includegraphics[width=1in]{placeholder}
        \caption{Caption 2}\label{fig:1b}
    \end{subfigure}
    \caption{Main figure caption}\label{fig:1}
\end{figure}

例子:插入子表

\begin{table}
    \centering
    \begin{subtable}[t]{2in}
        \centering 
        \begin{tabular}{|l|l|l|}
        \hline
        100 & 200 & 300\\
        \hline
        400 & 500 & 600\\
        \hline
        \end{tabular}
        \caption{Caption 1}\label{table:1a}
    \end{subtable}
    \quad
    \begin{subtable}[t]{2in}
        \centering
        \begin{tabular}{|l|l|l|}
        \hline
        100 & 200 & 300\\
        \hline
        400 & 500 & 600\\
        \hline
        \end{tabular}
        \caption{Caption 2} \label{table:1b}
    \end{subtable}
    \caption{Main table caption}\label{table:1}
\end{table}

延迟浮动.

有的时候可能不希望浮动对象出现在某些页面上,例如不要出现在标题页的顶部。(LATEX会自动地校正这种情形。)然而,也有时候需要暂时抑制浮动。我们可能希望它位于页面顶部,但是我们不希望它位于一节引用它的那节的前面。命令

\suppressfloats[位置]

确保在当前页的位置定义的地方没有其它浮动对象。如果没有可省参数位置,就会抑制所有的浮动;否则位置可以是t或b,但不会全有。注意\suppressfloats并没有抑制当前页所有的浮动,它只是抑制位于从调用该命令开始到该页结束之间的浮动。因此来自于前一节的浮动仍旧有可能出现在当前页上。

浮动中的样式参数

有很多影响浮动安置的样式参数,用户可以修改它们:

  • topnumber 可以位于一页顶部的最多浮动对象数。
  • bottomnumber 可以位于一页底部的最多浮动对象数。
  • totalnumber 不考虑位置,可以位于一页中最多的浮动对象数。
  • dbltopnumbertotalnumber一样,只是表限定的是双列格式中横跨两列的浮动对象数。

上述参数都是记数器,可以用命令\setcounter{记数器}{数}来给它设定新值,这里记数器指的是是记数器的名称,而是将要设定的新值。

  • \topfraction是一个小数,定义页面顶部多大部分可以放浮动对象。
  • \bottomfraction是一-个小数,定义页面底部多大部分可以放浮动对象。
  • \textfraction该数规定了页面多大部分必须填充以文本。这表示一个最低限度,因此无论顶部,还是底部,总共放浮动对象的部分不能超过1-\textfraction
  • \floatpagefraction在开始新页之前浮动页中填充的浮动对象所占部分的最低限度。
  • \dbltopfraction\topfraction 一样,只是它对应于两列页面格式中双列浮动对象。
  • \dblfloatpagefraction\floatpagefraction一样, 只是它对应的是两列页面格式中双列浮动对象。

要用\renewcommand{命令}{小数}来改变这些样式参数的值,这里命令表示参数名,小数是新数,每个都必须小于1。

  • \floatsep 出现在页面顶部或底部中的浮动对象之间的竖直距离。
  • \textfloatsep 页面顶部和底部中的浮动对象与文本之间的竖直距离。
  • \intextsep 当用h安置参数值时出现在一页中间的浮动对象与上下正文之间的竖直距离。
  • \dblfloatsep\floatsep一样,只是它对应于两列页面格式中双列浮动对象。
  • \dbltextfloatsep\textfloatsep 一样,只是它对应于两列页面格式中的双列浮动对象。

这一组样式参数都是橡皮长度,可以用\setlength命令修改它们的值。

  • \topfigrule 在一页顶部浮动对象之后被执行的命令。可以用它加上标尺以把浮动对象与正文分开。但是这里加入的标尺必须是零高度。
  • \botfigrule 类似于\topfigrule ,但它是在位于页面底部浮动对象之前被执行。
  • \dblfigrule 类似于\topfigrule,但它是相应于双列浮动对象。

这三条命令通常什么都不做,但必要时可以重定义它们。例如,可以用下面的输入在顶部浮动之后加上粗0.4pt的标尺:

\renewcommand{\topfigru1e}{\vspace*{-3pt}
\rule{\columnwidth}{0.4pt}\vspace{2.6pt} } 

由于在\vspace*中是负的参数值,整个竖直距离还是零,这满足命令的要求。
所有单列样式参数在两列页面格式中也有作用,但它们只适用于填充一列的浮动对象。

浮动对象中的说明

可以用下面的命令生成插图的说明或表格的标题:

\caption[短标题]{标题文本}

要把这条命令放在figuretable环境中。标题文本就是与浮动对象显示在一起的文本,它可以相当长。短标题可以省略的,它是出现在插图或表格列表中的文本。如果不给出这段文本,那它就等于标题文本。如果标题文本长度超过300个字符,或者比一行还长的话,那就应该给出短标题。
table环境中,\caption命令生成形如Table n n n: 标题文本的标题,而在figure环境中,则是形如Figure n n n: 标题文本的说明,这里的n是自动给出的顺序编号。在文档类article中,插图和表格的编号是从1开始,直到文档结束。而对于report和book类,每章单独编号,形式为c.n,这里c表示当前章号,n是顺序号,每章开始被重设为1。插图和表格的编号是相互独立的。

\caption命令位于浮动环境中其它材料的前面,那就可以形成一个标题,即编号和文本显示在表格或插图的上方。如果该命令出现在所有其它浮动命令的后面,那么就会在对象的下方加上说明。也就是说,\caption 只是浮动中的一项,其中文本出现在顶部(标题)或底部(说明)与用户放的位置有关。

如果标题文本的长度不足一行,那它就会居中排列,否则它同正常段落一样。可以通过把命令放在子段盒子或者小页中来相应于表格或插图调整总宽度。例如,

\parbox{宽度}{\caption{标题文本}}

设置caption的编号

图号和表号由\figure\table储存,宏命令\figurename\tablename存储图表例的名称,如"图1-1"、“Figure 1-1”,序号前面的就是名称。

% change the styLe of the caption numbering.
\renewcommand{\thetable}{\alph{table}}
\renewcommand{\thefigure}{\Alph{table}}
\renewcommand{\thesubtable}{\Roman{subtable}}
\renewcommand{\thesubfigure}{\arabic{subfigure}}

在正文中对插图和表格的引用

表格和插图的自动编号,就意味着在写作时作者并不知道它们的编号。而又希望能够用这些对象的编号引用它们,如’Figure 3’或’Table 5 illustrates’,因此需要找到一种引用的方法。而仅仅跟踪已调用的\caption中的编号又是不够的,因为文档可能不是按顺序写作的,修改时又可能插入或删掉插图或表格。
这个问题可以借助于LATEX的交叉索引系统来解决,基本命令是

\label{名称}
\ref{名称}

这里给正文中要用到的插图或表格编号赋予一个关键词名称。关键词可以是字母、数字或符号的任意组合。赋值是用\label命令放在\caption命令的标题文本的任何地方就可以了;在正文中,命令\ref就会插入相应关键词所对应的编号。
下面用一个例子就可以很好地说明这一操作。在159页上的表格实际上写为

\caption{\label{budget95} Computer Center ... }

因此在正文中用Table \ref {budget95}可以生成Table 6.1
还有另一条引用命令\pageref,它可以生成被引用对象所在那一页的页码。例如,刚刚几行前,就是用 ‘在\pageref{budget95}页上’得到文本 ‘在159页上’。

插图与颜色宏包

有两个宏包可以使用,一个是比较基本的graphics,另一个则是扩展了的graphicx,它上载并使用前者的宏。独立的color宏包提供了处理颜色的宏包。这三个宏包上载时都可以有一个驱动程序名称做为选项,例如,

\usepackage[dvips]{graphics ,color}

\usepackage{graphicx}
\graphicspath{{图片路径}}

可以通过graphics.cfgcolor.cfg文件进行局部配置,因为这两个文件如果存在,是会被上述调用读入的。

引入外部图形

我们的问题就是把其它某个程序生成的图形文件包含到文档中,做为插图使用。有可能需要对其进行放缩或者旋转90°。我们希望要利用剪刀和胶水进行的操作改由计算机实现。
基本命令为

\includegraphics[lbx,lby][rtx,rty]{文件名}

其中lbx,lby是包围引入图形的包络盒的左下角坐标,而rtx, rty则是其右上角坐标。也就是说,它们确定的是下剪刀的地方。可以给定单位(如[3cm,2in]),可是如果不给定单位,就假定是大点(bp,每英寸72bp)。如
果只给出了一个可省参数,那它就是指右上角,而左下角假定为[0,0] 。
如果没有给出包络盒的坐标,那么驱动程序要从其它途径来获取该信息,具体视图形文件的类型而定。例如,对于非常流行的encapsulated PostScript文件(扩展名为.eps),包络盒信息就是从图形文件自身提取出来的。
利用\includegraphics*,可以对图形进行剪切,只有指定范围的内容被包含进来。

放缩

在引入图形时,用的是其本来大小。为了放缩图形,可以用下面两条命令:

\scalebox{h_scale}[v_scale ]{文本}

这条命令对文本内容应用水平和竖直放缩因子;如果没有给出v_scale ,那么它就等于h_scale

\resizebox{h_length}{v_length]{文本}

调整插图,使之具有给定的水平和竖直尺寸;如果有一个长度为!,那么要对两个尺寸进行同样的放缩。星号形式的命令可以使v_length表示盒子的高度与深度之和,而不仅仅只是高度。对于上述两条命令,文本内容都可以是\includegraphics命令。

反射

盒子中的内容可以用下述命令进行水平反射:

\reflectbox{文本}

旋转

盒子中的空容相对于基线左端点进行旋转,采用的命令为.

\rotatebox{角}{文本}

其中角以度数为单位,而旋转是逆时针方向的。

graphicx宏包

如果我们选用的是graphicx,而不是graphics宏包,那么在引入和旋转方面就可以用不同的接口。

\includegraphics[bb=lbx lby rtx rty, \angle=角, width=h_length,height=v_ength,scale=因子,clip=true/false,draft=true/false]{文件名}

其中的关键词顺序是无关紧要的,而且也不需要给出所有的。其绝大多数的含义是自明的,只是clip=true,表示要进行剪切;而draft意味着并不真的引入文件,而是为其留下适当的空白。也可以用命令的星号形式,
这时clip的值为true。
\rotatebox也用这些关键词进行了类似地重定义。

rotating宏包

rotating宏包尝试给出在某些程度上相对简化了的进行旋转的接口。它定义了

\begin{sideways}文本\end{sideways}
\begin{turn}{角}文本\end{turn}
\begin{rotate}{角}文本\end{rotate}
\turnbox{角}{文本}

这里sideways把文本旋转90°,turn则可以旋转任意角度。rotate环境与\turnbox命令是等价的:进行了旋转,但是所处的盒子为零尺寸,这样其内容会与周围文本重叠。

tikz绘图包

\usepackage{tikz}

tikz有两种使用方法,一种命令式的,一种环境式的。命令式用tikz命令包围起来,命令式是inline模式的。环境式用tikzpicture环境命令包围起来。如下所示:

\tikz{\draw (1,0) -- (0,1) -- (-1,0) -- (0,-1) -- cycle;} 

\begin{tikzpicture} 
\draw (1,0) -- (0,1) -- (-1,0) -- (0,-1) -- cycle; 
\end{tikzpicture}

基本命令

\draw[选项1,..,选项n] 绘图文本 
\filldraw[选项1,..,选项n] 绘图文本

区别是\filldraw绘制实心图形

选项参数:

  • color=[颜色]!数

    颜色:white, black, red, green, blue, cyan, magenta, yellow
    !数是可省参数,表示%的颜色

  • fill=[颜色]!数
    参数意义同上,只用在\filldraw

  • thickness 线的粗细
    ultra thin, very thin, thin, thick, very thick, ultra thick

  • 箭头参数: ->>->|-to-latex-stealth

    类似的还有左端比如 <- ,或者两端比如 latex-latex

\filldraw[color=red!60, fill=red!5, very thick](-1,0) circle (1.5);

圆圈周围的环的颜色设置为 60% 红色(比red更亮)。圆圈填充了更浅的红色。

使用standalone类

用tikz绘制某个单独的图片而不是一般的A4页面推荐使用 standalone 类。如下所示:

\documentclass[tikz,border=2pt]{standalone} 
\begin{document} 
\begin{tikzpicture} 
\draw[step=1,color=gray!40] (-2,-2) grid (2,2); 
\draw[->] (-3,0) -- (3,0); 
\draw[->] (0,-3) -- (0,3); 
\draw (0,0) circle (1);  
\end{tikzpicture} 
\end{document}

画网格

画网格主要用于辅助绘图,其中 help lines 是个不错的参数设置。此外 step 用来控制网格之间的间距,可以color来设置网格的颜色,不过一般没那个必要。然后接下来第一个坐标点是网格的左底点,第二个坐标点是网格的右顶点。

\begin{tikzpicture} 
\draw[help lines] ( -5,-5 ) grid ( 5, 5); 
\end{tikzpicture}

我们看到tikz的每一条命令最后都要跟一个分号“;”

画直线

\begin{tikzpicture} 
\draw[help lines] ( -5,-5 ) grid ( 5, 5); 
\draw[red] (-3,0) -- (3,0); 
\draw[red] (0,-3) -- (0,3); 
\end{tikzpicture}

画直线就是两个坐标点相连,中间 -- 符号表示直线的意思。之前网格是grid表示网格的意思。如果几个点用 -- 符号连接起来,表示这几个点连着来画几条折线,有多个画直线命令依次执行的意思。

直线带上箭头

draw命令可以跟上可选项 -> ,这样直线的右端就有一个箭头了。此外还有: ->>->|-to-latex-stealth

类似的还有左端比如 <- ,或者两端比如 latex-latex

画圆

\begin{tikzpicture} 
\draw[step=1,color=gray!40] (-2,-2) grid (2,2); 
\draw[->] (-3,0) -- (3,0); 
\draw[->] (0,-3) -- (0,3); 
\draw (0,0) circle (1);  
\end{tikzpicture}

其中第一个点是圆中心,circle表示画圆,第二个参数是半径大小。

画椭圆

\begin{tikzpicture} 
\draw[step=1,color=gray!40] (-2,-2) grid (2,2); 
\draw[->] (-3,0) -- (3,0); 
\draw[->] (0,-3) -- (0,3); 
\draw (0,0) ellipse (1 and 0.5); 
\end{tikzpicture}

这里第一个点是椭圆的中心点,ellipse表示画椭圆,后面参数两个值第一个是a也就是椭圆的半长轴,第二个是b也就是椭圆的半短轴。

画弧线

\begin{tikzpicture}
\draw[step=1,color=gray!40] (-2,-2) grid (2,2);
\draw[->] (-3,0) -- (3,0);
\draw[->] (0,-3) -- (0,3);
\draw[color=gray!40] (0,0) circle (1); %
\draw[color=red] (1,0) arc (0:45:1);
\draw[color=gray!40] (0,0) ellipse (1 and 0.5);
\draw[color=green] (1,0) arc (0:60:1 and 0.5);
\end{tikzpicture}

最基本的画弧线的命令如上代码第5行,其中第一个点是弧线的起点,然后arc表示画弧线,接下来括号里面的三个参数:第一个参数是开始的角度,第二个参数是结束时的角度,第三个参数是弧线对应圆的半径。对比第4行画的浅灰色的圆可以看出他们之间的关系。

上面代码第7行画弧线增加了一个and 和一个参数,这个时候画的弧线是根据椭圆来的,其中1是椭圆的半长轴,0.5是椭圆的半短轴。对比第6行画的浅灰色的椭圆可以看出他们的关系。

画长方形

\begin{tikzpicture}[scale=2]
\draw[step=1,color=gray!40] (-2,-2) grid (2,2);
\draw[color=red] (-1,-1) rectangle (1,1);
\end{tikzpicture}

这里使用了可选项 color=red 来控制线条的颜色,然后画长方形的第一个点是左底点,rectangle表示画长方形,第二个点表示右顶点。

放大图形

在tikzpicture环境后面跟上可选项 [scale=2] ,即将图形放大两倍。

确定点

点的定义

使用\coordinate命令或者\path命令附带coordinate来定义一个点。

\path (x坐标,y坐标) coordinate (点名);
\coordinate (点名) at (x坐标,y坐标);

示例:

\begin{tikzpicture}
\draw[step=1,color=gray!40] (-2,-2) grid (2,2);
\path (1,1) coordinate (p1);
\coordinate (p2) at ( 2, 0);
\draw[dotted, red] (p1) -- (p2)  ;
\end{tikzpicture}

点的相对偏移

\begin{tikzpicture}[scale=2]
\draw[step=1,color=gray!40] (-2,-2) grid (2,2);
\draw[latex-latex, red] (0,-2) -- ++(-1,1) -- ++(-1,-1);
\draw[dashed, blue] (0,1) -- +(-1,1) -- +(-2,0);
\end{tikzpicture}

tikz中有一个重要的概念,当前点,然后点可以通过当前点根据相对偏移来确定一个新的点。上面代码第3行的 ++ 符号和第4行的 +符号都根据当前点然后进行了 Δ x \Delta x Δx Δ y \Delta y Δy​ 的相对偏移从而确定了一个新的点。这两个符号的区别在于是不是更新当前点数据。++符号更新当前点,而+符号不更新。

++适合描述一连串逐渐变化的点,+适合描述多个点围绕着一个点变化的情况。

极座标

tikz中的点也支持极座标表示,(30:1cm),第一个参数是极座标里面的角度,第二个参数是半径。

确定路径

线条

path路径是最基本的命令,draw命令等价于 \path[draw] ,fill命令等价于 \path[fill] ,filldraw命令等价于\path[draw,fill] ,其他clip,shade命令情况类似。

虚线和点线

线条除了之前说的dasheddotted两种样式之外,还有loosely dasheddensely dashedloosely dotteddensely dotted

线条的粗细

\begin{tikzpicture} 
\draw [ultra thick] (0,1) -- (2,1); 
\draw [thick] (0,0.5) -- (2,0.5); 
\draw [thin] (0,0) -- (2,0); 
\end{tikzpicture}

其他选项还有 ultra thin , very thin, thin, semithick, very thick, ultra thick

或者直接通过可选项line width来定义。

\begin{tikzpicture} 
\draw [line width=0.4pt] (0,0) -- (2,0); 
\draw[red]  (0,1) -- (2,1); 
\draw [line width=0.2cm] (4,.75) -- (5,.25); 
\end{tikzpicture}

贝塞尔曲线

贝塞尔曲线是四个点画出一个曲线,具体我现在还不太清楚。其中第一个点是起点,第四个点终点,然后另外两个点是控制点。

\begin{tikzpicture}[scale=3] 
\draw[help lines] (0,0) grid (2,2); 
\draw[color=red] (0,0) .. controls (1,1) and (2,1) .. (2,0); 
\shade[ball color=gray!10] (0,0) circle (0.1); 
\shade[ball color=gray!40] (1,1) circle (0.1); 
\shade[ball color=gray!70] (2,1) circle (0.1); 
\shade[ball color=gray] (2,0) circle (0.1); 
\end{tikzpicture}

上面第2行代码就是画贝塞尔曲线的代码。

node

node里面插入中文字

\documentclass[tikz,border=2pt]{standalone}

%================字体================%
\RequirePackage{fontspec}
\usepackage{xcolor}

%中文环境
\RequirePackage[CJKnumber=true]{xeCJK}

\newfontfamily{\yanti}{颜体}
\begin{document}
\begin{tikzpicture}

\node{\fontspec[Scale=4,Color=red]{颜体} 新春快乐} ;

\end{tikzpicture}
\end{document}

多个node连接

\usetikzlibrary{positioning}
\tikzset{place/.style={circle,draw=blue!50,fill=blue!20,thick,inner sep=0pt,minimum size=6mm}}
\tikzset{transition/.style={rectangle,draw=black!50,fill=black!20,thick,inner sep=0pt,minimum size=4mm}}
\tikzset{every label/.style=red}
\begin{tikzpicture}[bend angle=45]
\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]{};
\draw [->] (enter critical) to (critical);
\draw [->] (waiting) to [bend right] (enter critical);
\draw [->] (enter critical) to [bend right] (semaphore);
\draw [->] (semaphore) to [bend right] (leave critical);
\draw [->] (critical) to (leave critical);
\draw [->] (leave critical) to [bend right] (waiting);
\end{tikzpicture}

这个例子需要加载positioning包,这个例子很好地展示了多个node和用箭头连接来表示他们关系的图形如何绘制。

迭代语句

\begin{tikzpicture}
\draw[help lines] (0,0) grid (3,2);
\foreach \x in {0,1,...,4}
\draw[xshift=\x cm] (0,-1) -- (0,1);
\end{tikzpicture}

其中 ... 表示一直这样有规律下去生成迭代列表。迭代语句有很多用法,详见后面的具体例子。

平移

xshift ,x坐标轴平移。 yshift ,y坐标轴平移。 rotate ,旋转 。 注意xshift默认的单位并不是cm,如果要单位是cm需要写出来。

\begin{tikzpicture} 
\draw[help lines] (0,0) grid (3,2); 
\draw (0,0) -- (1,1); 
\draw[red] (0,0) -- ([xshift=1cm] 1,1); 
\end{tikzpicture}

旋转

后面加上可选项 rotate=30 即可,意思是图形逆时针旋转30度。

\begin{tikzpicture} 
\draw (0,0)[rotate=30]  ellipse (2 and 1); 
\end{tikzpicture}

反对称

xscale=-1或者·就刚好相对y轴或x轴反对称。

pgfplots宏包

老实说pgfplots宏包真的编写的很好,有时甚至画一个基本的坐标轴都懒得动用其他宏包命令了,直接调用一个axis环境和进行一些简单的优化即可。当然就作为坐标轴作图可能总是用pgfplots宏包可能会稍显单调,但如果要求不是特别高的确实用pgfplots宏包会基于坐标轴的各个图形非常的称心如意。

直接画函数

\begin{tikzpicture} 
\begin{axis} 
\addplot {x^2}; 
\end{axis} 
\end{tikzpicture}

根据数据点来

\begin{tikzpicture}
\begin{axis} 
\addplot coordinates  
{(0,0) 
(1,1) 
(2,3) 
(3,9)}; 
\end{axis}
\end{tikzpicture}

电路图

用tikz绘制一般电路图的解决方案可以说是完美,首先需要加载宏包:

\usetikzlibrary{circuits.ee.IEC}

然后电路基本的组成单元是以node的某个特定样式的形式引入的,比如电池:

\node[battery] (battery) at(0,3) {};

下面列出常用的符号列表

电路基本符号

  • battery : 电池 \tikz[circuit ee IEC]{\node[battery] {};}
  • bulb : 灯泡 \tikz[circuit ee IEC]{\node[bulb] {};}
  • make contact : 开关 \tikz[circuit ee IEC]{\node[make contact] {};}
  • make contact : 开关另一种形式 额外选项[set make contact graphic= var make contact IEC graphic]} \tikz[circuit ee IEC,set make contact graphic= var make contact IEC graphic]{\node[make contact] {};}
  • resistor 电阻 (加上选项[ohm=20k]则上面写上电阻数值) \tikz[circuit ee IEC]{\node[resistor] {};}
  • contact 电线交点 \tikz[circuit ee IEC]{\node[contact] {};}
  • current direction to路径上加上电流方向(如果是[\textbf{current direction'}]则方向反向。) \tikz[circuit ee IEC]{\draw (0,0) to[current direction] (1,0);}

连线问题

各个元器件之间的连线除了一般的 -- 连直线外,还可以通过 -| 或者 |- 来处理垂直拐线的问题,其中 -| 你可以理解为从第一个点先横着走再竖着走,而 |- 你可以理解为先从第一个点竖着走再横着走。

翻转问题

四个基本的选项[ point up ,point down, point left, point right],分别是朝上,朝下,朝左和朝 右。

其他复杂的角度的处理方法不是用rotate选项,而是在路径上加上上面的电路符号选项,这样那些元器件会自动跟随路径对齐的。

电压表和电流表

电压表电流表实际上 circuit ee IEC 里面也有,不过不是我们(中国大陆)初高中物理书上常见的那种,而我们其实可以很简单的用node命令就画出了类似书本上的那种符号:

\node[draw,circle,inner sep =1pt] (A) at (-2,1.5) {\footnotesize A}; 
\node[draw,circle,inner sep =1pt] (V) at (1,4) {\footnotesize V};

颜色

颜色的指定可以采用已定义的名称,也可以用如下形式 :[模型]{定义}
其中模型可以取的值为

  • rgb (红(red),绿(green),蓝(blue)),
  • cmyk (青 (cyan), 品红(magenta),黄(yellow),黑(black),
  • gray
  • named

定义则是一串从0到1的数,表示模型中每个分量的大小。因此[rgb]{1,0,0}定义的是红色,[cmyk]{0,0,1,0} 定义的是黄色。而gray模型只有一个值。named模型是用于可识别颜色内部名称的驱动程序,例如dvips知道68种颜色。.
打开dvips.def,就会知道有哪些名称可以使用。
一种颜色可以如下定义

\definecolor{名称}{模型}{定义}

这样名称就可以用到下面所有的颜色命令中。对所有的驱动程序,有些颜色是自动预定义好了的: red, green, blue, yellow, cyan, magenta, black,white。
在下面的颜色命令中,颜色定义就是某一定义好的颜色,如{blue},或者[模型]{定义},如[rgb]{0,1,0}。

  • \pagecolor颜色定义 为当前页和后续页设置背景颜色;
  • \color颜色定义 为一个声明,把后续文本设置成给定颜色;
  • \textcolor颜色定义{文本} 用给定颜色设置其文本参数;
  • \colorbox颜色定义{文本} 把参数放到一个盒子中,并以给定颜色做为其背景;
  • \fcolorbox颜色定义1 颜色定义2{文本} 类似于\colorbox,只是用颜色定义1做为框线的颜色,包围背景色为颜色定义2的盒子;这两个颜色定义必须同为名称,或者同样的模型,对这后一种情形,只需给出一次模型名称;
  • \normalcolor 切换到在导言结束时激活的颜色。因此在导言中用\color颜色命令,可以改变整篇文档的标准颜色。其等价于字体选择中的命令\normalfont。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Shilong Wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值