使用 LaTeX3 写入 \jobname.aux

使用 LaTeX3 写入 \jobname.aux

在 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。因此使用可以独立于实际实现;只需修改四个定义就足以保持包不变。

相关内容