命令是否有机会\testcommand
测试它是否是 之前的最后一个用户命令\end{document}
?由于 处仍有钩子enddocument
,这似乎有点棘手。
我正在考虑放置一个空命令\somethingempty
并让它\testcommand
检测它\peek_meaning:N(TF)
。但是,如果我将它放在钩子中,首先\testcommand
看到的将是某种\UseHook
。
提出这个问题的动机是,在我的包中,有一些间距调整命令应该只在文档中间完成。
下面是 MWE。
\documentclass{article}
\ExplSyntaxOn
\def\somethingempty{}
\NewDocumentCommand \testcommand { }
{
% \peek_meaning:NF \somethingempty
\peek_regex:nF { (\ *)? (\c{par}*)? (\ *)? \c{somethingempty} }
{
%% Some code that only should happen in the middle of the text
``something in the middle of the text''
}
}
\AddToHook{enddocument}{\somethingempty}
\ExplSyntaxOff
\begin{document}
\testcommand
Text.
\testcommand
% \somethingempty
\end{document}
答案1
在一般情况下解决这个问题似乎确实很难,但“对于只应在文档中间完成的命令有一些间距调整”表明这两个限制可能没问题:
“一些代码只应该出现在文本中间”只排版垂直模式的材料,并且
你只需要测试“最后一个用户命令产生水平模式材料前
\end{document}
”。
如果这两个限制没有问题,那么你可以使用para/before
钩子:
\documentclass{article}
\pagestyle{empty}
\ExplSyntaxOn
\def\somethingempty{}
\NewDocumentCommand \testcommand { }
{
\hook_gput_next_code:nn { para/before } {
\vskip 1ex \relax
\hrule width \textwidth height 1pt depth 0pt \relax
\vskip 1ex \relax
}
}
\AddToHook{enddocument}{\somethingempty}
\ExplSyntaxOff
\begin{document}
\testcommand
Text.
\testcommand
Text.
\testcommand
\somethingempty
\end{document}