LaTeX 3 读取/写入 toc 等文件

LaTeX 3 读取/写入 toc 等文件

我尝试重新实现某种目录功能。我写道wouts 参数写入文件并尝试重新包含它。问题是,这\ior_str_gto:NN似乎在换行符处停止。请考虑以下示例:

\documentclass{report}
\usepackage[latin1]{inputenc}
\usepackage{ expl3, l3keys2e, xfrac, xparse}

\ExplSyntaxOn

\iow_new:N\iow_out
\ior_new:N\ior_out

 \file_if_exist:nTF {myout.out} {   
    \ior_open:Nn\ior_out{myout.out}
    \ior_str_gto:NN\ior_out\tl_get_out
    \ior_close:N\ior_out }
    { \typeout{no file! rerun}
    }

\iow_open:Nn\iow_out{myout.out}

\DeclareDocumentCommand\wout { m } { 
\iow_now:Nx\iow_out{#1}
}
\DeclareDocumentCommand\rout {  } { 
\tl_use:N\tl_get_out
}

\ExplSyntaxOff
%
%
\begin{document}
\wout{bla}
\wout{blub}
\rout
\end{document}

问题是:我怎样才能做到\ior_to_gstr读取整个文件?以及:有没有更好的方法使用 l3 实现这样的功能?

答案1

LaTeX2e 内核读取文件中的表格,ETC。使用\input而不是逐行读取。但是,可以在此处设置逐行读取,使用epxl3以“字符串”方式工作。有一个名为的实验性函数,\ior_str_map_inline:Nn它或多或少可以完成此处所需的操作:

\documentclass{article}
\usepackage{expl3}

\ExplSyntaxOn

\iow_new:N \g_my_out_iow
\ior_new:N \g_my_out_ior
\tl_new:N \g_my_out_tl

 \file_if_exist:nTF { myout.out }
   {   
     \ior_open:Nn \g_my_out_ior { myout.out }
     \ior_str_map_inline:Nn \g_my_out_ior 
      { \tl_gput_right:Nn \g_my_out_tl {#1 \par } }
     \ior_close:N \g_my_out_ior
   }
   { \typeout{no file! rerun} }

\iow_open:Nn \g_my_out_iow { myout.out }

\DeclareDocumentCommand\wout { m }
  { \iow_now:Nn \g_my_out_iow {#1} }
\DeclareDocumentCommand\rout {  } 
  { \tl_use:N \g_my_out_tl }

\ExplSyntaxOff
%
%
\begin{document}
\wout{bla}
\wout{blub}
\rout
\end{document}

(我整理了一些变量名。)我添加了\par在每一行中添加了,因为我不太清楚需要什么。我还将未展开的内容写入文件,因为更广泛的上下文也不清楚。

相关内容