我正在比较 PSTricks 和 TikZ 的核心及其功能。我没有考虑是否已经实现了库。
是否有用 PSTricks 编写的示例并且无法使用 TikZ 完成?
反向回答问题“是否有用 TikZ 编写的示例,并且无法使用 PSTricks 完成? ”也是允许的。
我仍然无法想象哪些技巧在 PSTricks 中是可行的,但在 TikZ 中却不行?有例子吗?
答案1
PGF 手册指出(2.10 版第 20 页):
pstricks 包的功能确实强大到可以创建任何可以想象到的图形,但它根本不可移植。最重要的是,它不能与 pdftex 或任何其他生成 PostScript 代码以外的任何驱动程序一起使用。
与 pgf 相比,pstricks 的支持基础更广泛。过去十年来,用户贡献了许多用于特殊用途的额外软件包。
TikZ 语法比 pstricks 语法更一致,因为 TikZ 是“以更集中的方式”开发的,并且“考虑到了 pstricks 的缺点”。
请注意,pstricks 可以实现的许多巧妙技巧在 pgf 中是无法实现的。特别是,pstricks 可以使用功能强大的 PostScript 编程语言,该语言允许使用诸如内联函数绘图之类的技巧。
在上一页中,讨论 PGF 前端时提到:
可以实现一个 pgftricks 前端,将 pstricks 命令映射到 pgf 命令。但是,我还没有这样做,即使完全实现,许多在 pstricks 中起作用的东西也不会起作用,即当某些 pstricks 命令过于依赖 PostScript 技巧时。尽管如此,这样的包在某些情况下可能很有用。
我记得读过 Till Tantau 在邮件列表中写的关于此事的文章;果然,搜索“pgf pstricks”会出现这条信息来自 2008 年(我不确定在这里剪切粘贴整个消息是否合法,但我认为所有内容都是相关的),开头是:
实际上,手册中的那段话已经很老了,TikZ 现在可以完成
pstricks 可以完成的大部分事情。
他继续说,PSTricks 的主要优势在于 PostScript 比 TeX 更擅长数学,而且 PSTricks 可以对文本进行 PDF 无法实现的奇特操作。最后一条评论是:
根据用户反馈,pstricks 的手册简短似乎是一个优点
。一本关于 TikZ 的好书肯定会有所帮助。
或者一个好的网站...比如这个!
答案2
根据“大众需求”,前向欧拉 ODE 求解器。代码非常老旧,因此并不是最优雅的,但可以完成工作。使用 latex 或 xelatex(无 pdftex)进行编译。
\documentclass{article}
\usepackage{pstricks}
\newcommand{\arrowedphaseplane}{ \pscustom{
\arrows{\PhasePlaneArrowsStyle}
\coor(\x@start,\y@start)(0,0)(1,1)
\code{20 dict begin %DEFINE NEW DICTIONARY
/as-arrows [\PhasePlaneArrows] def
/as-arrows-length as-arrows length def
/as-arrows-index 0 def %ARROW ARRAY SETUP
%
/as-y exch def /as-x exch def as-y sub neg /as-y-scale exch def
as-x sub neg /as-x-scale exch def
/as-x \x@start\space def /as-y \y@start\space def
moveto %setup that defines scaling for PS and moves to (x_0,y_0)
%
1 1 \steps\space { %step control
as-arrows-index as-arrows length lt {
as-arrows as-arrows-index get eq {
/as-arrows-index as-arrows-index 1 add def
as-x as-x-scale mul
as-y as-y-scale mul
as-x \fx \space \dx \space mul add as-x-scale mul
as-y \fy \space \dx \space mul add as-y-scale mul
ArrowB pop pop pop pop
} if
} {pop} ifelse
%
\fx \space \dx \space mul dup as-x-scale mul
\fy \space \dx \space mul dup 4 1 roll as-y-scale mul
rlineto %draw the line
as-x add /as-x exch def %update x
as-y add /as-y exch def %update y
} for }
}
}
\begin{document}
\psset{xunit=1.3in,yunit=1.3in}
\begin{pspicture*}(-1.5,-1.6)(1.6,1.5)
\psline[linewidth=1pt]{-}(-1.2,0)(1.2,0) % x-axis
\psline[linewidth=1pt]{-}(0,-1.2)(0,1.2) % y-axis
\psline[linewidth=0.5pt]{-}(1,-.05)(1,0.05) % tick mark
\psline[linewidth=0.5pt]{-}(-1,-.05)(-1,0.05) % tick mark
\psline[linewidth=0.5pt]{-}(-.05,1)(0.05,1) % tick mark
\psline[linewidth=0.5pt]{-}(-.05,-1)(0.05,-1) % tick mark
\pscircle*(0,0){2pt}
\rput[l](1.3,0){$x_j$}
\rput[l](0,1.3){$s_j$}
\rput[c](0,-1.4){$F(V_j)=0$}
\rput[l](1,-0.2){$1$}
\rput[l](0.2,1){$1$}
\psset{linewidth=1pt,arrowinset=1.4,arrowscale=2 1}
\def\PhasePlaneArrows{10 25}% iterations where arrows are to be drawn
\def\PhasePlaneArrowsStyle{->}
\def\dx{0.01}
\def\steps{1000}
\def\fx{as-x -0.2 div} % takes x'
\def\fy{as-x 1 as-y sub mul as-y 10 div sub} % takes y'
\def\x@start{1}
\def\y@start{0.7}
\arrowedphaseplane
\def\x@start{-1}
\def\y@start{0.7}
\arrowedphaseplane
\def\x@start{1}
\def\y@start{-0.7}
\arrowedphaseplane
\def\x@start{-1}
\def\y@start{-0.5}
\arrowedphaseplane
\end{pspicture*}
\end{document}
答案3
由于两者都在 TeX(图灵完备引擎)中运行,所以答案是否定的,一个能做而另一个不能做的任何事情,因为总是可以\expandafters
在它们之上编写足够多的宏来实现你想要的。
不过 pstricks 比 pgfplots 更胜一筹的地方在于其用户界面更加简洁。
答案4
1) nodesep
pstricks 和 pst-tree 与 tikz 没有对应。这是 Tikz 的问题,您需要手动提供兄弟距离,而不是两个节点之间的距离。可以使用 pstricks 的结果使用 TikZ 创建树,但这并不容易。
与 Pstricks 合作:
http://pascal.parois.net/public/test2.tex
http://pascal.parois.net/public/test2.pdf
使用 TikZ
\documentclass[10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{fourier}
\usepackage{tikz}
\usepackage[a1paper,landscape]{geometry}
\usetikzlibrary{trees,arrows}
\pagestyle{empty}
\usetikzlibrary{shapes.multipart}
\usepackage[active,pdftex,tightpage]{preview}
\PreviewEnvironment[]{tikzpicture}
\begin{document}
\newcommand{\spnode}[3]{%
node[rectangle split,rectangle split parts=3]%,rectangle split draw splits=false
{\textbf{#1}
\nodepart{second}
#2
\nodepart{third}
\emph{#3}}}
\begin{center}
\begin{tikzpicture}[%
text width = 8em,
text centered,
level distance = 9em,
every node/.style = {rectangle,
rounded corners,
shade,
top color=white,
bottom color=blue!50!black!20,
draw=blue!40!black!60,
very thick,
outer sep =2pt,
every third node part/.style={font=\footnotesize}}]
\tikzset{upstyle/.style={%
grow=up,<-,,>=open triangle 60,
level 1/.style={sibling distance=60em},
level 2/.style={sibling distance=11em}}}
\tikzset{upstyleleft/.style={%
level 2/.style={sibling distance=65em},
level 3/.style={sibling distance=60em},
level 4/.style={sibling distance=30em},
level 5/.style={sibling distance=20em},
level 6/.style={sibling distance=10em}}}
\tikzset{upstyleleftright/.style={%
level 3/.style={sibling distance=10em},
level 4/.style={sibling distance=10em}}}
\path \spnode { PAROIS}{Pascal}{date}
[upstyle]
child {\spnode {HAMEL}{Brigitte}{date}
child {\spnode {GUIGARD}{Odette}{date}}
child {\spnode { HAMEL}{Jean}{date}
child {\spnode { TORQUEO}{Reine}{date}}
child {\spnode { HAMEL}{Henri}{date}
child {\spnode { THOMAS}{Marie}{date}}
child {\spnode { HAMEL}{Paul}{date}
child {\spnode { CHANTEUR}{Marie}{date}}
child {\spnode { HAMEL}{Emile}{date}
child {\spnode { HAUVILLE}{Marie}{date}}
child {\spnode { HAMEL}{Ulysse}{date}}}}
}
}
}
child[upstyleleft] { \spnode{ PAROIS}{Guy}{date}
child[upstyleleftright] {\spnode { COLLANGE}{Odette}{date}
child {\spnode {OLLIER}{Marie }{date}}
child {\spnode { COLLANGE}{Claudius}{date}
child {\spnode { GIMBERT}{Philomène}{date}}
child {\spnode { COLLANGE}{Jean}{date}}
}
}
child[upstyleleft] {\spnode { PAROIS}{Alexandre}{date}
child {\spnode { BEZIEAU}{Marie}{date}
child {\spnode { LEAUTE}{Marie}{date}
child {\spnode { CHEVALIER}{Rosalie}{date}}
child {\spnode { LEAUTE}{Pierre}{date}}
}
child {\spnode { BEZIEAU}{Jean}{date}
child {\spnode { GENDRON}{Marie}{date}}
child {\spnode { BEZIEAU}{Jean}{date}}
}
}
child {\spnode { PAROIS}{Alphonse}{date}
child {\spnode { LEBRETON}{Marie}{date}
child[sibling distance=10em] {\spnode { RENAUD}{Marie}{date}
child {\spnode { EGRON}{Angélique}{date}}
child {\spnode { RENAUD}{Pierre}{date}}
}
child {\spnode { LEBRETON}{Jean}{date}}
}
child {\spnode { PAROIS}{Auguste}{date}
child {\spnode { DOUILLARD}{Adèle}{date}
child {\spnode { BONNET}{Marianne}{date}}
child {\spnode { DOUILLARD}{Louis}{date}}}
child {\spnode { PAROIS}{Jean}{date}
child {\spnode{ DUGUY }{Marie}{date}}
child {\spnode{ PAROIS}{Pierre}{date}}
}
}
}
}
};
\end{tikzpicture}
\end{center}
\end{document}
2)另一件事是关于贝塞尔曲线和控制点,Tikz 没有任何自动化功能