我想将 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}