我不清楚pgf
和 TikZ 的区别。后者是前者的前端。没关系。无论如何,他们的代码显然不同。我有两个问题。
是否可以将
pgf
代码转换为 TikZ 代码?如果可以,您可以推荐任何应用程序吗(请推荐 Mac)?是否可以
pgf
在 TikZ 环境中使用代码?
非常感谢您的帮助。
答案1
我认为这应该是与 tikz 相比,使用 pgf 基本层有什么优势吗?但由于存在一些细微的差别,因此这里只能粗略地将其存档。
如果您将代码转换视为接收 PGF 代码并输出 TikZ 代码的数学函数(我不知道您为什么要这样做),那么它是一个多值非全射函数。
换句话说,相同的 PGF 代码片段可能会导致不同的 TikZ 代码。例如,
\begin{tikzpicture}
\pgfpathmoveto{\pgfpoint{2cm}{0cm}}
\pgfpathlineto{\pgfpoint{0cm}{2cm}}
{
\pgfinterruptpath
\color{red}
%\pgfsetstrokecolor{red}
\pgftransformshift{\pgfpoint{1.5cm}{1cm}}
\pgfnode{circle}{center}{A}{a}{\pgfqstroke}
\endpgfinterruptpath
}
\pgfpathlineto{\pgfpoint{-2cm}{0cm}}
\pgfclosepath
\pgfqstroke
\draw (0,0) -- (2,0) -- node[pos=0.4,above= 2mm,right=0.5mm] {A} (0,2) -- (-2,0) -- cycle;
\draw (0,0) -- (2,0) -- node[pos=0.38,anchor=south west] {A} (0,2) -- (-2,0) -- cycle;
\draw (0,0) -- (2,0) node at (1.5cm,1cm) {A} -- (0,2) -- (-2,0) -- cycle;
\end{tikzpicture}
(我正在近似命令的等效性)假设出于某种原因,我最终得到了上面的 PGF 代码,我想将其转换为 TikZ。但是我不知道为什么要在中间插入节点。如果它来自像 TikZ 这样的代码,node[midway]
我应该有一些插值等。但这是直接插入的。
我可以尝试通过上面给出的选项进行转换(以及更多选项),但为什么我应该选择其中一个而不是另一个呢?好吧,在这个例子中,很明显最后一个是最合理的,但其他人正在尝试获取[pos=x]
语法。
更糟糕的是,TikZ 代码将当前线宽、颜色等设置保留在对象本地,但在 PGF 代码中,它们以宏的形式相互出现。设置泄漏到后面的任何内容,直到再次重置设置,这几乎总是一个问题。例如,删除所有基于 TikZ 的绘图命令并检查输出。注释\color{red}
并从下一行删除注释。WTF?这总是很有趣。
这就是为什么任何解释器都会回到原始构建块(你可以看看 InkScape2TikZ 的输出,顺便说一句,我认为它做得很好)
\draw (a) -- (b);
\draw (b) -- (c);
\path node at (d) {A};
即使这样也不能保证我们真的关闭了这条路径。所以如果我们有一条封闭的路径并且冒险开始了,节点应该稍后出现:)
第二个问题是,并非每个 PGF 命令都可以通过 TikZ 语法重现。但这是众所周知的,也是许多问题(包括链接的问题)的主题。