\def 问题(与 NumericPlots 有关?)

\def 问题(与 NumericPlots 有关?)

所以我决定清理许多情节的代码。

我基本上已经将所有绘图数据取出到单独的文件中,使用

\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,它不再被重新定义,因此您不再收到错误。仍然有一个\muIPSfloating 的定义,仍然-U在它后面需要,但是\muIPSno longer in use 不会发生冲突,并且 using 可以\muIPIS-U意外地工作,因为它具有所需的形式,即使 TeX 对名称的解释与您不同。

相关内容