我想从 luacode 打印一些内容,并让它显示在 Latex 中自己的一行上,而不是在同一行上。问题是这里,类似,但使用字符串,但我不是从 lua 打印字符串。一个简单的例子来解释:
\documentclass[11pt]{scrartcl}
\IfFileExists{luatex85.sty}
{
\usepackage{luatex85}
}{}
\usepackage{luacode}
\begin{luacode*}
function foo(list)
tex.print(type(list))
local i = 0
for _ in pairs(list) do
i = i + 1
tex.print(list[i])
end
end
\end{luacode*}
\begin{document}
\directlua{foo({1,2,3,4})}
\end{document}
以上内容在同一行产生所有输出。
尽管文档明确指出将插入新行
好的,但上面说了strings
,我从 Lua 发送到 Latex 的内容不是字符串。那么,在将内容从 lua 传递回 Latex 之前,真的应该将所有内容转换为字符串吗?我发现如果我这样做,我可以得到新行:
\documentclass[11pt]{scrartcl}
\IfFileExists{luatex85.sty}
{
\usepackage{luatex85}
}{}
\usepackage{luacode}
\begin{luacode*}
function foo(list)
tex.print({type(list),"\\\\"})
local i = 0
for _ in pairs(list) do
i = i + 1
tex.print({list[i],"\\\\"})
end
end
\end{luacode*}
\begin{document}
\directlua{foo({1,2,3,4})}
\end{document}
这给了我想要的
但我真的不想写上面的内容,我只是想写一下,tex.print(list[i])
让它在 Latex 中单独显示一行。有一个函数被调用texio.write_nl
,但这是用于记录的,不是我想要的。
2016 年
更新:
当我运行这个时:
\documentclass[11pt]{scrartcl}
\IfFileExists{luatex85.sty}
{
\usepackage{luatex85}
}
{}
\usepackage{luacode}
\begin{luacode*}
function foo(list)
tex.print(type(list))
tex.print("\\newline")
tex.print(type(list[1]))
tex.print("\\newline")
local i = 0
for _ in pairs(list) do
i = i + 1
tex.print(list[i])
end
end
\end{luacode*}
\begin{document}
\directlua{foo({1,2,3,4})}
\end{document}
输出为
在 Lua 中,类型为number
和table
。但如果 的输入tex.print
应该是string
,那么如何将其转换为字符串?
答案1
您的描述“转换为字符串”与实际发生的情况不符。
当你圈出的文字表示换行符特点附加意味着您的打印语句列表相当于
1
2
3
4
而不是
1 2 3 4
在 TeX 输入字符流中,但在大多数情况下,这两个输入会产生相同的排版输出。
论点tex.print
是总是Lua 字符串(我不确定你说它不是字符串是什么意思?),所以如果你想打印1\\2\\3
那么你需要它作为一个字符串,这是"\\\\2\\\\3\\\\4"
因为 Lua 引用规则,那么如果你把它放在里面\directlua
而不是放在 lua 文件中,你需要\\
通过使用\string
或类似方式来停止 Tex 扩展。
我将使用段落分隔符,因此打印一个空白行:
\documentclass[11pt]{article}
\directlua{
function foo(list)
tex.print(type(list))
tex.print("")
local i = 0
for _ in pairs(list) do
i = i + 1
tex.print(list[i])
tex.print("")
end
end
}
\begin{document}
\directlua{foo({1,2,3,4})}
\end{document}