如何将 TeX 变量的内容传递给 Lua

如何将 TeX 变量的内容传递给 Lua

如何将 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}

如果作业名称是 job,则会导致 在此处输入图片描述

相关内容