写入屏幕/控制台但不写入 .log 文件

写入屏幕/控制台但不写入 .log 文件

我使用没有 Lua 扩展的 LaTeX。(La)TeX 中是否有一个平台无关的内置功能,可以只在屏幕上写入消息,但不是到 .log 文件?

答案1

如果没有 LuaTeX,这是不可能的。TeX 内部只知道如何写入终端,但它在宏级别不提供此选项。

一些背景信息:TeX 使用两个数组表示文件:write_file,指向输出流的指针和write_open,一个布尔值,它告诉 TeX 流是否连接到实际文件。write_file数组有 16 个位置(0 . . 15),分别指向 16 个可能打开的文件(在 LuaTeX 中为 128 个),并且write_open数组有两个额外的位置:

<code>tex.pdf</code> 第 1370 节

现在,当\writeTeX 处理 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

相关内容