有没有办法测试一个 token 是否已经与 关联writer
?像这样:
\def\do@write#1{%
\immediate\write\mywriter{something: #1}%
}
\def\@writesomething#1{%
{\if@isopen\mywriter{%
\do@write{#1} }%
{\immediate\openout\mywriter=myfile.txt%
\do@write{#1} }%
}
}
如果\mywriter
不与输出文件关联,\openout
则调用该语句;否则,将被忽略。
另外,是否存在任何机制可以让我当 LaTeX 到达\end{document}
语句时自动关闭所有打开的句柄?
答案1
没有对打开的写入流进行检查。在尝试写入之前,您必须始终确保写入流已打开。
但是你可以用条件来模拟检查:
\newif\if@mywriteopen % initially false
\def\@writesomething{%
\if@mywriteopen\else
\global\@mywriteopentrue
\immediate\openout\mywriter=myfile.txt\relax
\fi
\do@write}
请注意,\relax
文件名后面不应加%
, 因为 TeX 在读取文件名时会扩展标记;\relax
则会停止扩展,变得不可扩展。
TeX 运行结束时,所有写入和读取流都会自动关闭。
笔记。没必要\@writesomething
用参数来定义,只要\do@write
是就可以。