LaTeX 復雜圖形繪制教程:從基礎到進階

在這里插入圖片描述
在這里插入圖片描述

系列文章目錄

第一章:深入了解 LaTeX:科技文檔排版的利器
第二章:LaTeX 下載安裝保姆級教程
第三章:LaTeX 創建工程并生成完整文檔指南
第四章:LaTeX 表格制作全面指南


文章目錄

  • 系列文章目錄
  • 前言
  • 一、?LaTeX 繪圖工具概覽
  • 二、深入 TikZ 繪圖語言
    • 1.調用 TikZ 宏包
      • 1.1 TikZ 坐標與路徑
    • 2. 在圖形中添加元素?
    • 3. 繪制復雜圖形示例
      • 繪制流程圖?
      • 繪制數學圖形(如函數圖像組合)
      • 繪制復雜幾何圖形(如立體幾何圖形)
    • 4. 學習資源與技巧
      • 官方文檔與教程?
      • 在線圖形編輯器?
      • 相關書籍與開源示例?
  • 總結


前言

在學術寫作和專業文檔排版中,精美的圖形往往能更直觀地傳達信息,增強內容的表現力。LaTeX 作為一款強大的排版系統,雖以其出色的文字和公式排版能力聞名,但在圖形繪制方面同樣不容小覷。本文將深入探討如何利用 LaTeX 繪制各種復雜圖形,為您的文檔增添光彩。


一、?LaTeX 繪圖工具概覽

LaTeX 自身提供了原始的picture環境,可用于繪制一些基本圖形,如點、線、矩形、圓和 Bezier 曲線等。然而,由于 LaTeX 本身的限制,其繪圖功能較為有限,效果也不盡如人意。隨著需求的不斷增加,眾多功能強大的繪圖宏包應運而生,極大地豐富了 LaTeX 的繪圖能力。以下是當前較為流行的幾種繪圖宏包和程序:?

  • PSTricks:基于 PostScript 語法的繪圖宏包,繪圖能力出色。它對老式的latex+dvips編譯命令支持最佳,但在現代的幾種編譯命令下使用不太方便。?
  • TikZ & pgf:德國的 Till Tantau 教授在開發著名的 LaTeX 幻燈片文檔類beamer時,一并開發了繪圖宏包pgf,旨在使其能在pdflatex或xelatex等不同編譯命令下使用。TikZ是在pgf基礎上封裝的宏包,采用類似 METAPOST 的語法,提供了便捷的繪圖命令,繪圖能力不遜于 PSTricks。?
  • METAPOST & Asymptote:METAPOST 脫胎于高納德為 TEX 配套開發的字體生成程序 METAFONT,繪圖能力卓越,且能調用 TEX 引擎向圖片中插入文字和公式。Asymptote 在 METAFONT 的基礎上更進一步,具備一定類似 C 語言的編程能力,支持三維圖像的繪制。

?
這些工具通常既可以作為獨立程序,將代碼寫在單獨文件中編譯生成圖片供 LaTeX 引用,也能借助特殊宏包在 LaTeX 代碼中直接使用。接下來,我們將重點介紹功能強大且應用廣泛的 TikZ 宏包的使用方法。

二、深入 TikZ 繪圖語言

1.調用 TikZ 宏包

在 LaTeX 文檔的導言區加載 TikZ 宏包,只需加入\usepackage{tikz}語句,即可開啟 TikZ 強大的繪圖功能。

