答案1
这是你的起点。一如既往,一口一口地吃掉大象... 对图纸的所有相关片段重复此操作,最后将其合并为一幅图纸。
所以首先,只需关注一半,即正确的一半。您可以随时镜像它。为了更好地看到各个部分,我做了一些着色。
接下来覆盖网格,例如通过Paint.net
或Gimp
其他程序。我们需要图纸中的某些点来铺平道路。
对于网格,我使用了这个,因此现在可能是查找 pgfmanual 和其教程部分中的命令的好时机:
\documentclass[10pt,border=3mm,tikz]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw (0,0) grid (5,10);
\end{tikzpicture}
\end{document}
现在,让我们尝试近似黄金区域。我们只需要轮廓,不需要关心精度、重叠等。留到以后再考虑。
让我们尝试通过近似蓝线和红线来模仿一种非常粗糙的形式。相关部分只是绘制两条路径:
% ~~~ blue path ~~~~~~~~~~~
\draw (0,6.2) -- (1.1,4.1) -- (1.2,2.7) -- (1.7,2.7) -- (1.5,1.9);
% ~~~ red path ~~~~~~~~~~~
\draw (0,6.4) -- (1.2,4.2) -- (2.1,3.9) -- (3.5,4.2) -- (1.8,1.9);
为了引入弯曲,我们可以指定出角和入角,如下所示:用 替换--
。to [out=260,in=95]
手册提到了更多方法,例如贝塞尔式控件。做出选择。
代码,带有一些小的坐标移动(比较粗略和精细):
\documentclass[10pt,border=3mm,tikz]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}% ~~~ very coarse ~~~
% ~~~ comment out or delete grid later ~~~
\draw [help lines] (0,0) grid (7,13);
% ~~~ blue path ~~~~~~~~~~~
\draw (0,6.2) -- (1.1,4.1) -- (1.2,2.7) -- (1.7,2.7) -- (1.5,1.9);
% ~~~ red path ~~~~~~~~~~~
\draw (0,6.4) -- (1.2,4.2) -- (2.1,3.9) -- (3.5,4.2) -- (1.8,1.9);
\end{tikzpicture}
\begin{tikzpicture}% ~~~ with bends ~~~
% ~~~ comment out or delete grid later ~~~
\draw [help lines] (0,0) grid (7,13);
% ~~~ blue path ~~~~~~~~~~~
\draw (0,6.2) to [out=260,in=95] (1.1,4.1)
to [out=5,in=55] (1.2,2.7)
to [out=270,in=240](1.8,2.7)
to [out=260,in=220] (1.7,1.9);
% ~~~ red path ~~~~~~~~~~~
\draw (0,6.4) to [out=280,in=85] (1.2,4.2)
to [out=10,in=105] (2.1,3.9)
to [out=50,in=150] (3.5,4.2)
to [out=-200,in=50] (1.8,1.9);
\end{tikzpicture}
\end{document}
附言:展望,如何继续
假设您知道如何绘制装饰品的(大部分)部分。如何将所有部分连接起来?
让我们介绍一下\pic
元素,这样你就可以像这样写一些东西:\pic at (0,0) {halve};
这样可以清理你的代码。你可以将所有内容移动到一个\tikzset{ }
语句中,在halve
该语句中定义此文件中的含义:
\begin{document}
\tikzset{% ~~~ all drawings needed for one halve ~~~~~~~~~
halve/.pic={
% ~~~ blue path ~~~~~~~~~~~
\draw (0,6.2) to [out=260,in=95] (1.1,4.1)
...
\draw (0,13) to [bend right] (1,12) -- (0,11);
}
}
为了便于查看,我添加了 3 个虚拟形状,请参阅下面的最终代码。顺便说一句,这是使用 获得的方法closed pathes
,cycle
在涉及重叠时可能需要它,也许可以使用图层,就像在图形程序中一样:
% ~~~ rightmost; example for closed path ~~~~
\draw (5.5,3.8) -- (5.5,5.5) -- (6.5,4.8) -- cycle;
现在您可以将几个halve
s 放置在任何您想要的位置,包括缩放(transform shape
也需要),请参阅最终代码:
最后,整个对称装饰物怎么样?正如你可能猜到的,我们将定义另一个\pic
,其中包括mirrored halve
:
\tikzset{% ~~~ putting two halves together ~~~~~~
ornmnt/.pic={
\pic at (0,0) {halve};
\pic [xscale=-1] at (0,0) {halve};
}
}
所有这些的最终代码:
\documentclass[10pt,border=3mm,tikz]{standalone}
\usepackage{tikz}
\begin{document}
\tikzset{% ~~~ all drawings needed for one halve ~~~~~~~~~
halve/.pic={
% ~~~ blue path ~~~~~~~~~~~
\draw (0,6.2) to [out=260,in=95] (1.1,4.1)
to [out=5,in=55] (1.2,2.7)
to [out=270,in=240](1.8,2.7)
to [out=260,in=220] (1.7,1.9);
% ~~~ red path ~~~~~~~~~~~
\draw (0,6.4) to [out=280,in=85] (1.2,4.2)
to [out=10,in=105] (2.1,3.9)
to [out=50,in=150] (3.5,4.2)
to [out=-200,in=50] (1.8,1.9);
% ~~~ simple pattern at origin ~~~~~
\draw (0,0) to [bend left] (1,1);
% ~~~ rightmost; example for closed path ~~~~
\draw (5.5,3.8) -- (5.5,5.5) -- (6.5,4.8) -- cycle;
% ~~~ top ornament ~~~~~~~~~~~~~~~~~
\draw (0,13) to [bend right] (1,12) -- (0,11);
}
}
\tikzset{% ~~~ putting two halves together ~~~~~~
ornmnt/.pic={
\pic at (0,0) {halve};
\pic [xscale=-1] at (0,0) {halve};
}
}
% ~~~ (1) let's see the \pic {halve} ~~~~~~~~~~
\begin{tikzpicture}% ~~~ with bends ~~~
% ~~~ comment out or delete grid later ~~~
\draw [help lines] (0,0) grid (7,13);
\pic at (0,0) {halve};
\node [red] at (5,11.3) {one halve of the ornament};
\end{tikzpicture}
% ~~~ (2) using \pic {halve} ~~~~~~~~~~~~~
\begin{tikzpicture}% ~~~ with bends ~~~
\pic at (0,0) {halve};
\node [red] at (5,10) {one pic};
\draw [dashed,gray] (8,0) -- (8,13);
\pic at (8,0) {halve};
\node [red] at (13,10) {one more pic};
\draw [dashed,gray] (16,0) -- (16,13);
\pic [scale=.5, transform shape] at (16,0) {halve};
\node [red] at (19,10) {smaller pic};
\end{tikzpicture}
% ~~~ (3) let's see the full ornament ~~~~~~~~
\begin{tikzpicture}
\pic at (0,0) {ornmnt};
\end{tikzpicture}
\end{document}
答案2
对于这种复杂的东西,最好使用SVG-Path
库导入 SVG 路径。
以下是我建议的步骤:
- 在 Illustrator 或 Inkscape 等 GUI 矢量图形编辑器中绘制轮廓(或从现有 SVG 导入)。
- 保存为 SVG。
- 在文本编辑器中打开 SVG 并复制
d
每个<path/>
元素的属性文本(您也可以在 Inkscape 中执行此操作,而不需要先保存,不知道 Illustrator)。 - 将每个属性文本放在单独的
\pgfpathsvg
命令中,如下所示。
\usepgflibrary {svg.path}
\begin{pgfpicture}
\pgfpathsvg{<path code 1 goes here>}
\pgfusepath{stroke}
\pgfpathsvg{<path code 2 goes here>}
\pgfusepath{stroke}
...
\end{pgfpicture}
\draw
您还可以将 SVG 路径作为 TikZ或命令中的路径规范\path
:
\usetikzlibrary {svg.path}
\begin{tikzpicture}
\draw svg {<path code 1 goes here>};
\draw svg {<path code 2 goes here>};
...
\end{tikzpicture}
当然,您也可以使用 将矢量图形(例如 PDF)包含在文档中\includegraphics
。但是,如果您想对图形进行注释或执行其他操作,这可能是更好的选择。
答案3
用 LaTeX 做这种画既复杂又乏味。有一个软件包可以让你制作相同类型但不完全相同的预制装饰品,例如https://ctan.org/pkg/pgfornament
这是用这个包得到的装饰品 n°66,它看起来很像,但并不完全相同:
\documentclass{scrartcl}
\usepackage{pgfornament}
\begin{document}
\pgfornament{66}
\end{document}