TikZ/PGF 相对于 PSTricks 有哪些优势?

TikZ/PGF 相对于 PSTricks 有哪些优势?

我第一次看到PSTricks 的 3D 画廊,我立刻就爱上了它。我花了很多时间去学习和使用它。

在这个论坛上,我看到很多人在使用 TikZ。我还没有使用过 TikZ。但现在我很困惑为什么有这么多人讨论 TikZ 而不是 PSTricks。也许 TikZ 中有一些特别的东西,超越了 PSTricks 提供的功能。

学习新事物确实需要时间并且需要努力。

  1. 那么,即使我已经了解 PSTricks,是否值得花时间学习 TikZ?
  2. 或者我应该离开 PSTricks 并迁移到 TikZ?

答案1

TikZ 是我使用过的唯一一款 TeX 完整图形包,因此我无法进行很好的比较。不过,我认为以下几点值得一提:

  • 我最喜欢 TikZ 的语法。作者显然花了很多心思来定义一种既灵活又易读的语法(以牺牲一些冗长为代价)。
  • 该手册充满了示例,并且总体质量极高。
  • TikZ 可与 LaTeX、纯 TeX 和 ConTeXt 配合使用。它可以使用所有现代引擎(pdfTeX、LuaTeX、XeTeX)进行编译,但目前有些功能(阴影)仅适用于 pdftex。
  • 与 gnuplot 集成。
  • 一些有用的编程功能,如\foreach可扩展的数学引擎。

  • 另一方面,PSTricks 已经存在很长时间了。特别是,有很多库围绕它构建。因此,如果您想使用其中一个尚未提供 TikZ 等效库的库,则必须使用 PSTricks。此外,如果无法更新,我想旧系统会有更好的支持。

答案2

TikZ:功能

TikZ:过于详细的文档

TikZ 文档非常详细。在教程部分,它甚至谈到了一些不必要的东西(例如 Karl 的学生)(至少对我来说)。例如:

  • 第 23 页

    在此处输入图片描述

  • 第 28 页

    在此处输入图片描述

  • 第 33 页

    在此处输入图片描述

    在此处输入图片描述

  • 第 35 页

    在此处输入图片描述

  • 第 37 页

    在此处输入图片描述

PGF/TikZ:不一致的密钥

显然,不一致不仅出现在 PSTricks 中,也出现在 PGF/TikZ 中。冗长性是 PGF/TikZ 的一大特色,但这种不一致加上提供的不一致会给用户带来负担,让他们记住不必要的东西。

如果 PGF/TikZ 采用空格分隔的单词作为其多词键,如下所示

  • line width
  • legend style
  • legend cell align
  • 等等等等(我无法在此全部列出)

必须避免以下不一致的命名约定。

  • xlabel(这应该x label使其一致)
  • xmin(这应该x min使其一致)
  • xtick(这应该x tick使其一致)
  • xticklabel(这应该x tick label使其一致)
  • 等等等等(我无法在此全部列出)

PSTricks:文档太短

与 TikZ 文档不同,PSTricks 的一些文档由于简洁而相当令人困惑。我们可以在我的问题

PSTricks:反直觉的宏名

PSTricks 的一个缺点是其采用的命名约定。PSTricks 的设计可能没有采用分类法的概念。不一致的命名约定使用户难以记住可用的 PSTricks 键值选项。

