由于我无法解释的原因\def
,似乎并不总是起作用,\psplot
如下所示
\documentclass[english, landscape, a4paper]{slides}
\usepackage{graphics}
\usepackage{graphicx}
\usepackage{babel}
\usepackage{fp}
\usepackage{pst-plot}
\usepackage{pstricks}
\usepackage[active,tightpage]{preview}
\PreviewBorder=4pt
\PreviewEnvironment{pspicture}
\begin{document}
\begin{center}
\begin{pspicture*}(-1.5,-1)(1.5,1.5)
\def\tI{0.0}
\psplot{0.0}{1.0}{x \tI sub} % does not work
% \psplot{0.0}{1.0}{x \tI sub} % works
\end{pspicture*}
\end{center}
\end{document}
我编译上述文件xelatex file
并得到错误
Error: /undefined in 0.0sub
Operand stack:
--nostringval-- 0.0 0.0
Execution stack:
%interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %s
--nostringval-- --nostringval-- false 1 %stopped_push 1910 1 3 %oparray_
pop 1893 1 3 %oparray_pop 1787 1 3 %oparray_pop --nostringval-- %error
ingval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nos
...
** WARNING ** Filtering file via command -->mgs.exe -q -dNOPAUSE -dBATCH -sPAPERSIZE=a0 -s
yLevel=1.3 -dAutoFilterGrayImages=false -dGrayImageFilter=/FlateEncode -dAutoFilterColorIm
/FlateEncode -dUseFlateCompression=t
有人可以建议一种解决这个问题的方法吗?
答案1
您对 MWE 的评论:
- 当您想要获得每个紧密、单独的 PDF 输出时
pspicture
,您可以使用standalone
类而不是preview
包来节省一些击键。 - 仅使用
graphicx
(现代的)并且它graphics
在内部加载。 - 删除不必要的包。
center
如果您需要为每个生成紧密、单独的 PDF 输出,则无需使用环境pspicture
。- 仅用于
pspicture*
修剪画布外的对象。如果画布外不存在任何对象,则pspicture
无需星号即可使用。
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-plot}
\begin{document}
\begin{pspicture}[showgrid](-1.5,-1)(1.5,1.5)
\def\tI{0.0}
\psplot{0.0}{1.0}{x \tI\space sub}
\end{pspicture}
\end{document}
现在让我们讨论一下您的问题。控制字会吃掉其后的空格。因此x \tI sub
这x 0.0sub
毫无意义。要保留空格,您需要使用\space
如上代码中所示的方法。
另一个解决方案:
确保}
在宏定义的结束前至少留一个空格。请参阅下面的代码。
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-plot}
\begin{document}
\begin{pspicture}[showgrid](-1.5,-1)(1.5,1.5)
\def\tI{0.0 }% can you see there is one space before the closing }?
\psplot{0.0}{1.0}{x \tI sub}
\end{pspicture}
\end{document}
答案2
总是使用末尾带有空格的定义:
\def\tI{0.0 }
那么您就不需要\space
该函数的宏。