天天看點

TEX:圖形圖檔的尺寸和位置圖形環境定位指令基本畫圖指令浮動表格和插圖tikz繪圖包基本指令确定點确定路徑node疊代語句平移旋轉反對稱pgfplots宏包電路圖顔色

文章目錄

  • 圖檔的尺寸和位置
  • 圖形環境
    • 圖形環境的廣義文法
  • 定位指令
  • 基本畫圖指令
    • 圖形中的文本
    • 圖形中的盒子--矩形
    • 直線
    • 箭頭
    • 卵形線與圓角
    • 豎直堆積文本
    • 有框文本
    • 曲線
    • 直線粗細
    • 嵌套圖形
    • 存貯部分圖形
    • 格紙
  • 浮動表格和插圖
    • 子圖與子表
    • 延遲浮動.
    • 浮動中的樣式參數
    • 浮動對象中的說明
      • 設定caption的編号
    • 在正文中對插圖和表格的引用
    • 插圖與顔色宏包
    • 引入外部圖形
      • 放縮
      • 反射
      • 旋轉
    • graphicx宏包
    • rotating宏包
  • tikz繪圖包
  • 基本指令
    • 使用standalone類
    • 畫網格
    • 畫直線
    • 直線帶上箭頭
    • 畫圓
    • 畫橢圓
    • 畫弧線
    • 畫長方形
    • 放大圖形
  • 确定點
    • 點的定義
    • 點的相對偏移
    • 極座标
  • 确定路徑
    • 線條
    • 虛線和點線
    • 線條的粗細
    • 貝塞爾曲線
  • node
    • node裡面插入中文字
    • 多個node連接配接
  • 疊代語句
  • 平移
  • 旋轉
  • 反對稱
  • pgfplots宏包
    • 直接畫函數
    • 根據資料點來
  • 電路圖
    • 電路基本符号
    • 連線問題
    • 翻轉問題
    • 電壓表和電流表
  • 顔色

圖檔的尺寸和位置

機關長度的選擇是用如下指令進行的:

\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

指令中的圖形元素所在地方就可以了。

做為圖形中元素的文本也可以包裝進一個

\parbox

minipage

環境中,這時在

\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-輸入文本位于右下角。

這裡值的順序是無關緊要的,

tl

lt

的效果相同。

這些指令就是用在

\put

\multiput

指令中圖形元素處。盒子的放置方式是其左下角所處位置就是放置指令中的坐标對。

圖形元素

\makebox

\framebox

指令完全一樣,隻是它沒有矩形框而已。對它而言,經常把範圍對取為(0,0),這樣可以把文本放在所希望的地方。

圖形元素

\dashbox

也生成有框盒子,不過其框線為虛線。參數值

虛線尺寸

就是用來定義短線長度。

即使在上面這些圖形盒子指令中,也可以把文本放在豎直盒子(

\parbox

minipage

)中。由于豎直盒子自身具有可省的定位參數值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*}
           

*-

形式隻适用于兩列頁面格式,它使得插圖或表格占據兩列,而不是正常情形的一列。當頁面格式是單列時,它的作用同标準形式一樣。

在上面的文法中,

插圖

表格

就是要浮動的内容,它是包含在

picture

tabular

環境中的,還有可能出現的

\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

    不考慮位置,可以位于一頁中最多的浮動對象數。
  • dbltopnumber

    totalnumber

    一樣,隻是表限定的是雙列格式中橫跨兩列的浮動對象數。

上述參數都是記數器,可以用指令

\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[短标題]{标題文本}
           

要把這條指令放在

figure

table

環境中。标題文本就是與浮動對象顯示在一起的文本,它可以相當長。短标題可以省略的,它是出現在插圖或表格清單中的文本。如果不給出這段文本,那它就等于标題文本。如果标題文本長度超過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.cfg

color.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指令情況類似。

虛線和點線

線條除了之前說的

dashed

dotted

兩種樣式之外,還有

loosely dashed

densely dashed

loosely dotted

densely 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。