1.1 TikZ 坐標與路徑

  1. 坐標系統:TikZ 支持直角坐標系和極坐標系描述點的位置。在直角坐標下,點的位置表示為(x,y),其中x和y坐標可以使用 LaTeX 支持的任意單位,默認單位為cm。例如,(2,3)表示橫坐標為 2cm,縱坐標為 3cm 的點。極坐標下,點的位置寫作(θ:r),其中θ為極角,單位是度,r為極徑。比如,(30:5)表示極角為 30 度,極徑為 5cm 的點。我們還可以為點命名,方便后續使用,如\coordinate (A) at (2,3);,之后就可以用(A)來表示該點位置。?
  2. 基本路徑:TikZ 最基本的路徑是兩點之間的連線,通過(x1,y1) – (x2,y2)表示,可連續使用表示折線。例如,(0,0) – (1,1) – (2,0)將繪制一條從(0,0)到(1,1)再到(2,0)的折線。若要繪制閉合路徑,可在路徑末尾使用cycle關鍵字,如(0,0) – (1,1) – (2,0) cycle將繪制一個三角形。?
  3. 其他常用路徑?
    • 矩形、圓和橢圓:繪制矩形使用(x1,y1) rectangle (x2,y2),其中(x1,y1)和(x2,y2)分別為矩形對角頂點的坐標。繪制圓使用(x,y) circle (radius=r),(x,y)為圓心坐標,r為半徑。繪制橢圓使用(x,y) ellipse (x radius=rx, y radius=ry),(x,y)為橢圓中心坐標,rx和ry分別為橢圓在 x 軸和 y 軸方向上的半徑。
      例如:
      在這里插入圖片描述
    • 直角、圓弧、橢圓弧:直角可通過特殊的坐標表示和路徑繪制實現。繪制圓弧使用(x,y) arc (start angle:end angle:radius),(x,y)為圓心坐標,start angle和end angle分別為圓弧的起始角度和結束角度,radius為半徑。橢圓弧的繪制類似,需指定橢圓的 x 半徑和 y 半徑。例如:
      -在這里插入圖片描述
    • 正弦、余弦曲線(1/4 周期):可通過\draw plot[domain=x1:x2,samples=n] function來繪制,其中domain指定函數定義域,samples指定采樣點數,function為具體的函數表達式。例如,繪制 1/4 周期的正弦曲線:
      在這里插入圖片描述
    • 拋物線:使用(x1,y1) parabola (x2,y2)繪制拋物線,也可通過bend關鍵字控制頂點位置,如(x1,y1) parabola bend (x_mid,y_mid) (x2,y2)。例如:
      在這里插入圖片描述
    • 二次和三次 Bezier 曲線:二次 Bezier 曲線使用\draw (x1,y1)… controls (x_ctrl,y_ctrl)… (x2,y2),其中(x_ctrl,y_ctrl)為控制點坐標。三次 Bezier 曲線則需要兩個控制點,語法為\draw (x1,y1)… controls (x_ctrl1,y_ctrl1) and (x_ctrl2,y_ctrl2)… (x2,y2)。例如:
      在這里插入圖片描述
    • 網格、函數圖像:繪制網格可使用\draw[step=step_size] (x1,y1) grid (x2,y2),step_size為網格間距。繪制函數圖像同樣使用\draw plot命令,通過domain參數精確控制定義域。例如:
      -在這里插入圖片描述

2. 在圖形中添加元素?

  1. 繪制線條與形狀:使用\draw命令繪制各種線條和形狀,可通過在命令中添加選項來設置線條顏色、粗細、樣式(如實線、虛線、點線等)。例如,繪制一條紅色粗虛線:\draw[red, thick, dashed] (0,0) – (2,2);。?
  2. 添加節點(文字和符號):節點用于在圖形中添加文字、符號或其他元素。使用\node[options] {text} at (x,y);命令,options可設置節點的位置(如above、below、left、right等)、顏色、字體等屬性。例如,在點(1,1)處添加一個藍色、位于上方的節點:\node[blue, above] {示例} at (1,1);。?
  3. 填充形狀:對于封閉形狀,可使用\fill[color] path;命令進行填充。例如,填充一個綠色的矩形:\fill[green] (0,0) rectangle (1,1);。

3. 繪制復雜圖形示例

繪制流程圖?

流程圖在學術和工作中廣泛應用,用于展示流程、步驟和邏輯關系。使用 TikZ 繪制流程圖時,可通過定義不同形狀的節點(如矩形表示步驟,菱形表示判斷等),并使用帶箭頭的線條連接節點來實現。

\begin{tikzpicture}[node distance=2cm,startstop/.style={rectangle, rounded corners, minimum width=3cm, minimum height=1cm,text centered, draw=black, fill=red!30},process/.style={rectangle, minimum width=3cm, minimum height=1cm, text centered, draw=black, fill=blue!30},decision/.style={diamond, minimum width=3cm, minimum height=1cm, text centered, draw=black, fill=green!30},arrow/.style={thick,->,>=stealth}]% 開始節點\node (start) [startstop] {開始};% 第一個處理步驟\node (process1) [process, below of=start] {步驟1};% 決策節點\node (decision1) [decision, below of=process1] {判斷條件};% 兩個分支處理步驟\node (process2) [process, below left of=decision1, xshift=-1cm] {步驟2};\node (process3) [process, below right of=decision1, xshift=1cm] {步驟3};% 結束節點\node (end) [startstop, below of=process2] {結束};% 連接線條\draw [arrow] (start) -- (process1);\draw [arrow] (process1) -- (decision1);\draw [arrow] (decision1) -| node[anchor=east] {} (process2);\draw [arrow] (decision1) -| node[anchor=west] {} (process3);\draw [arrow] (process2) -- (end);\draw [arrow] (process3) |- (process2);\end{tikzpicture}

