将 pgf 代码转换为 TikZ 代码?

将 pgf 代码转换为 TikZ 代码?

我不清楚pgf和 TikZ 的区别。后者是前者的前端。没关系。无论如何,他们的代码显然不同。我有两个问题。

  1. 是否可以将pgf代码转换为 TikZ 代码?如果可以,您可以推荐任何应用程序吗(请推荐 Mac)?

  2. 是否可以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 语法重现。但这是众所周知的,也是许多问题(包括链接的问题)的主题。

相关内容