\write 和 \immediate\write 之间有什么区别?

\write 和 \immediate\write 之间有什么区别?

写入文本文件时\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在前面加上\immediateand,在这种情况下\write操作(使用宏扩展)会立即执行。

如果你有一个\write操作恰好被执行如果文件已关闭,则标记将显示在终端上,当然不会写出。这是您的情况:在最后一个文件\write有机会执行之前关闭了输出文件。

甚至

\documentclass{article}

\newwrite\mytextfile
\immediate\openout\mytextfile=\jobname.txt

\begin{document}

\write\mytextfile{some text}

\end{document}

不会在指定文件上写入任何内容,因为没有页面被发送出去。

相关内容