根本区别:PSTricks、TikZ/PGF 等

根本区别:PSTricks、TikZ/PGF 等

好的,因为这是一个相当模糊和主观的问题。我需要为我打算从中受益的讨论设定一些界限。但在做任何事情之前,我当然不想激起比较狂潮和其他……我敢打赌你做不到这一点... 或者 ...Mac 与 PC... 或者 ...香草与巧克力... 可以延续到的答案类型TikZ/PGF 相对于 PSTricks 有哪些优势?(但最好省略)。

我想要求对这些差异进行一个较低层次的解释,以回答以下问题:

  • 为什么 PostScript 指令访问似乎处于 PSTricks 的垄断之下,而其他人却对此羡慕不已?只有编译引擎才能解释它们吗?是否有希望获得与 PS(就此而言也包括 MetaPost)的自然联系?例如,在 TikZ 中有一个命令\pgfdeclarefunctionalshading可以评估有限的 PS 命令集合。(例如:如何绘制阴影球体?)为什么不多一些呢?
  • 如果.pdf <=> .ps可以进行文件转换,为什么不能在渲染器级别进行?
  • 为什么 PSTricks 不能简单地与 pdflatex 引擎配合使用,而是通过要求外部化来使标准用户无法使用 3D 功能等许多好东西?另请参阅如何在 pdfLaTeX 中使用 PSTricks?
  • 从协议和版权角度来看,是否存在任何.pdf文件.ps格式标准冲突,以至于在渲染器级别再次超出了兼容性?

这个问题在安德鲁·史黛西的采访Ryan Reich 含蓄地提出了一个软问题。经过一番思考,我发现这个故事中有一些大漏洞,尽管我隐约知道上述问题的一些答案。如果 Herbert、cjorssen(直接参与了这些工具的开发)和其他专家能提供一些启示,那就太好了。

根据用户的意见,我可以删除这个可能过于主观的问题。还有更多问题,但后来被删除了(参见编辑)。

强制性免责声明我经常使用 TikZ。有时我还会添加用 PSTricks 创建的图片(只要我知道如何使用克林贡语法)。我真的很喜欢这些工具的便利性,不想选择其中一个。为什么我们不能直接聊天呢?

本视频结尾处的一个内幕故事补充了以下答案;

http://www.youtube.com/watch?v=1rCNnMZrFUQ&t=9m52s

答案1

PostScript 是一种完整的编程语言,因此非常强大。要将 PostScript 转换为输出,您需要一个合适的解释器:目前最常用的解释器是 GhostScript。PDF 格式与 PostScript 相关,但通过EPS(封装 PostScript)格式提供的更有限的子集。因此,PDF 查看器无法直接呈现 PostScript:必须将其转换为正确的 PDF 指令。(PDF 不是这种意义上的程序:创建 PDF 格式的原因之一是它是一个“已知量”。PostScript 文档可能需要任意数量的复杂计算才能显示,这对某些设备和工作流程来说可能是个问题。)

TeX 不包含 PostScript 解释器。在dvips从源创建 PDF 的过程中.tex,TeX 将 PostScript 指令.dvi作为\special指令写入文件,然后由 GhostScript 在步骤中解释这些指令ps2pdf

