我是 LuaLatex 的新手,正在尝试编写简单的宏。
但是,当我向 lua 发送包含反斜杠的字符串(如\R^n
)时,代码无法按预期工作。
例如我的lua代码是:
function fourier(group, f)
output = '\\mathcal{F}_{'..group..'}'
if f ~= '' then
output = output..'\\left\\{ {'..f..'} \\right\\}'
end
tex.sprint(output)
end
而我尝试定义的宏是:
\DeclareDocumentCommand \F{D<>{}O{}}{%
\directlua{
fourier("\luatexluaescapestring{#1}", "\luatexluaescapestring{#2}")
}
}
但是,当我输入时\[ \F<\R^n>[f] \]
,我在 pdf 上得到了类似的内容\mathrm{F}_{@bgroup\R}^n {f}
。
有人能帮我吗?
编辑:完整代码:
\documentclass{report}
\usepackage{amsmath, amsthm, amssymb, amsfonts}
\usepackage{xparse}
\title{Title}
\author{bkn}
\newcommand{\R}{\mathbb{R}}
\directlua{dofile("functions.lua")}
\DeclareDocumentCommand \F{D<>{}O{}}{%
\directlua{
fourier("\luatexluaescapestring{#1}", "\luatexluaescapestring{#2}")
}
}
\begin{document}
$\F<a>[f]$ % This works
$\F<\mathbb{R}^n>[f]$ % This doesn't
\end{document}
并且 functions.lua 包含上述函数。
答案1
LuaTeX\edef
在内部进行类似扩展\directlua
(尽管后者本身是可扩展的)。为了避免这种情况,您可以使用 e-TeX 原语\unexpanded
\DeclareDocumentCommand \F{D<>{}O{}}{%
\directlua{
fourier(
"\luatexluaescapestring{\unexpanded{#1}}",
"\luatexluaescapestring{\unexpanded{#2}}"
)
}
}