有没有办法在写入终端时插入退格符?我想删除在两个调用之间自动插入的空格字符\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
据我所知,两个单独的\message
s 之间无法避免出现此空格。解决方案是先将所有连续材料合并到一个宏中(使用 添加材料\edef\foo{\foo <material>}
),然后执行\message{\foo}
。
要真正了解空间的来源,请查看tex.web
TeX 的源代码文档。相关程序似乎是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
。