如何从 Lua 源文件中获取换行符

如何从 Lua 源文件中获取换行符

我正在用 LuaTeX 从包含长多行字符串 ( [=[ string ]=]) 的 Lua 源创建文档。当我使用 打印字符串时tex.print,LuaTeX 会“吃掉”换行符。例如,我有字符串

A = [=[
Here we go.
Text. More text.
And more text to go.
]=]

tex.print输出

Here we go. Text. More text. And more text to go.

Lua 中不会发生这种情况,但 LuaTeX 中会发生这种情况。有办法解决这个问题吗?考虑大量的多行字符串,因此手动编辑字符串对我来说是不可能的。

答案1

在 ConTeXt 中,你可以使用(在独立的慢性肝病文档):

local A = [=[
Here we go.
Text. More text.
And more text to go.
]=]

context.starttext()
context.startlines()
context(A)
context.stoplines()
context.stoptext()

或者在常规 TeX 文档中:

\startluacode
    local A = [=[
    Here we go.
    Text. More text.
    And more text to go.
    ]=]
\stopluacode

\starttext
\startluacode
    context.startlines()
    context(A)
    context.stoplines()
\stopluacode
\stoptext

不确定与\startlines ... \stoplinesLaTeX 等效的是什么,但它在 LaTeX 中也应该可以工作。

答案2

您必须在处将字符串分成几行,\n然后使用tex.print(而不是tex.sprint)来打印它们,因为这将插入所需的行尾标记\obeylines

\documentclass{article}
\usepackage{luacode}
\begin{luacode*}
A = [=[
Here we go.
Text. More text.
And more text to go.
]=]
\end{luacode*}

\begin{document}

{\obeylines\directlua{
    for _, line in ipairs(string.splitlines(A)) do
        tex.print(line)
    end
}}

\end{document}

相关内容