\pgfplothandlerrecord 与 \def

\pgfplothandlerrecord 与 \def

我不明白该\pgfplothandlerrecord{〈macro〉}命令的用途和实用性。它的描述如下(第 1078 页):

安装此处理程序后,每次调用绘图流命令时,此命令都将附加到〈macro〉。因此,在流的末尾,〈macro〉将包含在流上发出的所有命令。然后,您可以安装另一个处理程序并调用〈macro〉以“重播”流(可能多次)。

手册继续给出代码清单作为示例。我已将必要内容添加到此清单中,以使其成为完整的 LaTeX 手稿。

\documentclass{standalone}
\usepackage{pgf}
\usepgflibrary{plothandlers}
\begin{document}
\begin{pgfpicture}
  \pgfplothandlerrecord{\mystream}
  \pgfplotstreamstart
  \pgfplotstreampoint{\pgfpoint{1cm}{0cm}}
  \pgfplotstreampoint{\pgfpoint{2cm}{1cm}}
  \pgfplotstreampoint{\pgfpoint{3cm}{1cm}}
  \pgfplotstreampoint{\pgfpoint{1cm}{2cm}}
  \pgfplotstreamend

  \pgfplothandlerlineto
  \mystream

  \pgfplothandlerclosedcurve
  \mystream

  \pgfusepath{stroke}
\end{pgfpicture}
\end{document}

生成的图像如下(未按比例):

PGF 图

在我看来,代码片段

\pgfplothandlerrecord{<macro>}
\pgfplotstreamstart
...
\pgfplotstreamend

是相同的

\def<macro>{%
\pgfplotstreamstart
...
\pgfplotstreamend}

在这种情况下,这种印象已得到经验证实。

两者之间有什么区别?由于def版本更简洁一些,并且不需要用户学习新命令,我不禁想知道:这个情节处理程序与普通的相比有什么优势def

答案1

处理人员将记录仅有的流命令。流内的其他命令将被忽略。您将获得一种经过清理的代码。在您的示例中,这并不重要,因为没有其他内容。但很容易编写一些可以产生影响的示例:

\documentclass{article}
\usepackage{pgf}
\usepgflibrary{plothandlers}
\begin{document}
\newlength\mylength
\begin{pgfpicture}
  \pgfplothandlerrecord{\mystreamA}

  \pgfplotstreamstart
  \pgfplotstreampoint{\pgfpoint{1cm}{0cm}}
  \pgfplotstreampoint{\pgfpoint{2cm}{1cm}}
  \newcommand\blub{abc}
  \setlength\mylength{2cm}
  \pgfplotstreampoint{\pgfpoint{\mylength}{1cm}}
  \pgfplotstreampoint{\pgfpoint{1cm}{2cm}}
  \pgfplotstreamend


  \pgfplothandlerlineto
  \mystreamA

  \setlength\mylength{4cm}
  \pgfplothandlerclosedcurve
  \mystreamA

  \pgfusepath{stroke}


\end{pgfpicture}


\begin{pgfpicture}  
  \def\mystreamB{%
  \pgfplotstreamstart
  \pgfplotstreampoint{\pgfpoint{1cm}{0cm}}
  \pgfplotstreampoint{\pgfpoint{2cm}{1cm}}
  %\newcommand\blub{abc} %error
  \setlength\mylength{2cm}
  \pgfplotstreampoint{\pgfpoint{\mylength}{1cm}}
  \pgfplotstreampoint{\pgfpoint{1cm}{2cm}}
  \pgfplotstreamend
  }

  \pgfplothandlerlineto
  \mystreamB
  \setlength\mylength{4cm}
  \pgfplothandlerclosedcurve
  \mystreamB

  \pgfusepath{stroke}

\end{pgfpicture}

\end{document}

在此处输入图片描述

相关内容