初學(xué)者的LaTeX TikZ快速入門
一、前言
從第一次學(xué)習(xí)LaTeX開始,可能對(duì)tikz有一種幾乎與生俱來的恐懼。實(shí)際上,對(duì)學(xué)習(xí)tikz的抗拒程度之高,甚至在所有與LaTeX相關(guān)的谷歌搜索中加上了“……不使用tikz”的后綴。
大多數(shù)時(shí)候,這種恐懼源于tikz和pgf共享的龐大且詳盡的文檔(https://ftp.cc.uoc.gr/mirrors/CTAN/graphics/pgf/base/doc/pgfmanual.pdf)——順便提一句,在使用tikz繪制了這么多頁面和數(shù)字之后,這些文檔已經(jīng)成為互聯(lián)網(wǎng)上最有幫助的資源之一。但是,和大多數(shù)事情一樣,當(dāng)你有了學(xué)習(xí)tikz的具體理由時(shí),學(xué)習(xí)tikz就會(huì)變得簡(jiǎn)單得多。
線條與顏色
因此,讓我們從兩個(gè)簡(jiǎn)單的例子開始。
二、線條與節(jié)點(diǎn)
看看下面的圖:
圖片
這可能是你能想到的最簡(jiǎn)單的函數(shù)之一,對(duì)吧?
如果你有任何疑問,這不過是以下函數(shù)的圖像:
圖片
簡(jiǎn)單吧。
生成上述圖像的代碼如下:
\documentclass[tikz, margin=5mm]{standalone}
\begin{document}
\begin{tikzpicture}
\draw[dashed] (-2.99,-2.99) grid (2.99,2.99);
\draw[thick, ->] (-3,0) -- (3,0)node[pos=1,below]{$x$};
\draw[thick, ->] (0,-3) -- (0,3)node[pos=1,left]{$y$};
\draw[thick] (0,0) -- (3,3);
\draw[thick] (-3,-2) -- (0,1);
\node[circle, draw=black, inner sep=1.5pt, fill=white](a) at (0,1){};
\node[circle, draw=black, inner sep=1.5pt, fill=black](b) at (0,0){};
\end{tikzpicture}
\end{document}
接下來,我們逐行解釋上述代碼片段:
- 首先,作為簡(jiǎn)寫,我們?cè)赿ocumentclass的可選參數(shù)中包含了tikz。此外,通過參數(shù)margin=5mm,我們要求LaTeX在我們的圖形周圍插入5mm的邊距。不過,我們也可以像使用其他軟件包一樣,常規(guī)地通過\usepackage{tikz}來包含tikz。
- 通過\begin{document}和\begin{tikzpicture}命令,我們分別進(jìn)入文檔和tikz環(huán)境。
- 代碼中第一條重要的命令是第5行。在那里,我們從點(diǎn)(-2.99,-2.99)開始繪制一條虛線網(wǎng)格,延伸至點(diǎn)(2.99,2.99)(作為一個(gè)矩形)。默認(rèn)情況下,網(wǎng)格被視為矩形,而提供的兩個(gè)點(diǎn)對(duì)應(yīng)于矩形的左下角和右上角。
- 接下來的兩行代碼繪制了兩個(gè)坐標(biāo)軸。也就是說,我們繪制了兩條thick線,線的末端帶有箭頭(->),起點(diǎn)和終點(diǎn)均為特定點(diǎn)。
- 在每條線的末尾,我們添加了一個(gè)節(jié)點(diǎn)以表示每個(gè)坐標(biāo)軸的名稱。這是通過node關(guān)鍵字完成的,我們使用兩個(gè)參數(shù)對(duì)其進(jìn)行定位。第一個(gè)參數(shù)pos=1表示節(jié)點(diǎn)應(yīng)放置在線的末端(100%),而第二個(gè)參數(shù)(below或left)則決定節(jié)點(diǎn)相對(duì)于線段末端的位置。最后,花括號(hào)內(nèi)的任何代碼{...}都對(duì)應(yīng)于節(jié)點(diǎn)的文本——即使是空文本也應(yīng)始終提供。
- 在第8行和第9行中,我們繪制了兩條直線——它們對(duì)應(yīng)于我們函數(shù)的圖像。
- 在第10行和第11行中,我們使用兩個(gè)節(jié)點(diǎn)繪制了出現(xiàn)在圖中的兩個(gè)點(diǎn)。我們可以使用draw參數(shù)確定節(jié)點(diǎn)的繪制顏色,而如果想改變節(jié)點(diǎn)的填充顏色(默認(rèn)情況下為none,即無填充,因此所有節(jié)點(diǎn)內(nèi)部都是透明的),則可以使用fill參數(shù)。此外,雖然tikz節(jié)點(diǎn)默認(rèn)為矩形,但通過使用circle關(guān)鍵字,我們可以將它們的形狀更改為圓形。最后,inner sep關(guān)鍵字決定了節(jié)點(diǎn)文本(這里為空)與節(jié)點(diǎn)邊框之間的間距——在這種情況下,它充當(dāng)了節(jié)點(diǎn)的“半徑”。
- 在方括號(hào)外,我們?cè)趫A括號(hào)內(nèi)提供了每個(gè)節(jié)點(diǎn)的名稱,然后使用at關(guān)鍵字以絕對(duì)坐標(biāo)確定其位置,最后使用{...}提供了它們的文本。
以上內(nèi)容有兩個(gè)關(guān)鍵要點(diǎn)。首先,\draw的抽象語法如下:
\draw[options] (...) <shape> (...);
在選項(xiàng)部分,方括號(hào)內(nèi)的[...]可以傳遞多個(gè)參數(shù),主要涉及繪制線條的樣式。然后,使用括號(hào),我們通常通過點(diǎn)來確定相應(yīng)線條的起始和結(jié)束點(diǎn)(在某種相關(guān)的意義上),而shape參數(shù)則決定線條的形狀。在我們的例子中,我們使用了rectangle、grid和--作為形狀類型,它們分別對(duì)應(yīng)于矩形、網(wǎng)格和直線。
我們學(xué)習(xí)了另一個(gè)重要命令是\node,它可以在繪圖中放置一個(gè)節(jié)點(diǎn)。一般來說——但并非嚴(yán)格意義上的——節(jié)點(diǎn)作為點(diǎn)存在,遵循以下抽象語法:
\node[options] (name) at (position) {text};
同樣,任何關(guān)于樣式的內(nèi)容都放在選項(xiàng)部分。節(jié)點(diǎn)的名稱可以是任何字符串——包括字母數(shù)字字符和空格——作為每個(gè)節(jié)點(diǎn)的唯一內(nèi)部標(biāo)識(shí)符。節(jié)點(diǎn)的位置通常以笛卡爾坐標(biāo)的形式給出,格式為(x,y),而節(jié)點(diǎn)的文本可以為空或包含一些文本/數(shù)學(xué)內(nèi)容。
作為一個(gè)重要的提示,請(qǐng)注意,所有繪圖命令都應(yīng)以分號(hào);結(jié)束!
三、關(guān)于標(biāo)簽
如果我們想繪制一個(gè)如下所示的圖形,并且其中包含了許多標(biāo)簽,該怎么辦呢?
圖片
一個(gè)漂亮的矩形。
你肯定可以弄清楚這是哪個(gè)函數(shù)的圖像,但你能寫出生成它的代碼嗎?如果不能,讓我們來看看以下代碼:
\documentclass[tikz, margin=5mm]{standalone}
\usepackage{xfrac} % Used to load to \sfrac command which typesets nice inline fractions.
\begin{document}
\begin{tikzpicture}
\draw[dashed, step=3] (-0.49,-0.49) grid (3.99,3.99);
\draw[thick, ->] (-.5,0) -- (4,0) node[pos=1,below]{$x$};
\draw[thick, ->] (0,-.5) -- (0,4) node[pos=1,left]{$y$};
\draw[thick] (0,0) -- (4,4);
\node[circle, draw=black, inner sep=1.5pt, fill=white, label={right,yshift=8pt}:{(1,1)}](a) at (3,3){};
\node[circle, draw=black, inner sep=1.5pt, fill=white, label={left,yshift=-8pt}:{(0,0)}](b) at (0,0){};
\node[circle, draw=black, inner sep=1.5pt, fill=black, label={left}:{$(0,\sfrac{1}{2})$}](c) at (0,1.5){};
\node[circle, draw=black, inner sep=1.5pt, fill=black, label={right}:{$(1,\sfrac{1}{2})$}](d) at (3,1.5){};
\end{tikzpicture}
\end{document}
如你所見,有些部分你可以從之前的繪圖中識(shí)別出來。不過,我們也引入了一些新的內(nèi)容。
首先,可以通過在\draw命令的選項(xiàng)中提供step參數(shù)來確定網(wǎng)格的步長(zhǎng),如上所示——默認(rèn)情況下,任何值都被解釋為厘米。
我們還通過label={}:{}選項(xiàng)提供了一些節(jié)點(diǎn)標(biāo)簽。那么,我們?yōu)槭裁词褂眠@個(gè)而不是簡(jiǎn)單地將一些文本/數(shù)學(xué)內(nèi)容添加到節(jié)點(diǎn)的“本地”標(biāo)簽(即text)中呢?原因在于,默認(rèn)情況下,節(jié)點(diǎn)的文本錨定在中心,并隨節(jié)點(diǎn)一起移動(dòng)。然而,在我們的例子中,我們想要實(shí)現(xiàn)的是在每個(gè)點(diǎn)旁邊添加一些文本以指示其在平面上的位置。為此,可以使用label={}:{}關(guān)鍵字,其一般語法如下:
label = {parameters} : {text / math}
參數(shù)可以涉及相對(duì)定位、錨點(diǎn)等多個(gè)方面。目前,我們使用了left和right將標(biāo)簽分別定位于對(duì)應(yīng)節(jié)點(diǎn)的左側(cè)和右側(cè)——正如你可能猜測(cè)的那樣,還有它們的垂直對(duì)應(yīng)關(guān)系,above和below。
注意,我們還使用了xfrac軟件包,以一種更優(yōu)雅的方式來排版內(nèi)聯(lián)分?jǐn)?shù)——至少在這種情況下是如此。這是通過\sfrac{}{}命令實(shí)現(xiàn)的,它的使用方法與常規(guī)的\frac{}{}命令相同。
四、結(jié)語
以上就是我們的所有內(nèi)容,希望能幫助你快速入門。同時(shí),似乎我們已經(jīng)可以使用它們做很多事情了。實(shí)際上,tikz還為我們提供了許多其他工具。例如,我們迄今為止展示的工具并不足以繪制更復(fù)雜的圖形——例如余弦函數(shù)的圖像。
因此,可以在此入門基礎(chǔ)上探索更多有關(guān)LaTeX Tikz的使用技巧。