问题

LaTeX 下怎么画出这样的不规则图形?

回答
在 LaTeX 中绘制不规则图形,通常我们会利用 `TikZ` 和 `pgfplots` 等宏包。`TikZ` 提供了强大的绘图能力,而 `pgfplots` 则更侧重于绘制坐标图和函数图形,但其底层也使用了 `TikZ`,并且可以方便地处理数据点绘制。

下面我将详细介绍几种绘制不规则图形的方法,并附上详细的 LaTeX 代码示例。

核心思想:

绘制不规则图形的关键在于能够定义一系列点,然后将这些点连接起来,或者用填充的方式形成图形。



方法一:使用 `draw` 和坐标列表直接连接点

这是最基本也是最灵活的方法。你可以直接列出你想绘制的点的坐标,然后用 `TikZ` 的命令将它们连接起来。

主要命令:

`draw (x1, y1) (x2, y2) (x3, y3) ...;`:绘制一条连接这些点的折线。
`draw (x1, y1) .. controls (cx1, cy1) and (cx2, cy2) .. (x2, y2);`:绘制一条贝塞尔曲线,通过控制点来定义曲线的形状。
`fill (x1, y1) (x2, y2) ... cycle;`:用填充的方式绘制一个闭合的图形。` cycle` 表示连接最后一个点到第一个点形成闭合。
`path[fill=color] (x1, y1) (x2, y2) ... cycle;`:与 `fill` 类似,但 `path` 可以后面跟上其他操作,如 `draw=color` 来同时绘制边框和填充。

步骤:

1. 引入 `TikZ` 宏包: 在文档的导言区(`documentclass{...}` 和 `egin{document}` 之间)加入 `usepackage{tikz}`。
2. 创建 `tikzpicture` 环境: 在需要绘制图形的地方使用 `egin{tikzpicture}...end{tikzpicture}` 环境。
3. 定义点和绘制: 在 `tikzpicture` 环境内,使用 `draw` 或 `fill` 命令,并列出点的坐标。

示例 1:绘制一个简单的多边形

假设我们要绘制一个类似“不规则的五角星”的图形,其顶点坐标是预先确定的。

```latex
documentclass{article}
usepackage{tikz}

egin{document}

egin{tikzpicture}
% 定义一个图形的路径
draw[line join=round, line cap=round, thick, blue] % 设置线段连接方式、端点形状、线宽和颜色
(0,0) (2,1) (1.5,3) (1,2) (2,0) cycle; % 绘制连接各点的折线并闭合

% 如果想填充这个图形
fill[green!30] % 使用半透明的绿色填充
(0,0) (2,1) (1.5,3) (1,2) (2,0) cycle;

% 也可以同时绘制边框和填充
% path[draw=red, fill=yellow!20]
% (0,0) (2,1) (1.5,3) (1,2) (2,0) cycle;

end{tikzpicture}

end{document}
```

解释:

`usepackage{tikz}`:引入 TikZ 宏包。
`egin{tikzpicture}` 和 `end{tikzpicture}`:创建 TikZ 绘图环境。
`draw[options] (x1, y1) (x2, y2) ... cycle;`:
`options` (如 `line join=round`, `line cap=round`, `thick`, `blue`) 可以用来控制线条的外观。
`line join=round`:使线段连接处呈圆角,看起来更平滑。
`line cap=round`:使线段的端点呈圆角。
`thick`:使线条变粗。
`blue`:将线条颜色设置为蓝色。
`(x, y)`:表示点的坐标。在 TikZ 中,默认的单位是 `cm`。
``:表示连接两个点形成一条直线。
`cycle`:表示将最后一个点连接回第一个点,形成一个闭合的图形。
`fill[options] ... cycle;`:与 `draw` 类似,但只绘制填充,不绘制边框。这里 `green!30` 表示 30% 的绿色,可以用来实现半透明效果。
`path[draw=red, fill=yellow!20] ... cycle;`:`path` 命令本身不绘制任何东西,而是定义一个路径。通过选项 `draw` 和 `fill`,可以同时控制路径的边框和填充。

