lua支持多行字符串。
我需要将这样的字符串从 Lua 发送回 Latex。我首先使用 lua 验证了代码是否有效独立引擎
但 lualatex 不喜欢某些东西。这是 MWE
\documentclass[11pt]{article}
\IfFileExists{luatex85.sty}
{\usepackage{luatex85}}{}
\usepackage{amsmath}
\usepackage{luacode}
\begin{luacode}
function foo(arg)
local x = [[\\begin{align*}
x &=y\\\\
z &=r\\\\
\\end{align*}
]]
tex.print(x)
end
\end{luacode}
\begin{document}
\directlua{foo()}
\end{document}
错误是
(/usr/local/texlive/2016/texmf-dist/tex/luatex/ctablestack/ctablestack.sty)))
No file foo7.aux.
! LaTeX Error: There's no line here to end.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
l.22 \directlua{foo()}
?
将其作为长字符串打印在一行上时有效:
\begin{luacode}
function foo(arg)
local x = "\\begin{align*} x &=y\\\\ z &=r\\\\ \\end{align*}"
tex.sprint(x)
end
\end{luacode}
如果我逐行打印它也可以工作
\begin{luacode}
function foo(arg)
tex.print("\\begin{align*}")
tex.print("x &=y\\\\")
tex.print("z &=r\\\\")
tex.print("\\end{align*}")
end
\end{luacode}
如果可以使用多行语法的话会更容易[[ ]]
。
问题是:是否可以使用[[ .. ]]
语法将多行字符串从 Lua 发送到 Latex,或者必须一次打印每一行?
2016 年
答案1
一些评论:
摘自 Lua Wiki:“使用双括号时无法识别转义序列”。
这里
luacode*
环境比luacode
(参见 luacode 手册第 2 页“反斜杠和 Lua 字符串”表)。在您的Lua代码中,您可以使用
print
帮助通过控制台进行调试。
以下代码:
\documentclass[11pt,twocolumn]{article}
\usepackage{amsmath}
\usepackage{luacode}
% \usepackage{fontspec}
\pagestyle{empty}
\begin{luacode*}
require("lualibs") -- for 'string.split'
function foo(arg)
local a = "\\begin{align*} x &=y\\\\ z &=r\\\\ \\end{align*}\\par"
local b = [[\begin{align*} x &=y\\ z &=r\\ \end{align*}\par]]
local c = [[\begin{align*}
x &=y \\
z &=r \\
\end{align*}\par]]
print()
print(a)
tex.print(a)
print(b)
tex.print(b)
print(c)
tex.print(c)
tex.print(string.split(c,"\n"))
end
\end{luacode*}
\begin{document}
\directlua{foo()}
\end{document}
产生以下日志:
\begin{align*} x &=y\\ z &=r\\ \end{align*}\par \begin{align*} x &=y\\ z &=r\\ \end{align*}\par \开始{对齐*} x &=y \\ 単位 &=r \\ \end{对齐*}\par
结果如下:
附言:取消注释\usepackage{fontspec}
,Omega 就会消失......