我无法使用 \newenvironment 和 \newcommand

我无法使用 \newenvironment 和 \newcommand

下面的代码片段不起作用。

\documentclass{article}
\usepackage{pstricks}

\newcommand\Left{-1}
\newcommand\Right{1}
\newcommand\Bottom{-1}
\newcommand\Top{1}

\newenvironment{\PsPicture}[1][]
{\begin{pspicture}[#1](\Left,\Bottom)(\Right,\Top)\ignorespaces}
{\end{pspicture}}

\newcommand\GetCoordinates{(\Left,\Bottom)(\Right,\Top)}

\begin{document}
\begin{PsPicture}[showgrid]
\end{PsPicture}

\newpage

\begin{pspicture}[showgrid]\GetCoordinates
\end{pspicture}

\end{document}

上面的代码是从我自己的文档类中提取的简化场景。(\Left,\Bottom)(\Right,\Top)这样做的目的是避免调用

  1. \pspicture(\Left,\Bottom)(\Right,\Top)
  2. 或者\psframe(\Left,\Bottom)(\Right,\Top)

我的第一次尝试是创建一个新的环境来封装\pspicture,但没有成功。第二次尝试是创建一个新的命令来返回,(\Left,\Bottom)(\Right,\Top)希望它可以传递给任何需要的 PSTricks 宏(\Left,\Bottom)(\Right,\Top),但同样没有成功。

如何修复?


为了更清楚,我添加了以下代码片段

\begin{PsPicture}[showgrid]
\psframe\GetCoordinates
\end{PsPicture}

这样\GetCoordinates我就可以节省一些击键次数,而不用(\Left,\Bottom)(\Right,\Top)进行繁琐的打字操作。

答案1

定义这样的新环境/命令实际上没有任何意义,它们并没有让事情变得更容易!

\documentclass{article}
\usepackage{pstricks}

\newcommand\Left{-1}
\newcommand\Right{1}
\newcommand\Bottom{-1}
\newcommand\Top{1}

\newenvironment{PsPicture}[1][]
{\pspicture[#1](\Left,\Bottom)(\Right,\Top)}
{\endpspicture}

\newcommand\GetCoordinates{(\Left,\Bottom)(\Right,\Top)}

\begin{document}
\begin{PsPicture}[showgrid]
\end{PsPicture}

\bigskip
\expandafter\pspicture\GetCoordinates
\psgrid[style=gridstyle]
\endpspicture

%or
\def\Temp{\pspicture[showgrid]}
\expandafter\Temp\GetCoordinates
\endpspicture

\end{document}

答案2

关于你的第一个问题:你的语法\newenvironment是错误的。替换

\newenvironment{\PsPicture}[1][]

\newenvironment{PsPicture}[1][]

(没有反斜杠)。

答案3

等待pspicture作为( ... )其语法的一部分,并将其放在宏中,例如\GetCoordinates隐藏它,这会导致问题。我甚至会PsPicture先在环境中扩展坐标,然后再将其传递给pstricks,只是为了节省时间。

\newenvironment{PsPicture}[1][]{%
\begingroup
\edef\@tempa{(\Left,\Bottom)(\Right,\Top)}%
\def\@tempb{\endgroup\begin{pspicture}[#1]}%
\expandafter\@tempb\@tempa
\ignorespaces}
{\end{pspicture}}

相关内容