如何获取不规则图形的坐标?

如果你有一个真实的图片,并且想将其转换为 TikZ 代码,有几种方法:

1. 手动估算: 在 TikZ 环境中反复尝试不同的坐标,直到达到你想要的效果。这对于简单的图形比较有效。
2. 使用绘图软件并导出坐标:
Inkscape (免费开源): 你可以在 Inkscape 中绘制图形,然后将路径导出为 SVG 格式。一些工具或脚本可以帮助你从 SVG 中提取坐标点。
Adobe Illustrator (商业): 类似地,也可以在 Illustrator 中绘制,然后导出。
在线工具: 一些在线工具可以将点数据可视化,并生成 TikZ 代码(搜索“tikz path generator from points”)。
3. 使用数据点列表: 如果你的不规则图形是由一系列数据点定义(例如,从实验数据或科学绘图软件中获得),你可以直接将这些数据点复制到 TikZ 代码中。



方法二:使用贝塞尔曲线绘制平滑的不规则图形

如果你想要绘制更平滑、更自然的曲线形状,可以使用贝塞尔曲线。

主要命令:

`draw (x1, y1) .. controls (cx1, cy1) and (cx2, cy2) .. (x2, y2);`:从 `(x1, y1)` 开始,使用控制点 `(cx1, cy1)` 和 `(cx2, cy2)` 来定义曲线的形状,最终到达 `(x2, y2)`。
`(cx1, cy1)` 是控制第一个点 `(x1, y1)` 的切线的方向和长度。
`(cx2, cy2)` 是控制第二个点 `(x2, y2)` 的切线的方向和长度。

示例 2:绘制一个更平滑的不规则形状

```latex
documentclass{article}
usepackage{tikz}

egin{document}

egin{tikzpicture}
draw[line join=round, line cap=round, thick, red]
(0,0) .. controls (1,1) and (3,1) .. (4,0) % 第一个曲线段
.. controls (5,1) and (5,3) .. (4,4) % 第二个曲线段
.. controls (3,5) and (1,5) .. (0,4) % 第三个曲线段
.. controls (1,3) and (1,1) .. (0,0); % 第四个曲线段,闭合

% 填充这个平滑的不规则图形
fill[orange!30]
(0,0) .. controls (1,1) and (3,1) .. (4,0)
.. controls (5,1) and (5,3) .. (4,4)
.. controls (3,5) and (1,5) .. (0,4)
.. controls (1,3) and (1,1) .. (0,0);
end{tikzpicture}

end{document}
```

解释:

`.. controls (cx1, cy1) and (cx2, cy2) ..`:这里的 `and` 是固定的关键字,用于分隔两个控制点。
为了绘制一个闭合的不规则形状,你需要确保最后一个贝塞尔曲线段的终点与第一个点的起点相同。

如何确定贝塞尔曲线的控制点?

直观调整: 这是最常用的方法。在 TikZ 中,你可以在 `draw` 命令中定义控制点,然后编译 LaTeX 文档。你可以看到绘制出的曲线,然后修改控制点来调整曲线的形状,直到满意为止。
数学公式: 贝塞尔曲线的数学定义比较复杂,但理解其原理有助于更精确地控制曲线。如果你需要精确控制曲线的曲率,可以研究贝塞尔曲线的数学公式,并计算出合适的控制点。



方法三:使用 `pgfplots` 和数据点

如果你的不规则图形是由一组离散的数据点组成的,`pgfplots` 是一个非常方便的选择。它可以直接读取数据点,并绘制出连接这些点的平滑曲线或折线。

主要命令:

`addplot [options] coordinates {(x1,y1) (x2,y2) ...};`:直接在代码中提供坐标点列表。
`addplot [options] table {data.txt};`:从一个外部文本文件中读取数据点。
`smooth`: 使连接数据点的曲线平滑(使用样条插值)。
`no marks`: 不显示数据点的标记。
`fill=color`: 填充图形。
`fill opacity=...`: 设置填充的透明度。

步骤:

