我想用mfpic
Overleaf 生成图像,但我甚至不确定这是否可行。我对这些都不是很熟悉,但有人为我的报告发送了 mfpic 代码的一部分,我想打印它。来自教程这里,在我写完下面的代码后,显然我应该运行命令“pdflatex first”,但我不知道具体如何运行或在哪里运行它,所以我卡住了。我得到的唯一输出是#1
左下角有一个空白方块,没有生成其他文件。
\documentclass[12pt]{report}
\usepackage[metapost]{mfpic}
\opengraphsfile{myfigs}
\begin{document}
\begin{figure}[htb!]
\begin{center}
\mfpicunit 1mm
\begin{mfpic}[1]{-10}{50}{-5}{45}
\draw\shade\polygon{(10,40),(30,30),(40,10)} \rect{(0,0),(30,30)}
\lines{(0,30),(10,40),(40,40),(40,10),(30,0)}
\lines{(30,30),(40,40)} \dashed\lines{(0,0),(10,10),(40,10)}
\dashed\lines{(10,10),(10,40)} \arrow\lines{(0,0),(27,27)}
\tlabel[tr](0,0){\tiny{(000)}} \tlabel[tl](30,0){\tiny{(100)}}
\tlabel[tl](40,10){\tiny{(101)}} \tlabel[bl](11,11){\tiny{(001)}}
\tlabel[cr](0,30){\tiny{(010)}} \tlabel[tl](31,31){\tiny{(110)}}
\tlabel[cl](41,40){\tiny{(111)}} \tlabel[br](10,40){\tiny{(011)}}
\end{mfpic}
\caption{Caption}
\end{center}
\end{figure}
\closegraphsfile
\end{document}
答案1
背页有一个latexmkrc
规则可以运行metapost
;但mfpic
不会输出任何日志消息,告知latexmk
需要应用该规则。添加到\typeout{No file myfigs.1.}
您的.tex
文件中将有助于触发latexmkrc
规则运行metapost
。
答案2
我相信 Overleaf 的细心团队会发表评论,但我不认为您可以进行使用所需的两遍(latex + mpost)编译mfpic
。我强烈建议您通过mplib
选项直接使用 Metapost,它在 Overleaf 上运行良好,只要您选择LuaLatex
编译器(菜单,左上角)。
至于你想画什么,MP 不是绘制 3D 图表的最佳工具,但如果你能用简单的等角投影除了正确的视角之外,您还可以执行以下操作:
\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\begin{document}
\mplibtextextlabel{enable}
\begin{mplibcode}
numeric elevation, rotation, se, ce, sr, cr, unit_size;
elevation = 18;
rotation = -12;
se = sind(elevation);
ce = cosd(elevation);
sr = sind(rotation);
cr = cosd(rotation);
unit_size = 89;
def p(expr x, y, z) = (x * cr - z * sr, y * ce + x * se * sr + z * se * cr) scaled unit_size enddef;
beginfig(1);
drawoptions(dashed evenly scaled 1/2 withcolor 1/2);
draw p(0,0,0) -- p(0,0,1) -- p(0,1,1);
draw p(0,0,1) -- p(1,0,1);
drawoptions();
path t; t = p(0,1,1) -- p(1,0,1) -- p(1,1,0) -- cycle;
fill t withcolor 7/8; draw t;
draw p(0,0,0) -- p(1,0,0) -- p(1,1,0) -- p(0,1,0) -- cycle;
draw p(0,1,0) -- p(0,1,1) -- p(1,1,1) -- p(1,0,1) -- p(1,0,0);
draw p(1,1,0) -- p(1,1,1);
interim ahangle := 30;
drawarrow p(0,0,0) -- 2/3[point 2 of t, point 1/2 of t];
label.llft("$\scriptstyle (000)$", p(0,0,0));
label.lrt ("$\scriptstyle (100)$", p(1,0,0));
label.lrt ("$\scriptstyle (101)$", p(1,0,1));
% etc
endfig;
\end{mplibcode}
\end{document}
它将与lualatex
Overleaf 一起编译并生成: