例子

例子

我想在我的 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, ...它来迭代图形并创建您想要的布局。

相关内容