^^M 扰乱了我的终端输出

^^M 扰乱了我的终端输出

与 pdfTeX 和 XeTeX^^M向终端发送字符不同13,LuaTeX 发送的是字符13本身。这会使我的终端(Ubuntu 10.04 下的 bash)的输出混乱。

\edef\foo{\string\^^M}
\message{\meaning\foo ab}

给出

abcro:->\

即与

macro:->\
ab 

但被压缩成一行。我该如何告诉 LuaTeX 改为输出^^M

答案1

正如 @egreg 所说,在我看来这是一个错误。为了写入文件,您可以修改 lua 回调,但不幸的是,在写入终端时不会调用回调(如文档所述)。

\edef\foo{\string\^^M}

{\catcode`\^=12
\directlua{
callback.register(
"process_output_buffer",
function  (s)
snew, n =  string.gsub(s,"\string\r","^^M")
return snew
end)
}}


\message{\meaning\foo ab}
\newwrite\x
\immediate\openout\x=nnl.out
\immediate\write\x{\meaning\foo ab}

\stop

在终端上,你可以看到

ab )o:->\

但在文件中你得到:

$ cat nnl.out
macro:->\^^Mab

答案2

LuaTeX 参考,测试版 0.70.1, 部分2.3 UNICODE 文本支持

终端的输出使用较低控制范围 (c < 32) 的符号,但、和^^除外。这些被视为“安全”,因此按原样打印。^^I^^J^^M

并且手册中明确排除了终端/日志 process_output_buffer

4.1.3.2 process_output_buffer(0.43)
[…] 它仅用于输出到实际文件(即不包括日志、终端和\write18调用)。

相关内容