我想在我的 LuaLaTeX 文档中包含一个包含多个块的 METAPOST 文件。我在环境中beginfig
包含该文件,但这只是将所有图形并排放置。有没有办法控制图形的布局,例如将它们一个接一个地显示,或者甚至可以指定要包含文件中的哪个图形?input filename ;
mplibcode
例子
METAPOST 文件stackx.mp
:
prologues := 3 ;
outputtemplate := "%j-%c.mps" ;
u := 1in ;
beginfig(0) ;
draw fullcircle scaled 2u ;
endfig ;
beginfig(1) ;
draw fullcircle scaled 2u ;
draw fullcircle scaled u shifted (u*right) ;
endfig ;
bye
梅威瑟:
\documentclass{minimal}
\usepackage{luamplib}
\usepackage{lipsum}
\begin{document}
\lipsum[1]
{\hfill
\begin{mplibcode}
input stackx.mp ;
\end{mplibcode}
\hfill}
\lipsum[2]
\end{document}
谢谢
答案1
luamplib
只需为每张图片创建一个 hbox。您可以将 hbox 列表保存在新的 hbox 中,然后使用一些 Lua 代码访问其中的部分内容:
\documentclass{minimal}
\usepackage{luamplib}
\usepackage{lipsum}
\showboxdepth\maxdimen
\showboxbreadth\maxdimen
\newbox\mympbox
\newcommand\evalmp[1]{\setbox\mympbox\hbox{\begin{mplibcode}input #1;\end{mplibcode}}}
\newcommand\usemp{\directlua{
local b = tex.box.mympbox;
if not b then
error[[\noexpand\evalmp is required before \string\usemp]]
end
b = b.head
for _ = 2,token.scan_int() do
b = b and b.next
end
if b then
node.write(node.copy(b))
else
error[[There are not enough saved figures]]
end
}}
\newcommand\countmp{\directlua{tex.sprint(node.length(tex.box.mympbox.head))}}
\begin{document}
\evalmp{stackx.mp}
There are \countmp\ figures. The first two are
\hfil\usemp1\hfil
and
\hfil\usemp2\hfil
\lipsum[2]
\end{document}
当然,您也可以使用expl3, forloop, ...
它来迭代图形并创建您想要的布局。