如何将 LaTeX 参数逐字逐句地传递给 lua?

如何将 LaTeX 参数逐字逐句地传递给 lua?

我想将 LaTeX 中的一个参数逐字逐句地传递给 lua,包括 LaTeX 命令和行尾字符。下面的示例解决了前一个问题,但没有解决后一个问题。有没有办法同时解决这两个问题,也许通过使用\obeylines来解决第二个问题?如果有,怎么做?

类似问题的解决方案如下:在 LuaLaTeX 中,如何将环境的内容逐字传递给 Lua?但它除了传递参数之外还打印输出。

谢谢!

\documentclass[12pt]{article}

\usepackage{luacode}

\directlua{dofile("myluaprogram.lua")}
\newcommand{\myluaroutine}[1]
   {\directlua{myluaroutine("\luatexluaescapestring{\detokenize{#1}}")}}

\begin{document}

\myluaroutine{
I
want
to 
have every line
separate
in
lua
without
expanding
off
\latexcommands
}

\end{document}

答案1

有几种方法。首先,我会选择最简单的方法:标准verbatim环境的修改版本

\documentclass{article}
\makeatletter
% A modified version of verbatim
\begingroup
  \catcode `| = 0 %
  \catcode `[ = 1 %
  \catcode `] = 2 %
  \catcode `\{ = 12 %
  \catcode `\} = 12 %
  \catcode `\\ = 12 %
  |gdef|@xluaverbatim#1\end{luaverbatim}%
    [|luaverbatimpayload[#1]|end[luaverbatim]]%
|endgroup
\def\luaverbatim{%
  \let\do\@makeother
  \dospecials
  \obeylines
  \obeyspaces
  \@xluaverbatim
}
\def\endluaverbatim{}
\def\luaverbatimpayload#1{%
  \directlua{%
    print([[#1]])
  }%
}
\makeatother

\begin{document}
\begin{luaverbatim}
I
want
to 
have every line
separate
in
lua
without
expanding
off
\latexcommands
\end{luaverbatim}
\end{document}

相关内容