Как вставить (если это возможно) изображение внутрь рисунка Metapost? (в простой среде LaTeX)

Как вставить (если это возможно) изображение внутрь рисунка Metapost? (в простой среде LaTeX)

Я хотел бы вставить изображение в рисунок Metapost (я использую MikTeX/LaTeX, а не Metafun). Надеюсь, я попробовал (также благодаря предложению Адитьи) следующий код Metapost (скомпилированный с -tex=pdftexопцией):

verbatimtex
%&latex
\documentclass{minimal}
\usepackage{graphicx}
\begin{document}
etex

beginfig(1);
picture pct;
pct:=btex \includegraphics{myimage.jpg} etex;
%pct:=btex \includegraphics{myimage.eps} etex;
draw pct;
endfig;
end

но это не работает, выдавая ошибку, ! Unable to make mpx file.если я использую jpgформат, или нет ошибки, но нет изображения, если я использую epsформат. Есть подсказка?

ОБНОВЛЕНИЕ: пробую способ Metafun без ConTeXt

Мне сказали (см. комментарий egreg ниже), что я могу использовать externalfigureкоманду Metafun (я использую LaTeX, поэтому не имею дела с Metafun, который, если я правильно понимаю, специфичен для ConTeXt), используя mpost -mem=metafunопцию компиляции Metapost, но моя система (Windows 7, MikTeX/LaTeX), похоже, не знает о Metafun и сообщает мне , ссылаясь на Sorry, I can't find the 'metafun' preload file; will try 'plain'.фактическую ошибку . Как мне установить Metafun внутри MikTeX?! Isolated expression.externalfigure

Вот мой код Metapost, скомпилированный с параметрами -mem=metafunи :-tex=pdftex

verbatimtex
\documentclass{minimal}
\begin{document}
etex

beginfig(1);
externalfigure "myimage.jpg";
endfig;
end

решение1

Правильный ответ

ПримечаниеЯ удалил свой предыдущий ответ, потому что это рабочее решение:

Используйте следующий файл MP

beginfig(1);
externalfigure "hacker.jpg" scaled 3cm;
endfig;
end;

и скомпилируйте его с помощью

mptopdf --metafun filename

В результате будет создан следующий filename.1файл:

%!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 0 0 86 86 
%%HiResBoundingBox: 0 0 85.03935 85.03935 
%%Creator: MetaPost 1.504
%%CreationDate: 2013.04.14:1210
%%Pages: 1
%%BeginProlog
%%BeginResource: procset mpost
/bd{bind def}bind def
/hlw{0 dtransform exch truncate exch idtransform pop setlinewidth}bd
/vlw{0 exch dtransform truncate idtransform setlinewidth pop}bd
/l{lineto}bd/r{rlineto}bd/c{curveto}bd/m{moveto}bd/p{closepath}bd/n{newpath}bd
/C{setcmykcolor}bd/G{setgray}bd/R{setrgbcolor}bd/lj{setlinejoin}bd/ml{setmiterlimit}bd
/lc{setlinecap}bd/S{stroke}bd/F{fill}bd/q{gsave}bd/Q{grestore}bd/s{scale}bd/t{concat}bd
/sd{setdash}bd/rd{[] 0 setdash}bd/P{showpage}bd/B{q F Q}bd/W{clip}bd
%%EndResource
%%EndProlog
%%Page: 1 1
%%MetaPostSpecials: 2.0 123 1000
%%MetaPostSpecial: 9 85.03935 0 0 85.03935 0 0 hacker.jpg 1 10
 0.123 0.012 0.001 R
n 0 0 m
0 0 l
0 0 l
0 0 l
 p F
P
%%EOF

и filename-1.pdfфайл, содержащий изображение.

решение2

Современный ответ

Я знаю, что это устарело, но luamplibтеперь lualatexесть гораздо более простой и удобный способ включения внешних изображений в чертеж Metapost.

\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\usepackage{graphicx}
\mplibtextextlabel{enable}
\begin{document}
\begin{mplibcode}
beginfig(1);

    picture A; 
    A = TEX("\includegraphics[width=200pt]{example-image-a}");

    % alternative, if you like btex ... etex 
    % A = btex \includegraphics[width=200pt]{example-image-a} etex;
    
    draw A;
    
    % add a grid (to help you measure the coordinates)
    numeric wd, ht; 
    (wd, ht) = urcorner A;
    for x=0 step 10 until wd:
        draw (x, -6) -- (x, ht + 6)
            withcolor if x mod 100 = 0: red else: 7/8 fi;
    endfor
    for y=0 step 10 until ht:
        draw (-6, y) -- (wd + 6, y)
            withcolor if y mod 100 = 0: red else: 7/8 fi;
    endfor
    
    % add a label (or whatever)
    dotlabel.urt("Label here", (125, 133));
endfig;
\end{mplibcode}
\end{document}

скомпилируйте это с помощью lualatex, чтобы создать файл PDF, подобный этому:

введите описание изображения здесь

Вы можете (конечно) удалить сетку, как только будете довольны положением ваших меток или других аннотаций. Изображение, созданное макросом TEX()(или btex ... etexявляется обычным <picture>объектом MP, поэтому вы можете масштабировать его, вращать, сдвигать и т. д. по мере необходимости.

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