![为什么当 \centering 作为参数的一部分使用时会导致无项目错误?](https://linux22.com/image/461615/%E4%B8%BA%E4%BB%80%E4%B9%88%E5%BD%93%20%5Ccentering%20%E4%BD%9C%E4%B8%BA%E5%8F%82%E6%95%B0%E7%9A%84%E4%B8%80%E9%83%A8%E5%88%86%E4%BD%BF%E7%94%A8%E6%97%B6%E4%BC%9A%E5%AF%BC%E8%87%B4%E6%97%A0%E9%A1%B9%E7%9B%AE%E9%94%99%E8%AF%AF%EF%BC%9F.png)
在下面的代码中,我从用户那里获取了一些输入,其中包括诸如\\
和 之类的命令\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
\结束{文档}