我不明白该\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}
生成的图像如下(未按比例):
在我看来,代码片段
\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}