1. 引入 `pgfplots` 宏包: 在导言区加入 `usepackage{pgfplots}`。
2. 设置 `pgfplots` 样式(可选但推荐): 可以通过 `pgfplotsset{...}` 来设置全局的绘图风格。
3. 创建 `axis` 环境: `pgfplots` 的所有绘图都必须在 `axis` 环境内。
4. 添加绘图: 使用 `addplot` 命令添加你的数据点。

示例 3:使用 `pgfplots` 绘制不规则曲线

假设我们有一组描述某个不规则形状边界的点:

```latex
documentclass{article}
usepackage{tikz}
usepackage{pgfplots} % 引入 pgfplots
pgfplotsset{compat=1.18} % 设置 pgfplots 的兼容版本,建议加上

egin{document}

egin{tikzpicture}
egin{axis}[
axis lines=none, % 不显示坐标轴线
samples=100, % 设置采样点数量,影响曲线平滑度
smooth, % 使曲线平滑
domain=5:5, % 设置绘图的定义域(如果使用函数)
enlargelimits=true, % 允许坐标轴范围稍微扩大一点,避免图形被切掉
view={0}{90} % 从上方俯视,相当于 2D 绘图
]

% 直接用坐标列表绘制一个不规则的闭合曲线并填充
addplot [
thick,
blue,
fill=blue!20, % 填充颜色
fill opacity=0.5, % 设置填充透明度
smooth, % 确保使用平滑曲线连接点
mark=none % 不显示数据点的标记
] coordinates {
(0,0) (2,1) (3.5,2.5) (4,4) (3,5) (1.5,5.5) (1,5) (3,4) (4,2) (3,1) (1,2) (0,0) % 闭合点
};

% 如果你的点是从外部文件导入(假设文件名为 points.dat,每行一个 x,y 值)
% addplot [
% thick,
% red,
% fill=red!20,
% fill opacity=0.5,
% smooth,
% mark=none
% ] table {points.dat};

end{axis}
end{tikzpicture}

end{document}
```

解释:

`usepackage{pgfplots}`:引入 `pgfplots` 宏包。
`pgfplotsset{compat=1.18}`:这是一个好习惯,确保 `pgfplots` 的行为符合你预期的版本。
`egin{axis}[options] ... end{axis}`: `pgfplots` 的绘图环境。
`axis lines=none`:隐藏默认的 x 和 y 轴线。
`samples=100`:当使用 `smooth` 参数时,`pgfplots` 会插入额外的点来使曲线更平滑。`samples` 控制插入点的数量。
`smooth`:告诉 `pgfplots` 使用样条插值来连接数据点,而不是简单的直线连接。
`domain=5:5`:这个参数在绘制函数时有用,这里可以忽略。
`enlargelimits=true`:让坐标轴的范围稍微大于数据点的范围,这样图形边缘就不会被裁剪。
`view={0}{90}`:将视角设置为从正上方看,相当于标准的 2D 坐标系。
`addplot [...] coordinates { ... };`:
`coordinates { ... }`:直接在此处提供点的列表。
`fill=blue!20, fill opacity=0.5`:设置填充颜色为半透明的蓝色。

如何从外部文件导入数据?

创建一个名为 `points.dat` 的文本文件,内容如下:

```
0,0
2,1
3.5,2.5
4,4
3,5
1.5,5.5
1,5
3,4
4,2
3,1
1,2
0,0
```

然后,在 `addplot` 命令中使用 `table {points.dat}` 来加载数据。



组合使用与更复杂的技巧

节点和锚点: 你可以在 TikZ 中定义节点,并将图形连接到这些节点。这对于创建更复杂的布局很有用。
路径修改: TikZ 提供了很多修改路径的命令,例如 `decorate`(用于在路径上绘制箭头、标记等),`plot`(用于绘制函数),以及各种变换(平移、旋转、缩放)。
循环和宏: 对于重复性的图形元素,可以使用 LaTeX 的宏或 TikZ 的 `foreach` 循环来生成。
颜色渐变: 使用 `pgfusescale{}` 或 `shade` 等命令可以创建颜色渐变效果。
图层: TikZ 支持图层,可以让你控制图形的绘制顺序。

