是否有用 PSTricks 编写的示例并且无法使用 TikZ 完成?

是否有用 PSTricks 编写的示例并且无法使用 TikZ 完成?

我正在比较 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) nodeseppstricks 和 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 没有任何自动化功能

相关内容