我想尝试使用 lualatex,以便尽可能少地使用 Tex 代码(主要是因为它难以阅读且过于复杂)。我明白,由于某些库是用 Tex 编码的,因此我无法避免编写一些“tex.sprint”,但我希望尽可能少地使用。
所以这就是我想要做的:在 lua 中定义一个函数来创建一个tcolorbox
,并在 lua 端获取盒子的尺寸,以便显示例如图片或我在 lua 中编写的任何代码。
梅威瑟:
测试.tex
\documentclass{article}
\usepackage{lipsum}
\usepackage[most]{tcolorbox}
\begin{document}%
\begin{tcolorbox}
\directlua{dofile("file.lua")
displayPicInTCbox("simpson.jpg")
}
\end{tcolorbox}
\end{document}
文件.lua
function displayPicInTCbox(filename)
tex.sprint([[\begin{tcolorbox}]])
-- This works, but I'd like to use my own lua function, so can't use it
tex.sprint([[\includegraphics[width=\tcbtextwidth]{simpson.jpg}]])
img.write({ filename = "simpson.jpg";
-- This does not work
width=tex.dimen['tcbtextwidth']
-- Same problem
-- width="\\tcbtextwidth"
})
tex.sprint([[\end{tcolorbox}]])
end
谢谢!顺便说一句,如果你有任何关于用 Lua 替换 TeX 的建议,请告诉我!
答案1
\tcbtextwidth
是宏而不是长度。您无法从 lua 内部访问 tex 宏,因此您应该将其存储在长度中(跳过)或在传递给 lua 之前对其进行扩展:
\documentclass{article}
\usepackage{lipsum}
\usepackage[most]{tcolorbox}
\usepackage{luacode}
\newlength\lualen{}
\begin{luacode}
function insertimageA ()
img.write({ filename = "example-image-A.pdf",width=tex.skip['lualen'].width})
end
function insertimageB (imgwidth)
img.write({ filename = "example-image-A.pdf",width=imgwidth})
end
\end{luacode}
\begin{document}%
\begin{tcolorbox}
\setlength\lualen{\tcbtextwidth}
\directlua{insertimageA()}
\directlua{insertimageB("\tcbtextwidth")}
\end{tcolorbox}
\end{document}