Lualatex,在Lua中处理tcolorbox

Lualatex,在Lua中处理tcolorbox

我想尝试使用 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} 

在此处输入图片描述

相关内容