我是 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
文档中\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
文件的干扰)