我想使用 Lua 函数来重现 的效果\includegraphics{testimg}
。这意味着图像“testimg.pdf”将在以下示例中居中显示。
\documentclass{minimal}
\begin{document}
\centering
Some text.
\directlua{
tex.print("Text from Lua.")
a = img.new({filename="testimg.pdf", height="200bp"})
img.write(a)
}
Some more text.
\end{document}
虽然文本确实居中显示,但图像却显示在页面左侧。显然,我做错了。有什么提示吗?
答案1
您要做的img.write()
是将节点直接写入输出流,而无需了解当前状态(\centering)。当您处于水平模式时,一切都很好。当您处于垂直模式时,节点只会插入到流中,也就是说
所有 hlist 都有一个左跳跃和一个右跳跃(对于\centering
),而图像没有。您必须自己插入左跳跃和右跳跃。
如果你安装了 graphviz,你可以尝试 viznodelist (https://gist.github.com/pgundlach/556247)从页面生成lua文件gv文件:
\usepackage{atbegshi}
...
\AtBeginShipout{%
\directlua{
require("viznodelist")
viznodelist.nodelist_visualize(tex.box["AtBeginShipoutBox"],"nodes.gv")
}}
并查看生成的文件nodes.gv
。
答案2
使用
\noindent
\makebox[\textwidth]{%
\directlua{
tex.print("Text from Lua.")
a = img.new({filename="testimg.pdf", height="200bp"})
img.write(a)
}}
然后它与文本一起居中。