为什么当 \centering 作为参数的一部分使用时会导致无项目错误?

为什么当 \centering 作为参数的一部分使用时会导致无项目错误?

在下面的代码中,我从用户那里获取了一些输入,其中包括诸如\\和 之类的命令\cntering\centering和 类似的命令会导致无项错误,尽管查看源代码2e 我无法找出原因。 您能否建议如何修改此代码以使其在所有情况下都能正常工作? 我同时重新定义了 `centering 并使其成为无操作。

在此处输入图片描述

用户使用 \ADDLEFT、\ADDRIGHT 等命令将项目添加到页面。然后根据某些逻辑将它们添加到左侧或右侧。

\documentclass{article}
\usepackage{graphicx,lipsum,calc}
\ExplSyntaxOn
% Store the user input
\dim_gzero_new:N \g_user_width_dim
\NewDocumentCommand\sometext{o +m}{
     \IfValueTF{#1}{
       \dim_gset:Nn \g_user_width_dim{#1}
     }{
        \dim_gset:Nn \g_user_width_dim{0pt}
     }
     
     \tl_set:Nn \l_tmpa_tl {#2}
     
}

% Measure it
\NewDocumentCommand\measureit:N {+m} 

{
 
\hbox_set:Nn \l_tmpa_box{ #1 }

 \vbox_set:Nn \l_tmpb_box {%
   
    \box_use:N \l_tmpa_box
 }
} 




% Do some checks and render
\NewDocumentCommand\renderit { } 
{
 \tl_if_blank:oTF {\l_tmpa_tl} {}
 { 
  \measureit:N \l_tmpa_tl
  \dim_compare:nNnTF \g_user_width_dim>{0pt}{
     \dim_set:Nn \l_tmpa_dim \g_user_width_dim
  }{
     \dim_set:Nn\l_tmpa_dim{\box_wd:N\l_tmpb_box}
  } 
     \fbox{\parbox{\l_tmpa_dim   +30pt}  
     { 
           {\tl_use:N\l_tmpa_tl
          } 
      \par}
      }
}
 
}

\ExplSyntaxOff

\begin{document}
\let\ocentering\centering
\let\centering\undefined

\NewDocumentCommand\centering{}{ \ocentering}

\parindent0pt

\sometext{\centering This is a test\\ to see\\everything }
\renderit
\sometext{\centering  AAA\par BBB CCC \par}
\renderit

\结束{文档}

相关内容