所以我决定清理许多情节的代码。
我基本上已经将所有绘图数据取出到单独的文件中,使用
\def\plotname{
x1 y1
}
然后我用来\input{data.txt}
一次加载所有绘图数据,然后
\begin{NumericDataPlot}{\textwidth}{6cm}
\newpsstyle{MyLineB}{linecolor=blue, linestyle=none,showpoints=true,dotsize=1pt}
\listplot[style=MyLineB]{\plotname}
\end{NumericDataPlot}
到目前为止一切顺利。大多数情节都按预期进行。然而,事实证明有些名字存在一些问题\def
。
例如,使用\muIPS
会导致以下错误
! Use of \muIPS doesn't match its definition.\addto@pscode ...ef \pst@code {\pst@code #1\space} \listplot[style=MyLineB]{\muIPS}
但是当我将名称改为时,\muips
它就可以正常编译。
总而言之,LaTeX 似乎对其允许的 def 名称非常特殊。请注意,在我使用嵌套输入文件之前,这些名称工作正常……
编辑解释:
另一个名字是\def\muIPS-U
,但未被使用。
因此,当我将其更改为 时\muips
,它对要使用的定义没有任何困惑。结果发现,您不能在 中使用 - 字符defname
?还有哪些其他字符被禁止?
答案1
要回答您编辑的问题,您可以在 csname 中使用任何字符,因此
\csname MUIPS-U\endcsname
是可以的,并且用名称构造标记MUIPS-U
,但是在解析转义字符后的输入流时(通常\
),TeX 只接受多个字符序列,如果所有字符都是 catcode 11(字母),因此默认情况下为 az 和 AZ。
如果你走的话
\def\muIPS-U{a}
这是合法的,但定义\muIPS
必须跟在后面-U
,然后扩展为a
。如果没有跟在后面,则会-U
收到错误:
! Use of \muIPS doesn't match its definition.
但是你可以使用
\@namedef{muIPS-U}{a}
muIPS-U
它定义了要扩展为的token 名称a
。您可以通过以下方式访问该 token
\@nameuse{muIPS-U}
\@namedef
和\@nameuse
都是 LaTeX 实用程序,但您经常会看到等效的原始语法版本:
\expandafter\def\csname muIPS-U\endcsname
和
\csname muIPS-U\endcsname
答案2
为了补充大卫卡莱尔的回答,并根据猜测做出评论:最有可能的是,您的代码包含以下顺序的定义:
\def\muIPS{...}
\def\muIPS-U{...}
由于 TeX 将 解释-U
为不属于宏名称的“分隔文本”,因此第二个\def
实际上被重新定义\muIPS
为分隔宏。然后,稍后,当您\muIPS
在文档中使用时,TeX 会失败地查找所需的-U
并给出该错误。
当您将第一个切换到 using 时\muips
,它不再被重新定义,因此您不再收到错误。仍然有一个\muIPS
floating 的定义,仍然-U
在它后面需要,但是\muIPS
no longer in use 不会发生冲突,并且 using 可以\muIPIS-U
意外地工作,因为它具有所需的形式,即使 TeX 对名称的解释与您不同。