在這里插入圖片描述

繪制數學圖形(如函數圖像組合)

在數學領域,常需要繪制復雜的函數圖像組合,以展示函數之間的關系。下面以繪制正弦函數、余弦函數及其和函數的圖像為例:

	\begin{tikzpicture}\begin{axis}[axis lines = middle,xlabel = \(x\),ylabel = \(y\),xmin=-2*pi,xmax=2*pi,ymin=-2,ymax=2,xtick={-2*pi,-3*pi/2,-pi,-pi/2,0,pi/2,pi,3*pi/2,2*pi},xticklabels={\(-2\pi\),\(-\frac{3\pi}{2}\),\(-\pi\),\(-\frac{\pi}{2}\),\(0\),\(\frac{\pi}{2}\),\(\pi\),\(\frac{3\pi}{2}\),\(2\pi\)},ytick={-2,-1,0,1,2},legend pos=outer north east  % 將圖例放在圖表外部右上角]\addplot[domain=-2*pi:2*pi, samples=100, red] {sin(x)};\addlegendentry{\(y = \sin(x)\)}\addplot[domain=-2*pi:2*pi, samples=100, blue] {cos(x)};\addlegendentry{\(y = \cos(x)\)}\addplot[domain=-2*pi:2*pi, samples=100, green] {sin(x)+cos(x)};\addlegendentry{\(y = \sin(x)+\cos(x)\)}\end{axis}\end{tikzpicture}

在這里插入圖片描述

繪制復雜幾何圖形(如立體幾何圖形)

對于立體幾何圖形,TikZ 同樣能勝任。通過巧妙設置坐標和視角,可繪制出具有立體感的圖形。以下是一個簡單的正方體繪制示例:

\begin{tikzpicture}[scale=2,% 更合理的3D坐標系定義,增強立體感x={(1cm,0cm)},        % x軸向右y={(0cm,1cm)},        % y軸向里z={(0.5cm,0.5cm)}     % z軸向右上方]% 定義立方體的8個頂點\coordinate (A) at (0,0,0);\coordinate (B) at (1,0,0);\coordinate (C) at (1,1,0);\coordinate (D) at (0,1,0);\coordinate (A') at (0,0,1);\coordinate (B') at (1,0,1);\coordinate (C') at (1,1,1);\coordinate (D') at (0,1,1);% 繪制底面(可見面用實線)\draw[thick] (A) -- (B) -- (C) -- (D) -- cycle;% 繪制頂面(可見面用實線)\draw[thick] (A') -- (B') -- (C') -- (D') -- cycle;% 繪制連接棱(前面可見的用實線,后面被遮擋的用虛線)\draw[thick] (A) -- (A');\draw[thick] (B) -- (B');\draw[thick] (C) -- (C');\draw[dashed, thick] (D) -- (D');  % 這條棱被遮擋,用虛線\end{tikzpicture}

在這里插入圖片描述

4. 學習資源與技巧

官方文檔與教程?

TikZ 的官方手冊是學習其功能的權威資料,可通過運行命令texdoc tikz在本地查看,也可在 TikZ/PGF 官方網站獲取最新版手冊。此外,網絡上有大量關于 TikZ 的教學文章和實例演示,如一些技術博客和社區網站,能幫助您快速上手。?

在線圖形編輯器?

一些支持 TikZ 的在線圖形編輯器,如 TeXample TikZ 在線編輯平臺,允許您直觀地設計圖形并實時預覽效果,降低了圖形制作的難度,尤其適合初學者。?

相關書籍與開源示例?

選擇一本專注于 LaTeX 圖形繪制的專業書籍,可進行系統化學習。同時,互聯網上眾多公開的 LaTeX 項目文檔中包含豐富的 TikZ 圖形代碼片段,研究這些示例能加深對繪圖邏輯的理解,借鑒其中的設計思路。


