问题

问题

我可以使用\let重命名

  • \curvepnodes\ParametricNodes

  • \Pnodecount如下\LastIndexP

但是,由于\Pnodecount是在内部动态生成的\curvepnodes,因此我无法移动\let\LastIndexP\Pnodecount到序言或单独的文件。

\documentclass[pstricks]{standalone}
\usepackage{pst-plot}

\let\ParametricNodes\curvepnodes

\begin{document}
\begin{pspicture}(-1,-1.5)(7,1.5)
    \ParametricNodes[plotpoints=50]{0}{2 Pi mul}{t|sin(t)}{P}
    \let\LastIndexP\Pnodecount
    \foreach \i in {0,...,\LastIndexP}{\psline(P\i|0,0)(P\i)}
\end{pspicture}
\end{document}

问题

如何\Pnodecount在序言或单独的文件中重命名动态创建的宏?

注意:Pin\Pnodecount是 的最后一个参数中指定的节点名称\curvepnodes

编辑1

目的是让上述两个宏具有更直观的名称。无论你使用哪种方法来实现此问题,无论是使用修补、劫持、注入、重命名、复制等,只要我可以在序言或单独的文件中进行修补、劫持、注入、重命名、复制等即可。

编辑2

我对写作体力劳动不感兴趣

\def\LastIndexA{\Anodecount}

在正文中使用之后,在序言中\curvepnodes...{A},因为重命名将在单独的文件(我自己的包)中自动完成。

答案1

如果您有一个由某些代码定义的命令,并且您希望它除了定义的名称之外还定义一个不同的名称,则需要更改进行定义的代码。在这种情况下:

\documentclass[pstricks]{standalone}
\usepackage{pst-plot}

\makeatletter
\let\curvepnodes@i@old\curvepnodes@i
\def\curvepnodes@i#1#2#3#4{%
  \curvepnodes@i@old{#1}{#2}{#3}{#4}%
  \expandafter\let\csname LastIndex#4\expandafter\endcsname
                  \csname#4nodecount\endcsname
  \ignorespaces}
\makeatother

\let\ParametricNodes\curvepnodes

\begin{document}
\begin{pspicture}(-1,-1.5)(7,1.5)
    \ParametricNodes[plotpoints=50]{0}{2 Pi mul}{t|sin(t)}{P}
    \foreach \i in {0,...,\LastIndexP}{\psline(P\i|0,0)(P\i)}
\end{pspicture}
\end{document}

答案2

\documentclass[pstricks]{standalone}
\usepackage{pst-plot}

\let\ParametricNodes\curvepnodes
\def\LastIndexP{\Pnodecount}

\begin{document}
    \begin{pspicture}(-1,-1.5)(7,1.5)
    \ParametricNodes[plotpoints=50]{0}{2 Pi mul}{t|sin(t)}{P}
    \foreach \i in {0,...,\LastIndexP}{\psline(P\i|0,0)(P\i)}
    \end{pspicture}
\end{document}

在此处输入图片描述

答案3

因为无论如何您都需要在调用时知道词缀,所以最简单的解决方案是使用一个参数宏。

% arara: latex
% arara: dvips
% arara: ps2pdf

\documentclass[pstricks]{standalone}
\usepackage{pst-plot}

\let\ParametricNodes\curvepnodes
\newcommand*{\LastIndex}[1]{\csname #1nodecount\endcsname}

\begin{document}
% original syntax
\begin{pspicture}(-1,-1.5)(7,1.5)
    \curvepnodes[plotpoints=50]{0}{2 Pi mul}{t|sin(t)}{P}
    \foreach \i in {0,...,\Pnodecount}{\psline(P\i|0,0)(P\i)}
\end{pspicture}
% "better" syntax
\begin{pspicture}(-1,-1.5)(7,1.5)
    \ParametricNodes[plotpoints=50]{0}{2 Pi mul}{t|sin(t)}{P}
    \foreach \i in {0,...,\LastIndex{P}}{\psline(P\i|0,0)(P\i)}
\end{pspicture}
% with a different name
\begin{pspicture}(-1,-1.5)(7,1.5)
    \ParametricNodes[plotpoints=50]{0}{2 Pi mul}{t|sin(t)}{Q}
    \foreach \i in {0,...,\LastIndex{Q}}{\psline(Q\i|0,0)(Q\i)}
\end{pspicture}
\end{document}

在此处输入图片描述

相关内容