纯 TeX 中的 PSTricks 和 Tikz

纯 TeX 中的 PSTricks 和 Tikz

我会在我的纯 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

尽管我的评论没有得到回复,但我还是会在这里发布答案,因为我似乎有一个可行的解决方案。我对这个问题很犹豫,因为软件包pstrickstikz太大,可能还有一些我不知道的其他交互。我不得不说,如果你的目标是简单的纯 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 需要四个 - 这会使事情变得更加复杂。

相关内容