如何将 TeX 变量的内容传递\jobname
给 Lua 变量?
(我正在使用该luacode
包中的 LuaLaTeX。)
答案1
由于您正在加载luacode
包,因此您可以使用其宏\luastring
。 (是的,本例中的 tex 文件的名称确实是uvw
。)
% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{fontspec}
\usepackage{luacode}
\begin{luacode}
function foo(s) -- "s" is a variable
tex.sprint( s )
end
\end{luacode}
\begin{document}\pagestyle{empty}
The value of \verb+\jobname+ is \directlua{tex.sprint(\luastring{\jobname})}.
The value of \verb+\jobname+ is \texttt{\directlua{ foo(\luastring{\jobname})}}.
\end{document}
答案2
除了 Micos 的答案之外,您还可以访问\jobname
在 LuaTeX 启动时处于活动状态的原始 :它可用作tex.jobname
。这通常与 相同,但如果重新定义,\jobname
它不会改变:\jobname
% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{fontspec}
\usepackage{luacode}
\begin{document}\pagestyle{empty}
The value of \verb+\jobname+ is \directlua{tex.sprint(\luastring{\jobname})}, the ``real'' jobname is \directlua{tex.sprint(tex.jobname)}.
\renewcommand\jobname{somename}
The value of \verb+\jobname+ is \directlua{tex.sprint(\luastring{\jobname})}, the ``real'' jobname is \directlua{tex.sprint(tex.jobname)}.
% Change back, otherwise LaTeX is unhappy
\edef\jobname{\directlua{tex.sprint(tex.jobname)}}
\end{document}