终端输出中的退格键

终端输出中的退格键

有没有办法在写入终端时插入退格符?我想删除在两个调用之间自动插入的空格字符\message{}

\message{.}\message{.}\message{.}
\bye

写为. . .终端,但我想要...

答案1

texio提供的库对luatex消息格式提供了更多的控制,并且不会插入空格:

\def\mymessage#1{\directlua{texio.write("\luaescapestring{#1}")}}
\mymessage{.}\mymessage{.}\mymessage{.}
\bye

结果是:

grendel:io sharpie$ luatex io.tex
This is LuaTeX, Version beta-0.60.2-2010071218 (TeX Live 2010) (rev 3736) 
(./io.tex... )
No pages of output.

答案2

据我所知,两个单独的\messages 之间无法避免出现此空格。解决方案是先将所有连续材料合并到一个宏中(使用 添加材料\edef\foo{\foo <material>}),然后执行\message{\foo}

要真正了解空间的来源,请查看tex.webTeX 的源代码文档。相关程序似乎是procedure issue_message;,它调用@<Print string |s| on the terminal@>,定义如下。

@ @<Print string |s| on the terminal@>=
begin if term_offset+length(s)>max_print_line-2 then print_ln
else if (term_offset>0)or(file_offset>0) then print_char(" ");
slow_print(s); update_terminal;
end

思考这才print_char(" ")是罪魁祸首。相关问题\write而不是\message由@TH回答。去年一月,他向我介绍了阅读tex.web

相关内容