TiKz 与 ConTeXt MkIV 的状态

TiKz 与 ConTeXt MkIV 的状态

ConTeXt MkIV 中 TiKz 支持的当前状态如何?我之所以问这个问题,是因为 pgfmanual 2.10 第 25 页上写着:

请注意,最新的 ConTEXt 版本(例如 mark IV,ConTEXt 的 LuaTEX 感知部分)不支持 pgf/TikZ。

我尝试了以下示例,但它没有按预期工作。

\setupcolors[state=start]
\usemodule[tikz]   

\starttext

\starttikzpicture
 [node distance=4cm,
    place/.style={circle,draw=blue!50,fill=blue!20,thick,
                 inner sep=0pt,minimum size=6mm}]

    \node[place] (wat) {};
  \node[place] (wag) [below=of wat] {};

\stoptikzpicture

\stoptext

无论有多大node distance=4cm,圆圈都会重叠,偏移量约为 0.5 厘米。

ConTeXt 版本:mtx-context | current version: 2012.05.22 16:12

答案1

我在手册中找不到您提到的引文。(见编辑)

当前 ConTeXt 支持 TikZ。但是,在 ConTeXt 中使用 TikZ 的人并不多。这反过来意味着错误不容易被发现。当您将手册中使用的 LaTeX 特定命令(例如字体切换命令)转换为 ConTeXt 风格的命令时,您应该会得到所需的结果。

当文件编译成功,但输出结果却出乎意料时,查看日志文件几乎总能发现问题所在。在您的特定示例中,您遗漏了调用\usetikzlibrary[positioning]

编辑:我有一个旧版本的手册,其中没有您提到的引文。新版本显然不正式支持 ConTeXt MkIV(我猜旧版本也不支持)。但是,我将 TikZ 与当前 MkIV 结合使用,大多数时候它都能按预期工作。

答案2

我从 LaTeX tikz 转到 ConTeXt MkIV tikz 的笔记。

第一步、安装:

first-install.sh --modules="t-tikz"

第二步,使用方法:和LaTeX下的tikz类似,不过有以下区别:

  • \start...\stoptikzpicture为了\begin{tikzpicture}...
  • \start...\stopscope为了\begin{scope}...
  • tikz 使用的每个命名颜色都必须像这样定义(\unprotect 不需要,至少在 MkIV 中不需要):

    \pgfutil@definecolor{coscolor}{rgb}{0, 0, 0.8}
    \pgfutil@definecolor{fillcolor}{gray}{.625}
    
  • tikz 使用的每种命名颜色在文本节点中必须以正常的 ConTeXt 方式定义:

    \definecolor[coscolor][r=0, g=0, b=0.8]
    \definecolor[fillcolor][s=.625]
    
  • (为了比较:这是 tikz/pgf 定义颜色的方式)

    \definecolor[coscolor][r=0,g=0,b=.8]
    \definecolor[fillcolor][.625black]
    
  • 颜色定义放在哪里并不重要!


最后,对于那些对自动转换感兴趣的人,这里是所有替换的列表:

\\begin{tikzpicture}  --> \\starttikzpicture
\\end{tikzpicture}    --> \\stoptikzpicture

\\begin{scope}        --> \\startscope
\\end{scope}          --> \\stopscope

% Because we don't know for any of the defined colours whether tikz 
% will use them in a text node or in a drawing bit, we replace the 
% original with the ConTeXt definition *and* the pgfutil definition.
\\definecolor[named]{coscolor}{rgb}{r=0,g=0,b=.8}
--> 
    \\definecolor[coscolor][r=0,g=0,b=.8]
    \\pgfutil@definecolor[named]{coscolor}{rgb}{0, 0, 0.8}

\\definecolor[named]{fillcolor}{.625black}
-->
    \\definecolor[fillcolor][s=.625]
    \\pgfutil@definecolor{coscolor}{gray}{.625}

相关内容