选择哪种方法?

精确的折线图形: 直接使用 `draw` 和坐标列表。
平滑的、有机形状: 使用贝塞尔曲线 (`.. controls ..`)。
基于数据点的曲线: 使用 `pgfplots` 的 `addplot coordinates` 或 `table`。

总结:

绘制不规则图形在 LaTeX 中是一个非常有创造性的过程。最核心的是能够定义构成图形的点和连接它们的规则。

1. 使用 `TikZ` 的 `draw` 命令: 直接列出坐标点,用 `` 连接折线,或用 `.. controls ..` 连接贝塞尔曲线。对于闭合图形,记得用 ` cycle`。
2. 使用 `pgfplots` 的 `addplot` 命令: 特别适合从数据点(直接或文件导入)绘制平滑曲线或折线,并方便地填充。

你需要根据你想要绘制的图形的特点来选择最合适的方法,并通过不断的尝试和调整来达到完美的效果。祝你绘图愉快!

网友意见

user avatar

可以在inkscape或Ai里面手工曲线描楼主的图,保存svg文件。用记事本打开这个svg文件,将里面的路径数据拷贝进入LaTeX里面就可以了,要用到tikz包的svg.path库。

这么做比插图的好处在于,可以在latex里面精细操作这个图形路径,包括颜色、填充、变形、在该路径上任意位置进行特定的修饰等等。

       documentclass{standalone} usepackage[svgnames]{xcolor} usepackage{tikz} usetikzlibrary{svg.path}  	ikzset{     mypic/.pic={         filldraw[yscale=-1, very thin]                svg {M 20.631227,29.742997 C 17.38776,19.138242 14.582606,16.065031 15.310251,10.376112 c 0.704012,-5.5041498 5.251924,-5.1599501 8.617262,-5.2709789 2.104337,-0.069426 3.056461,-0.040001 4.515002,0.3488546 2.082311,0.5551559 1.845746,2.0836708 4.568678,1.6005799 2.722932,-0.4830909 0.470228,-1.545139 1.059976,-2.149557 3.210176,-0.5689798 9.194583,-0.5034793 15.680875,-0.4217051 6.780183,0.1548345 12.88824,0.9461941 18.328899,4.0340804 2.230746,1.2660762 3.767489,3.2412291 5.273222,5.6040791 0.753271,1.18206 -0.123893,2.524998 1.214664,3.647124 2.045421,1.714696 3.728906,4.216071 3.258455,8.10111 -0.541404,4.470979 -1.840037,9.188679 -4.508248,12.867973 -1.916431,2.642637 -4.847002,4.514032 -7.778927,5.94932 -0.665374,0.325726 -1.509968,0.191634 -2.14915,0.566155 -0.389384,0.228155 -0.531028,0.784643 -0.940895,0.973545 -1.657994,0.764146 -3.64187,0.393616 -5.466556,0.335458 -2.16057,-0.06886 -4.282929,-0.598824 -6.434394,-0.808596 -3.212352,-0.313211 -6.451531,-0.315585 -9.659462,-0.671226 -0.926485,-0.102713 -1.365124,-0.603371 -2.389223,-0.221827 -3.028334,1.052449 -4.437486,0.989273 -6.882893,-0.476811 -1.184791,-0.710313 -2.380761,0.145351 -3.990904,-0.901106 -2.952037,-1.918575 -2.728386,-3.065025 -3.57089,-4.902956 -1.146877,-2.501924 0.0062,-3.972304 -0.780966,-5.732969 -0.554691,-1.240606 -1.86779,-1.914595 -2.643549,-3.103662 z};}, }  egin{document}   egin{tikzpicture}     draw (0,0) pic[draw=DarkBlue, fill=RoyalBlue] {mypic}            (3,0) pic[draw=Green, fill=LightGreen]{mypic}; end{tikzpicture} end{document}     

