我正在忙着创建逐字环境并将其内容保存到类似描述的文件中逐字包文档(第 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