我使用没有 Lua 扩展的 LaTeX。(La)TeX 中是否有一个平台无关的内置功能,可以只在屏幕上写入消息,但不是到 .log 文件?
答案1
如果没有 LuaTeX,这是不可能的。TeX 内部只知道如何写入终端,但它在宏级别不提供此选项。
一些背景信息:TeX 使用两个数组表示文件:write_file
,指向输出流的指针和write_open
,一个布尔值,它告诉 TeX 流是否连接到实际文件。write_file
数组有 16 个位置(0 . . 15),分别指向 16 个可能打开的文件(在 LuaTeX 中为 128 个),并且write_open
数组有两个额外的位置:
现在,当\write
TeX 处理 a 时,实际上发生的事情是write_out
§1370 中的程序。该程序首先扩展传递给 (§1371) 的标记列表\write
,然后设置j ⟵ write_stream(p)
,它保存指向写入流的指针。然后代码使用 检查给定的流是否打开。如果是,则将指向写入流的指针分配给write_open[j]
selector
,否则检查j
写信给term_and_log
或者log_only
;没有选择term_only
。最后,书写和记账就完成了。以下是相关部分tex.pdf
:
在非常特殊的情况下,TeX 会将一些内容写入终端,但这些内容不会出现在 中.log
。从文档中我能找到的内容来看,这些情况包括:
- 当 TeX 以交互模式启动时(IE,如果您只是
tex
从命令行调用,没有输入文件),那么直到**
提示符为止的初始化都只写入终端。如果您在提示符中输入文件名,**
则.log
文件名将从中派生,否则texput
使用。在这两种情况下,最终发送到终端的内容也会刷新到.log
; - 当显示带有 的框时
\tracingonline=0
;TeX 会将框的内容打印到.log
唯一位置并打印(see the transcript file)
到终端; - 在写期末考试的时候
Transcript written on <log-file>.log.
; - 当发出某些错误/警告并且交互模式是 或
\scrollmode
时\nonstopmode
,则会(see the transcript file for additional information)
在运行结束时打印 a;
但这些都没有给你提供自己写东西的机会,所以你在这方面运气不佳。
答案2
虽然这个答案有效,但它非常不靠谱,只用于“教育”目的。此外,它不独立于平台,并且需要shell-escape
。
TeX live 中有一个怪癖/功能,如果你打开一个带有名称的文件|...
,那么 TeX 将使用命令生成一个进程...
,并且写入该“文件”的任何内容都将写入该进程的标准输入。
附注:在某些情况下(我无法追踪它).tex
会附加到命令中,因此echo a
可能会变成echo a.tex
。
无论如何,以下 LaTeX 文件
\ExplSyntaxOn
\iow_open:Nn \g_tmpa_iow {|cat}
\iow_now:Nn \g_tmpa_iow {hello~world}
\iow_now:Nn \g_tmpa_iow {hello~world}
\iow_now:Nn \g_tmpa_iow {hello~world}
\stop
会将内容写入终端而不写入日志文件,假设使用类 UNIX 操作系统的命令cat
。