如何在带星号的版本luacode
环境中访问 LaTeX 命令?
我基本上对使用\ifdefined
下面的代码感兴趣。
例如,这个有效:
\documentclass{article}
\usepackage{luacode}
%------------------------
\begin{luacode}
function doItOnlyIf(x,y)
\ifdefined\HCode %will not compile in luacode*
tex.print(x)
\else
tex.print(y)
\fi
end
\end{luacode}
%-------------------
\begin{document}
\directlua{doItOnlyIf("this","that")}
\end{document}
但我需要使用luacode*
而不是luacode
(因为我有一些东西只在luacode*
现在才起作用)。
以上内容仅适用于无星号的版本luacode
。
使用 和 进行编译lualatex foo.tex
,对于tex4ht
,使用 进行编译make4ht --lua foo.tex
答案1
正如你所发现的,TeX 宏在环境中扩展luacode
,但在luacode*
环境中却不扩展。
如果需要使用luacode*
环境,则必须检查是否\HCode
已定义外部环境luacode*
,例如通过 调用 Lua 函数时\directlua
。
\documentclass{article}
\usepackage{luacode}
\begin{luacode*}
function doItOnlyIf(x,y,flag)
if flag==1 then
tex.print(x)
else
tex.print(y)
end
end
\end{luacode*}
\newcommand\Hcheck{\ifdefined\HCode1\else0\fi}
\begin{document}
\directlua{doItOnlyIf( "this", "that", \Hcheck )}
\end{document}