總結

通過本文對 LaTeX 繪圖工具的介紹,特別是對 TikZ 宏包的深入講解和復雜圖形繪制示例,對在 LaTeX 中繪制復雜圖形有了更全面的認識和掌握。雖然學習過程可能需要花費一些時間和精力,但一旦熟練掌握,能夠在 LaTeX 環境中輕松創建出高質量、與文檔風格完美融合的圖形,為學術寫作、報告制作等工作增添強大助力。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/91449.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/91449.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/91449.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

用 Go Typed Client 快速上手 Elasticsearch —— 從建索引到聚合的完整實戰

1. 準備工作 go get github.com/elastic/go-elasticsearch/v9小貼士 如果你的集群啟用了安全特性,需要在 elasticsearch.Config 中配置 Username/Password 或 APIKey。Typed Client 通過 NewTypedClient 創建,內部復用 *http.Client,建議全局…

《義龍棒球科普》棒球是韓國的國球嗎·棒球1號位

? Why Baseball is Koreas NATIONAL SPORT? | KBO熱血全解析 ?? 1. 歷史根源 & 情感紐帶 Historical Roots & Emotional Bond美軍引入 (1945后): 戰后美軍將棒球帶入韓國,迅速扎根!?1982 KBO成立: 亞洲第二個職業棒球聯盟誕生!奧…

三坐標測量機路徑規劃與補償技術:如何用算法看見微米級誤差?

三坐標測量的微米級精度背后,是精密的路徑規劃算法與實時補償技術在保駕護航。三坐標測量機的智能避撞算法保障了測量的安全與高效;溫度補償技術消除了環境的無形干擾;點云智能處理則讓海量數據蛻變為精準的工程決策依據。 “智能避讓路徑”&…

Docker設置容器時間

一、前言前言&#xff1a;容器搭建好之后&#xff0c;容器的默認時區于本地時區不一致&#xff0c;這將導致日志文件中保存的時間為錯誤時間。二、操作1、進入docker 容器docker exec -it <容器名稱> bash2、選擇時區tzselect3、配置時區根據跳出來的配置選擇Asia -> …

德國威樂集團亞太中東非洲PMO負責人和繼明受邀為PMO大會主持人

全國PMO專業人士年度盛會德國威樂集團亞太中東非洲PMO負責人 和繼明先生 受邀為“PMO評論”主辦的2025第十四屆中國PMO大會主持人&#xff0c;敬請關注&#xff01;嘉賓介紹&#xff1a;和繼明先生&#xff0c;德國威樂集團亞太中東非洲PMO負責人&#xff0c;項目管理碩士MPM&a…

idea 集成飛算Java AI 教程

idea 集成飛算Java AI 教程一、介紹二、下載安裝 飛算Java AI 插件方式一&#xff1a;從idea插件市場安裝方式二&#xff1a;下載離線安裝包三、飛算Java AI插件使用一、介紹 ? 隨著人工智能技術的發展&#xff0c;AI 編程助手逐漸成為提升開發效率的強大工具。上一篇教程是i…

2025.8.1

代碼練習 //用指針訪問對象成員 #include<iostream> #include<string> using namespace std; class Champion { public:Champion(int id, string nm, int hp, int mn, int dmg) {ID id;name nm;HP hp;mana mn;damage dmg;}void attack(Champion& chmp) {c…

一種新的分布式ID生成方案--ULID

一種新的分布式ID生成方案 ULID: 一種新的分布式ID生成方案 ULID (Universally Unique Lexicographically Sortable Identifier) 是一種較新的分布式ID生成方案&#xff0c;旨在解決傳統UUID和雪花算法(Snowflake)的一些局限性。ULID的主要特點 可排序性&#xff1a;ULID按生成…

服務器中涉及節流(Throttle)的硬件組件及其應用注意事項

服務器中涉及節流&#xff08;Throttle&#xff09;的硬件組件及其應用注意事項 在服務器硬件中&#xff0c;“節流”&#xff08;throttling&#xff09;是一種保護機制&#xff0c;當組件溫度過高、功耗過大或超出安全閾值時&#xff0c;系統會自動降低性能&#xff08;如時鐘…

GitPython07-源碼解讀

