我会在我的纯 TeX 文档中创建 pstricks 和 tikz 图片。如果我尝试,我会收到错误,可能是由于使用该xcolor
包造成的。错误如下:\\color@black ->\xcolor@
其他颜色(特别是黑色和灰色)也是如此。我认为如果我不允许 tikz 加载xcolor
包,就不会出现错误。是这样吗?如果是这样,我该如何命令 tikz 不要加载该包?这是一个例子
\input pstricks
\input tikz
\pspicture(0,0)(1,1)
\psline{->}(0,0)(1,1)
\endpspicture
\bye
答案1
尽管我的评论没有得到回复,但我还是会在这里发布答案,因为我似乎有一个可行的解决方案。我对这个问题很犹豫,因为软件包pstricks
和tikz
太大,可能还有一些我不知道的其他交互。我不得不说,如果你的目标是简单的纯 TeX,那么同时使用这两个包似乎会让人头疼。
出现未定义颜色宏的错误是因为 tikz 重新定义了 pstricks 使用的颜色命令,所以\\color@black
(注意额外的\
)被映射到\xcolor@{}{}{rgb}{0,0,0}
和\\color@blue
到\xcolor@{}{}{rgb}{0,0,1}
等等。
但是,pstricks
或者都没有tikz
定义\xcolor@
命令,所以会出现错误。
我认为解决这个问题的最好方法是不是在这里使用 tikz,但由于您想尝试同时使用两者,这里有一个“逆向工程”修复程序,至少对于这个简单的例子有效,并且可能为进一步开发奠定基础。
\input pstricks
\input tikz
{\catcode`\@=11
\gdef\dec@mma#1,#2,#3{#1 #2 #3}
\gdef\xcolor@#1#2#3#4{\dec@mma#4 set#3color}
}
Lorem
\psset{linecolor=blue}
\pspicture(0,0)(2,1)
\psline{->}(0,0)(2,1)
\endpspicture
Ipsum
\tikzpicture
\path[draw=red] (0,0) -- (1,1) -- (2,1) circle (10pt);
\endtikzpicture
Dolor
\psset{linecolor=black}
\pspicture(0,0)(2,1)
\psline{<-}(0,0)(2,1)
\endpspicture
Adipiscum.
\bye
笔记:在上面的第 3 行中,我们打开一个组并将“@”的 catcode 设置为 11,这会使 TeX 将其视为普通字母,因此我们可以在控制序列名称中使用它。在第 4 行中,我们定义了一个“dec@mma”命令,该命令接受参数“{a,b,c}”并生成“ab c”。该名称听起来像“de-comma”。在第 5 行中,我们定义了缺少的“xcolor@”命令。我们将其定义为需要四个参数。我们忽略参数 #1 和 #2;我们期望 #3 是颜色空间名称 - 实际上,我们期望它是“rgb”;我们期望 #4 是三个用逗号分隔的数字。我们调用“decomma”来删除逗号。在第 6 行中我们关闭该组。
这些命令使用“gdef”而不是“def”,以便它们在本地组之外可见。
TikZ 使用的唯一颜色空间名称似乎是“rgb”,因此我们可以\gdef\xcolor@#1#2#3#4{\dec@mma#4 setrgbcolor}
不损失功能地编写。其他可能的颜色空间名称包括“gray”和“cmyk”,但为了正确支持这些名称,我们需要处理可变数量的参数 - gray 只需要一个数字,cmyk 需要四个 - 这会使事情变得更加复杂。