我对 l3file 有一些问题

我对 l3file 有一些问题

我是 LaTeX3 的初学者,并创建了一个命令test,用于在我的文件中写入一些标记test.aux,这是 mwe

\documentclass{article}
\begin{document}
  \ExplSyntaxOn
  \iow_new:N \l_tmpa_file
  \iow_open:Nn \l_tmpa_file{test.aux}
  \NewDocumentCommand{\test}{+m}
  {
    \iow_now:Nn \l_tmpa_file{#1}
  }
  \file_input:n{test.aux}
  \test{aaaaa}
  \test{bbbbb}
  \test{ccccc}
  \ExplSyntaxOff
\end{document}

我想在开头输入myfile,我使用记事本来读取我的文件,

aaaaa
bbbbb
ccccc

但我的\file_input:n{test.aux}不起作用,我用\iow_show:N \l_tmpa_file

\file_input:n{test.aux}
\iow_show:N \l_tmpa_file

test.aux空的。我的需求如下

  1. 我可以编译两次,第一次写入文件,第二次读取文件
  2. 输入需要先进行

我需要帮助,谢谢!

答案1

文档中\iow_open:Nn说:

使用作为文件访问的控制序列 打开⟨file name⟩以进行写入。如果已经打开,则会在开始新操作之前将其关闭。 可立即访问,并将保持分配给 的状态,直到给出指令或 TeX 运行结束。⟨stream⟩⟨stream⟩⟨stream⟩⟨file name⟩\iow_close:N打开文件进行写入会清除文件中所有现有内容(即写入不是附加的)。

(重点是我的)

因此,当您运行 时,您实际上会删除文件内容\iow_open:Nn。(您也忘记运行\iow_close:N)。您可以通过将 移动\iow_open:Nn你读取该文件。例如,你可以使用

\documentclass{article}
\begin{document}
  \ExplSyntaxOn
  \iow_new:N \l_tmpa_file
  \NewDocumentCommand{\test}{+m}
  {
    \iow_now:Nn \l_tmpa_file{#1}
  }
  \file_input:n{test.aux}% We haven't called \iow_open:Nn yet, so the content of test.aux is still there.
  \iow_open:Nn \l_tmpa_file{test.aux}% Now we no longer need the old content and can start to overwrite it.
  \test{aaaaa}
  \test{bbbbb}
  \test{ccccc}
  \iow_close:N \l_tmpa_file
  \ExplSyntaxOff
\end{document}

(您可能还想使用其他文件扩展名,以.aux避免受到 LaTeX.aux文件的干扰)

相关内容