在下面的代码中,我从用户那里获取了一些输入,其中包括诸如\\
和 之类的命令\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
\结束{文档}