
Ich bin neu bei LuaLatex und versuche, einfache Makros zu schreiben.
Wenn ich jedoch eine Zeichenfolge an Lua sende, die einen Backslash enthält (wie \R^n
), funktioniert der Code nicht wie erwartet.
Mein Lua-Code lautet beispielsweise:
function fourier(group, f)
output = '\\mathcal{F}_{'..group..'}'
if f ~= '' then
output = output..'\\left\\{ {'..f..'} \\right\\}'
end
tex.sprint(output)
end
Das Makro, das ich zu definieren versuche, ist:
\DeclareDocumentCommand \F{D<>{}O{}}{%
\directlua{
fourier("\luatexluaescapestring{#1}", "\luatexluaescapestring{#2}")
}
}
Wenn ich jedoch eingebe \[ \F<\R^n>[f] \]
, erscheint im PDF etwas, das so aussieht \mathrm{F}_{@bgroup\R}^n {f}
:
Kann mir jemand helfen?
BEARBEITEN: vollständiger Code:
\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}
und functions.lua enthält die obige Funktion.
Antwort1
LuaTeX führt \edef
eine -ähnliche Erweiterung im Inneren durch \directlua
(obwohl letzteres selbst erweiterbar ist). Um dies zu vermeiden, können Sie das e-TeX-Primitiv verwenden\unexpanded
\DeclareDocumentCommand \F{D<>{}O{}}{%
\directlua{
fourier(
"\luatexluaescapestring{\unexpanded{#1}}",
"\luatexluaescapestring{\unexpanded{#2}}"
)
}
}