类似的话题

  • 回答
    在 LaTeX 中绘制不规则图形,通常我们会利用 `TikZ` 和 `pgfplots` 等宏包。`TikZ` 提供了强大的绘图能力,而 `pgfplots` 则更侧重于绘制坐标图和函数图形,但其底层也使用了 `TikZ`,并且可以方便地处理数据点绘制。下面我将详细介绍几种绘制不规则图形的方法,并附.............
  • 回答
    LaTeX 的渲染过程是一个复杂但高度自动化的流程,它将你编写的纯文本文件(`.tex` 文件)转换为精美的排版文档(通常是 `.pdf` 文件,但也可是 DVI、PS 等格式)。这个过程涉及多个步骤和工具,最终生成具有专业外观的印刷品。下面我将从宏观到微观,详细地解释 LaTeX 的渲染过程: 宏.............
  • 回答
    LaTeX 相对于 Microsoft Word 在排版、学术写作和专业文档制作方面具有诸多显著优势,这些优势使得它在科研、工程、数学、计算机科学等领域成为事实上的标准。下面将详细阐述这些优势:1. 专业、高质量的排版效果: 自动化的排版系统: LaTeX 的核心在于其自动化排版能力。用户只需关.............
  • 回答
    在 LaTeX 中,`equation` 环境和 `align` 环境都是用于排版数学公式的,但它们在功能和使用场景上有所区别。`align` 环境在许多方面提供了比 `equation` 环境更强大的功能和更高的灵活性。让我们详细地探讨一下 `equation` 环境相比 `align` 环境的优.............
  • 回答
    LaTeX 用户的心态,以及他们为何选择它而非“更高效更简便”的 Office 套件,这是一个值得深入探讨的话题。这背后并非简单的工具选择,更是一种对精确性、控制力、美观度和长期维护性的追求,以及在特定领域内的工作习惯和价值取向的体现。LaTeX 用户的心态:追求极致与掌控的匠人精神用 LaTeX .............
  • 回答
    在 LaTeX 诞生之前,排印复杂的数学公式可是一门费时费力的手艺活,更像是一种精密的艺术创作。想象一下,印刷术已经相当成熟,但要将那些弯弯绕绕、上下标林立的数学符号准确无误地呈现在纸上,远非今日这般轻而易举。活字印刷:精密的拼凑艺术在 LaTeX 出现之前,最主流的印刷方式是活字印刷(Letter.............
  • 回答
    让老师在 LaTeX 论文上方便地评注和修改,关键在于 清晰的标记、良好的沟通以及利用 LaTeX 的优势。这不仅仅是技术层面的操作,更涉及到与导师的协作方式。以下是一些详细的建议,希望能帮助你更顺畅地完成这个过程:核心思路: 变被动反馈为主动沟通: 不要等到论文“写完”才发给老师,而是分阶段、.............
  • 回答
    使用 LaTeX 时保持文档结构清晰、避免混乱,需要从组织结构、代码规范、工具辅助等多方面入手。以下是详细的建议,帮助你系统化地管理 LaTeX 文档,避免“乱”: 一、明确文档结构,分块管理1. 遵循标准结构 使用 `section`、`subsection`、`paragraph` 等.............
  • 回答
    许多人对 Word 的印象停留在“排版混乱”、“公式丑陋”、“图文混排困难”等负面认知,这很大程度上是因为他们没有掌握 Word 的真正精髓,依然用最原始的输入法来处理复杂的文档。与之相对的是 LaTeX,以其严谨的排版和优雅的输出征服了学术界。但并非所有人都有时间和精力去学习 LaTeX 的语法,.............
  • 回答
    要在 LaTeX 中绘制这些示意图,最常用的宏包是 `tikz`。`tikz` 是一个非常强大和灵活的绘图宏包,可以用来绘制各种类型的图形,包括流程图、网络图、电路图、几何图形等等。下面我将详细讲解如何使用 `tikz` 来绘制您提供的示意图。我将逐个分析图的组成部分,然后给出相应的 LaTeX 代.............
  • 回答
    好的,我们来聊聊如何用 LaTeX 撰写数学建模论文,以及如何根据自己的需求定制 LaTeX 模板。撰写一篇专业的数学建模论文,LaTeX 绝对是首选工具。它能让你专注于内容的表达,而不用过多担心排版的美观和一致性。下面我将从使用现有模板和从零开始构建自己的模板两个方面,详细地介绍如何做。 一、 使.............
  • 回答
    优雅的LaTeX论文写作指南写一篇优雅的LaTeX论文,不仅仅是掌握编译器的命令,更是一种严谨的学术态度和对细节的极致追求的体现。它关乎内容的清晰呈现、结构的合理组织、视觉的和谐美观,以及最终给读者带来的专业而舒适的阅读体验。本文将从多个维度,详细解析如何让你手中的LaTeX论文焕发优雅的光彩。 1.............
  • 回答
    这个问题很有意思!“Word大佬”能否写出“Latex一样漂亮”的论文,答案是:理论上可以,但实际上非常困难,并且要付出巨大的额外努力,还可能在某些方面永远无法达到Latex的精髓。让我们详细分析一下其中的原因,并深入探讨Word和Latex在排版论文方面的差异: 为什么Latex在论文排版中如此强.............
  • 回答
    当然,用手写识别来输入 LaTeX 文档的图形化发行版,这个想法是很有吸引力的,并且在技术上是有实现的可能性。要详细聊聊这个话题,我们可以从几个关键的方面来剖析它。核心挑战与可行性分析首先,要明白这个项目的核心在哪里:将人类习惯的手写输入转化为机器可读的 LaTeX 代码。这其中涉及到的关键技术环节.............
  • 回答
    看到你的LaTeX模板运行时出现了问题,别担心,这在LaTeX排版过程中是很常见的情况。根据你提供的图片(虽然我无法直接看到图片内容,但根据你描述的“错误”和通常的LaTeX运行情况,我来为你详细分析并提供解决方案),我将尽量详细地解释可能的原因以及如何一步步排查和解决。我们先来梳理一下LaTeX编.............
  • 回答
    知乎对LaTeX的支持,嗯,怎么说呢,确实是个挺让人摸不着头脑的决定。本来LaTeX是一个强大的排版工具,能让学术、技术内容看起来专业又美观,结果到了知乎这儿,感觉就被“阉割”得只剩下半条命了。你仔细想想,在真正的LaTeX环境里,我们可以做什么?可以精细控制字体大小、行距、段落缩进;可以插入各种复.............
  • 回答
    人生海海,能静下心来学习一项新技能,本身就是一件值得庆幸的事。尤其是在信息爆炸的时代,我们总觉得时间不够用,想要掌握点什么,却又被无数的“看起来很棒”的东西牵着鼻子走。LaTeX,这门排版界的“老炮”,很多人听过,但真正花时间去啃它的,可能就不多了。今天,咱们就来聊聊,如何在有限的时间里,把LaTe.............
  • 回答
    这个问题很有意思,也很能触及学术界的一些实际情况。简单来说,不是所有国外教授的讲义都是自己用 LaTeX 打出来的,但 LaTeX 在学术界,尤其是在理工科领域,确实是相当普遍和受欢迎的。要详细地聊这个问题,我们可以从几个方面来剖析:1. LaTeX 的优势:为何它在学术界如此盛行?我们首先得理解为.............
  • 回答
    未来是否可能用 HTML 完全取代 Word、LaTeX 等文档格式?这是一个引人深思的问题,牵涉到文档创建、发布、协作以及信息呈现的方方面面。要回答这个问题,我们需要深入探讨 HTML 的现有能力、其在文档领域的潜力和局限性,以及 Word、LaTeX 等格式的优势所在。HTML 的优势:互联网的.............
  • 回答
    您这个问题很有趣,触及到了“数学公式”与“编程”之间一个非常核心的交汇点。简单来说,有,而且非常普遍。 您描述的“在维基百科粘贴一个LaTeX公式,赋初值后就能计算出结果”这种情境,虽然不完全是直接粘贴到某个“公式编程”的软件里,但背后的原理和实现方式,早已融入了我们今天常用的各种计算工具和编程语言.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有