对于较新的 TeX 引擎来说也是如此:PostScript 解释器是一个很大的开销,因此直接集成到 pdfTeX 中并不是特别明智。在直接 PDF 模式下,pdfTeX 会创建适当的 PDF 指令来创建“特殊效果”,而在.dvi模式下,它的行为方式与 Knuth 的 TeX 相同。这里的一些问题在为什么 pdfTeX 不直接支持 PStricks?如何在 pdfLaTeX 中使用 PSTricks?(请注意,XeTeX 确实采用了某种混合方式,允许 PSTricks 直接用于 PDF 制作。同样值得注意的是,XeTeX 可以通过一种扩展.dvi格式,因此从某种程度上来说这更像dvips直接的 PDF 制作。

谈到 PSTricks 和 TikZ,两者的区别非常根本。PSTricks 总是使用相同的驱动程序后端,而该后端本身就是一种强大的编程语言。因此,PSTricks 可以将很多工作留给驱动程序级别,并且原则上还可以包含 PostScript 可以执行的任何操作的接口。另一方面,TikZ 是一个“独立于驱动程序”的系统,因此将依赖于驱动程序的代码留给最低的“层”。因此,TikZ不能使用 PostScript 的任何特殊功能:所有编程均在 TeX 宏中完成,并且只有原始的“绘制 X”指令被写入输出文件。

TikZ 支持多个驱动程序这一事实也意味着其实现的功能存在限制。每个驱动程序都具有一定的功能范围,支持所有驱动程序并不容易。(例如,由于其工作方式,使用 XeTeX 实现透明效果很困难。xdvipdfmx)因此,它倾向于使用与大多数或所有驱动程序兼容的通用功能子集,而不是使用大量“这仅适用于 X”注释。

类似的考虑也适用于接口:PSTricks 可以依赖 PostScript 处理输入的方式,而 TikZ 必须将所有功能抽象为适用于 PostScript、PDF 和其他输出格式的通用接口。(请记住,TikZ 在某种程度上可以与 SVG 等配合使用。)

答案2

正如 Joseph 所说,PDF 是 PostScript 的一个子集,但还具有一些新的功能。PDF 最大的限制是它不能进行任何值的计算。这就是唯一重要的与 PostScript 的区别。TeX 对图形元素一无所知。一切都必须使用特殊函数来完成,\pdfliteral对于 PDF 或\specialPostScript 或LuaTeX 来说,这些函数被调用。和的\directlua示例如下:pdflatexlatex

\documentclass{article}
\usepackage{ifpdf}

\begin{document}
\ifpdf
foo\pdfliteral{1 0 0 RG 2 w 0 -1 m 10 10 l 10 0 l S }bar
\else
foo\special{" 1 0 0 setrgbcolor 2 setlinewidth 0 -1 moveto 
  10 10 lineto 10 0 lineto 3.14 3.14 exp 0 rlineto stroke }bar
\fi
\end{document}

使用以下命令运行pdflatex

在此处输入图片描述

这些线必须由特别的命令,称为\pdfliteral。现在我们想把线延伸到 (π π ,0)。在 PDF 级别上没有机会获取 π π的值。对于 PostScript 来说,没有问题,我们必须写入3.14 3.14 exp并获取值。当运行示例时,latex->dvips->psp2df我们得到

在此处输入图片描述

使用 PSTricks,我可以制作钟摆的动画(见http://pstricks.blogspot.de/,位于页面中间)。

编辑:这是一个简单的例子,其中可以使用不同的数学包在 TeX 级别上计算 π π,但如果我想画一条线到\int_1^{27/π} (x^{π/7}+1/x) dx...的值,那是不可能的。

答案3

由于我没有使用过tikz并且已经有 20 年左右没有使用过了pstricks,所以我不会详细谈论这两个软件包,而是谈论一个我更了解的软件包,即psfrag它有许多相同的问题。

psfrag用 TeX 排版文本替换图像中的文本。然而,它实现这一功能的方式依赖于完全关于 PostScript 的编程特性。TeX 不了解替换,这使得使用任何其他后端支持该软件包变得相当困难。

工作方式psfrag是 TeX 将“新”文本排版到页面的某个位置,然后重新定义排版字符串的 PostScript show 运算符以检查其提供的字符串,如果该字符串是需要替换的字符串,则将 latex 版本翻译到位。原始文本字符串在所包含图形中的位置可以通过任意复杂的 postscript 代码计算出来。最初,整个替换将发生在打印机中尽管正如@Joseph 最近指出的那样,这种情况在 ghostscript 中更常见ps2pdf。当然,如果使用 pdflatex,则可以使用语法psfrag,但本质上你只需写出一个只有图像的小文档,然后使用 ps2pdf 生成带有替换的预先计算的 pdf 图像并将其包含在 pdflatex 中。我相信现在有些软件包或多或少隐藏了细节。

pstricks具有 的所有问题psfrag,此外还有额外问题。如果要使用它来生成 Postscript 编程的图形,则可以安排将适当的 Postscript 写入文件、转换为 pdf 并重新包含到 pdflatex 中。然而,pstricks 可以做更多的事情,它可以(本质上)将 Postscript 运算符应用于正在排版的文本流并应用各种效果,类似地,它可以将位置信息从排版传递到 Postscript 引擎。这使得(我猜)制作小的“封装”Postscript 片段以作为独立的 pdf 片段重新包含到主文档中变得更加困难。


pdf 的重点在于它实现了 postscript 的渲染模型,但没有计算成本。最初的蒸馏器是 postscript 到 postscript 的转换,它将复杂的 postscript “蒸馏”为预定义 postscript 命令的简单子集(Adobe Illustrator 可以理解),这组预定义命令得到了规范化和标准化,最终发生了变化,pdf 成为一种独立的语言。

例如,您可以用大约两行 postscript 绘制曼德布洛特集,而这会让早期的苹果激光打印机耗费一个小时。等效的 PDF 需要很长时间才能提取出来,但会生成一个(大得多的)PDF,它本质上只是一大串线和点,而且可以立即渲染。

因此,与 PostScript 后端相比,PDF 后端缺乏计算能力并不是设计缺陷;这是 PDF 格式的主要设计标准。任何特定的功能都可以在非 PostScript PDF 生成器中通过在生成器中实现该功能(即在 TeX 或 lua 或其他任何语言中)来实现,但要实现满的您必须凭借自己的力量pstricks才能全面实施后记,这是一项重大任务。

相关内容