ConTeXt 中的错误 Mpgraph

ConTeXt 中的错误 Mpgraph

我需要在 ConTeXt 文档中放入一些条形图。我在 Gentoo GNU/Linux 下使用 TeX Live 2011 中的 mkiv。我尝试使用 Gnuplot,但我发现mpgraph它更适合我的需求。

我正在使用这个 TeX 文件

\usemodule[graph]
\usemodule[sarith]

\enableregime[utf-8]
\starttext

\startMPcode
beginfig(1)
  draw begingraph(12cm,6cm);
    glabel.lft(btex Eje Y etex, OUT);
    glabel.bot(btex Eje X etex, OUT);
    gdata("data.d",
        $,
        path p;
        augment.p (0,$1);
        augment.p ($2,$1);
        augment p ($2,$1 Sadd "1");
        augment p (0,$1 Sadd "1");
        gdraw p withpen pencircle scaled 2bp withcolor red;
    );
  autogrid(grid.bot,grid.lft) withcolor .85white;
  endgraph;
endfig;
\stopMPcode
\stoptext

和这个数据文件

1 4
2 2
3 1
4 2
5 4

作为一个最小的‘工作’示例。

然而,发生了一些奇怪的事情:我不能使用sarith模块中的任何运算符(用于mpgraph用于绘制框的模块)。我得到了此输出使用 ConTeXt。我尝试使用 Metapost 进行编译,尽管没有收到任何错误或警告,但输出 .dvi 已损坏。

我也尝试过在 Windows 7 下使用 TeX Live 2012。由于这个原因,我无法在那里编译sarith,但是当我注释掉那几行时,它就可以正常工作。但是在我的 Gentoo 框中执行同样的事情却可以正常工作,只是标签或轴的文本没有出现,只有一个很小的方块。我不明白发生了什么,甚至 ConTeXt wiki 中的示例也不起作用。有线索吗?非常感谢任何帮助!

答案1

你需要替换\usepackage[sarith]

\startMPinitializations
input sarith;
\stopMPinitializations

sarith不是一个 ConTeXt 模块,而是一个 metapost 包,因此需要包含在 metapost 端。

此外,正如 morbusg 指出的那样,无需添加beginfig(1)...endfig环境MPcode。通过这两个更改,以下内容可行:

\usemodule[graph]
\startMPinitializations
input sarith;
\stopMPinitializations

\starttext

\startMPcode
  draw begingraph(12cm,6cm);
    glabel.lft(btex Eje Y etex, OUT);
    glabel.bot(btex Eje X etex, OUT);
    gdata("data.d",
        $,
        path p;
        augment.p (0,$1);
        augment.p ($2,$1);
        augment p ($2,$1 Sadd "1");
        augment p (0,$1 Sadd "1");
        gdraw p withpen pencircle scaled 2bp withcolor red;
    );
  autogrid(grid.bot,grid.lft) withcolor .85white;
  endgraph;
\stopMPcode
\stoptext

答案2

为了更改网格上数字的字体,我发现如果我手动设置网格值,而不是使用自动设置,字体将转换为文档格式。以下是 John Handy 的 MPGraph 文档中的一个示例,其中包含我的修订版本:

原来的

draw begingraph(6.5cm,4.5cm);
    setrange(80,0, 90,whatever);
        glabel.bot(btex Year etex, OUT);
        glabel.lft(btex \vbox{\hbox{Emissions in} \hbox{thousands of}
            \hbox{metric tons} \hbox{(heavy line)}}etex, OUT);
        gdraw "lead.d" withpen pencircle scaled 1.5pt;
        autogrid(,otick.lft);
        setcoords(linear,linear);
    setrange(80,0, 90,whatever);
        glabel.rt(btex \vbox{\hbox{Micrograms} \hbox{per cubic}
            \hbox{meter of air} \hbox{(thin line)}}etex, OUT);
    gdraw "lead.d";
        autogrid(otick.bot,otick.rt);
endgraph;

draw begingraph(6.5cm,4.5cm);
    setrange(79.5,0, 90.5,80) ;
    glabel.bot(btex Year etex, OUT) shifted(-8pt,-2pt);
    glabel.lft(btex \vbox{% -- \hss fills space horizontally; \strut fixes line space
        \hbox to 5cm {\hss \strut Emissions in thousands of \hss}
        \hbox to 5cm {\hss \strut metric tons (solid line) \hss}
    }
    etex, OUT) shifted(83pt,17pt) rotated 90;
    gdraw "lead.d" withpen pencircle scaled 1pt;
    itick.lft(format("\%2",0),0) withcolor white;
    itick.lft(format("\%2",20),20) withcolor white;
    itick.lft(format("\%2",40),40) withcolor white;
    itick.lft(format("\%2",60),60) withcolor white;
    itick.lft(format("\%2",80),80) withcolor white;
    frame.lft withcolor white ;

    otick.bot(format("\%2",80),80) withcolor white;
    otick.bot(format("\%2",82),82) withcolor white;
    otick.bot(format("\%2",84),84) withcolor white;
    otick.bot(format("\%2",86),86) withcolor white;
    otick.bot(format("\%2",88),88) withcolor white;
    otick.bot(format("\%2",90),90) withcolor white;
endgraph;

尝试一下。

相关内容