我非常喜欢 pgf 和 tikz,它们可以制作出漂亮的图形。但我不喜欢花大量时间绘制复杂的图片,因为我必须提供所有点、线等的坐标。有没有包装器可以让这更简单?例如在某些情况下,例如当你必须在箭头上方或周围放置文本时,有办法给出相对位置而不是精确坐标。有没有类似的方法可以用相对坐标绘制其他形状?有没有外部程序可以将带有线条和形状的图形转换为坐标?
答案1
用于生成本答案中的图表的完整 LaTeX 文档可作为要旨在 GitHub 上。
解决“将文本放在箭头上方”问题的一种方法是使用内联节点和相对定位:
\begin{tikzpicture}
\draw[->] (0,0) -- (5,0) node[above]{Hello, world!};
\end{tikzpicture}
您还可以使用命名节点和坐标与相对定位相结合。A\coordinate
就像\node
没有文本区域的 (它们可能仍然有形状)。命名节点和坐标允许您重复使用有关其位置的信息,而无需重新输入位置。使用相对定位构造(由 TikZpositioning
库提供),例如left = 1ex of A
,允许您相对于其他节点/坐标定位节点/坐标,而无需在脑海中计算数学和几何。
\begin{tikzpicture}[
Name/.style = {font={\bfseries}}
]
\coordinate (A) at (0,0);
% ^---- A name for the node/coordinate
\coordinate (B) at (5,1);
\coordinate (C) at (3,4);
\draw (A) -- (B) -- (C) -- cycle;
\node (A-label) [left=1ex of A, Name] {A};
\node (B-label) [right=1ex of B, Name] {B};
\node (C-label) [above=1ex of C, Name] {C};
\node [above left = 2 em of C] {This is a relatively positioned node!}
edge[out=270,in=180,thick,->] (C-label);
\end{tikzpicture}
请参阅教程 2“Hagen 的 Petri 网”TikZ 手册对命名节点和相对定位进行出色的分步演练。
我更喜欢使用相对定位来构造图形,而不是使用 GUI 程序,因为我可以通过调整几个“基础坐标”的位置来改变图形的外观。在这种情况下,我可以通过移动坐标 A、B 和 C 的位置来绘制一个完全不同的三角形,对于大多数调整,图形的其余部分都会恰到好处。学习设置这样的图形需要练习,但一旦你掌握了它,与 GUI 程序相比,它可以在微调图像时节省大量时间。
最后,关于你关于 GUI 程序的问题,我建议Inkscape- 它是一款非常强大的开源矢量图形编辑器,与 Adobe Illustrator 类似。甚至还有插件可用从 Inkscape 图形生成 TikZ 代码。
答案2
jpgfdraw 是一款用于手绘并导出为 pgf 的工具。或许可以参阅这个 jpgfdraw 示例,导出到 pgf/tex 并与 一起使用\input
。
也许您可以将徒手绘图与其他 TikZ 绘图结合起来。
答案3
我认为你需要更具体一点,说明你想做什么。在 TikZ 中,有很多方法可以创建相对坐标。以下是一些示例:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\fill (1,1) circle (2pt) node[above] (O) {Start};
\draw (O) -- (2,2); % absolute
\draw (O) --++ (3,2); % relative
\node[left=2cm] at (O) {Left}; % relative
\end{tikzpicture}
\end{document}
查看http://www.texample.net/tikz/有很多关于如何使用 TikZ 绘图的优秀示例。
答案4
Inkscape 有一个插件,inkscape2tikz,它允许您从 Inkscape 导出 TikZ 代码。此网站的其他问题中已经多次提到过它。