LaTeX TikZ绘图实战:从基础图形到复杂图表的高效代码库

📅 2026/7/30 4:05:00
LaTeX TikZ绘图实战:从基础图形到复杂图表的高效代码库
1. 从“画图劝退”到“效率革命”为什么你需要一个TikZ代码库如果你用过LaTeX写过论文或者报告大概率经历过这样的场景论文主体写得差不多了就差几张图。打开Visio或者PPT吭哧吭哧画了半天导出的图片要么分辨率不够要么字体和论文正文不匹配要么一缩放就糊了。更崩溃的是导师或者审稿人提了修改意见需要调整图中某个元素的位置或者颜色你不得不回到绘图软件里重新调整、导出、替换整个过程繁琐且容易出错。这种“画图劝退”的经历是很多LaTeX用户共同的痛点。而TikZ作为LaTeX原生的矢量绘图宏包就是为了解决这个问题而生的。它允许你直接用代码来“描述”图形图形本身就是LaTeX文档的一部分。这意味着极致的一致性图中的文字、公式、符号与正文完全同源同款字体、样式、渲染效果100%匹配。无限的可缩放性因为是矢量图无论放大多少倍都清晰锐利完美满足出版级要求。强大的可编程性与可复用性修改图形就像修改代码一样简单一个参数就能改变全局样式写好的图形代码可以像函数一样封装、调用构建你自己的图形库。然而TikZ的学习曲线也被很多人诟病。它的语法虽然强大但初期记忆各种命令和坐标确实让人头疼。很多时候我们并不是要从零开始创造一种全新的图形而只是想快速画出一个流程图、一个示意图、一个函数图像或者一个简单的几何图形。这时一个分类清晰、可直接参考甚至“抄作业”的TikZ代码示例库价值就凸显出来了。它不是一个死板的命令手册而是一个“工具箱”和“灵感库”能让你绕过繁琐的语法摸索直接聚焦于解决当下的绘图需求。本文的目的就是为你构建这样一个实用的、可直接复用的TikZ代码示例汇总并附上我多年使用中总结的“避坑”经验和效率技巧。2. 环境搭建与核心概念为高效使用示例代码扫清障碍在开始“抄代码”之前确保你的环境是畅通的并且理解一些核心约定能让你事半功倍避免很多“为什么我运行不了”的初级错误。2.1 编译环境的选择与配置TikZ是pgf宏包的前端绝大多数现代LaTeX发行版如TeX Live, MiKTeX都已默认包含。你不需要单独“安装”TikZ但需要确保你的编译链能正确处理它。1. 编译器选择XeLaTeX 是更省心的选择虽然经典的pdflatex也能编译TikZ但在处理中文字体时非常麻烦。我强烈推荐使用XeLaTeX作为默认编译器。它原生支持Unicode和系统字体让你在图中使用中文和特殊符号变得轻而易举。在Overleaf等在线平台通常在菜单栏直接选择编译器为“XeLaTeX”即可。在本地VS Code LaTeX Workshop环境中需要在配置文件中进行设置。2. VS Code LaTeX Workshop 配置要点这是目前最流行的本地LaTeX编辑方案。安装好插件后关键一步是配置编译命令recipe。在你的项目根目录创建或修改.vscode/settings.json文件一个针对中文和TikZ优化的配置示例如下{ latex-workshop.latex.recipes: [ { name: xelatex - bibtex - xelatex*2, tools: [xelatex, bibtex, xelatex, xelatex] } ], latex-workshop.latex.tools: [ { name: xelatex, command: xelatex, args: [ -synctex1, -interactionnonstopmode, -file-line-error, -shell-escape, // 如果用到某些需要外部调用的TikZ库如external可能需要此参数 %DOC% ] }, { name: bibtex, command: bibtex, args: [%DOCFILE%] } ], latex-workshop.latex.autoBuild.run: onFileChange }这个配方recipe完成了编译、生成参考文献、再编译两次以确保交叉引用正确的完整流程。-shell-escape参数在某些高级场景下可能需要如果暂时用不到可以先去掉。3. 关于“Invalid UTF-8 byte sequence”错误这是一个常见的中文编码问题。确保你的.tex文件保存为UTF-8 without BOM编码在VS Code、Notepad等编辑器中可以设置。在文档导言区\documentclass之后明确声明使用UTF-8编码\usepackage[UTF8]{ctex}或\usepackage{fontspec}后者通常由ctex宏包自动引入。2.2 TikZ绘图的基本框架与核心思想理解TikZ的绘图逻辑比死记命令更重要。它的核心思想是**“路径Path描绘”**。一个最基本的TikZ绘图环境如下\documentclass{article} \usepackage{tikz} % 引入TikZ宏包 \begin{document} \begin{tikzpicture} % 开始绘图环境 % 绘图命令写在这里 \draw (0,0) -- (2,0) -- (1,1.732) -- cycle; % 画一个三角形 \end{tikzpicture} % 结束绘图环境 \end{document}\begin{tikzpicture}[可选参数]和\end{tikzpicture}定义了一个绘图区域。可选参数可以设置整个图的缩放、基线对齐等。\draw是最常用的命令意为“描绘一条路径”。后面跟着的坐标和指令描述了这条路径如何行走。(0,0) -- (2,0)表示从坐标(0,0)画一条直线到(2,0)。坐标默认单位是厘米。--是“画直线到”的操作符。cycle表示闭合路径即从最后一个点画直线回起点。坐标系统TikZ使用笛卡尔坐标系原点(0,0)默认在图形的左下角。你可以通过[x1cm, y0.5cm]这样的选项来缩放坐标轴或者使用相对坐标如(1,0)表示相对于前一个点向右移动1单位和极坐标如(30:2)表示距离原点2单位角度30度。样式与属性几乎所有的绘图命令都可以通过方括号[]添加样式。例如\draw[red, thick, dashed] (0,0) -- (2,0); % 画一条红色的、粗的、虚线 \fill[blue!30] (0,0) circle (0.5); % 填充一个半透明蓝色的圆blue!30表示蓝色混合30%的白色即更浅的蓝色这是TikZ非常实用的颜色混合语法。掌握了这些你就已经能看懂并运行下文大部分示例代码了。接下来我们进入实战代码库。3. 基础图形与标注构建复杂图形的基石任何复杂的图表都是由基础图形点、线、圆、矩形组合而成的。熟练绘制和修饰这些基础图形是TikZ绘图的第一步。3.1 点、线、多边形与曲线1. 线段、折线与多边形\begin{tikzpicture} % 1. 简单线段与箭头 \draw[-, stealth, thick] (0,0) -- (3,0) node[right] {x轴}; % 带 stealth 箭头的粗线 \draw[-, latex, blue] (0,0) -- (0,2) node[above] {y轴}; % 带 latex 箭头的蓝线 % 2. 折线 \draw[thick, red] (0,0) -- (1,1) -- (2,0) -- (3,1); % 3. 多边形与填充 \filldraw[fillgreen!20, drawgreen!50!black, thick] (4,0) rectangle (6,1.5); % 填充矩形 \fill[orange!40] (7,0) -- (8,0) -- (7.5,1) -- cycle; % 填充三角形 (cycle 闭合) \end{tikzpicture}-或-或-在\draw中表示添加箭头。stealth或latex定义了箭头的样式 stealth 更现代 latex 是经典LaTeX箭头。node可以在路径的任何位置添加文本标签right/above等指定标签相对于该点的位置。rectangle是画矩形的快捷方式参数为对角坐标。cycle对于多边形填充至关重要它告诉TikZ闭合路径。2. 圆、椭圆与弧线\begin{tikzpicture} % 1. 圆 \draw (0,0) circle (1cm); % 圆心在(0,0)半径1cm \fill[red] (2,0) circle (2pt); % 画一个实心红点半径为2pt的圆 % 2. 椭圆 \draw (4,0) ellipse (1.5cm and 0.8cm); % x轴半径1.5cm, y轴半径0.8cm % 3. 弧线 (语法较特殊) \draw[thick, -] (6,0) arc (0:135:1); % 从(6,0)开始画一个角度从0度到135度半径1的圆弧 % 另一种更直观的弧线画法使用 arc 操作符 \draw[thick, blue] (8,0) -- (1,0) arc (0:90:0.5) -- cycle; % 画一个四分之一圆环路径 \end{tikzpicture}注意arc的起始点是当前路径点参数(起始角:终止角:半径)定义的是圆弧本身其圆心位置是根据起始点、半径和起始角计算出来的。这常常是初学者困惑的地方。多使用相对坐标配合arc会更直观。3.2 节点图形的灵魂容器节点node是TikZ中最强大、最核心的概念之一。它不仅仅是一个文本标签更是一个可以包含复杂内容文本、公式、甚至另一个tikzpicture、具有形状、样式和锚点anchor的容器。用好节点是绘制流程图、框图、思维导图的关键。1. 基本节点与样式\begin{tikzpicture}[ box/.style{draw, rectangle, minimum width2cm, minimum height1cm, aligncenter}, roundbox/.style{box, rounded corners5pt}, circlebox/.style{draw, circle, minimum size1.2cm} ] % 使用预定义样式 \node[box, fillblue!10] (start) at (0,0) {开始}; \node[roundbox, fillgreen!10] (process) at (3,0) {处理数据}; \node[circlebox, fillred!10] (decision) at (6,0) {?}; % 内联样式定义 \node[ellipse, draw, dashed, font\small] at (3, -2) {这是一个椭圆节点}; \end{tikzpicture}[box/.style{...}]定义了一个可复用的样式box。这在绘制多个同类元素时能极大提升效率和一致性。minimum width/height确保节点即使内容为空也有一定大小。aligncenter使节点内文本居中。(start)给节点命名这是后续连接节点的关键。形状可以是rectangle,circle,ellipse,diamond菱形等。2. 节点的锚点Anchor连接节点之间的连接不是连接节点的中心而是连接节点边框上的特定点这些点称为锚点。\begin{tikzpicture}[node distance1.5cm] \node[draw] (A) {A}; \node[draw, right ofA] (B) {B}; % 相对定位 \node[draw, below ofA] (C) {C}; % 连接锚点 \draw[-] (A.east) -- (B.west); % A的东边 连接到 B的西边 \draw[-, red] (A.south) to[out-90, in180] (C.west); % 带弯曲的连线 \draw[-, dashed, blue] (B.south) |- (C.east); % 先竖再横的直角连线 \end{tikzpicture}.east,.west,.south,.north是最常用的锚点分别代表东右、西左、南下、北上。node distance可以设置相对定位时的默认间距。to[out角度1, in角度2]可以画出带弧度、进出方向可控的曲线。|-和-|是画直角连线的快捷操作符分别表示“先竖后横”和“先横后竖”。4. 实用图表实战从函数图到流程图掌握了基础我们就可以组合这些元素绘制科研和工程中真正实用的图表。4.1 函数图像与数据可视化TikZ的plot功能非常适合绘制精确的数学函数图像比从其他软件导入的图片质量更高且风格统一。1. 绘制正弦函数与余弦函数\begin{tikzpicture}[scale0.8] % 绘制坐标轴 \draw[-, thick] (-0.5,0) -- (2*pi0.5,0) node[right] {$x$}; \draw[-, thick] (0,-1.5) -- (0,1.5) node[above] {$y$}; % 刻度 \foreach \x in {0,1,...,6} \draw (\x, 2pt) -- (\x, -2pt) node[below] {$\x$}; \foreach \y in {-1,1} \draw (2pt, \y) -- (-2pt, \y) node[left] {$\y$}; % 使用 \pgfmathsetmacro 定义常数 pi \pgfmathsetmacro{\pipos}{pi} \node[below] at (\pipos, 0) {$\pi$}; \node[below] at (2*\pipos, 0) {$2\pi$}; % 绘制函数图像使用 domain 定义定义域samples 定义采样点数量 \draw[domain0:2*pi, smooth, thick, blue] plot (\x, {sin(\x r)}); % r 表示将参数转为弧度 \draw[domain0:2*pi, smooth, thick, red, dashed] plot (\x, {cos(\x r)}); % 添加图例 \draw[blue, thick] (4,1.2) -- (0.5,0) node[right, black] {$\sin(x)$}; \draw[red, thick, dashed] (4,0.8) -- (0.5,0) node[right, black] {$\cos(x)$}; \end{tikzpicture}plot (\x, {表达式})是核心。表达式需要用花括号{}包裹。smooth关键字让曲线更光滑。domaina:b指定变量\x的取值范围。sin(\x r)中的r(radian) 至关重要它告诉TikZ\x是弧度值。如果省略TikZ会默认\x是度数。\pgfmathsetmacro用于计算并存储值这里是为了在坐标轴上标注 π。2. 绘制散点图与拟合线模拟数据可视化虽然TikZ不是专业统计绘图工具但画简单的示意图绰绰有余。\begin{tikzpicture} \begin{axis}[ % 使用 pgfplots 宏包它基于TikZ但语法更高级 xlabel{自变量 $X$}, ylabel{因变量 $Y$}, gridmajor, % 主网格 legend posnorth west, ] % 模拟一些散点数据 \addplot[only marks, mark*, mark size2pt] coordinates { (1, 1.2) (2, 1.8) (3, 3.1) (4, 3.8) (5, 5.2) (6, 5.7) (7, 7.1) (8, 8.2) (9, 8.8) (10, 9.9) }; \addlegendentry{观测数据}; % 添加一条拟合线 y x 0.2 \addplot[domain0:11, thick, red, no marks] {x 0.2}; \addlegendentry{拟合线 $yx0.2$}; \end{axis} \end{tikzpicture}要使用这个代码你需要在导言区加载\usepackage{pgfplots}并且通常需要\pgfplotsset{compat1.18}版本号根据你的pgfplots调整来确保行为一致。pgfplots为科学绘图提供了海量的定制选项是TikZ生态中的重要扩展。4.2 流程图与技术示意图这是TikZ大放异彩的领域代码描述的流程图修改起来极其方便。1. 一个简单的算法流程图\usetikzlibrary{shapes.geometric, arrows.meta} % 引入图形和箭头库 \begin{tikzpicture}[ startstop/.style{rectangle, rounded corners, minimum width3cm, minimum height1cm, text centered, drawblack, fillred!10}, process/.style{rectangle, minimum width3cm, minimum height1cm, text centered, drawblack, fillorange!10}, decision/.style{diamond, minimum width2.5cm, minimum height1.5cm, text centered, drawblack, fillgreen!10}, io/.style{trapezium, trapezium left angle70, trapezium right angle110, minimum width3cm, minimum height1cm, text centered, drawblack, fillblue!10}, arrow/.style{thick, -{Stealth[scale1.2]}}, node distance2cm ] % 定义节点 \node (start) [startstop] {开始}; \node (in1) [io, below ofstart] {输入参数 $a, b$}; \node (pro1) [process, below ofin1] {计算 $c \sqrt{a^2 b^2}$}; \node (dec1) [decision, below ofpro1, yshift-1cm] {$c 10$?}; \node (pro2a) [process, below ofdec1, yshift-1cm, xshift-3cm] {输出“较大”}; \node (pro2b) [process, below ofdec1, yshift-1cm, xshift3cm] {输出“较小”}; \node (out1) [io, below ofdec1, yshift-3cm] {输出结果 $c$}; \node (stop) [startstop, below ofout1] {结束}; % 连接节点 \draw [arrow] (start) -- (in1); \draw [arrow] (in1) -- (pro1); \draw [arrow] (pro1) -- (dec1); \draw [arrow] (dec1) -- node[anchoreast] {是} (pro2a); \draw [arrow] (dec1) -- node[anchorwest] {否} (pro2b); \draw [arrow] (pro2a) |- (out1); % 直角连线 \draw [arrow] (pro2b) |- (out1); \draw [arrow] (out1) -- (stop); \end{tikzpicture}\usetikzlibrary引入了额外的图形如菱形diamond、梯形trapezium和箭头样式。通过预定义样式startstop,process等流程图风格高度统一且易于全局修改。{Stealth[scale1.2]}是一种更现代的箭头样式。在连接线上用node添加“是/否”标签anchor控制标签相对于线的位置。yshift和xshift用于微调节点位置这在处理菱形决策框时经常需要。2. 系统架构或网络拓扑示意图\begin{tikzpicture}[ server/.style{cylinder, shape border rotate90, aspect0.2, draw, minimum height1.2cm, minimum width0.8cm}, client/.style{rectangle, draw, rounded corners, minimum width1.5cm, minimum height0.8cm}, db/.style{cylinder, draw, shape border rotate90, aspect0.3, minimum height1cm, minimum width1.2cm}, cloud/.style{ellipse, draw, minimum width2.5cm, minimum height1.5cm}, Stealth ] % 云服务 \node[cloud, fillgray!15] (cloud) at (0,3) {云服务 API}; % 服务器层 \node[server, fillblue!20] (web) at (-3,0) {Web\\服务器}; \node[server, fillgreen!20] (app) at (0,0) {应用\\服务器}; \node[server, fillred!20] (cache) at (3,0) {缓存\\服务器}; % 数据库 \node[db, fillbrown!20] (database) at (0,-2) {数据库}; % 客户端 \node[client, fillyellow!30] (browser) at (-5, -1) {浏览器}; \node[client, fillorange!30] (mobile) at (5, -1) {移动端}; % 连接 \draw[-, thick] (web) -- (app); \draw[-, thick] (app) -- (cache); \draw[-, thick, dashed] (web) -- node[midway, above, sloped] {HTTP/HTTPS} (browser); \draw[-, thick, dashed] (app) -- (mobile); \draw[-, thick] (app) -- (database); \draw[-, thick] (cloud) edge[bend left10] (web); \draw[-, thick] (cloud) edge[bend left10] (app); \draw[-, thick] (cloud) edge[bend right10] (mobile); \end{tikzpicture}cylinder形状需要\usetikzlibrary{shapes.geometric}。aspect控制圆柱体的宽高比。shape border rotate90让圆柱体“站立”起来。edge操作符是另一种画连接线的方式特别适合与bend left/right结合画曲线且不会影响当前路径的起点。在连接线上用node[midway, above, sloped]添加标签midway表示在线的中点sloped让文本随线倾斜。5. 高级技巧与效率提升从能用走向好用当你熟悉了基本绘图后下面这些技巧能让你画得更快、更好、更专业。5.1 使用循环与条件语句批量绘图\foreach循环是TikZ中提升效率的神器可以避免大量重复代码。1. 绘制网格、刻度或重复图案\begin{tikzpicture} % 绘制一个坐标网格 \draw[step0.5, gray!30, very thin] (-2,-2) grid (2,2); \draw[-] (-2.5,0) -- (2.5,0) node[right] {$x$}; \draw[-] (0,-2.5) -- (0,2.5) node[above] {$y$}; % 使用 \foreach 绘制刻度 \foreach \x in {-2,-1.5,...,2} { \draw (\x, 0.05) -- (\x, -0.05) node[below] {\tiny $\x$}; } \foreach \y in {-2,-1.5,...,2} { \draw (0.05, \y) -- (-0.05, \y) node[left] {\tiny $\y$}; } % 绘制一组函数图像y a*x^2 a 从 0.2 到 1 \foreach \a in {0.2,0.4,...,1.0} { \draw[domain-1.5:1.5, smooth, variable\x, colorblue!\a!red] plot (\x, {\a*\x*\x}); \node[colorblue!\a!red, right] at (1.6, {\a*1.5*1.5}) {$a\a$}; } \end{tikzpicture}\foreach \x in {start, step, ..., end}是数值循环。\foreach \a in {list}是列表循环。在plot中如果循环变量与坐标变量冲突需要用variable\x显式指定坐标变量。colorblue!\a!red利用了颜色混合语法随着\a变化颜色从红渐变到蓝。2. 绘制分形或复杂规则图形Sierpinski三角形示例\begin{tikzpicture}[scale4] % 定义一个递归绘制 Sierpinski 三角形的函数 \tikzset{ sierpinski/.style n args{4}{% 参数递归深度 三角形顶点A,B,C /utils/exec{ \pgfmathtruncatemacro{\depth}{#1} \ifthenelse{\depth0}{ \draw[fillblue!20] (#2) -- (#3) -- (#4) -- cycle; }{ % 计算三条边的中点 \coordinate (midAB) at ($(#2)!0.5!(#3)$); \coordinate (midBC) at ($(#3)!0.5!(#4)$); \coordinate (midCA) at ($(#4)!0.5!(#2)$); % 递归调用 \tikzset{sierpinski/.expanded{\depth-1}{#2}{midAB}{midCA}} \tikzset{sierpinski/.expanded{\depth-1}{midAB}{#3}{midBC}} \tikzset{sierpinski/.expanded{\depth-1}{midCA}{midBC}{#4}} } } } } % 调用函数绘制4阶Sierpinski三角形 \tikzset{sierpinski{4}{0,0}{1,0}{0.5,0.866}} % 0.866 sqrt(3)/2 \end{tikzpicture}这个例子较为复杂展示了TikZ的编程能力。它使用了递归、条件判断和坐标计算。($(A)!0.5!(B)$)是calc库的语法表示A和B连线的中点需要加载\usetikzlibrary{calc}。对于初学者理解其“分而治之”的递归思想比记住语法更重要。在实际应用中简单的\foreach循环足以解决大部分重复性绘图需求。5.2 图层、作用域与外部化管理复杂图形当图形变得复杂时合理的组织代码至关重要。1. 使用scope环境管理样式和变换scope环境可以为其内部的所有元素应用统一的样式变换或几何变换类似于绘图软件中的“组”。\begin{tikzpicture} % 原始对象 \draw[thick] (0,0) rectangle (1,1); \fill (0.5,0.5) circle (2pt); % 第一个 scope整体向右平移并变为红色 \begin{scope}[xshift3cm, red] \draw[thick] (0,0) rectangle (1,1); \fill (0.5,0.5) circle (2pt); \node at (0.5, -0.3) {平移变色}; \end{scope} % 第二个 scope旋转并缩放 \begin{scope}[xshift6cm, rotate30, scale0.7, blue] \draw[thick] (0,0) rectangle (1,1); \fill (0.5,0.5) circle (2pt); \node at (0.5, -0.5) {旋转缩放}; \end{scope} \end{tikzpicture}scope内的变换是累积的且只影响其内部。这对于绘制对称图形、重复单元非常有用。2. 利用backgrounds和layers库控制绘制顺序有时你需要将网格、背景框等元素放在所有图形后面。backgrounds库可以轻松实现。\usetikzlibrary{backgrounds} \begin{tikzpicture}[show background rectangle, background rectangle/.style{fillyellow!5, rounded corners}] % 前景内容 \node[draw] (a) at (0,0) {前景节点}; \draw[-, thick] (a) -- (2,1); % 背景层会自动被绘制在最底层 \end{tikzpicture}对于更复杂的图层管理如背景、主图、标注、前景可以使用\usetikzlibrary{layers}定义自己的图层顺序然后将图形元素放置到特定图层。3. 图形外部化Externalization以加速编译这是最重要的效率技巧TikZ图形编译耗时尤其是复杂图形。外部化可以将每个tikzpicture环境预编译为独立的PDF后续编译主文档时直接插入速度极快。% 在导言区加入 \usetikzlibrary{external} \tikzexternalize[prefixfigures/] % 指定缓存文件夹 % 可选仅对特定图形外部化 % \tikzset{external/exporttrue} % 默认对所有图形外部化 % \tikzset{external/exportfalse} % 对某个图形禁用外部化首次编译时会稍慢需要生成PDF之后编译速度会有数量级的提升。记得创建figures文件夹。在Overleaf等在线平台可能需要开启-shell-escape编译选项。5.3 常见“坑”与调试技巧1. 坐标计算错误问题图形位置不对或者calc库语法报错。排查先用简单的\draw (0,0) -- (1,0);测试坐标轴方向。确保calc库语法正确($(A)!0.5!(B)$)而不是($(A)!0.5!(B)$漏括号。技巧在调试阶段可以用\node at (坐标) {x};或\fill[red] (坐标) circle (1pt);把关键坐标点标记出来直观看到它们在哪里。2. 节点覆盖或连线错位问题连线没有准确连接到节点的边框锚点。解决始终使用节点的锚点进行连接如(node名.east)而不是(node名)后者默认是中心.center。对于直角连线|-确保起点和终点是明确的锚点。3. 编译缓慢与“Dimension too large”错误问题图形太复杂或坐标值过大/过小导致编译极慢甚至报错。解决使用[scale0.1]等选项整体缩放图形将坐标值控制在一个合理的范围如-10到10。启用上述的图形外部化。对于极其复杂的图形考虑是否能用pgfplots或其他专业工具生成再以图片形式插入。4. 中文或特殊字符显示问题问题节点中的中文变成乱码或编译报错。解决确保文件编码为UTF-8 without BOM。使用XeLaTeX或LuaLaTeX编译器。在导言区正确加载中文字体宏包如\usepackage[UTF8]{ctex}。对于TikZ节点中的中文通常不需要额外设置。最后我个人最常用的一个效率习惯是为每一个项目建立一个本地的.tex文件作为“TikZ代码草稿纸”。在这个文件里我会把常用的图形块如特定风格的框图、坐标轴模板、自定义命令保存为代码片段。当需要在主文档中画图时直接从这个草稿纸里复制粘贴修改远比每次从头搜索或回忆语法要快得多。久而久之这个文件就成了你最宝贵的个人TikZ代码库。