Ошибки Mpgraph в ConTeXt

Ошибки Mpgraph в ConTeXt

Мне нужно поместить несколько столбчатых диаграмм в документ ConTeXt. Я использую mkiv из TeX Live 2011 под Gentoo GNU/Linux. Я пробовал использовать 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 поврежден.

Я также пробовал с TeX Live 2012 под Windows 7. Из-за этой sarithштуки я не могу скомпилировать там, но когда я комментирую эти строки, все работает. Но если сделать то же самое в моем Gentoo box, все работает, за исключением того, что текст для меток или осей не появляется, просто очень маленький квадрат. Я не понимаю, что происходит, даже пример из вики ConTeXt не работает. Есть подсказки? Любая помощь очень ценится!

решение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

Чтобы изменить шрифт для чисел на сетках, я обнаружил, что если я вручную задаю значения сетки, вместо использования автоматического набора, шрифт преобразуется в формат документа. Вот пример из документации 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;

Попробуйте это.

Связанный контент