写入文本文件时\write
和命令有什么区别?\immediate\write
\write
命令似乎没有在文本文件上写入任何内容......
这里是 MWE:
\documentclass{article}
\texttowrite
\newwrite\mytextfile
\immediate\openout\mytextfile=\jobname.txt
\newcommand*{\texttowrite}{Some text}
\begin{document}
\write\mytextfile{\texttowrite}
\immediate\write\mytextfile{\texttowrite}
\immediate\closeout\mytextfile
\end{document}
编辑(在egreg的回答和评论之后):为初学者(像我一样)举一个例子:
我允许自己分享这个小测试,它说明了\write
和操作的一个方面\immediate\write
:
\documentclass{article}
\newwrite\mytextfile
\immediate\openout\mytextfile=\jobname.txt
\newcommand*{\texttowrite}{Some text}
\begin{document}
\texttowrite
\write\mytextfile{\texttowrite 1}
\immediate\write\mytextfile{\texttowrite 2}
\write\mytextfile{\texttowrite 3}
\immediate\write\mytextfile{\texttowrite 4}
\closeout\mytextfile
\end{document}
内容\jobname.txt
:
答案1
主要用途\write
是在准备目录或交叉引用时记录页码等信息。
因此\write
存储文本(不使用宏扩展)并在页面发出后写入文本(使用宏扩展)。
在某些情况下,这种延迟是不需要的,因此您可以\write
在前面加上\immediate
and,在这种情况下\write
操作(使用宏扩展)会立即执行。
如果你有一个\write
操作恰好被执行后如果文件已关闭,则标记将显示在终端上,当然不会写出。这是您的情况:在最后一个文件\write
有机会执行之前关闭了输出文件。
甚至
\documentclass{article}
\newwrite\mytextfile
\immediate\openout\mytextfile=\jobname.txt
\begin{document}
\write\mytextfile{some text}
\end{document}
不会在指定文件上写入任何内容,因为没有页面被发送出去。