我将在这里列出不一致的键值选项,并在将来逐步添加其他选项。

  • PSTricks 的核心:

    我们有gridlabelcolor一个很好的命名惯例。但以下名称违反了惯例。

    • gridlabels, 它应该是gridlabelsize
    • gridfont, 它应该是gridlabelfont
  • pst-eucl包裹:

    PointName表示定义点的打印名称。PointNameSep表示打印名称与定义点的径向距离。 这两个键似乎都不错,但以下命名打破了惯例。

    • PtNameMath,应该是PointNameMath。或者PointNameMode选择mathtext
    • PosAngle,应该是PointNameAnglePointNameDirection
  • PSTricks 的核心内容如下:

    为了将对象放置到某个位置,我们有(其中包括)\rput\nput\uput。但是,它们的缩写似乎不太直观。根据赫伯特

    • \nput代表节点放置

    • \rput代表 ref put

    • \uput代表用户放置

    我不明白为什么作者选择“node”、“ref”和“user”作为前缀,因为这些名称并没有强调可以用来唯一地标识它们各自的东西。

  • PSTricks 的核心内容如下:

    (其中包括)\parametricplot有一个别名\psparametricplot\scalebox有一个别名\psscalebox。 根本原因是为了使名称一致以及避免名称冲突。

    可是,为什么还有下面的呢?

    • \newpsobject那应该是\psnewobject
    • \newpsstyle那应该是\psnewstyle
    • \addtopsstyle那应该是\psaddtostyle
  • pst-node包裹:

    \curvepnode\curvepnodes分别用于根据给定的参数表达式<abscissa algebraic expression in t>|<ordinate algebraic expression in t>或创建一个节点和一个节点列表<abscissa RPN expression in t> <ordinate RPN expression in t>。但是,它的补集是\fnpnode和基于或\fnpnodes中的表达式。<ordinate as the algebraic function of x><ordinate as the RPN function of x>

    我认为,这两个组的命名应基于表达式表示。因此,\curvepnode\curvepnodes应命名为\parametricpnode\parametricpnodes\fnpnode\fnpnodes应命名为\functionpnode\functionpnodes。前缀不能用于唯一地将第一组与第二组区分开来,因为这两个组都与曲线相关。曲线可以用参数或函数curve来表示。(x(t),y(t))(x,f(x))

  • pst-node再次:

    使用 时\getnodelist,内部有 2 个宏可用,\pst@args\PST@root。你注意到大写字母了吗?pstPST?为什么?

PSTricks:异常行为

我发现 PSTricks 中有一些例外情况可能会给用户带来负担。模式应该直观,以便用户免于记住以下不必要的东西。我相信你会觉得很难记住以下注释,因为它们的定义不合逻辑,所以会浪费你的记忆(在你的大脑中)。

  • 封闭曲线psframepscirclepsellipse,默认为可改变pswedge,但和除外 可改变。和 的径向边 不可改变。psellipticwedgedimen=outer\polygon\psccurvedimen=middlepswedgepsellipticwedgedimen=middle
  • 开曲线pslinepscurve,除 外均为不变的psbezier,且 是可变的。psarcdimen=middle\psellipticarcdimen=outer
  • 所有封闭曲线都会将当前点移动到其起点,但\psellipse\pscircle不会移动当前点除外。

  • (0,0)psframe因为对于、pscirclepsellipsepswedgepsellipticwedge、和可以忽略第一点,pspolygon但对于、和必须明确指定。pslinepsbezierpsellipticarcpsccurvepscurvepsarc

  • pst-eucl标签中,可以分别使用 和 启用和禁用PointName=defaultPointName=none但是,对于\pstInterCC(可能还有其他宏以及我尚未检查全部)必须分别使用PointNameA=PointNameB=而不是PointNameA=none或禁用PointNameB=none。这是一个已知问题,请参阅这次讨论但它保留为一个功能(也许)。

  • 要创建新的坐标系(特别是非正交坐标系),pst-eucl请提供\pstOIJGeonode其中OIJ是新坐标系所基于的点。不幸的是,必须将此坐标系上的第一个点指定为第一个参数,而不是直观上更常见的第四个参数。以下是异常语法,

    \pstOIJGeonode{<first point>}{O}{I}{J}{<second point>}...{<n point>}
    

    它应该是

    \pstOIJGeonode{O}{I}{J}{<first point>}{<second point>}...{<n point>}
    

答案3

PSTricks 的维护者(赫伯特) 孜孜不倦地在这里和其他地方回答问题。他正在出版有关 PSTricks 的书籍。如果我必须选择一本,这本书就是支持 PSTricks 的有力论据。

答案4

我个人的回答是:

  1. 是的。人生中有很多事情值得花时间去学习,除非时间和记忆力不允许你这样做。
  2. 没有。没有理由进行迁移。PSTricks 的成熟度为我们提供了许多易于使用的库(尽管有些命名约定令人困惑,如果您不经常使用它们,则很难记住)。PSTricks 唯一的缺点是
    • pdflatex如果没有, PSTricks 就无法运行-enable-write18
    • 使用-enable-write18auto-pst-pdfpdflatex可以在输入文件中使用 PSTricks 代码。这是通过静默调用外部程序来生成与 PSTricks 代码相对应的 PDF 输出来完成的。稍后,此 PDf 输出将作为图像导入。不幸的是,这种机制使动画包animate不再起作用。将 PSTricks 对象叠加在非 EPS 图像上是完全不可能的。PSTricks 代码中的交叉引用将被破坏。

因此 TikZ 获胜只是因为它被设计为与编译器无关。

相关内容