几乎所有编程语言中最简单的任务之一就是编写一个将“Hello World”写入终端的程序。TeX 中类似的事情是:
tex '\empty Hello world! \bye'
但是,这会创建一个 dvi 文件,其中Hello World
写入但不会Hello World
在终端中写入“ ”。
因此我的问题是,真正的 Hello World 程序(打印到终端)在 TeX 中是什么样的?
答案1
TeX 是一个排版程序,所以如果你“只是写”了一些东西,它将进入输出 DVI 或 PDF 文件。要让它写入终端,你需要明确地告诉它。有几种方法可以做到这一点,根据你的需求,它们会产生略有不同的结果。以下是显示一些文本的几个选项:
该原语\message{<text>}
会扩展<text>
并将其写入终端,没有前导或尾随换行符,但消息周围有空格。
tex '\message{<}\message{Hello world!}\message{>} \bye'
印刷:
This is TeX, Version 3.14159265 (TeX Live 2020) (preloaded format=tex)
< Hello world! >
No pages of output.
Transcript written on texput.log.
原\write<stream>{<text>}
语将展开<text>
并将其写入<stream>
新行。如果<stream>
未打开文件,TeX 将写入<text>
终端。流 17 无法打开文件(LuaTeX 除外),因此您可以使用它写入终端(任何其他流都可以,只要它未打开)。 \immediate
使\write
立即执行,而不是在下一页发送出去时执行。
tex '\message{<}\immediate\write17{Hello world!}\message{>} \bye'
印刷:
This is TeX, Version 3.14159265 (TeX Live 2020) (preloaded format=tex)
<
Hello world!
>
No pages of output.
Transcript written on texput.log.
此外,在大多数当前实现中,写入流 18 将<text>
作为 shell 命令执行(大多数都需要标志)。在输入文件上运行 TeX 时写入 -1 将(仅)-shell-escape
写入文件。.log
原语\errmessage{<text>}
会扩展<text>
并将其与错误消息一起写入终端,因此 TeX 会在打印消息后提示您进行交互。
tex '\errmessage{Hello world!} \bye'
印刷:
This is TeX, Version 3.14159265 (TeX Live 2020) (preloaded format=tex)
! Hello world!.
<*> \errmessage{Hello world!}
\bye
?
No pages of output.
Transcript written on texput.log.