![^^M 扰乱了我的终端输出](https://linux22.com/image/253156/%5E%5EM%20%E6%89%B0%E4%B9%B1%E4%BA%86%E6%88%91%E7%9A%84%E7%BB%88%E7%AB%AF%E8%BE%93%E5%87%BA.png)
与 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
调用)。