我想使用 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