\luatexluaescapestring{\unexpanded{ 和 % 内部字符串问题

\luatexluaescapestring{\unexpanded{ 和 % 内部字符串问题

我正在将代码列表从 latex 传递到 lua 函数进行处理和格式化。使用"\luatexluaescapestring{\unexpanded{ code }}" 主要方法将任意代码列表作为字符串原样传递给 lua。

这种方法效果很好,除了我发现的一种情况。当代码本身包含字符串,而字符串又包含 时%,这种方法就会失败。代码列表在开头就被截断了%

有没有办法告诉 Latex 按原样传递字符串而不是查看它内部?
我认为这\unexpanded可以防止这种情况发生。这是一个 MWE(这只是一个例子。在实际代码中,我做的不仅仅是摆放verbatim代码),我还使用了 listing 包等等。

\documentclass{article}
\usepackage{luacode}

\begin{luacode*}
function foo(myStr)
tex.print("\\begin{verbatim}"..myStr.."\\end{verbatim}")
end
\end{luacode*}

\begin{document}

\directlua{foo("\luatexluaescapestring{\unexpanded{%
x=10; plotTittle=sprintf("%a pi", 3);  y=20;
}}")}

\end{document}

lualatex 提供

Mathematica 图形

TL2016。

问题不在于字符串内部的字符串。因为这是有效的。

\directlua{foo("\luatexluaescapestring{\unexpanded{%
x=10; plotTittle=sprintf("a pi", 3);  y=20;
}}")}

并给出

Mathematica 图形

%问题在于代码中的使用。

问题是:如何防止 latex 以任何方式查看字符串的内容?所有字符串都是源代码列表,来自不同的语言。

答案1

如果由于某种原因你不想luacode在加载包后使用,那么你可以这样做

在此处输入图片描述

\documentclass{article}
\usepackage{luacode}

\makeatletter
\let\percent\@percentchar
\makeatother

\begin{luacode*}
function foo(myStr)
tex.print("\\begin{verbatim}"..myStr.."\\end{verbatim}")
end
\end{luacode*}

\begin{document}

\directlua{foo("\luaescapestring{%
x=10; plotTittle=sprintf("\percent a pi", 3);  y=20;}%
")}

\end{document}

或者使用包功能:

\begin{luacode*}
foo('x=10; plotTittle=sprintf("%a pi", 3);  y=20;}')
\end{luacode*}

相关内容