GitPython07-源碼解讀1 1-核心知識 1&#xff09;從核心代碼的第一行作為突破口2&#xff09;從Repo.init方法入手做追蹤3&#xff09;subprocess到底做了什么&#xff1f;gitPython是不是執行的腳本&#xff0c;最終還是通過subprocess做到的4&#xff09;代碼中貌似并沒有實…

Java繼承機制詳解:從原理到實戰應用

一、繼承的本質&#xff1a;消除冗余&#xff0c;構建邏輯關系想象一個公司管理系統&#xff1a;普通銷售員工&#xff08;CommissionEmployee&#xff09;和帶底薪銷售員工&#xff08;BasePlusCommissionEmployee&#xff09;共享大部分屬性&#xff08;姓名、工號、銷售額、…

工業數采引擎-DTU

DTU配置注冊包及心跳包(對應設備配置->設備SN)&#xff0c;模塊工作方式&#xff1a;TcpClient&#xff0c;首次連接成功后&#xff0c;DTU發送上來的注冊包作為鏈路SessionId1. ModbusRtu設備 -> Dtu -> Server2. DLT645設備 -> Dtu -> Server3. 自定義設備 -&…

AttributeError: ChatGLMTokenizer has no attribute vocab_size

請問運行下面語句tokenizer AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_codeTrue) 出現“AttributeError: ChatGLMTokenizer has no attribute vocab_size”是版本不一致&#xff0c;需要舊的版本卸載conda uninstall transformers或者pip un…

14.串口更新FLASH字庫

一、簡介 在使用STM32等單片機驅動顯示屏時&#xff0c;為了顯示中文字體&#xff0c;常用FLASH保存字庫信息。但是字庫的更新通常只能使用SD卡更新&#xff0c;在一些小型單片機系統(如STM32F103C8T6、STC89C52)上&#xff0c;沒有增加SD卡支持的必要。為解決此問題&#xff0…

Lombok常用注解及功能詳解

Lombok常用注解及功能詳解一、Lombok簡介與環境配置1.1 什么是Lombok&#xff1f;1.2 環境配置1.2.1 Maven項目1.2.2 Gradle項目1.2.3 IDE配置&#xff08;關鍵&#xff09;二、Lombok常用注解詳解2.1 Data&#xff1a;一站式生成核心方法2.2 Getter/Setter&#xff1a;單獨生成…

應用分層

應用分層是?種軟件開發設計思想&#xff0c;它將應用程序分成N個層次&#xff0c;這N個層次分別負責各自的職責&#xff0c; 多個層次之間協同提供完整的功能。根據項目的復雜度&#xff0c;把項目分成三層&#xff0c;四層或者更多層。常見的MVC設計模式&#xff0c;就是應用…

[特殊字符] 【JAVA進階】StringBuilder全方位解析:從使用到源碼,一文搞定!

&#x1f525; 掌握StringBuilder&#xff0c;讓你的Java字符串操作性能飆升&#xff01;&#x1f9e9; StringBuilder是什么&#xff1f; StringBuilder是Java中用于動態構建字符串的可變字符序列類&#xff0c;位于java.lang包中。與不可變的String類不同&#xff0c;StringB…

Redis 數據結構全景解析

Redis 不是簡單的 key-value 緩存&#xff0c;它更像一把“瑞士軍刀”。 只要掌握數據結構&#xff0c;就能把同一份內存用出 10 倍效率。0. 開場白&#xff1a;為什么聊數據結構&#xff1f; 面試常問“Redis 有幾種數據類型&#xff1f;”——很多人答 5 種&#xff08;Strin…

ansible.cfg 配置文件的常見配置項及其說明

配置項說明默認值defaults默認配置部分inventory指定清單文件的位置&#xff0c;可以是文件路徑、目錄或動態清單腳本。/etc/ansible/hostsremote_user默認的遠程用戶roothost_key_checking是否啟用主機密鑰檢查。設置為 False 跳過 SSH 主機密鑰驗證。Trueask_pass是否在執行時…

Effective C++ 條款15:在資源管理類中提供對原始資源的訪問

Effective C 條款15&#xff1a;在資源管理類中提供對原始資源的訪問核心思想&#xff1a;RAII類需要提供訪問其封裝原始資源的顯式或隱式接口&#xff0c;以兼容需要直接操作資源的API&#xff0c;同時維持資源的安全管理。 ?? 1. 原始資源訪問的必要性 使用場景示例&#x…