我第一次看到PSTricks 的 3D 画廊,我立刻就爱上了它。我花了很多时间去学习和使用它。
在这个论坛上,我看到很多人在使用 TikZ。我还没有使用过 TikZ。但现在我很困惑为什么有这么多人讨论 TikZ 而不是 PSTricks。也许 TikZ 中有一些特别的东西,超越了 PSTricks 提供的功能。
学习新事物确实需要时间并且需要努力。
- 那么,即使我已经了解 PSTricks,是否值得花时间学习 TikZ?
- 或者我应该离开 PSTricks 并迁移到 TikZ?
答案1
TikZ 是我使用过的唯一一款 TeX 完整图形包,因此我无法进行很好的比较。不过,我认为以下几点值得一提:
- 我最喜欢 TikZ 的语法。作者显然花了很多心思来定义一种既灵活又易读的语法(以牺牲一些冗长为代价)。
- 该手册充满了示例,并且总体质量极高。
- TikZ 可与 LaTeX、纯 TeX 和 ConTeXt 配合使用。它可以使用所有现代引擎(pdfTeX、LuaTeX、XeTeX)进行编译,但目前有些功能(阴影)仅适用于 pdftex。
- 与 gnuplot 集成。
一些有用的编程功能,如
\foreach
可扩展的数学引擎。另一方面,PSTricks 已经存在很长时间了。特别是,有很多库围绕它构建。因此,如果您想使用其中一个尚未提供 TikZ 等效库的库,则必须使用 PSTricks。此外,如果无法更新,我想旧系统会有更好的支持。
答案2
TikZ:功能
- 画布的尺寸: 画布尺寸(Ti)钾Z 是自动提供的。但从视觉上看,它并不像我想象的那么智能(见问题绘制曲线路径时边界框比预期的大)。在PSTricks中,必须手动计算画布以让TeX提供所需的空间(因为TeX不了解PostScript)。
- 交叉点:有
intersection
图书馆,在 TikZ 中可以轻松确定两条任意曲线的交点,但在 PSTricks 中却无法确定因为这样的包还没有在 PSTricks 中实现。
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
选择math
或text
。PosAngle
,应该是PointNameAngle
或PointNameDirection
。
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
。你注意到大写字母了吗?pst
与PST
?为什么?
PSTricks:异常行为
我发现 PSTricks 中有一些例外情况可能会给用户带来负担。模式应该直观,以便用户免于记住以下不必要的东西。我相信你会觉得很难记住以下注释,因为它们的定义不合逻辑,所以会浪费你的记忆(在你的大脑中)。
- 封闭曲线
psframe
,pscircle
,psellipse
,默认为可改变pswedge
,但和除外 可改变。和 的径向边 不可改变。psellipticwedge
dimen=outer
\polygon
\psccurve
dimen=middle
pswedge
psellipticwedge
dimen=middle
- 开曲线
psline
,pscurve
,除 外均为不变的psbezier
,且 是可变的。psarc
dimen=middle
\psellipticarc
dimen=outer
所有封闭曲线都会将当前点移动到其起点,但
\psellipse
和\pscircle
不会移动当前点除外。(0,0)
psframe
因为对于、pscircle
、psellipse
、pswedge
、psellipticwedge
、和可以忽略第一点,pspolygon
但对于、和必须明确指定。psline
psbezier
psellipticarc
psccurve
pscurve
psarc
在
pst-eucl
标签中,可以分别使用 和 启用和禁用PointName=default
。PointName=none
但是,对于\pstInterCC
(可能还有其他宏以及我尚未检查全部)必须分别使用PointNameA=
或PointNameB=
而不是PointNameA=none
或禁用PointNameB=none
。这是一个已知问题,请参阅这次讨论但它保留为一个功能(也许)。要创建新的坐标系(特别是非正交坐标系),
pst-eucl
请提供\pstOIJGeonode
其中O
,I
和J
是新坐标系所基于的点。不幸的是,必须将此坐标系上的第一个点指定为第一个参数,而不是直观上更常见的第四个参数。以下是异常语法,\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
我个人的回答是:
- 是的。人生中有很多事情值得花时间去学习,除非时间和记忆力不允许你这样做。
- 没有。没有理由进行迁移。PSTricks 的成熟度为我们提供了许多易于使用的库(尽管有些命名约定令人困惑,如果您不经常使用它们,则很难记住)。PSTricks 唯一的缺点是
pdflatex
如果没有, PSTricks 就无法运行-enable-write18
。- 使用
-enable-write18
和auto-pst-pdf
,pdflatex
可以在输入文件中使用 PSTricks 代码。这是通过静默调用外部程序来生成与 PSTricks 代码相对应的 PDF 输出来完成的。稍后,此 PDf 输出将作为图像导入。不幸的是,这种机制使动画包animate
不再起作用。将 PSTricks 对象叠加在非 EPS 图像上是完全不可能的。PSTricks 代码中的交叉引用将被破坏。
因此 TikZ 获胜只是因为它被设计为与编译器无关。