我对 expl3 一无所知。我天真地以为两行输出相同
\documentclass{article}
\usepackage{expl3}
\begin{document}
\makeatletter
A \def\par{1\global\let\par\@@par\par} \hbox{B} C
A \def\par{1\global\let\par\@@par\par} \ExplSyntaxOn\hbox:n{B}{}\ExplSyntaxOff C
\end{document}
但我得到的却是
ABC 1
和
乙1C
为什么\hbox:n
好像开始了一个新段落?
答案1
来自以下来源(l3color-base.dtx
)
% \begin{macro}{\color_group_begin:, \color_group_end:}
% Grouping for color is almost the same as using the basic \cs{group_begin:}
% and \cs{group_end:} functions. However, in vertical mode the end-of-group
% needs a \tn{par}, which in horizontal mode does nothing.
% \begin{macrocode}
\cs_new_eq:NN \color_group_begin: \group_begin:
\cs_new_protected:Npn \color_group_end:
{
\par
\group_end:
}
% \end{macrocode}
% \end{macro}
在水平模式下,我们无需担心额外的问题\par
,因此在所有情况下都有相同的代码。