使用 expl3 遵循空格写入文件内容

使用 expl3 遵循空格写入文件内容

我想使用 expl3 创建一个控制序列,以在遵守空格的同时写入文件内容。到目前为止,我有以下 MWE,它确实写入文件,但忽略空格。

\documentclass[]{article}

\usepackage{expl3}

\ExplSyntaxOn

\iow_new:N \g_mwe_stream

\cs_new:Nn \write_whitespace:n {
  \iow_open:Nn \g_mwe_stream { mwe.txt }
  \iow_now:Nn \g_mwe_stream { #1 }  
  \iow_close:N \g_mwe_stream
}

\write_whitespace:n {
abc def
123 456
}

\ExplSyntaxOff

\begin{document}
\end{document}

MWE 创建文件 mwe.txt,其中包含

abcdef123456

而不是期望的

abc def
123 456

我知道我可以使用 ~ 和 ^^J 手动创建空格和换行符,但我想避免这种情况。在 LaTeX2 中有 \obeyspaces 和 \obeylines 宏,但我没有找到 LaTeX3 的等效宏。

答案1

你应该在 范围之外进行写作\ExplSyntaxOn

\documentclass{article}

\usepackage{xparse}

\ExplSyntaxOn

\iow_new:N \g_slo_output_stream
\seq_new:N \l__slo_output_seq

\NewDocumentCommand{\writefile}{O{\\}mm}
 {% #1 = line separator, #2 = file name, #3 = text
  \iow_open:Nn \g_slo_output_stream { #2 }
  \seq_set_split:Nnn \l__slo_output_seq { #1 } { #3 }
  \seq_map_inline:Nn \l__slo_output_seq
   {
    \iow_now:Nn \g_slo_output_stream { ##1 }
   }
  \iow_close:N \g_slo_output_stream
}

\ExplSyntaxOff

\writefile{\jobname.txt}{
  abc def \\
  123 456
}

{\obeylines
\writefile[^^M]{\jobname.tx2}{% <-- don't forget
  abc def
  123 456
}}

\stop

我建议不是使用第二种方式。

第一个文件不会有空的最后一行。除此之外,它们将包含

abc def
123 456

相关内容