在 LaTeX2e 中,可以通过文件句柄写入标准辅助文件\@auxout
。是否有专用的 LaTeX3 函数(计划中)来方便写入\jobname.aux
,或者 LaTeX3 中是否有等效的\@auxout
文件句柄,我们可以将其与包中的函数一起使用l3file
?
答案1
目前,答案是“否”,因为我们没有针对“辅助文件”这一更高层次概念的结构。显然,我们需要解决这个问题以及许多其他与文件相关的领域(例如,类似于的加载文件的本机机制\usepackage
)。
答案2
这可能不符合指南,但是\iow_shipout:Nn
,,\iow_shipout_x:Nn
并且\iow_now:Nn
了解通常的文件处理程序:
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\makeatletter
\NewDocumentCommand{\writeaux}{ s m }
{
\IfBooleanTF{#1}
{ \iow_shipout:Nn \@auxout { #2 } }
{ \iow_shipout_x:Nn \@auxout { #2 } }
}
\makeatother
\ExplSyntaxOff
\begin{document}
a\writeaux{\noexpand\typeout{foo}}\writeaux*{\typeout{bar}}
\end{document}
对于在包中使用的内部命令,可以考虑
\cs_new_protected:Npn \iowaux_now:n #1 { \iow_now:Nn \@auxout { #1 } }
\cs_new_protected:Npn \iowaux_shipout:n #1 { \iow_shipout:Nn \@auxout { #1 } }
\cs_new_protected:Npn \iowaux_shipout_x:n #1 { \iow_shipout_x:Nn \@auxout { #1 } }
对于变体也类似x
。因此使用可以独立于实际实现;只需修改四个定义就足以保持包不变。