\NewDocumentEnvironment 在用于逐字环境时会吃掉第一个非字母标记

\NewDocumentEnvironment 在用于逐字环境时会吃掉第一个非字母标记

我正在忙着创建逐字环境并将其内容保存到类似描述的文件中逐字包文档(第 2.2 节结束),但使用latex3功能。它最初工作正常,直到我尝试添加一个可选参数。由于某种原因,当未提供它并且第一个标记不是字母时,它会在输出中缺失。

使用以下代码执行后lualatex

\documentclass{minimal}

\ExplSyntaxOn

\RequirePackage{verbatim}
\makeatletter
% L3 interface for verbatim
\cs_new_eq:NN \verbatim_start: \verbatim@start
\cs_new:Nn \verbatim_set_processline:n {
    \cs_set:Nn \__func_temp:n {#1}
    \tl_set:Nn \verbatim@processline {
        \__func_temp:n {\the\verbatim@line}
    }
}
\makeatother

\NewDocumentEnvironment{verbexport}{O{export.tex}} {
    \group_begin:
    \iow_open:Nn \g_tmpa_iow {#1}
    \seq_map_inline:Nn \l_char_special_seq {\char_set_catcode_other:N ##1}
    \char_set_catcode_active:N \^^M
    \verbatim_set_processline:n {
        \iow_now:Nx \g_tmpa_iow {##1}
    }
    \verbatim_start:
} {
    \iow_close:N \g_tmpa_iow
    \group_end:
}

\ExplSyntaxOff

\begin{document}
\begin{verbexport}
\LaTeX a
\end{verbexport}
\begin{verbexport}[export2.tex]
\LaTeX a
\end{verbexport}
\end{document}

该文件的内容export.tex

 a

export2.tex而那些

\LaTeX a

我的latex环境是

This is LuaHBTeX, Version 1.13.2 (TeX Live 2021/Arch Linux) 
 restricted system commands enabled.
LaTeX2e <2021-11-15> patch level 1
L3 programming layer <2022-04-10>

我究竟做错了什么?

答案1

您想要禁用可选参数前的空格查找。

\documentclass{article}
\usepackage{verbatim}

\ExplSyntaxOn
\makeatletter
% L3 interface for verbatim
\cs_new_eq:NN \verbatim_start: \verbatim@start

\cs_new_protected:Nn \verbatim_set_processline:n
  {
    \cs_set_protected:Nn \__func_temp:n {#1}
    \tl_set:Nn \verbatim@processline
      {
        \__func_temp:n {\the\verbatim@line}
      }
  }

\NewDocumentEnvironment{verbexport}{!O{export.tex}}
  {
    \group_begin:
    \iow_open:Nn \g_tmpa_iow {#1}
    \seq_map_inline:Nn \l_char_special_seq {\char_set_catcode_other:N ##1}
    \char_set_catcode_active:N \^^M
    \verbatim_set_processline:n
      {
        \iow_now:Nx \g_tmpa_iow {##1}
      }
    \verbatim_start:
  }
  {
    \iow_close:N \g_tmpa_iow
    \group_end:
  }

\makeatother
\ExplSyntaxOff

\begin{document}
\begin{verbexport}
\LaTeX a
\end{verbexport}
\begin{verbexport}[export2.tex]
\LaTeX a
\end{verbexport}
\end{document}

我改变了一些东西,特别是做protected了设置的功能。

这两个文件的内容将是

\LaTeX a

相关内容