下面的代码片段不起作用。
\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)
这样做的目的是避免调用
\pspicture(\Left,\Bottom)(\Right,\Top)
- 或者
\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}}