我正在开发一个包,它在编译期间写入一个外部文件(除其他外)。我想为包提供一个选项来不是写入外部文件。
我知道我可以设置一个布尔值并在写入发生的包中的任何位置对其进行测试。但最好只是openout
在开头设置要写入的命令/dev/null
或其等效命令。
这可能吗?我需要让这个软件包在 Windows、Mac 和 Unix 上都受支持。
答案1
写作可能是由\immediate\write\STREAM{...}
; 我通常定义一个宏来代表,\immediate\write
以便可以随意改变其含义
...
\newif\iftim@write
\DeclareOption{nowrite}{\tim@writefalse}
\DeclareOption{write}{\tim@writetrue}
...
\ExecuteOptions{...,nowrite}% or write, if you prefer
\ProcessOptions\relax
...
\iftim@write
\def\tim@write{\immediate\write}
\else
\let\tim@write\@gobbletwo
\fi
此代码适用于您的写入操作是否通过包选项完成的情况。
如果布尔值为真,\tim@write\STREAM{...}
则会扩展为\immediate\write\STREAM{...}
;如果布尔值为假,则相同的标记将变成\@gobbletwo\STREAM{...}
,因此\STREAM
和{...}
将消失。
答案2
该命令\nofiles
关闭所有写入 LaTeX 的文件